해결된 질문
작성
·
52
0
에러메세지는 이건데요..
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
을 활용하지 않기 때문에 dictionary
와 question
을 모두 변수로 인식해서 .invoke()
를 호출할 때 작성하신 것처럼 dictionary
와 question
을 모두 넘겨줘야합니다.
랭체인 문법에 아직 충분히 익숙하지 않으시다면 말슴하신 AI Agent강의↗도 좋지만, 한시간으로 끝내는 LangChain 기본기↗ 강의를 통해서 문법에 조금 더 익숙해지신 후에 AI Agent강의로 넘어가시는 걸 추천 드립니다!
안녕하세요!
주말인데도 빠른 답변 감사합니다. f의 차이가 크네요.
말씀해주신 강의도 들었는데....... 잠깐 멈추고 복습을 해야겠네요 ㅠ 감사합니다!!