인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

김정헌님의 프로필 이미지
김정헌

작성한 질문수

프로젝트로 배우는 Python 챗봇 & RAG - LangChain, Gradio 활용

Chroma DB를 활용하여 PDF 파일에 대해 RAG 기반 질의응답 구현 (실습)

질문에 의해 결정된 {context} 값의 토큰량을 확인하는 방법이 있을까요?

작성

·

213

·

수정됨

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)

 

image

사용하신 벡터스토어와 리트리버를 포함한 코드를 주시면 상황을 이해하는데 더 도움이 될 것 같습니다.

추가적으로 궁금한 부분이 있으면 언제든 편하게 말씀해주세요.

 

감사합니다.

김정헌님의 프로필 이미지
김정헌
질문자

강사님께서 강의 교재로 사용한 소스 코드를 그대로 사용하되,
pdf 문서를 달리해봤습니다.

'디지털트윈 활성화 전략.pdf' 문서인데, 본 답글에 문서를 첨부할 수 없네요..

 

아무튼, 알려주신 콜백 방법으로 출력해보니,
강사님 말씀이 맞았습니다. 제가 착각했네요.
response['input'], response['context'] 내용이

LLM 모델이 어떻든 관계 없이 동일함을 확인하였습니다.

그럼, 최초 질문으로 돌아가 볼께요.

retrieval_chain.invoke() 하기 전에,
response['context'] 값과 동일한 값을 다른 변수에서 얻을 수 있는 방법이 있는지 궁금합니다.

아래 링크 문서 잠시 봤는데요, 여기에 답이 있는 것인가요?

https://api.python.langchain.com/en/latest/_modules/langchain/chains/retrieval.html#create_retrieval_chain

판다스 스튜디오님의 프로필 이미지
판다스 스튜디오
지식공유자

안녕하세요.

해당 링크에 정의된 create_retrieval_chain 메소드에서 추출할 수 있는 방법은 없습니다.

아래와 같이 retriever 객체에 동일한 쿼리를 전달하면 같은 검색 결과를 얻을 수 있습니다.

retrieved_docs = retriever.get_relevant_documents("what is the attention mechanism in transformers?")

좋은 질문을 해주셔서 저도 꼼꼼하게 문서를 살펴볼 수 있었습니다.

감사합니다.

 

김정헌님의 프로필 이미지
김정헌

작성한 질문수

질문하기