저번에 인용 도큐먼트에 날짜만 나와 url과 날짜를 같이 인용하도록 바꿔보았다.
from langchain_openai import OpenAIEmbeddings
from langchain_community.document_loaders import JSONLoader
from langchain_chroma import Chroma
# embedding 설정
embeddings = OpenAIEmbeddings(model="text-embedding-3-large")
# ChromaDB Path
DB_PATH = "./drive/MyDrive/실습/RAG/db"
# Json 파일 Path
data_path = './drive/MyDrive/실습/RAG/data/'
json_paths = [data_path + json_file for json_file in os.listdir(data_path)]
# Document 로드 후 DB에 저장
for i, json_path in enumerate(json_paths) :
loader = JSONLoader(
file_path=json_path,
jq_schema=".[] | .link + \" \" + .pDate + \" \" + .title + \" \" + .description",
text_content=False
)
docs = loader.load()
if i == 0 :
db = Chroma.from_documents(
documents=docs,
embedding=embeddings,
collection_name="2025_news",
persist_directory=DB_PATH
)
db.get()
else :
db.add_documents(
documents=docs,
embedding=embeddings,
collection_name="2025_news",
persist_directory=DB_PATH
)
db.get()
jq_schema에 link 내용을 추가하여 url을 인용 도큐먼트로 받을 수 있도록 했다.
from langchain_core.runnables import RunnablePassthrough
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain.chat_models import init_chat_model
llm = init_chat_model('gpt-4o-mini', model_provider='openai')
def format_docs(docs) :
return "\n\n".join(doc.page_content for doc in docs)
template = """
Question-Answering task Assistant 역할을 맡아주세요. retrieved context를 사용하여 질문에 답변해주세요.
만약에 답을 알지 못한다면, 모른다고 답해주세요.
최대 3문장으로 간결하게 답해주시고, 답변에 사용한 document를 인용해주세요(url과 날짜).
질문 : {question}
Context : {context}
Answer :
"""
prompt = ChatPromptTemplate.from_template(template)
rag_chain = (
{"context" : retriever | format_docs, "question" : RunnablePassthrough()}
| prompt
| llm
| StrOutputParser()
)
template에 사용한 document를 인용할 때 Url과 날짜를 포함해달라고 요청하였다.


인용한 document의 url과 날짜가 답변 내용과 일치함을 알 수 있다.
'NLP > 실습' 카테고리의 다른 글
| Agent AI 실습2 : IBM watsonx orchestrate - HR Agent (0) | 2025.09.21 |
|---|---|
| Agent AI 실습1 : IBM watsonx Orchestrate - 마케팅 에이전트 (0) | 2025.09.21 |
| LangChain RAG 실습 4(Llama3) (0) | 2025.09.04 |
| LangChain RAG 실습 3(Llama3) (1) | 2025.07.02 |
| LangChain RAG 실습(네이버 뉴스 기사 크롤링) (3) | 2025.06.04 |