작성
·
16
0
안녕하세요.
강의에서 정의하신 아래의 함수에서 final_answer에 입력값을 넣는것이 결국 리스트 형태의 데이터고, 리스트는 HumanMessage와 AIMessage가 번갈아가면서 저장되어 있을텐데
llm모델에 이렇게 리스트 형태로 HumanMessage, AIMessage의 객체들을 상관없이 대입해도 괜찮은가요?
langchain에서 사용하는 invoke라는 매서드가 내부적으로 이런 타입들을 처리하는 로직을 실행하나요?
감사합니다.
def answer_invoke(message, history):
history_langchain_format = []
for human, ai in history:
history_langchain_format.append(HumanMessage(content=human))
history_langchain_format.append(AIMessage(content=ai))
history_langchain_format.append(HumanMessage(content=message))
# 현재 메시지에 대해 RAG 체인 실행
rag_response = run_route_rag_chain(message)
# 답변 생성 모델에게 현재 메시지에 대한 답변 요청
final_answer = answer_llm.invoke(
history_langchain_format[:-1] + [AIMessage(content=rag_response)] + [HumanMessage(content=message)]
)
return final_answer.content
답변 1
0
안녕하세요. 판다스 스튜디오입니다.
LangChain의 invoke
메서드는 HumanMessage
와 AIMessage
객체들로 구성된 리스트를 내부적으로 처리합니다. 이러한 메시지 객체들을 각 모델 제공업체가 요구하는 형태로 자동 변환합니다. 제시해주신 코드처럼 HumanMessage와 AIMessage가 번갈아 나오는 리스트 형태가 정확한 채팅 이력 전달 방식이며, LangChain이 메시지 순서와 역할을 자동으로 인식하여 적절히 처리합니다. 따라서 별도의 형태 변환 없이 바로 LLM에 전달해도 문제없이 작동합니다.
감사합니다.