Inflearn brand logo image

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

hylee님의 프로필 이미지
hylee

작성한 질문수

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

3.6 Retrieval 효율 개선을 위한 키워드 사전 활용

3.6 일부 코드가 강의 그대로 따라하면 에러나요

해결된 질문

작성

·

52

0

스크린샷 2025-07-27 12.49.35.png.webp

에러메세지는 이건데요..

KeyError: "Input to ChatPromptTemplate is missing variables {'dictionary'}. Expected: ['dictionary', 'question'] Received: ['question']"

 

그래서 아래처럼 고쳤더니 결과는 잘 나오는데

new_question = dictionary_chain.invoke({
    "dictionary": dictionary,
    "question": query
})

이러고 나서 또 밑에 ai_response관련 코드도 같은 에러가 나오다보니 강의를 매끄럽게 들을 수 없고 자꾸 흐름이 끊기네요.

 

사실 3.5때도 강의코드 그대로 따라하니까 llm이 답변을 제대로 안해줘서, chunk_size / overlap 이렇게 저렇게 조정하고. 조정해보니 또 한번에 넣을 수 없는 사이즈라서 배치처럼 짤라서 넣고. 우여곡절 끝에 강의랑 동일한 결과를 얻긴 했는데요...

빠르게 슥슥 듣고 강사님 다른 강의(ai agent)로 넘어가고싶은데 매끄럽게 안되니까 초큼 힘들어요 ㅠ

제 환경이 잘못 구성된걸까요 ㅠㅠ

답변 1

0

강병진님의 프로필 이미지
강병진
지식공유자

안녕하세요! 좋은 질문 감사합니다.

제가 제공해드린 코드와 올려주신 스크린샷에는 한가지 차이가 있는데요, 제공해주신 스크린샷에는ChatPromptTemplate을 생성할때 f 가 빠져있습니다. f-string을 사용하지 않는 경우 어떤 차이가 있는지 설명을 드려보자면

랭체인의 PromptTemplate들은, 중괄호로 감싸져있는 항목들을 변수로 인식해서 invoke()를 활용해서 넘겨줘야 합니다.

prompt = ChatPromptTemplate.from_template(f"""
    사용자의 질문을 보고, 우리의 사전을 참고해서 사용자의 질문을 변경해주세요.
    만약 변경할 필요가 없다고 판단된다면, 사용자의 질문을 변경하지 않아도 됩니다.
    그런 경우에는 질문만 리턴해주세요
    사전: {dictionary}
    
    질문: {{question}}
""")

위와 같이 작성하면 f-string 을 활용하기 때문에 중괄호 한겹으로 감싸진 dictionary는 위에 작성한 dictionary 로 치환되고, 중괄호 두겹으로 감싸진 question만 변수로 인식하기 때문에, invoke()를 호출할 때 question만 넘겨주면 됩니다.

하지만 hylee님께서 작성하신 것처럼 아래와 같이 작성하는 경우에는

prompt = ChatPromptTemplate.from_template("""
    사용자의 질문을 보고, 우리의 사전을 참고해서 사용자의 질문을 변경해주세요.
    만약 변경할 필요가 없다고 판단된다면, 사용자의 질문을 변경하지 않아도 됩니다.
    그런 경우에는 질문만 리턴해주세요
    사전: {dictionary}
    
    질문: {{question}}
""")

f-string을 활용하지 않기 때문에 dictionaryquestion을 모두 변수로 인식해서 .invoke()를 호출할 때 작성하신 것처럼 dictionaryquestion을 모두 넘겨줘야합니다.

랭체인 문법에 아직 충분히 익숙하지 않으시다면 말슴하신 AI Agent강의도 좋지만, 한시간으로 끝내는 LangChain 기본기 강의를 통해서 문법에 조금 더 익숙해지신 후에 AI Agent강의로 넘어가시는 걸 추천 드립니다!

hylee님의 프로필 이미지
hylee
질문자

안녕하세요!

주말인데도 빠른 답변 감사합니다. f의 차이가 크네요.

말씀해주신 강의도 들었는데....... 잠깐 멈추고 복습을 해야겠네요 ㅠ 감사합니다!!

강병진님의 프로필 이미지
강병진
지식공유자

앗 그러시면 제가 강의에서 설명을 충분히 꼼꼼하게 드리지 못한걸수도 있겠네요 ㅠㅠ 강의 들으시면서 질문이 있으시면 지금처럼 편하게 올려주세요!

hylee님의 프로필 이미지
hylee

작성한 질문수

질문하기