LLM 응답을 반환하는 함수 만들기
이제 챗봇에는 다양한 도구가 준비되어 있어요. 그래도 챗봇에 추가된 도구와 관련 없는 질문이라면 LLM 자체를 호출하는 것이 유용합니다. 지금부터는 대화의 마지막 메시지에 도구 호출이 있는지 확인하는 함수를 정의하겠습니다. 도구 호출이 없다면 챗봇은 LLM만 사용해 답을 반환해요. 사용자 질문과 챗봇 응답을 모두 처리할 수 있도록, 아래 모듈이 이미 임포트되어 메시지 유형을 구분할 수 있게 했습니다.
from langchain_core.messages import AIMessage, HumanMessage
이 연습은 강의의 일부입니다
LangChain으로 에이전트형 시스템 설계하기
연습 안내
"messages"를 사용해state에서 마지막 메시지에 접근하세요.last_message가AIMessage인지, 그리고 이 메시지에tool_calls가 있는지 확인하는 조건문을 작성하세요.- 조건이 충족되면,
last_message의tool_calls에서 첫 번째"response"를 가져와AIMessage의content필드에 넣어 반환하세요. - 조건이 충족되지 않으면,
model_with_tools에.invoke()를 적용하고state["messages"]의 전체 대화 기록을 전달해 응답을 생성하세요.
실습형 인터랙티브 연습
이 예제를 이 샘플 코드를 완성하여 풀어보세요.
# Extract the last message from the history
def call_model(state: MessagesState):
____ = ____["____"][____]
# If the last message has tool calls, return the tool's response
if isinstance(____, ____) and ____.____:
# Return only the messages from the tool call
return {"messages": [____(content=____.____[0]["____"])]}
# Otherwise, proceed with a regular LLM response
return {"messages": [____.____(____["____"])]}