※ 본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다. ※

벌써 15일차 포스팅입니다 😋
오늘을 기점으로 겨우 "Part 1. LLM을 위한 기초 지식"을 완강했습니다.
퇴근하고 한 강씩 듣다 보니 진도가 다소 느린감이 없지않아 있지만, 누워서 뇌녹일 시간에 무언가를 공부했다는 게 굉장히 뿌듯하네요 :)
오늘은 Function Calling 테스크를 실습했습니다.
Function Calling은 LLM에게 함수에 대해서 설명하고, 사용자의 요청 사항이 주어진 함수를 통해 풀어야 하는 문제라고 판단되면 함수호출을 통해 문제를 해결하는 태스크입니다.
앞서 배웠던 ReAct 에이전트와 매우 유사하지만, ReAct 에이전트와는 달리 일반적으로는 별도의 생각 과정을 거치지 않고 호출한다는 점이 특징입니다.
예를 들어 “AAPL의 주식 가격 알려줘”라고 하면, LLM이 자체적으로 호출할 함수를 선택하여,
tools에 정해진 함수를 호출해 그 결과를 가져오도록 가져오도록 설계합니다.
1️⃣ Function Calling의 함수 명세 예시 및 준비
functions = [
{
"name": "get_current_weather",
"description": "현재 날씨 정보 가져오기",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "도시와 주/도, 예: San Francisco, CA",
},
"format": {
"type": "string",
"enum": ["celsius", "fahrenheit"],
"description": "사용할 온도 단위. 사용자의 위치에서 이를 추론합니다.",
},
},
"required": ["location", "format"],
},
}
]
위 형식은 수업에서 활용한 Function Calling에서 사용되는 함수 명세의 형태입니다.
아마 LLM이 이 명세를 전달 받는 다면, LLM은 사용자가 특정 지역의 온도를 물어보면 함수를 호출할 것입니다.
위와 같은 형태로 형식을 만들어주기 위해, 먼저 실제 사용할 함수를 작성했습니다.
import yfinance as yf
def get_stock_price(symbol):
"""
주어진 주식 심볼의 최신 종가를 반환하는 함수
:param symbol: 주식 심볼 (예: 'AAPL' for Apple Inc.)
:return: 소수점 둘째 자리까지 반올림된 최신 종가
"""
ticker = yf.Ticker(symbol)
todays_data = ticker.history(period='1d')
return round(todays_data['Close'].iloc[0], 2)
야후 파이낸스 라이브러리를 가져와서 주어진 주식 심볼의 최신 종가를 반환하는 함수를 작성했습니다.
그러면, 이제 이 함수를 Function Calling에 활용하기 위한 형식 변환이 필요하겠죠?
2️⃣ 툴 세팅
from langchain.tools import BaseTool
from typing import Optional, Type
from langchain.agents import initialize_agent, Tool, AgentType
from langchain_openai import ChatOpenAI
from pydantic import BaseModel, Field
class StockPriceCheckInput(BaseModel):
"""Input for Stock price check."""
stockticker: str = Field(..., description="Ticker symbol for stock or index")
class StockPriceTool(BaseTool):
name: str = "get_stock_ticker_price"
description: str = "주식 가격을 알아야 할 때 유용합니다. yfinance API에서 사용되는 주식 티커(종목 코드)를 입력해야 합니다."
def _run(self, stockticker: str):
# print("i'm running")
price_response = get_stock_price(stockticker)
return price_response
args_schema: Optional[Type[BaseModel]] = StockPriceCheckInput
1. 먼저 입력 데이터 형식을 정의합니다.
StockPriceCheckInput 이라는 클래스는 stockticker 라는 문자열 필드를 정의하며,
해당 값이 반드시 필요하다는 뜻입니다.
LLM이 도구를 사용할 때, 넣어줘야하는 데이터 형식을 알게 해줌으로써 마치 입력 양식의 역할을 하게 되는 거죠.
2. 실제 AI가 사용할 수 있는 도구를 정의합니다.
이 부분은 실제 AI가 사용할 수 있는 도구를 정의하는 단계입니다.
StockPriceTool 이라는 클래스는, 도구의 이름(name), 설명(description) 필드를 정의하며
특히, def _run() 메서드 부분은 해당 함수가 도구로써 동작할 때 실제로 동작하게 되는 로직입니다. ( run 앞에 언더바는 랭체인의 규칙 )
그리고 마지막으로, args_schema를 통해서 입력 형식 클래스(StockPriceCheckInput)를 연결합니다.
3️⃣ 랭체인을 이용한 Function Calling
import json
from langchain_openai import ChatOpenAI
from langchain.schema import HumanMessage, AIMessage, ChatMessage, FunctionMessage
from langchain.tools import MoveFileTool, format_tool_to_openai_function
model = ChatOpenAI(model="gpt-4o")
tools = [StockPriceTool()] # 랭체인이 활용할 tools에 등록
functions = [format_tool_to_openai_function(t) for t in tools] # 도구를 OpenAI에서 이해할 수 있는 형식으로 등록
# GPT-4o에게 위의 '함수 명세'와 '사용자의 질의'를 입력
ai_message = model.predict_messages([HumanMessage(content="구글 주식의 가격을 알려줘")], functions=functions)
ai_message.additional_kwargs['function_call']
{'arguments': '{"stockticker":"GOOGL"}', 'name': 'get_stock_ticker_price'}
GPT-4o는 주어진 함수 명세와 사용자의 질의를 고려하여, 위 결과 처럼, 어떤 함수에 어떤 파라미터값을 넣어야 할지를 제안하게 됩니다.
그리고 최종적으로는 아래처럼,
1. 사용자 질의
2. LLM이 생성한 중간 결정 메세지
3. 실제 함수가 동작된 뒤 반환된 값
4. 도구 함수 명세 목록
들을 종합하여 최종 답변을 생성하게 됩니다.
final_message = model.predict_messages([HumanMessage(content='구글 주식의 가격을 알려줘'),
ai_message,
FunctionMessage(name='get_stock_ticker_price',content=tool_result)],
functions=functions)
4️⃣ ReAct vs Function Calling
Function Calling은 CoT(생각 과정)이 없는 도구 호출 에이전트입니다.
당연히 생각에 소요되는 토큰 소모가 없겠죠. 자연스럽게 생각에 소요되는 시간도 줄어들 것이구요.
만약 오픈 모델을 파인 튜닝할 수 있다면, 토큰 절약, 추론 속도 측면에서 ReAct 형식보다 효율적일 수 있겠습니다.
하지만, Function Calling으로도 성능이 올라가지 않는다면,
그때 다시 CoT를 추가해 ReAct 형식으로 전환하여 문제 해결 성능을 올리는 전략을 고려할 수 있다고 합니다.
① 오늘자 날짜, 공부 시작, 종료 시각 포함 사진 각 1장


