关键亮点
Novita AI 推出了 DeepSeek R1 Turbo,提供 **3 倍吞吐量 ** 和 ** 限时 60% 折扣 。此外,该版本完全支持 ** 函数调用。
如果你想测试其性能,请直接 开始免费试用 Novita AI Playground!

什么是函数调用?
函数调用是一项强大的功能,它允许大型语言模型(LLM)以结构化方式与外部系统和你的代码进行交互。除了文本生成,支持函数调用的 LLM 可以识别何时需要执行特定操作,生成所需的参数,并执行现实世界的任务。这使得 AI 模型更加动态和实用,能够与外部工具和 API 无缝集成。
函数调用如何工作,能解决哪些问题?
其流程简单且结构化:
- 用户向 LLM 发送请求。
- LLM 分析请求,判断是否需要函数调用。
- 如果需要,LLM 生成一个结构化的 JSON 调用,包含函数名和参数,调用相应的函数。
- 应用程序接收该调用并执行函数。
- 结果返回给 LLM。
- LLM 利用结果生成对用户的最终响应。
对于多步骤或复杂任务,此循环可重复进行。工具(函数)需要使用名称、描述和指定其参数的 JSON 模式来定义。为了增加验证,可以使用 Pydantic 模型强制执行类型安全。
函数调用扩展了 LLM 的能力,解决了许多实际用例:
- 数据检索:将语言查询转换为实时数据的 API 调用(例如:“我最近的订单有哪些?”)。
- 操作执行:执行特定任务(例如:“安排会议”触发日历 API)。
- 计算:处理计算或运算(例如复利或统计分析)。
- 数据管道:为复杂工作流链接函数(例如:获取 → 处理 → 存储数据)。
- UI/UX 集成:触发界面更新,如地图标记或图表。
- 对话代理:使聊天机器人能够调用 API 获取相关响应(例如天气更新)。
- 自然语言理解:将文本转换为结构化数据或提取信息(例如情感分析、命名实体识别)。

如何通过 Novita AI 使用 DeepSeek R1 函数调用
Novita AI 已经为每个 LLM 推出了支持能力描述,你可以直接在 控制台 和 文档 中查看。


1. 初始化客户端
首先,你需要使用你的 Novita API 密钥初始化客户端。
from openai import OpenAI
import json
client = OpenAI(
base_url="https://api.novita.ai/v3/openai",
# 从 https://novita.ai/settings/key-management 获取 Novita AI API 密钥。
api_key="<YOUR Novita AI API Key>",
)
model = "deepseek/deepseek_r1"
- 定义要调用的函数
接下来,定义模型可以调用的 Python 函数。本示例中是一个获取天气信息的函数。
# 模拟获取天气数据的示例函数。
def get_weather(location):
"""检索给定地点的当前天气。"""
print("Calling get_weather function with location: ", location)
# 在实际应用中,你应在此处调用外部天气 API。
# 这是一个简化的示例,返回硬编码数据。
return json.dumps({"location": location, "temperature": "60 degrees Fahrenheit"})
2. 构建包含工具和用户消息的 API 请求
现在,创建发送到 Novita 端点的 API 请求。该请求包含 tools 参数,定义模型可以使用的函数,以及用户的消息。
tools = [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "Get weather of an location, the user shoud supply a location first",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city and state, e.g. San Francisco, CA",
}
},
"required": ["location"]
},
}
},
]
messages = [
{
"role": "user",
"content": "What is the weather in San Francisco?"
}
]
# 让我们发送请求并打印响应。
response = client.chat.completions.create(
model=model,
messages=messages,
tools=tools,
)
# 在生产环境中请检查响应中是否包含 tool_calls。
tool_call = response.choices[0].message.tool_calls[0]
print(tool_call.model_dump())
3. 输出
{'id': '0', 'function': {'arguments': '{"location": "San Francisco, CA"}', 'name': 'get_weather'}, 'type': 'function'}
4. 使用函数调用结果进行响应并获取最终答案
下一步是处理函数调用,执行 get_weather 函数,并将结果回传给模型以生成对用户的最终响应。
# 确保前面步骤中已定义 tool_call
if tool_call:
# 将助手工具调用消息添加到对话历史
messages.append(response.choices[0].message)
function_name = tool_call.function.name
if function_name == "get_weather":
function_args = json.loads(tool_call.function.arguments)
# 执行函数并获取响应
function_response = get_weather(
location=function_args.get("location"))
# 将函数响应追加到消息列表
messages.append(
{
"tool_call_id": tool_call.id,
"role": "tool",
"content": function_response,
}
)
# 从模型获取最终响应,此时已包含函数结果
answer_response = client.chat.completions.create(
model=model,
messages=messages,
# 注意:此处不要包含 tools 参数。
)
print(answer_response.choices[0].message)
5. 输出
{'id': '0', 'function': {'arguments': '{"location": "San Francisco, CA"}', 'name': 'get_weather'}, 'type': 'function'}
常见问题解答
可以调用哪些类型的函数?
你可以定义应用程序能够执行的几乎任何函数,使 LLM 能够与数据库、API 和内部逻辑交互。
函数调用是否实际执行代码?
不,当 LLM 决定调用函数时,它仅输出一个包含函数名和必要参数的结构化 JSON 对象。
DeepSeek R1 是否支持函数调用?
是的!Novita AI 推出了 DeepSeek R1 Turbo,提供 **3 倍吞吐量 ** 和 ** 限时 20% 折扣 。此外,该版本完全支持 ** 函数调用。
Novita AI 是全栈云平台,助力你的 AI 雄心。集成 API、无服务器、GPU 实例——你需要的经济高效工具。无需基础设施,免费开始,让你的 AI 愿景成为现实。
