LLMsμ Function Calling
Function Calling μμνκΈ°
Function Callingμ λκ·λͺ¨μΈμ΄λͺ¨λΈ(LLM)μ μΈλΆ ν΄μ μμ μ μΈ μ°κ²°μ ν΅ν΄ ν¨κ³Όμ μΌλ‘ ν΄μ μ¬μ©νκ±°λ μΈλΆ APIμμ μνΈ μμ©μ κ°λ₯νκ² ν©λλ€.
GPT-4μ GPT-3.5 κ°μ LLMμ ν¨μλ₯Ό νΈμΆν΄μΌ ν λλ₯Ό κ°μ§ν ν ν¨μλ₯Ό νΈμΆνκΈ° μν μΈμκ° ν¬ν¨λ JSONμ μΆλ ₯νλλ‘ λ―ΈμΈ μ‘°μ (fine-tuned)λμμ΅λλ€. Function Callingμ μν΄ νΈμΆλλ κΈ°λ₯μ AI μ ν리μΌμ΄μ μμ λꡬ μν μ νλ©° ν λ²μ μμ²μΌλ‘ νλ μ΄μμ μ μ(define)ν μ μμ΅λλ€.
ν¨μ νΈμΆμ μμ°μ΄λ₯Ό API νΈμΆλ‘ λ³ννμ¬ LLM 컨ν μ€νΈλ₯Ό κ²μνκ±°λ μΈλΆ ν΄κ³Ό μνΈ μμ©ν΄μΌ νλ LLM κΈ°λ° μ±λ΄ λλ μμ΄μ νΈλ₯Ό ꡬμΆνλ λ° νμμ μΈ κΈ°λ₯μ λλ€.
Functional callingμ ν΅ν΄ κ°λ°μλ λ€μμ λ§λ€ μ μμ΅λλ€:
- μ§λ¬Έμ λ΅νκΈ° μν΄ μΈλΆ ν΄μ ν¨μ¨μ μΌλ‘ μ¬μ©ν μ μλ λνν μμ΄μ νΈ. μλ₯Ό λ€μ΄, "μμΈμ λ μ¨λ μ΄λ?" κ°μ 쿼리λ
get_current_weather(location: string, unit: 'μμ¨' | 'νμ¨')
κ°μ Function Callλ‘ λ³νλ κ²μ λλ€. - λ°μ΄ν° μΆμΆ λ° νκΉ (tagging)μ μν LLM κΈ°λ° μ루μ (μ: μν€λ°±κ³Ό κΈ°μ¬μμ μ¬λ μ΄λ¦ μΆμΆ)
- μμ°μ΄λ₯Ό API νΈμΆ λλ μ ν¨ν(valid) λ°μ΄ν°λ² μ΄μ€ μΏΌλ¦¬λ‘ λ³ννλ μμ© νλ‘κ·Έλ¨
- μ§μμ κΈ°λ°μΌλ‘ μνΈ μμ©νλ λνν μ§μ κ²μ μμ§(conversational knowledge retrieval engines)
μ΄λ² κ°μ΄λμμλ, λ€μν μ μ€μΌμ΄μ€λ₯Ό ν΅ν΄ GPT-4μ μ€νμμ€ λͺ¨λΈμ ν΅ν΄ ν둬νν μ νλ λ°©λ²μ μ΄ν΄λ³΄κ² μ΅λλ€.
GPT-4μ Function Calling
κ°λ¨ν μμλ‘, λͺ¨λΈμκ² μ£Όμ΄μ§ μμΉμ λ μ¨λ₯Ό μ‘°ννλλ‘ μμ²νλ€κ³ κ°μ ν΄ λ³΄κ² μ΅λλ€.
LLMλ§μΌλ‘λ μ»·μ€ν ν¬μΈνΈκ° μλ λ°μ΄ν° μΈνΈλ‘ νλ ¨μ νκΈ°λλ¬Έμ μ΄ μμ²μ μλ΅ν μ μμ΅λλ€. μ΄λ₯Ό ν΄κ²°νλ λ°©λ²μ LLMμ μΈλΆ ν΄κ³Ό κ²°ν©νλ κ²μ λλ€. λͺ¨λΈμ ν¨μ νΈμΆ κΈ°λ₯μ νμ©νμ¬ μΈμμ ν¨κ» νΈμΆν μΈλΆ ν¨μλ₯Ό κ²°μ ν λ€μ μ΅μ’ μλ΅μ λ°ννλλ‘ ν μ μμ΅λλ€. λ€μμ OpenAI APIλ₯Ό μ¬μ©νμ¬ μ΄λ₯Ό λ¬μ±νλ λ°©λ²μ λν κ°λ¨ν μμ λλ€. Let's say a user is asking the following question to the model:
μμΈμ λ μ¨λ μ΄λ?
Function Callingμ μ¬μ©νμ¬ μ΄ μμ²μ μ²λ¦¬νλ €λ©΄ 첫 λ²μ§Έ λ¨κ³μμ OpenAI API μμ²μ μΌλΆλ‘ μ λ¬ν λ μ¨ ν¨μλ ν¨μ μ§ν©(set)μ μ μν©λλ€:
tools = [
{
"type": "function",
"function": {
"name": "get_current_weather",
"description": "μ£Όμ΄μ§ μμΉμ λ μ¨λ₯Ό μ‘°ννκΈ°",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "λμμ μ§μꡬ, e.g. μμΈνΉλ³μ, κ΄μ
ꡬ",
},
"unit": {
"type": "string",
"enum": ["μμ¨", "νμ¨"]},
},
"required": ["location"],
},
},
}
]
μμ get_current_weather
μ£Όμ΄μ§ μμΉμ λ°λΌ κ·Έ μ§μμ λ μ¨λ₯Ό λ°νν©λλ€. μ΄ ν¨μμ μ μλ₯Ό μμ²μ μΌλΆλ‘ μ λ¬νλ©΄ μ€μ λ‘ ν¨μλ₯Ό μ€ννμ§λ μκ³ ν¨μλ₯Ό νΈμΆνλ λ° νμν μΈμκ° ν¬ν¨λ JSON κ°μ²΄λ§ λ°νν©λλ€. λ€μμ μ΄λ₯Ό λ¬μ±νλ λ°©λ²μ λν λͺ κ°μ§ μ½λ μ€λν«μ
λλ€.
λ€μκ³Ό κ°μ ν¨μλ₯Ό μ μν μλ μκ² μ§μ:
def get_completion(messages, model="gpt-3.5-turbo-1106", temperature=0, max_tokens=300, tools=None):
response = openai.chat.completions.create(
model=model,
messages=messages,
temperature=temperature,
max_tokens=max_tokens,
tools=tools
)
return response.choices[0].message
μλλ μ¬μ©μμ μ§λ¬Έμ ꡬμ±νλ λ°©λ²μ λλ€:
messages = [
{
"role": "user",
"content": "μμΈμ λ μ¨λ μ΄λ?"
}
]
λ§μΉ¨λ΄, μμ get_completion
ν¨μμ messages
μ tools
λͺ¨λλ₯Ό ν¨κ» μ λ¬ν μ μμ΅λλ€:
response = get_completion(messages, tools=tools)
μλ΅(request) κ°μ²΄λ λ€μκ³Ό κ°μ΅λλ€:
ChatCompletionMessage(content=None, role='assistant', function_call=None, tool_calls=[ChatCompletionMessageToolCall(id='...', function=Function(arguments='{"location":"μμΈ","unit":"μμ¨"}', name='get_current_weather'), type='function')])
νΉν μΈμ(argument) κ°μ²΄μλ λͺ¨λΈμ΄ μΆμΆν μ€μν μΈμλ€μ΄ ν¬ν¨λμ΄ μμΌλ―λ‘ μμ²μ μλ£νλ λ° νμμ μ λλ€.
κ·Έλ° λ€μ μ€μ λ μ¨λ₯Ό μν΄ μΈλΆ λ μ¨ APIλ₯Ό νΈμΆν΄λ μ’μ΅λλ€. μ¬μ©μμ μ μ§λ¬Έμ λν μ΅μ’ μλ΅μ μμ½ν λͺ¨λΈμ μ λ¬ν λ μ¨ μ λ³΄κ° μμΌλ©΄ λ§μ΄μ§μ.
Notebooks
λ€μμ OpenAI APIλ₯Ό μ¬μ©νμ¬ Function Callingμ μ¬μ©νλ λ°©λ²μ 보μ¬μ£Όλ κ°λ¨ν μκ° μλ Notebookμ λλ€:
μ€ν μμ€ LLMμ Function Calling
μ€ν μμ€ LLMμ μ¬μ©ν Function Callingμ λν λ λ§μ λ΄μ©μ κ³§ 곡κ°ν μμ μ λλ€.
Function Calling μ μ€μΌμ΄μ€
λ€μμ LLMμ Function Calling κΈ°λ₯μ μ΄μ μ μ»μ μ μλ μ¬μ© μ¬λ‘ λͺ©λ‘μ λλ€:
-
λνν μμ΄μ νΈ: κΈ°λ₯ νΈμΆμ μΈλΆ APIλ μΈλΆ μ§μ κΈ°λ°μ νΈμΆνμ¬ λ³΄λ€ κ΄λ ¨μ± μκ³ μ μ©ν μλ΅μ μ 곡ν¨μΌλ‘μ¨ λ³΅μ‘ν μ§λ¬Έμ λ΅λ³νλ 볡μ‘ν λνν μμ΄μ νΈλ μ±λ΄μ λ§λλ λ° μ¬μ©ν μ μμ΅λλ€.
-
μμ°μ΄ μ΄ν΄: μμ°μ΄λ₯Ό ꡬ쑰νλ JSON λ°μ΄ν°λ‘ λ³ννκ³ ν μ€νΈμμ ꡬ쑰νλ λ°μ΄ν°λ₯Ό μΆμΆνλ©° λͺ λͺ λ κ°μ²΄(entity) μΈμ, κ°μ λΆμ, ν€μλ μΆμΆ λ±μ μμ μ μνν μ μμ΅λλ€.
-
μν λ¬Έμ νκΈ°: Function Callingμ μ¬μ©νμ¬ μ¬λ¬ λ¨κ³μ λ€μν μ νμ κ³ κΈ κ³μ°μ΄ νμν 볡μ‘ν μν λ¬Έμ λ₯Ό ν΄κ²°ν μ μμ΅λλ€.
-
API ν΅ν©(Integration): LLMκ³Ό μΈλΆ APIλ₯Ό ν¨κ³Όμ μΌλ‘ ν΅ν©νμ¬ λ°μ΄ν°λ₯Ό κ°μ Έμ€κ±°λ μ λ ₯μ λ°λ₯Έ μμ μ μννλ λ° μ¬μ©ν μ μμ΅λλ€. μ΄λ QA μμ€ν μ΄λ ν¬λ¦¬μμ΄ν°λΈ μ΄μμ€ν΄νΈλ₯Ό ꡬμΆνλ λ° λμμ΄ λ μ μμ΅λλ€. μΌλ°μ μΌλ‘ Function Callingμ μμ°μ΄λ₯Ό μ ν¨ν API νΈμΆλ‘ λ³νν μ μμ΅λλ€.
-
μ 보 μΆμΆ: κΈ°μ¬μμ κ΄λ ¨ λ΄μ€ κΈ°μ¬λ μ°Έκ³ λ¬Ένμ κ²μνλ λ± μ£Όμ΄μ§ μ λ ₯μμ νΉμ μ 보λ₯Ό μΆμΆνλ κΈ°λ₯ νΈμΆμ ν¨κ³Όμ μΌλ‘ μ¬μ©ν©λλ€.
μ°Έκ³ λ¬Έν
- Fireworks Raises the Quality Bar with Function Calling Model and API Release (opens in a new tab)
- Benchmarking Agent Tool Use and Function Calling (opens in a new tab)
- Function Calling (opens in a new tab)
- Interacting with APIs (opens in a new tab)
- OpenAI's Function Calling (opens in a new tab)
- How to call functions with chat models (opens in a new tab)
- Pushing ChatGPT's Structured Data Support To Its Limits (opens in a new tab)
- Math Problem Solving with Function Calling (opens in a new tab)