② 1개 클립 수강 인증 사진 1장 / 학습 인증 사진 1장


③ 챌린지 대상 강의 완강률 캡쳐 사진 1장

https://fastcampus.info/4n8ztzq
(~6/20) 50일의 기적 AI 환급반💫 | 패스트캠퍼스
초간단 미션! 하루 20분 공부하고 수강료 전액 환급에 AI 스킬 장착까지!
fastcampus.co.kr
'패스트캠퍼스환급챌린지' 카테고리의 다른 글
| 패스트캠퍼스 환급챌린지 17일차 : 파인튜닝과 RAG로 완성하는 맞춤형 LLM 서비스 개발 강의 후기 (3) | 2025.07.17 |
|---|---|
| 패스트캠퍼스 환급챌린지 16일차 : 파인튜닝과 RAG로 완성하는 맞춤형 LLM 서비스 개발 강의 후기 (3) | 2025.07.16 |
| 패스트캠퍼스 환급챌린지 14일차 : 파인튜닝과 RAG로 완성하는 맞춤형 LLM 서비스 개발 강의 후기 (0) | 2025.07.14 |
| 패스트캠퍼스 환급챌린지 13일차 : 파인튜닝과 RAG로 완성하는 맞춤형 LLM 서비스 개발 강의 후기 (2) | 2025.07.13 |
| 패스트캠퍼스 환급챌린지 12일차 : 파인튜닝과 RAG로 완성하는 맞춤형 LLM 서비스 개발 강의 후기 (0) | 2025.07.12 |