OpenAI 함수 호출 V2 기능
함수 호출 V2의 핵심 목표는 OpenAI 모델에 외부 세계와 상호 작용할 수 있는 기능을 제공하는 것이며, 이는 다음 두 가지 핵심 함수에 반영되어 있습니다:
- 데이터 가져오기 - RAG의 함수 호출 구현입니다.
- 기본적으로 RAG(검색 증강 세대)입니다. 함수 호출은 검색 향상 생성을 구현하는 강력한 메커니즘을 제공합니다(RAG). 이 모델은 미리 정의된 함수를 호출하여 자체적으로 생성된 응답에 통합함으로써 외부 데이터 소스(예: 지식창고, API 등)에서 최신의 관련성 있는 정보를 검색할 수 있습니다.
- 정보 지연 및 지식의 한계 해결 대규모 언어 모델에 대한 기존의 지식은 정적이지만 함수 호출은 모델이 실시간 정보나 도메인별 지식에 액세스하여 보다 정확하고 포괄적인 응답을 생성할 수 있도록 함으로써 이러한 격차를 해소합니다.
- 사용 사례의 예
- 실시간 정보 조회. 예를 들어, 현재 날씨 데이터, 최신 뉴스 정보, 주가 등을 확인할 수 있습니다.
- 지식창고 검색. 예를 들어, 회사 내부 지식창고, 제품 설명서, FAQ 등을 쿼리하여 사용자에게 보다 전문적인 답변을 제공할 수 있습니다.
- API 데이터 통합. 예를 들어 외부 API에서 제품 정보, 비행 동역학, 지리적 위치 정보 등을 가져와 대화 콘텐츠를 풍부하게 만들 수 있습니다.
- 구현. 데이터 검색을 위한 개발자 정의 함수(예
get_weather
,search_knowledge_base
), 그리고tools
를 매개변수로 모델에 제공합니다. 모델이 외부 정보가 필요하다고 판단하면 이러한 함수를 호출하여 결과를 얻은 다음 최종 응답에 통합합니다.
- 조치 취하기 - 모델 기반 자동화.
- 정보 제공을 넘어 실습을 유도합니다. 함수 호출은 정보 검색에 국한되지 않고 모델이 외부 시스템을 구동하여 실제 작업을 수행할 수 있도록 함으로써 더 심층적인 자동화 및 애플리케이션 시나리오를 가능하게 합니다.
- 모델의 활용도 및 활용도 향상 이를 통해 모델은 단순한 대화 파트너를 넘어 사용자의 다양한 작업을 도와주는 지능형 비서가 될 수 있습니다.
- 사용 사례의 예
- 자동화된 워크플로. 예를 들어, 양식 제출, 캘린더 이벤트 만들기, 이메일 보내기, 항공편 및 호텔 예약 등을 할 수 있습니다.
- 애플리케이션 제어. 예를 들어 애플리케이션(UI/프론트엔드 또는 백엔드)의 상태 수정, 스마트홈 기기 제어 등이 있습니다.
- 에이전트 워크플로. 예를 들어 대화 내용에 따라 더 전문화된 고객 서비스 시스템으로 넘기거나 더 복잡한 자동화된 프로세스를 트리거할 수 있습니다.
- 구현. 특정 작업을 수행하기 위한 개발자 정의 함수(예
send_email
,create_calendar_event
), 그리고tools
를 매개변수로 모델에 제공합니다. 모델은 사용자 의도에 따라 이러한 함수를 호출하고 적절한 매개 변수를 전달하여 작업을 트리거할 수 있습니다.
함수 호출 V2의 기타 주요 기능(데이터 수집 및 실행 작업 지원).
tools
매개변수 및 함수 스키마. 함수 이름, 설명 및 매개변수 정의를 포함하여 모델이 호출할 수 있는 함수를 정의하고 관리하는 구조화된 방법을 제공하여 모델이 함수를 정확하게 이해하고 호출할 수 있도록 합니다.- 엄격 모드. 모델이 미리 정의된 패턴을 엄격하게 준수하는 함수 호출을 출력하도록 하여 함수 호출의 안정성과 정확성을 개선합니다.
- 도구 선택 및 병렬 함수 호출 제어. 개발자가 특정 함수에 대한 호출을 강제하거나 병렬 호출 횟수를 제한하는 등 모델 호출 함수의 동작을 애플리케이션 시나리오에 맞게 조정할 수 있도록 세분화된 제어 기능을 제공합니다.
- 스트리밍. 사용자 경험을 개선하면 함수 매개 변수의 채우기 과정을 실시간으로 보여줄 수 있으므로 사용자가 모델의 사고 과정을 더 직관적으로 이해할 수 있습니다.
요약.
함수 호출 V2의 핵심 가치는 다음과 같습니다. 데이터 수집(RAG 구현) 노래로 응답 작업 실행 이 두 가지 기능은 빅 언어 모델의 적용 범위를 크게 확장합니다. 모델이 외부 정보에 액세스하고 활용하여 보다 스마트하고 실용적인 응답을 생성할 수 있을 뿐만 아니라 외부 시스템이 작업을 수행하고 더 높은 수준의 자동화를 달성하도록 유도하여 더욱 강력한 AI 애플리케이션 구축의 토대를 마련할 수 있습니다. RAG를 구현하는 데이터 수집은 지식 집약적 애플리케이션에서 함수 호출 V2의 핵심 기능입니다.
공식 OpenAI는 다음과 같습니다. 함수 호출(함수 호출) 모델이 데이터를 가져오고 연산을 수행할 수 있도록 하는 새로운 버전의 설명입니다.
함수 호출 는 OpenAI 모델이 코드 또는 외부 서비스와 상호 작용할 수 있는 강력하고 유연한 방법을 제공하며, 두 가지 주요 사용 사례가 있습니다:
데이터 가져오기 | 최신 정보를 검색하여 모델의 응답(RAG)에 통합합니다. 이는 지식창고를 검색하고 API에서 특정 데이터(예: 현재 날씨 데이터)를 가져올 때 유용합니다. |
실행 가능한 작업 | 양식 제출, API 호출, 애플리케이션 상태(UI/프론트엔드 또는 백엔드) 수정, 대화 전달과 같은 프록시 워크플로우 작업 등의 작업을 수행합니다. |
다음 중 하나만 만들고 싶다면모델 생성 JSON모델이 항상 사용자가 제공한 출력과 일치하는 출력을 생성하도록 하려면 구조화된 출력에 대한 OpenAI 설명서를 참조하세요. JSON 스키마 응답.
날씨 보기
get_weather 함수를 사용한 함수 호출 예시
from openai import OpenAI
client = OpenAI()
tools = [{
"type": "function",
"function": {
"name": "get_weather",
"description": "获取给定位置的当前温度。",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "城市和国家,例如 Bogotá, Colombia"
}
},
"required": [
"location"
],
"additionalProperties": False
},
"strict": True
}
}]
completion = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "今天巴黎的天气怎么样?"}],
tools=tools
)
print(completion.choices[0].message.tool_calls)
수출
[{
"id": "call_12345xyz",
"type": "function",
"function": {
"name": "get_weather",
"arguments": "{\"location\":\"Paris, France\"}"
}
}]
메일
send_email 함수를 사용한 함수 호출 예시
from openai import OpenAI
client = OpenAI()
tools = [{
"type": "function",
"function": {
"name": "send_email",
"description": "向给定的收件人发送包含主题和消息的电子邮件。",
"parameters": {
"type": "object",
"properties": {
"to": {
"type": "string",
"description": "收件人的电子邮件地址。"
},
"subject": {
"type": "string",
"description": "电子邮件主题行。"
},
"body": {
"type": "string",
"description": "电子邮件消息正文。"
}
},
"required": [
"to",
"subject",
"body"
],
"additionalProperties": False
},
"strict": True
}
}]
completion = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "你能给 ilan@example.com 和 katia@example.com 发送邮件说“hi”吗?"}],
tools=tools
)
print(completion.choices[0].message.tool_calls)
수출
[
{
"id": "call_9876abc",
"type": "function",
"function": {
"name": "send_email",
"arguments": "{\"to\":\"ilan@example.com\",\"subject\":\"Hello!\",\"body\":\"Just wanted to say hi\"}"
}
},
{
"id": "call_9876abc",
"type": "function",
"function": {
"name": "send_email",
"arguments": "{\"to\":\"katia@example.com\",\"subject\":\"Hello!\",\"body\":\"Just wanted to say hi\"}"
}
}
]
기술 자료 검색
search_knowledge_base 함수를 사용한 함수 호출 예시
from openai import OpenAI
client = OpenAI()
tools = [{
"type": "function",
"function": {
"name": "search_knowledge_base",
"description": "查询知识库以检索关于某个主题的相关信息。",
"parameters": {
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "用户问题或搜索查询。"
},
"options": {
"type": "object",
"properties": {
"num_results": {
"type": "number",
"description": "要返回的排名靠前的结果数量。"
},
"domain_filter": {
"type": [
"string",
"null"
],
"description": "可选的域,用于缩小搜索范围(例如,“finance”,“medical”)。 如果不需要,则传递 null。"
},
"sort_by": {
"type": [
"string",
"null"
],
"enum": [
"relevance",
"date",
"popularity",
"alphabetical"
],
"description": "如何对结果进行排序。 如果不需要,则传递 null。"
}
},
"required": [
"num_results",
"domain_filter",
"sort_by"
],
"additionalProperties": False
}
},
"required": [
"query",
"options"
],
"additionalProperties": False
},
"strict": True
}
}]
completion = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "你能在 AI 知识库中找到关于 ChatGPT 的信息吗?"}],
tools=tools
)
print(completion.choices[0].message.tool_calls)
수출
[{
"id": "call_4567xyz",
"type": "function",
"function": {
"name": "search_knowledge_base",
"arguments": "{\"query\":\"What is ChatGPT?\",\"options\":{\"num_results\":3,\"domain_filter\":null,\"sort_by\":\"relevance\"}}"
}
}]
개요
OpenAI 모델에 액세스 권한을 부여하여 접근성을 높일 수 있습니다. 도구 를 사용하여 기능을 확장할 수 있습니다.도구 두 가지 형태가 있습니다:
함수 호출 | 개발자 정의 코드. |
호스팅 도구 | OpenAI 구축 도구. (예: 파일 검색, 코드 인터프리터)는 어시스턴트 API에서만 사용할 수 있습니다. |
이 가이드는 다음과 같은 기능을 최대한 활용하는 방법을 설명합니다. 함수 호출 모델에 자체 함수에 대한 액세스 권한을 부여합니다. 시스템 프롬프트 및 메시지에 따라 모델이 이러한 함수를 호출하도록 결정할 수 있습니다.텍스트 또는 오디오를 생성하는 대신(또는 추가로).
그런 다음 함수 코드를 실행하고 결과를 다시 보내면 모델이 결과를 최종 응답에 통합합니다.

