본문 바로가기

스타트업 투자/데이터 + 테크

패스트캠퍼스 환급챌린지 15일차 : Function Calling

by Sungwook Choi 2025. 4. 15.

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

*_1. 학습 인증샷 4장 이상 포함
*_① 오늘자 날짜, 공부 시작 시각 포함 사진 1장

② 오늘자 날짜, 공부 종료 시각 포함 사진 1장

③ 1개 클립 수강 인증 사진 (강의장 목록 캡쳐, 강의 내용이 담긴 수강화면이 보이지 않도록) 1장

④ 학습 인증샷 1장 이상 (ex. 필기 촬영, 작업물, 등)

2. 학습 후기 700자 이상 (공백 제외)

ReACT 에이전트 Vs. Function Calling 에이전트 비교

  • Function Calling은 CoT(생각 과정)이 없는 도구 호출 에이전트
  • 이전에 ReACT 에이전트로 구현되었던 많은 프로젝트가 Function Calling으로 전환되고 있음
    • 이유는 CoT라는 선 과정이 토큰 소모와 느린 답변 속도에 영향을 미친다는 점
    • 현재는, 모델 성능이 좋아지면서 CoT 없이도 도구 호출이 정확하게 가능한 경우가 많아졌기 때문
  • 하지만 반대로 Function Calling이 파인 튜닝 후에도 잘 동작하지 않는다면, 성능을 올리기 위해 다시 CoT를 추가하여 ReACT 에이전트로 변경하는 것을 고려하기도 함
  • CoT는 문제를 풀기 전 생각 과정을 추가하여 성능을 올리는 방법 중 하나

장점

  • ReACT 에이전트 대비 적은 토큰 필요. 답변 시 CoT가 없기 때문
  • ReACT는 기본적으로 CoT를 하기 때문에 답변 속도가 느림
    • CoT를 하는 동안에 시간은 계속 흐르고, CoT가 끝나야만 답변이 가능하기 때문
    • Function Calling은 더 빠른 답변을 얻을 수 있다.

단점

  • CoT가 없기 때문에 제대로 작동하지 않을 경우 프롬프트 변경 등을 통한 커스터마이징이 쉽지 않음
  • Function Calling은 도구 설명 정도밖에 수정을 하지 못함
  • 반면, ReACT 에이전트는 CoT라는 도구 호출 전 생각 과정이 있기 때문에 해당 생각 부분에 대한 프롬프트 엔지니어링이 가능함

오픈 모델 파인 튜닝

  • 파인 튜닝이 가능한 상황이라면 특정 시나리오에 대해서 특정 함수를 호출하도록 학습하여 해당 도메인 특화 에이전트를 개발하는 것이 가능함
  • 또한, 파인 튜닝이 가능하다면 ReACT 에이전트보다는 CoT가 없는 Function Calling으로 성능을 먼저 보는 것을 권장하며 (토큰 절약, 인퍼런스 속도를 감안하면 Function Calling이 더 낫기 때문.) 이후 성능이 오르지 않을 경우에 CoT를 추가하여 ReACT 형식으로 개조하는 방향으로 진행하는 것을 권함
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")

# StockPriceTool를 랭체인이 사용하는 도구에 등록

tools = \[StockPriceTool()\]

# 도구를 OpenAI에서 이해할 수 있는 형식으로 서술 등록

functions = \[format\_tool\_to\_openai\_function(t) for t in tools\]

# GPT-4o와 함수의 연결: Function Calling

# GPT-4o에게 위의 '함수 명세'와 '사용자의 질의'를 입력

ai\_message = model.predict\_messages(\[HumanMessage(content="구글 주식의 가격을 알려줘")\], functions=functions)

# 결과로 나오는 것은 LLM의 답변이 아니라 어떤 함수를 어떤 파라미터로 호출해야 할 것인지를 알려준다.

ai\_message

# GPT-4o가 제안한 파라미터 값을 문자열로 추출

ai\_message.additional\_kwargs\['function\_call'\].get('arguments')

# GPT-4o가 제안한 파라미터 값이 현재 문자열 타입이므로 파이썬의 Dictionary 형태로 읽는다.

args = json.loads(ai\_message.additional\_kwargs\['function\_call'\].get('arguments'))

# 함수 호출

tool\_result = tools[0](args)

# 함수 호출 결과를 문자열로 변환

tool\_result = str(tool\_result)

# 함수 호출 결과를 최종 답변에 활용하기 위해서 랭체인의 형식으로 변환

FunctionMessage(name='get\_stock\_ticker\_price', content=tool\_result)

final\_message = model.predict\_messages(\[HumanMessage(content='구글 주식의 가격을 알려줘'), # 사용자의 질문  
ai\_message, # GPT-4o가 결정한 함수와 파라미터의 값  
FunctionMessage(name='get\_stock\_ticker\_price',content=tool\_result)\], # 함수 호출 결과  
functions=functions) #함수의 명세

print(final\_message.content)

url : https://abit.ly/lisbva

댓글