작성
·
205
·
수정됨
0
궁금한 점이 있어서 질문드립니다.
강의 소스에서, 다음 코드를 보면, retrieval_chain 변수에 {context} 결정 값이 있을 것으로 예상하고 있는데요.
retrieval_chain = create_retrieval_chain(retriever, document_chain)
response = retrieval_chain.invoke({"input" : "질문" })
retrieval_chain.invoke() 하기 전에, {context} 값을 확인하는 방법이 있을지요?
llm 모델을 바꿔가며 실험해보니,
retrieval_chain.invoke() 후 response['context'] 내용이 llm 모델마다 많이 달라지는 것을 관찰했어요.
gpt-3.5-turbo-16k-0613, gpt-3.5-turbo-0125, gpt-4, gpt-4-turbo 모델에서 실험해봤습니다.
그렇다면,
llm 모델에 따라 제출할 {context} 내용이 달라질 수도 있다고 이해하면 맞을까요?
{input} 값으로 벡터 검색한 내용이 {context} 값이 되는 단순한 방식은 아닌 것으로 이해했습니다.
답변 2
1
0
안녕하세요. 우선 좋은 질문을 해주셔서 감사합니다.
실험하실 때 사용한 retriver가 아래 그림과 같이 Chroma 벡터 리트리버의 기본 설정을 적용했다면 유사도 기준으로 동일한 문서가 검색되어 {context} 내용으로 전달되는 것이 맞습니다. 다만 "mmr"이나 LLM 모델을 활용하여 쿼리를 생성하는 방식을 사용하신다면 벡터 검색 결과가 달라질 수 있습니다.
langchain 소스코드를 확인했는데 특이 사항이 없었습니다. 검색 문서를 그대로 전달하도록 구성되어 있습니다. (링크)
retriever = db.as_retriever()
이 설정에서 gpt-3.5-turbo-16k-0613, gpt-3.5-turbo-0125, gpt-4 모델을 제가 실험했을 때는 항상 동일한 문서가 검색되었습니다. OpenAI 모델을 사용하신다면 토큰 사용량을 확인할 수 있습니다. 아래 그림에서 보시면 Prompt Token 개수가 859개로 같은 것을 보실 수 있습니다. (아래 그림 참조)
with get_openai_callback() as cb:
response = retrieval_chain.invoke({"input": "what is the attention mechanism in transformers?"})
print(cb)
사용하신 벡터스토어와 리트리버를 포함한 코드를 주시면 상황을 이해하는데 더 도움이 될 것 같습니다.
추가적으로 궁금한 부분이 있으면 언제든 편하게 말씀해주세요.
감사합니다.
강사님께서 강의 교재로 사용한 소스 코드를 그대로 사용하되,
pdf 문서를 달리해봤습니다.
'디지털트윈 활성화 전략.pdf' 문서인데, 본 답글에 문서를 첨부할 수 없네요..
아무튼, 알려주신 콜백 방법으로 출력해보니,
강사님 말씀이 맞았습니다. 제가 착각했네요.
response['input'], response['context'] 내용이
LLM 모델이 어떻든 관계 없이 동일함을 확인하였습니다.
그럼, 최초 질문으로 돌아가 볼께요.
retrieval_chain.invoke() 하기 전에,
response['context'] 값과 동일한 값을 다른 변수에서 얻을 수 있는 방법이 있는지 궁금합니다.
아래 링크 문서 잠시 봤는데요, 여기에 답이 있는 것인가요?
안녕하세요.
해당 링크에 정의된 create_retrieval_chain 메소드에서 추출할 수 있는 방법은 없습니다.
아래와 같이 retriever 객체에 동일한 쿼리를 전달하면 같은 검색 결과를 얻을 수 있습니다.
retrieved_docs = retriever.get_relevant_documents("what is the attention mechanism in transformers?")
좋은 질문을 해주셔서 저도 꼼꼼하게 문서를 살펴볼 수 있었습니다.
감사합니다.
감사합니다^^
즐거운 하루 되세요~!