LLM Application/LangChain

RAG App 개발 2 - Retrieval and Generation (검색과 생성) 하기

carrotweb 2026. 7. 23. 00:22
728x90
반응형

Retrieval and Generation (검색과 생성)

  1. 임베딩 모델을 생성합니다.
  2. 벡터 스토어에서 상위 5개만 검색되게 매개변수를 지정하여 리트리버를 인스턴스화합니다.
  3. 사용자 질문을 리트리버를 사용하여 벡터 스토어에서 데이터(청크)를 검색하여 가져옵니다.
  4. 검색된 데이터(청크)와 사용자 질문으로 프롬프트를 생성합니다.
  5. LLM에 사용하여 결과를 생성합니다.

 

Retrieval and Generation (검색과 생성) 순서대로 진행하겠습니다.

 

Retrieval (검색) – Search (검색)

 

Chroma (https://python.langchain.com/docs/integrations/vectorstores/chroma/)

 

Retrieval (https://python.langchain.com/docs/how_to/vectorstore_retriever/)

 

1. project3에 QnA2.ipynb 파일을 생성하고 벡터 스토어 검색 코드를 추가합니다.

[Markdown]
벡터 스토어 검색

[Code]
import os
from langchain_openai import OpenAIEmbeddings
from langchain_chroma import Chroma

os.environ["OPENAI_API_KEY"] = "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"

embeddings_model = OpenAIEmbeddings(model="text-embedding-3-large")

loaded_vector_store = Chroma(
    embedding_function=embeddings_model, # 사용할 임베딩 모델
    persist_directory="./chroma_db", # 디렉토리
    collection_name="test_db"
)

retriever = loaded_vector_store.as_retriever(search_kwargs={"k": 5})

result_texts = retriever.invoke("중학생의 수학 기초학력 미달률은?")
result_texts

 

2. 벡터 스토어 검색 코드를 실행합니다.

 

벡터 스토어 검색 결과입니다.

[Document(id='12c21365-cdea-4ba7-8876-eea93aa5a419', metadata={'source': 'data/test.txt'}, page_content='교육부의 ‘2023 국가수준 학업성취도평가’에 따르면 중학생의 기초학력 미달률은 9.1%, 영어 6.0%, 수학 13.0%였으며 고등학생은 국어 8.6%, 영어 8.7%, 수학'),
 Document(id='7cd4b316-9aed-43dd-84c5-f5f8ac59157b', metadata={'source': 'data/test.txt'}, page_content='8.6%, 영어 8.7%, 수학 16.6%로 집계됐다. 특히 수학의 기초학력 부진이 가장 높아 학습 격차 해소를 위한 지원이 필요한 상황이다.'),
 Document(id='6e29f2ff-6892-43da-8206-88c58c0dbe9b', metadata={'source': 'data/test.txt'}, page_content='테크빌교육 체더스, 기초학력 부진 해결을 위한 코스웨어 기획전 진행'),
 Document(id='40f8cf3a-7a78-4f1f-96b1-1ae2db207855', metadata={'source': 'data/test.txt'}, page_content='정지혜 체더스사업부 부서장은 "학기말부터 여름방학은 기초학력을 높일 수 있는 중요한 시기”라며 “이번 기획전을 통해 선생님들이 효과가 검증된 솔루션을 활용해 학생들 간의 학습'),
 Document(id='7ab223ae-8e2a-4335-ae59-6ac3004231c7', metadata={'source': 'data/test.txt'}, page_content='이번 기획전에서는 AI 수학 학습 플랫폼 ‘매쓰홀릭 T’, AI 영어 학습 솔루션 ‘원아워’, 국어 문해력 학습 프로그램 ‘리드포스쿨’ 등 기초 학력 향상에 특화된 에듀테크')]

 

 

Retrieval (검색) – Prompt (프롬프트)

 

Prompt Hub (https://python.langchain.com/docs/tutorials/rag/#orchestration)

 

1. project3에 QnA2.ipynb 파일에 프롬프트 가져오기 코드를 추가합니다.

[Markdown]
프롬프트 가져오기

[Code]
from langchain import hub

prompt = hub.pull("rlm/rag-prompt")

print(prompt)

 

2. 프롬프트 가져오기 코드를 실행합니다.

 

프롬프트 가져오기 결과입니다.

c:\workspaces\projects\project3\myenv\Lib\site-packages\langsmith\client.py:272: LangSmithMissingAPIKeyWarning: API key must be provided when using hosted LangSmith API
  warnings.warn(
input_variables=['context', 'question'] input_types={} partial_variables={} metadata={'lc_hub_owner': 'rlm', 'lc_hub_repo': 'rag-prompt', 'lc_hub_commit_hash': '50442af133e61576e74536c6556cefe1fac147cad032f4377b60c436e6cdcb6e'} messages=[HumanMessagePromptTemplate(prompt=PromptTemplate(input_variables=['context', 'question'], input_types={}, partial_variables={}, template="You are an assistant for question-answering tasks. Use the following pieces of retrieved context to answer the question. If you don't know the answer, just say that you don't know. Use three sentences maximum and keep the answer concise.\nQuestion: {question} \nContext: {context} \nAnswer:"), additional_kwargs={})]

 

 

Generation (생성) – LLM (답변 생성)

 

1. project3에 QnA2.ipynb 파일에 프롬프트 실행 코드를 추가합니다.

[Markdown]
프롬프트 실행

[Code]
from langchain.chat_models import init_chat_model

model = init_chat_model("gpt-4o-mini", model_provider="openai")

texts = "\n\n".join(result_text.page_content for result_text in result_texts)

do_prompt = prompt.invoke({"context" : texts, "question": "중학생의 수학 기초학력 미달률은?"})

ai_msg = model.invoke(do_prompt)
print(ai_msg.content)

 

생성된 프롬프트입니다.

ChatPromptValue(messages=[HumanMessage(content='You are an assistant for question-answering tasks. Use the following pieces of retrieved context to answer the question. If you don\'t know the answer, just say that you don\'t know. Use three sentences maximum and keep the answer concise.\nQuestion: 중학생의 수학 기초학력 미달률은? \nContext: 교육부의 ‘2023 국가수준 학업성취도평가’에 따르면 중학생의 기초학력 미달률은 9.1%, 영어 6.0%, 수학 13.0%였으며 고등학생은 국어 8.6%, 영어 8.7%, 수학\n\n8.6%, 영어 8.7%, 수학 16.6%로 집계됐다. 특히 수학의 기초학력 부진이 가장 높아 학습 격차 해소를 위한 지원이 필요한 상황이다.\n\n테크빌교육 체더스, 기초학력 부진 해결을 위한 코스웨어 기획전 진행\n\n정지혜 체더스사업부 부서장은 "학기말부터 여름방학은 기초학력을 높일 수 있는 중요한 시기”라며 “이번 기획전을 통해 선생님들이 효과가 검증된 솔루션을 활용해 학생들 간의 학습\n\n이번 기획전에서는 AI 수학 학습 플랫폼 ‘매쓰홀릭 T’, AI 영어 학습 솔루션 ‘원아워’, 국어 문해력 학습 프로그램 ‘리드포스쿨’ 등 기초 학력 향상에 특화된 에듀테크 \nAnswer:', additional_kwargs={}, response_metadata={})])

 

2. 프롬프트 실행 코드를 실행합니다.

 

프롬프트를 여러번 실행한 결과입니다.

중학생의 수학 기초학력 미달률은 13.0%로 보고되었습니다. 이 수치는 고등학생의 수학 미달률 16.6%와 비교할 때 여전히 높은 편입니다. 따라서 학습 격차 해소를 위한 지원이 필요하다고 판단됩니다.
중학생의 수학 기초학력 미달률은 13.0%입니다. 이는 영어 6.0%와 다른 과목들에 비해 가장 높은 수치로, 학습 격차 해소를 위한 지원이 필요합니다.
중학생의 수학 기초학력 미달률은 13.0%입니다. 이 수치는 기초학력 부진이 상대적으로 높은 것을 보여줍니다. 따라서 학습 격차 해소를 위한 지원이 필요합니다.
728x90
반응형