外观
OpenAI Function Calling
SDK
安装依赖
pip install openai requests代码示例
import openai
import requests
import json
OPENAI_API_KEY = "YOUR-OPENAI-API-KEY"
ZIXIANG_API_KEY = "YOUR-ZIXIANG-API-KEY"
# 定义函数描述
functions = [
{
"name": "zixiang_search",
"description": "使用梓享 AI 搜索进行联网搜索,输入应为搜索查询字符串,输出将返回搜索结果的详细信息,包括网页标题、网页URL、网页摘要、网站名称、网站Icon、网页发布时间等。",
"parameters": {
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "搜索关键词或问题"
},
"engine": {
"type": "string",
"enum": ["china", "global"],
"description": "搜索引擎,china表示中文搜索,global表示全球搜索"
},
"count": {
"type": "integer",
"description": "返回结果数量",
"default": 10
}
},
"required": ["query"]
}
}
]
def call_zixiang_search(query: str, engine: str = "china", count: int = 10):
"""调用梓享搜索 API"""
url = "https://search.aiserver.cloud/v1/api"
headers = {
"Authorization": f"Bearer {ZIXIANG_API_KEY}",
"Content-Type": "application/json"
}
data = {
"engine": engine,
"query": query,
"max_results": count
}
response = requests.post(url, headers=headers, json=data)
result = response.json()
if result.get("code") == 0:
webpages = result["data"]["results"]
formatted_results = []
for idx, page in enumerate(webpages, start=1):
formatted_results.append(
f"引用: {idx}\n"
f"标题: {page['title']}\n"
f"URL: {page['url']}\n"
f"摘要: {page['content']}\n"
f"网站名称: {page.get('siteName', '')}\n"
f"网站图标: {page.get('siteIcon', '')}\n"
f"发布时间: {page.get('dateLastCrawled', '')}"
)
return "\n\n".join(formatted_results)
else:
return f"搜索失败: {result.get('msg')}"
# 第一次调用 - 让 GPT 决定是否需要搜索
messages = [
{"role": "user", "content": "请告诉我小米SU7电动车的最新销量数据"}
]
response = openai.ChatCompletion.create(
model="gpt-4",
messages=messages,
functions=functions,
function_call="auto"
)
# 如果 GPT 决定调用函数
if response.choices[0].message.get("function_call"):
function_call = response.choices[0].message["function_call"]
function_name = function_call["name"]
function_args = json.loads(function_call["arguments"])
# 调用搜索 API
if function_name == "zixiang_search":
search_result = call_zixiang_search(**function_args)
# 将搜索结果返回给 GPT
messages.append(response.choices[0].message)
messages.append({
"role": "function",
"name": function_name,
"content": search_result
})
# 第二次调用 - 让 GPT 基于搜索结果生成答案
final_response = openai.ChatCompletion.create(
model="gpt-4",
messages=messages
)
print(final_response.choices[0].message["content"])响应结果
引用: 1
标题: 小米SU7月销量破2万台,创造国产电动车新纪录
URL: https://example.com/xiaomi-su7-sales-2024
摘要: 小米SU7在2024年12月单月销量突破2万台,累计交付量达到8.7万台,成为2024年最成功的新能源汽车之一...
网站名称: 汽车之家
网站图标: https://example.com/favicon.ico
发布时间: 2024-12-20
引用: 2
标题: 雷军回应SU7供不应求:产能将在明年提升至月产3万台
URL: https://example.com/leijun-su7-production
摘要: 小米集团创始人雷军在社交媒体表示,SU7订单量持续超过产能,目前工厂正在加班加点生产,预计2025年产能将提升至月产3万台...
网站名称: 36氪
网站图标: https://example.com/favicon.ico
发布时间: 2024-12-18
根据最新数据,小米SU7电动车在2024年12月的单月销量突破2万台,创造了国产电动车的新纪录。截至目前,SU7的累计交付量已达到8.7万台,成为2024年最成功的新能源汽车之一。
由于市场需求旺盛,目前SU7仍处于供不应求的状态。小米创始人雷军回应称,工厂正在全力提升产能,预计2025年将达到月产3万台的水平。这一成绩充分证明了小米在智能电动汽车领域的竞争力。完整思考链
- 用户提问:"请告诉我小米 SU7 电动车的最新销量数据"
- GPT 判断:这需要最新的实时数据,决定调用
zixiang_search函数 - Function Call:构建搜索查询 "小米 SU7 2024 销量"
- 获取结果:返回多条搜索结果,包含标题、链接、摘要等详细信息
- 生成回答:GPT 基于搜索结果整理出结构化的答案
TypeScript 示例
import OpenAI from "openai";
const openai = new OpenAI({
apiKey: process.env.OPENAI_API_KEY,
});
const ZIXIANG_API_KEY = process.env.ZIXIANG_API_KEY;
async function callZixiangSearch(
query: string,
engine: string = "china",
count: number = 10
) {
const response = await fetch("https://search.aiserver.cloud/v1/api", {
method: "POST",
headers: {
Authorization: `Bearer ${ZIXIANG_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
engine,
query,
max_results: count,
}),
});
const result = await response.json();
if (result.code === 0) {
const formatted = result.data.results
.map(
(item: any, idx: number) =>
`引用: ${idx + 1}\n标题: ${item.title}\nURL: ${item.url}\n摘要: ${
item.content
}\n网站名称: ${item.siteName || ""}\n发布时间: ${
item.dateLastCrawled || ""
}`
)
.join("\n\n");
return formatted;
}
return `搜索失败: ${result.msg}`;
}
async function main() {
const messages: OpenAI.Chat.ChatCompletionMessageParam[] = [
{ role: "user", content: "请告诉我小米SU7电动车的最新销量数据" },
];
const functions: OpenAI.Chat.ChatCompletionCreateParams.Function[] = [
{
name: "zixiang_search",
description: "使用梓享 AI 搜索进行联网搜索,返回搜索结果的详细信息",
parameters: {
type: "object",
properties: {
query: { type: "string", description: "搜索关键词" },
engine: {
type: "string",
enum: ["china", "global"],
description: "搜索引擎",
},
count: { type: "integer", description: "返回结果数量", default: 10 },
},
required: ["query"],
},
},
];
// 第一次调用
const response = await openai.chat.completions.create({
model: "gpt-4",
messages,
functions,
function_call: "auto",
});
const responseMessage = response.choices[0].message;
// 检查是否需要调用函数
if (responseMessage.function_call) {
const functionArgs = JSON.parse(responseMessage.function_call.arguments);
const searchResult = await callZixiangSearch(
functionArgs.query,
functionArgs.engine,
functionArgs.count
);
messages.push(responseMessage);
messages.push({
role: "function",
name: responseMessage.function_call.name,
content: searchResult,
});
// 第二次调用
const finalResponse = await openai.chat.completions.create({
model: "gpt-4",
messages,
});
console.log(finalResponse.choices[0].message.content);
}
}
main();相关资源
| 资源 | 链接 |
|---|---|
| OpenAI Function Calling 文档 | https://platform.openai.com/docs/guides/function-calling |
| API 完整文档 | Web Search API |
