본문 바로가기

AI/LLM16

프롬프트 엔지니어링 [13] 프롬프트 엔지니어링이란?프롬프트 엔지니어링(Prompt Engineering)이란AI 모델에게 정확하고 원하는 결과를 얻기 위해 입력 문장(프롬프트)을 설계하는 기술※ "요약해줘" : 너무 모호※ "이 글을 3문장 이내로, 중복 없이 요약해줘" : 명확프롬프트 3대 원칙원칙설명명확성(Clarity)불분명한 단어와 지시를 피하고, 핵심 요구만 전달맥락 제공(Context)배경, 목적, 대상을 알려주면 모델이 더 똑똑해짐구조화(Struncture)입력 형식과 출력 형식을 일정하게 유지프롬프트 유형질문형 프롬프트 ※ 사용 목적 : 정보 추출, 간결한 답변 유도prompt = PromptTemplate.from_template("다음 문장에서 주요 키워드를 3개 추출하세요: {text}")text = "인공지능.. 2025. 7. 16.
LangChain을 활용한 RAG 질의응답 시스템 [12] RAG개념Retrieval : 사용자의 질문과 의미적으로 유사한 문서를 검색➕Generation : 검색한 문서를 기반으로 언어 모델이 응답 생성▶️ LLM이 외부 지식 없이도, 지정한 문서 기반으로만 대답하도록 제어하는 것 문서 임베딩 & 벡터 저장소 구성from langchain_community.embeddings import OllamaEmbeddingsfrom langchain_community.vectorstores import FAISSfrom langchain.docstore.document import Document# 1. 문서 불러오기 (예시로 PDF 또는 텍스트)docs = [Document(page_content="BERT는 트랜스포머 기반의 자연어 처리 모델입니다.")]# 2. .. 2025. 7. 16.
LangChain으로 벡터 저장소 이해: Chroma, FAISS, Pinecone [11] 벡터 저장소란?벡터 저장소(Vector Store)는 임베딩된 문서 벡터를 저장하고, 사용자의 질문과 의미적으로 유사한 문서를 검색하는 데이터베이스※ 일반 DB는 정형 데이터(where id = 1)를 빠르게 찾는데 강하지만 벡터 저장소는 의미적으로 가까운 것을 찾는데 특화되어 있다. 벡터 저장소를 사용하는 흐름문서로드텍스트 분할 (Chunking)임베딩 (벡터 변환)벡터 저장소 저장질문이 들어오면 벡터로 변환유사한 벡터들을 저장소에서 검색관련 문서를 기반으로 LLM응답 생성 벡터 저장소Chroma: 가볍고 빠른 로컬 저장소특징설치/사용 간단로컬 개발 환경에 적합필터 기능 지원 (문서 메타데이터 기반)설치 : pip install chromadb lanchain langchain-community 또는 .. 2025. 7. 16.
문서 임베딩 완전 정복:의미 기반 검색의 핵심 기술 [10] 문서 임베딩이란?문서 임베딩이란, 텍스트(문장, 단락 등)를 고정된 길이의 숫자 벡터로 바꾸는 과정예를 들어 "ChatGPT는 대화형 인공지능입니다." 라는 문장을 ➡️ [0.12, -0.34, 1.12, ...] 같은 벡터로 변겨하는 것을 의미이렇게 숫자 벡터로 바꿔야 머신러닝 모델이나 벡터 검색 시스템이 텍스트 간의 의미적 유사성을 계산할 수 있다. 임베딩을 사용하는 이유?문서 임베딩이 갖는 장점유사도 검색 : 문서 의미가 비슷한 텍스트끼리 가까운 벡터로 매핑되어 검색 가능RAG (Retrival-Augmented Generation) : 문서 내용을 검색 후 LLM 응답에 활용 가능분류 / 군집화 : 임베딩 공간에서 의미 기주으로 그룹화 가능시각화 : 고차원 임베딩 2D로 투영하여 의미 분표 확인.. 2025. 7. 15.
LangChain에서 테스트 분할 [9] 텍스트 분할이 필요한 이유?LLM은 한 번에 처리할 수 있는 토큰 수에 제한이 있다.예를 들어 GPT-5-turbo는 최대 128k 토큰까지 가능하지만, 그 이상은 잘릴 수 밖에 없으며,정보 검색이나 문서 요약, 질문 응답 스스베에서는 한 덩어리에 너무 많은 내용이 들어가면 정확도나 응답 품질이 떨어질 수 있다.텍스트 분할기CharacterTextSplitter - 기본형가장 단순한 방식으로 문자 수 기준으로 자르며 문맥 고려가 없다.from langchain_text_splitters import CharacterTextSplittertext_splitter = CharacterTextSplitter( separator="\n", # 줄바꿈 단위로 자름 chunk_size=300,.. 2025. 7. 15.
LangChain을 사용한 문서 로더 [8] 핵심주제다양한 파일 포맷(PDF, JSON, CSV등)을 LangChain에서 불러오는 방법.load()와 .lazy_load()의 차이점실제 문서를 Document 객체로 변환문서 로더란?LangChain의 Document Loader는 텍스트, PDF, CSV, 웹 등 다양한 형태의 문서를 읽어서 Document 객체 리스트로 반환해주는 컴포넌트from langchain_community.document_loaders import loader = ()docs = loader.load()대부분 로더는 .load() 메서드를 제공대용량 문서를 처리할 때는 .lazy_load()로 스트리밍 방식 처리도 가능해 메모리 절약 가능PDF 문서 불러오기PDF 파일은 PyPDFLoader를 사용해서 읽을 수 있다... 2025. 7. 11.