LangChain에서 tool/function calling을 사용하면, LLM이 아예 정의해둔 함수(또는 도구)를 직접 호출해서 자동으로 구조화된 JSON 객체 형태의 결과를 돌려주는 방식입니다.
아래는 툴 콜링을 활용해서 사용자의 질문에 대해 JSON 객체로 답변을 반환하는 매우 기본적인 예시입니다.
예시: LangChain tool/function calling으로 JSON 객체 받기
from langchain_openai import ChatOpenAI
from langchain_core.prompts import PromptTemplate
from pydantic import BaseModel, Field
# 답변 스키마 정의 (Pydantic 사용)
class AnswerSchema(BaseModel):
answer: str = Field(description="질문에 대한 정답")
# LLM(모델) 준비
model = ChatOpenAI()
# 사용할 툴(= 스키마) 등록
model_with_tools = model.bind_tools([AnswerSchema])
# 프롬프트(질문) 구성
prompt = PromptTemplate(
template="다음 질문에 답하세요.\n{query}",
input_variables=["query"]
)
# 체인 조립 (프롬프트 → LLM+툴)
chain = prompt | model_with_tools
# 실행 예시
result = chain.invoke({"query": "대한민국의 수도는 어디인가요?"})
print(result)
# 출력 예시: {'answer': '서울'}
작동 원리 설명
AnswerSchema클래스로 반환될 JSON 구조(키, 타입, 설명) 를 명확히 지정합니다.bind_tools([AnswerSchema])로 모델에 해당 스키마(툴)를 직접 "바인딩"합니다.- 모델에 질문을 보내면, LLM이 내부적으로 이 스키마에 맞는 JSON 객체(
{'answer': '서울'})를 그대로 반환합니다.- 파싱 오류, 문자열 처리 등이 생기지 않고 안전하게 바로 structured 데이터로 받게 됩니다.
이 방식은 OpenAI, Anthropic, Google 같은 최신 LLM들이 공식 지원하고 있습니다. 코드 예시는 Python 기준이지만, 구조화된 결과(JSON 객체)를 안전하게 쓰고 싶을 때 가장 권장되는 방식입니다.
[펼치기]
댓글
댓글 쓰기