샘플 기능(컴퓨팅)
모델에서 다음과 같이 정의된 실수를 사용할 수 있도록 허용하는 방법을 살펴보겠습니다. get_weather 기능의 단계:
코드베이스에 구현된 get_weather 함수 샘플
import requests
def get_weather(latitude, longitude):
response = requests.get(f"https://api.open-meteo.com/v1/forecast?latitude={latitude}&longitude={longitude}¤t=temperature_2m,wind_speed_10m&hourly=temperature_2m,relative_humidity_2m,wind_speed_10m")
data = response.json()
return data['current']['temperature_2m']
이전 순서도와 달리 이 기능은 정확한 위도 노래로 응답 경도일반적이지 않은 위치 매개변수. (하지만 저희 모델은 많은 위치의 좌표를 자동으로 결정할 수 있습니다!)
함수 호출 단계
정의된 함수 호출 모델을 시스템 및 사용자 메시지와 함께 사용하세요.
1단계: 정의된 get_weather 도구로 모델을 호출합니다.
from openai import OpenAI
import json
client = OpenAI()
tools = [{
"type": "function",
"function": {
"name": "get_weather",
"description": "获取给定坐标的当前温度,单位为摄氏度。",
"parameters": {
"type": "object",
"properties": {
"latitude": {"type": "number"},
"longitude": {"type": "number"}
},
"required": ["latitude", "longitude"],
"additionalProperties": False
},
"strict": True
}
}]
messages = [{"role": "user", "content": "今天巴黎的天气怎么样?"}]
completion = client.chat.completions.create(
model="gpt-4o",
messages=messages,
tools=tools,
)
2단계: 모델이 호출할 함수를 결정합니다. 모델은 이름과 입력 매개변수를 반환합니다.
completion.choices[0].message.tool_calls
[{
"id": "call_12345xyz",
"type": "function",
"function": {
"name": "get_weather",
"arguments": "{\"latitude\":48.8566,\"longitude\":2.3522}"
}
}]
3단계: 함수 코드 실행 - 모델의 응답을 구문 분석하고 함수 호출을 처리합니다.
get_weather 함수 실행
tool_call = completion.choices[0].message.tool_calls[0]
args = json.loads(tool_call.function.arguments)
result = get_weather(args["latitude"], args["longitude"])
4단계: 모델에 결과 제공 - 모델이 결과를 최종 응답에 통합할 수 있도록 합니다.
결과를 제공하고 모델을 다시 호출합니다.
messages.append(completion.choices[0].message) # append model's function call message
messages.append({ # append result message
"role": "tool",
"tool_call_id": tool_call.id,
"content": str(result)
})
completion_2 = client.chat.completions.create(
model="gpt-4o",
messages=messages,
tools=tools,
)
4단계: 모델 응답 - 결과를 출력에 통합합니다.
completion_2.choices[0].message.content
"巴黎当前温度为 14°C (57.2°F)。"
함수 정의
함수를 각 API 요청의 도구 매개변수의 함수 객체는 객체 형태로 설정됩니다.
함수는 스키마에 의해 정의되며, 스키마는 함수가 수행하는 작업과 예상되는 입력 매개변수를 모델에 알려줍니다. 스키마에는 다음과 같은 필드가 포함됩니다:
필드 | 설명 |
---|---|
이름 | 함수 이름(예: get_weather) |
설명 | 기능 사용 시기 및 방법에 대한 자세한 정보 |
매개변수 | 함수 입력 파라미터의 JSON 스키마를 정의합니다. |
샘플 함수 패턴
{
"type": "function",
"function": {
"name": "get_weather",
"description": "检索给定位置的当前天气。",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "城市和国家,例如 Bogotá, Colombia"
},
"units": {
"type": "string",
"enum": [
"celsius",
"fahrenheit"
],
"description": "温度将以什么单位返回。"
}
},
"required": [
"location",
"units"
],
"additionalProperties": False
},
"strict": True
}
}
다음과 같은 이유로 매개변수 JSON 스키마에 정의된 속성 유형, 열거형, 설명, 중첩 개체 및 재귀 개체와 같은 다양한 기능을 활용할 수 있습니다.
(선택 사항) pydantic 및 zod를 사용한 함수 호출
함수 모드를 직접 정의하는 것이 좋지만, SDK는 함수 모드를 변환하는 데 사용할 수 있는 헬퍼를 제공합니다. pydantic 노래로 응답 zod 개체가 패턴으로 변환됩니다. 전부는 아닙니다. pydantic 노래로 응답 zod 기능이 지원됩니다.
함수 패턴을 표현하는 객체 정의
from openai import OpenAI, pydantic_function_tool
from pydantic import BaseModel, Field
client = OpenAI()
class GetWeather(BaseModel):
location: str = Field(
...,
description="城市和国家,例如 Bogotá, Colombia"
)
tools = [pydantic_function_tool(GetWeather)]
completion = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "今天巴黎的天气怎么样?"}],
tools=tools
)
print(completion.choices[0].message.tool_calls)
함수 정의를 위한 모범 사례
명확하고 상세한 함수 이름, 매개변수 설명 및 지침을 작성하세요.
- 함수와 각 매개변수의 사용 목적(및 형식)과 출력이 나타내는 내용을 명확하게 설명합니다.
- 시스템 힌트를 사용하여 각 기능을 사용할 때(그리고 사용하지 않을 때)를 설명합니다. 일반적으로 모델에 정확히 무엇을 해야 하는지 알려줍니다.
- 특히 반복되는 오류를 수정할 때의 예제와 에지 케이스가 포함되어 있습니다. (주의: 예제를 추가하면 추론 모델의 성능이 저하될 수 있습니다.)
소프트웨어 엔지니어링 모범 사례를 적용하세요.- 기능을 이해하기 쉽고 직관적으로 만드세요. (최소한의 놀라움의 원칙)
- 열거형과 객체 구조를 사용하여 유효하지 않은 상태를 표현할 수 없게 만듭니다. (예를 들어toggle_light(ON: BOL, OFF: BOL) (유효하지 않은 통화 허용)
- 인턴 테스트를 통과하세요. 인턴/인턴이 모델에게 제공한 내용만으로 기능을 올바르게 사용할 수 있나요? (만약 그렇지 않다면 어떤 질문을 하나요? 프롬프트에 답을 추가하세요.)
모델에 대한 부담을 최소화하고 가능한 한 코드를 사용합니다.
- 이미 알고 있는 매개변수를 모델이 채우지 않도록 하세요. 예를 들어 이미 이전 주문_ID설정하지 않으려면 주문_ID 매개변수 - 매개변수 설정 대신 제출_환불()코드를 전달했습니다. 주문_ID.
- 항상 순차적으로 호출되는 함수를 병합합니다. 예를 들어 항상 다음 함수를 호출하는 경우 쿼리 위치() 를 클릭한 다음 mark_location()를 사용하여 태그 지정 로직을 쿼리 함수 호출로 이동하기만 하면 됩니다.정확도를 높이려면 함수 수를 적게 유지하세요.
- 다양한 기능을 사용하여 성과를 평가하세요.
- 목표는 한 번에 20개 미만의 기능을 보유하는 것이지만 이는 소프트 권장 사항일 뿐입니다.
OpenAI 리소스 활용.
- 존재 놀이터 에서 함수 패턴 생성 및 반복
- 많은 수의 함수나 어려운 작업의 함수 호출 정확도를 개선하기 위해 미세 조정을 고려하세요.
토큰 사용
최하위 수준에서 함수는 모델이 사용하도록 학습된 구문으로 시스템 메시지에 주입됩니다. 즉, 함수는 모델의 컨텍스트 제약 조건에 포함되며 입력으로 사용됩니다. 토큰 충전. 토큰 제한이 발생하는 경우 함수 개수 또는 함수 인수에 대해 제공하는 설명의 길이를 제한하는 것이 좋습니다.
도구 사양에 정의된 기능이 많은 경우 미세 조정을 통해 사용되는 토큰의 수를 줄일 수도 있습니다.
함수 호출 처리하기
모델이 함수를 호출할 때는 반드시 함수를 실행하고 결과를 반환해야 합니다. 모델 응답에는 0개, 1개 또는 그 이상의 호출이 포함될 수 있으므로 여러 개의 호출이 있다고 가정하는 것이 가장 좋습니다.
응답에는 tool_calls 배열이 있으며, 각 배열에는 id(나중에 함수 결과를 제출하는 데 사용됨) 및 함수 결과를 제출하는 데 사용되는 이름 및 JSON으로 인코딩된 인수 (명목식 형태로 사용됨) 함수.
여러 함수 호출을 사용한 샘플 응답
[
{
"id": "call_12345xyz",
"type": "function",
"function": {
"name": "get_weather",
"arguments": "{\"location\":\"Paris, France\"}"
}
},
{
"id": "call_67890abc",
"type": "function",
"function": {
"name": "get_weather",
"arguments": "{\"location\":\"Bogotá, Colombia\"}"
}
},
{
"id": "call_99999def",
"type": "function",
"function": {
"name": "send_email",
"arguments": "{\"to\":\"bob@email.com\",\"body\":\"Hi bob\"}"
}
}
]
함수 호출을 실행하고 결과를 추가합니다.
for tool_call in completion.choices[0].message.tool_calls:
name = tool_call.function.name
args = json.loads(tool_call.function.arguments)
result = call_function(name, args)
messages.append({
"role": "tool",
"tool_call_id": tool_call.id,
"content": result
})
위의 예에서는 각 호출을 라우팅하는 가상의 call_function이 있습니다. 이것은 가능한 구현 중 하나입니다:
함수 호출 실행 및 결과 추가
def call_function(name, args):
if name == "get_weather":
return get_weather(**args)
if name == "send_email":
return send_email(**args)
서식 지정 결과
결과는 문자열이어야 하지만 형식은 사용자가 정할 수 있습니다(JSON, 오류 코드, 일반 텍스트 등). 모델은 필요에 따라 문자열을 해석합니다.
함수에 반환값이 없는 경우(예 send_email)를 호출하면 성공 또는 실패를 나타내는 문자열을 반환하기만 하면 됩니다. (예를 들어 "성공")
결과를 응답에 통합
결과를 메시지 그런 다음 최종 응답을 위해 모델에 다시 보낼 수 있습니다.
모델에 결과 다시 보내기
completion = client.chat.completions.create(
model="gpt-4o",
messages=messages,
tools=tools,
)
최종 응답
"巴黎大约 15°C,Bogotá 大约 18°C,并且我已经向 Bob 发送了那封邮件。"
추가 구성
도구 선택
기본적으로 모델은 언제, 얼마나 많은 도구를 사용할지 결정합니다. 기본적으로 도구_선택 매개변수는 특정 동작을 강제합니다.
- 자동: (기본값(설정))는 0, 하나 이상의 함수를 호출합니다. tool_choice: "auto"
- 필수: 하나 이상의 함수를 호출합니다. tool_choice: "필수"
- 강제 함수: 특정 함수를 정확히 호출합니다. tool_choice: {"type": "function", "function": {"name": "get_weather"}}

설정할 수도 있습니다. 도구_선택 로 설정 "none"를 사용하여 통과하지 않는 함수의 동작을 시뮬레이션합니다.
병렬 함수 호출
모델은 한 라운드에 여러 함수를 호출하도록 선택할 수 있습니다. 이렇게 하려면 PARALLEL_TOOL_CALLS 로 설정 false 를 설정하면 정확히 0개 또는 하나의 도구가 호출되도록 할 수 있습니다.
주의: 현재 모델이 한 라운드에 두 개 이상의 함수를 호출하는 경우 엄격한 모드에서는 이러한 호출을 비활성화합니다.
엄격한 모델
최고 사령관(군) strict 로 설정 true 를 사용하면 함수 호출이 최선을 다하는 것이 아니라 함수 패턴을 안정적으로 준수하도록 보장합니다. 항상 엄격 모드를 활성화하는 것이 좋습니다.
하단에는 구조화된 출력 기능을 활용하여 엄격한 모드를 구현하므로 몇 가지 요구 사항이 도입됩니다:
- 와 관련하여 매개변수 의 각 객체에 대해추가 속성 로 설정해야 합니다. false.
- 속성의 모든 필드에는 다음과 같이 레이블이 지정되어야 합니다. 필수.
이 작업을 수행하려면 null 역할 유형 옵션을 사용하여 선택적 필드를 표시할 수 있습니다(아래 예 참조).
엄격 모드 사용
{
"type": "function",
"function": {
"name": "get_weather",
"description": "检索给定位置的当前天气。",
"strict": true,
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "城市和国家,例如 Bogotá, Colombia"
},
"units": {
"type": ["string", "null"],
"enum": ["celsius", "fahrenheit"],
"description": "温度将以什么单位返回。"
}
},
"required": ["location", "units"],
"additionalProperties": False
}
}
}
엄격 모드 비활성화
{
"type": "function",
"function": {
"name": "get_weather",
"description": "检索给定位置的当前天气。",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "城市和国家,例如 Bogotá, Colombia"
},
"units": {
"type": "string",
"enum": ["celsius", "fahrenheit"],
"description": "温度将以什么单位返回。"
}
},
"required": ["location"],
}
}
}
놀이터에서 생성된 모든 패턴은 엄격한 모드가 활성화되어 있습니다.
엄격 모드를 활성화하는 것이 좋지만 몇 가지 제한 사항이 있습니다:
- JSON 스키마의 일부 기능은 지원되지 않습니다. (지원되는 스키마 참조).
- 패턴은 첫 번째 요청에서 추가 처리를 거친 후 캐시됩니다. 패턴이 요청마다 다르면 지연 시간이 길어질 수 있습니다.
- 패턴은 성능을 위해 캐시되며 데이터 보존 기간이 0이 될 수 없습니다.
스트리밍
스트리밍을 사용하여 모델이 파라미터를 채울 때 호출되는 함수를 표시하거나 파라미터를 실시간으로 표시하여 진행 상황을 보여줄 수 있습니다.
함수 호출을 스트리밍하는 것은 일반 응답을 스트리밍하는 것과 매우 유사합니다. 스트림 로 설정 true 를 사용하여 데이터를 가져오고 델타 객체 블록.
스트리밍 함수 호출
from openai import OpenAI
client = OpenAI()
tools = [{
"type": "function",
"function": {
"name": "get_weather",
"description": "获取给定位置的当前温度。",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "城市和国家,例如 Bogotá, Colombia"
}
},
"required": ["location"],
"additionalProperties": False
},
"strict": True
}
}]
stream = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "今天巴黎的天气怎么样?"}],
tools=tools,
stream=True
)
for chunk in stream:
delta = chunk.choices[0].delta
print(delta.tool_calls)
출력 delta.tool_calls
[{"index": 0, "id": "call_DdmO9pD3xa9XTPNJ32zg2hcA", "function": {"arguments": "", "name": "get_weather"}, "type": "function"}]
[{"index": 0, "id": null, "function": {"arguments": "{\"", "name": null}, "type": null}]
[{"index": 0, "id": null, "function": {"arguments": "location", "name": null}, "type": null}]
[{"index": 0, "id": null, "function": {"arguments": "\":\"", "name": null}, "type": null}]
[{"index": 0, "id": null, "function": {"arguments": "Paris", "name": null}, "type": null}]
[{"index": 0, "id": null, "function": {"arguments": ",", "name": null}, "type": null}]
[{"index": 0, "id": null, "function": {"arguments": " France", "name": null}, "type": null}]
[{"index": 0, "id": null, "function": {"arguments": "\"}", "name": null}, "type": null}]
null
그러나 블록을 단일 블록으로 집계하는 대신 콘텐츠 문자열을 사용하지 않고 대신 블록을 인코딩된 인수 JSON 객체입니다.
모델이 하나 이상의 함수를 호출할 때 각각의 델타 (명목식 형태로 사용됨) tool_calls 필드가 채워집니다. 각 tool_call 다음 필드를 포함합니다:
필드 | 설명 |
---|---|
색인 | 델타에 해당하는 함수 호출을 식별합니다. |
id | 도구 호출 ID. |
함수 | 함수 호출 델타(이름 및 인수) |
유형 | tool_call 유형(함수 호출의 경우 항상 함수) |
이러한 필드의 대부분은 각 도구를 처음 호출할 때만 사용할 수 있습니다. 델타 예를 들어 id및function.name 노래로 응답 유형.
다음은 코드 스니펫을 통해 어떻게 델타 결승전 집계 tool_calls 를 추가합니다.
누적 도구_콜 델타
final_tool_calls = {}
for chunk in stream:
for tool_call in chunk.choices[0].delta.tool_calls or []:
index = tool_call.index
if index not in final_tool_calls:
final_tool_calls[index] = tool_call
final_tool_calls[index].function.arguments += tool_call.function.arguments
누적 final_tool_calls[0]
{
"index": 0,
"id": "call_RzfkBpJgzeR0S242qfvjadNe",
"function": {
"name": "get_weather",
"arguments": "{\"location\":\"Paris, France\"}"
}
}
© 저작권 정책
이 글은 저작권이 있으며 무단으로 복제해서는 안 됩니다.
관련 문서
댓글 없음...