• 카테고리

    질문 & 답변
  • 세부 분야

    AI · ChatGPT 활용

  • 해결 여부

    미해결

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

24.04.17 13:13 작성 24.04.17 13:56 수정 조회수 71

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

김정헌님의 프로필

김정헌

질문자

2024.04.17

와우~!

친절하고 세심하게 알려주셔서 감사합니다 강사님

최고에요^^

감사합니다^^

즐거운 하루 되세요~!

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

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

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

 

감사합니다.

김정헌님의 프로필

김정헌

질문자

2024.04.17

강사님께서 강의 교재로 사용한 소스 코드를 그대로 사용하되,
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?")

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

감사합니다.