해결된 질문
작성
·
205
0
RetrievalQA 가 0.1.17 버전 이후로 Deprecated 되었다고 마이그레이션 가이드를 보고 다음과 같이 바꿨습니다.
from langchain import hub
from langchain.chains import create_retrieval_chain
from langchain.chains.combine_documents import create_stuff_documents_chain
retrieval_qa_chat_prompt = hub.pull("langchain-ai/retrieval-qa-chat")
combine_docs_chain = create_stuff_documents_chain(llm, retrieval_qa_chat_prompt)
rag_chain = create_retrieval_chain(database.as_retriever(), combine_docs_chain)
rag_chain.invoke({"input": query})
위 예시는 잘 작동하는데, rml/rag-prompt 를 사용하면,
KeyError: "Input to ChatPromptTemplate is missing variables {'question'}. Expected: ['context', 'question'] Received: ['input', 'context']\nNote: if you intended {question} to be part of the string and not a variable, please escape it with double curly braces like: '{{question}}'.\nFor troubleshooting, visit: https://python.langchain.com/docs/troubleshooting/errors/INVALID_PROMPT_INPUT "
가 발생하는데, template 의 placeholder 의 형태가 달라서인것 같은데, 어떻게 키값을 설정해야 하나요?
답변 3
0
안녕하세요 종하님! 왠지 다른 분들도 도움을 받으실 수 있을 것 같아서 PromptTemplate 활용방법을 추가촬영 했습니다. 강의에서 활용한 노트북도 깃에 올려두었으니 한번 보시고, 디버깅 해보시면 좋을 것 같습니다!
강의영상: https://www.inflearn.com/courses/lecture?courseId=333796&unitId=264388&subtitleLanguage=ko
0
안녕하세요, 인프런 AI 인턴입니다.
Jongha Lim님께서 질문하신 내용은 LangChain에서 RetrievalQA
가 사용되지 않게 된 뒤, 새로운 체인 구성이 요구되는 상황에 관련한 것입니다. 마이그레이션 후 KeyError
가 발생한다는 점에서 프롬프트 템플릿의 변수명이 기대와 맞지 않는 경우가 문제의 핵심으로 보입니다.
KeyError
는 제공된 프롬프트 템플릿에 필요한 변수들이 올바르게 매핑되지 않았을 때 발생합니다. rml/rag-prompt
를 사용하는 경우, 해당 프롬프트의 기대 변수와 체인에서 사용하는 변수가 일치하지 않아 오류가 생겼습니다.
retrieval_qa_chat_prompt = hub.pull("langchain-ai/retrieval-qa-chat")
대신 원하는 대로 rml/rag-prompt
를 가져오신 후, 그 프롬프트가 요구하는 변수 (question
, context
등)에 맞게 체인의 입력 변수를 조정해야 합니다.아래는 rml/rag-prompt
를 사용할 때 question
과 같은 변수에 맞춰 체인을 작성하는 예시입니다:
from langchain import hub
from langchain.chains import create_retrieval_chain
from langchain.chains.combine_documents import create_stuff_documents_chain
retrieval_qa_chat_prompt = hub.pull("rml/rag-prompt")
combine_docs_chain = create_stuff_documents_chain(llm, retrieval_qa_chat_prompt)
# 적절한 입력 변수명을 사용하도록 일부 조정이 필요합니다.
# 예를 들어, {'input': query} 대신 {'question': query} 등의 방식으로 키 값을 올바르게 맞춰줍니다.
rag_chain = create_retrieval_chain(database.as_retriever(), combine_docs_chain)
# invoke 할 때 필요한 입력 변수를 올바르게 지정해야 합니다.
rag_chain.invoke({"question": query, "context": some_retrieved_context})
이 방식으로 진행하시되, 프롬프트가 요구하는 변수명을 항상 검사하고 그에 맞게 코드를 조정하심으로써 적절히 해결할 수 있을 것입니다.
관련 질문이 다음의 링크에서 논의된 바 있으니, 참고하시어 문제를 해결해보시기 바랍니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
KeyError Traceback (most recent call last) Cell In[9], line 1 ----> 1 rag_chain.invoke({"question": query}) File ~/.pyenv/versions/3.12.8/envs/rag/lib/python3.12/site-packages/langchain_core/runnables/base.py:5352, in RunnableBindingBase.invoke(self, input, config, **kwargs) 5346 def invoke( 5347 self, 5348 input: Input, 5349 config: Optional[RunnableConfig] = None, 5350 **kwargs: Optional[Any], 5351 ) -> Output: -> 5352 return self.bound.invoke( 5353 input, 5354 self._merge_configs(config), 5355 **{**self.kwargs, **kwargs}, 5356 ) File ~/.pyenv/versions/3.12.8/envs/rag/lib/python3.12/site-packages/langchain_core/runnables/base.py:3020, in RunnableSequence.invoke(self, input, config, **kwargs) 3018 context.run(_set_config_context, config) 3019 if i == 0: -> 3020 input = context.run(step.invoke, input, config, **kwargs) 3021 else: 3022 input = context.run(step.invoke, input, config) ... 66 ).assign(answer=combine_docs_chain) 67 ).with_config(run_name="retrieval_chain") 69 return retrieval_chain KeyError: 'input'
rag_chain.invoke({"question": query})
로 변경했지만, 위와 같은 에러가 발생합니다.