inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

RAG를 활용한 LLM Application 개발 (feat. LangChain)

3.2 LangChain과 Chroma를 활용한 RAG 구성

RetrievalQA is Deprecated

해결된 질문

733

Jongha Lim

작성한 질문수 2

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 의 형태가 달라서인것 같은데, 어떻게 키값을 설정해야 하나요?

vector-database llm langchain rag openai-api

답변 3

0

제이쓴

안녕하세요 종하님! 왠지 다른 분들도 도움을 받으실 수 있을 것 같아서 PromptTemplate 활용방법을 추가촬영 했습니다. 강의에서 활용한 노트북도 깃에 올려두었으니 한번 보시고, 디버깅 해보시면 좋을 것 같습니다!

강의영상: https://www.inflearn.com/courses/lecture?courseId=333796&unitId=264388&subtitleLanguage=ko

 

노트북: https://github.com/jasonkang14/inflearn-rag-notebook/blob/main/5.5%20PromptTemplate%20%ED%99%9C%EC%9A%A9%EB%B0%A9%EB%B2%95.ipynb

0

제이쓴

invoke하는 부분을 'input' 대신 'question' 으로 변경해주시면 됩니다. 이건 랭체인에서 프롬프트를 처리하는 문법인데요, 이번 주말에 설명자료를 작성해서 강의를 업데이트하고 공유드리겠습니다!

0

Jongha Lim

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}) 로 변경했지만, 위와 같은 에러가 발생합니다.

0

제이쓴

KeyError 인걸로 봐서는 어딘가 노트북에서 실행이 꼬인게 아닌가 싶은데 전체 코드를 공유해주실 수 있나요?

 

복붙해서 올려주시면 한번 확인해보겠습니다!

0

제이쓴

깃에 올리셨으면 주소를 주셔도 됩니다

0

인프런 AI 인턴

안녕하세요, 인프런 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})

이 방식으로 진행하시되, 프롬프트가 요구하는 변수명을 항상 검사하고 그에 맞게 코드를 조정하심으로써 적절히 해결할 수 있을 것입니다.

관련 질문이 다음의 링크에서 논의된 바 있으니, 참고하시어 문제를 해결해보시기 바랍니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

ollama설치해서 llama로 돌려도 되나요?

0

25

2

소득세법 docx 파일 공유 요청건

0

78

1

EXAONE 모델 불러오기 안되는 문제

0

92

2

[5.1 강의] LLM Evaluator에 Upstage를 사용하는 방법 + 변경된 Langsmith Docs를 참고하여 구현하는 방법 공유

0

118

2

강의 9에 QA관련된 import가 되지 않네요

0

118

2

🚨 python3.14 를 쓰고 계시면 chroma 에서 ConfigError 가 발생합니다.

1

210

1

강의와 책 관련 질문

0

93

1

문서 전처리 고민

0

116

1

RAG 배포 질문드립니다

0

102

1

강의 내용과는 별개로 궁금한 점이 있습니다

0

92

2

폐쇄망 챗봇 모델

0

98

1

AI agent 쿠폰

0

98

2

저는 왜 그대로 했는데 답변이 틀리게 나오는지 모르겠네요

0

108

2

langchain howto/sequence는 지금 doc 공식 사이트 어디서 확인할 수 있나요?

1

98

1

new_question에 대한 답 출력

0

78

2

랭체인 라이브러리

0

154

2

[LangGraph를 활용한 AI Agent 개발] 쿠폰 유효기간

0

110

1

postgresql의 pgvector 벡터는 어떤가요?

0

357

2

doc관련

0

137

2

load_dotenv() 실행 False

0

98

1

RAG 답변 개선을 위한 정답지 활용 구조 검토 요청

0

124

2

3.2 from langchain.chains ~ 에서 모듈을 찾지 못할 때.

2

420

2

강의 완료 오류

0

93

1

hub.pull 이슈

0

138

2