关键要点
它的作用:函数调用使 AI 模型能够与外部工具和 API 进行交互,执行特定任务,并访问实时数据,用于系统操作和自动化工作流。
支持的模型:DeepSeek V3 系列、GPT 系列、Gemma 2 和 Mistral Nemo。
如何实现? 你可以通过 Novita AI 安装 API 并从 ** 文档** 中学习。
函数调用通过支持与外部世界交互来增强大型语言模型(LLM)。除了生成文本,LLM 还可以执行任务、访问实时数据并执行复杂操作。作为 AI 知识与可执行任务之间的桥梁,函数调用使 AI 代理或聊天机器人能够与外部工具和服务交互。DeepSeek V3 是一款强大的开源模型,以其出色的性能和效率脱颖而出。
什么是函数调用
函数调用通过支持与外部世界交互来增强大型语言模型(LLM)。除了生成文本,LLM 还可以执行任务、访问实时数据并执行复杂操作。作为 AI 知识与可执行任务之间的桥梁,函数调用使 AI 代理或聊天机器人能够与外部工具和服务交互。DeepSeek V3 是一款强大的开源模型,以其出色的性能和效率脱颖而出。
函数调用如何工作

来自 Google Cloud
- 函数声明:定义可重用的代码块(函数),明确描述其功能、输入和输出。
- 提示提交:向 LLM 提供提示和一组函数声明,告知其可用的工具。
- 模型分析:LLM 评估提示,判断是否需要调用任何提供的函数来满足请求。
- 结构化输出:如果需要调用函数,LLM 会以 JSON 格式生成结构化输出,指定函数名称和参数值。
- 函数调用:应用程序或系统使用结构化输出调用指定函数,传入所需参数。
- 函数执行:外部服务或 API 根据提供的参数执行函数。
- 输出响应:外部服务将结果或确认信息返回给 AI。
- 模型响应:LLM 使用接收到的输出为用户生成自然语言响应,或用于进一步处理。
函数调用可以解决哪些问题
实时信息访问
- 股票价格更新
- 当前天气数据检索
- 突发新闻获取
系统交互
- 发送电子邮件
- 发布社交媒体内容
- 数据库查询与写入
工作流自动化
- 数据抓取与处理
- 多步骤任务执行
- 复杂分析自动化
数据准确性
- 确保信息时效性
- 提供精确查询结果
- 减少过时数据错误
增强 AI 能力
- 动态 API 集成
- 上下文任务执行
- 真实世界操作执行
用户体验改进
- 个性化响应
- 无需离开对话即可完成任务
- 外部服务的无缝集成
如何通过 Novita AI 使用 DeepSeek V3 函数调用
本指南演示如何使用函数调用获取用户指定位置的当前天气信息。我们将逐步讲解一个完整的 Python 代码示例。有关函数调用的具体 API 格式,请参阅 API 参考 创建聊天补全。

- 初始化客户端
首先,你需要使用你的 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_v3"
- 定义要调用的函数
接下来,定义模型可以调用的 Python 函数。本例中是一个获取天气信息的函数。
# 模拟获取天气数据的示例函数。
def get_weather(location):
"""获取指定位置的当前天气。"""
print("Calling get_weather function with location: ", location)
# 在实际应用中,这里会调用外部天气 API。
# 这是一个简化的示例,返回硬编码的数据。
return json.dumps({"location": location, "temperature": "60 degrees Fahrenheit"})
- 构建包含工具和用户消息的 API 请求
现在,向 Novita 端点创建 API 请求。该请求包含 tools 参数(定义模型可以使用的函数)和用户消息。
tools = [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "获取某个位置的天气,用户应先提供位置",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "城市和州,例如 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_call = response.choices[0].message.tool_calls[0]
print(tool_call.model_dump())
- 输出
{'id': '0', 'function': {'arguments': '{"location": "San Francisco, CA"}', 'name': 'get_weather'}, 'type': 'function'}
- 用函数调用结果响应并获取最终答案
下一步是处理函数调用,执行 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)
- 输出
{'id': '0', 'function': {'arguments': '{"location": "San Francisco, CA"}', 'name': 'get_weather'}, 'type': 'function'}
函数调用的常见问题与最佳实践
AI 模型中的函数调用既带来挑战也带来机遇。以下是常见问题与相应最佳实践的对比:
- 不准确的理解与清晰的提示
问题:模型可能不准确地理解用户意图,导致不必要的或不正确的函数调用。
最佳实践:提供清晰简洁的系统提示,描述聊天机器人的目的和可用功能。使用多轮示例演示直接响应和适当的函数调用。
- 复杂工作流管理
问题:难以管理具有多个相互依赖步骤的复杂工作流。
最佳实践:在转向更复杂的方法之前,先从提示工程开始。微调时注重质量而非数量,从少量高质量示例开始。
- 细致的决策制定
问题:在解释函数输出和外部数据以进行细致决策时面临挑战。
最佳实践:必要时使用检索增强生成(RAG)注入上下文。结合微调和 RAG 等技术来平衡各自的优缺点。
- 数据结构复杂性
问题:在处理不断演变的复杂数据结构(如图和嵌套对象)时存在限制。
最佳实践:选择合适的抽象层次,平衡简洁代码与性能。保持函数精简且专注,以提高效率和可读性。
- 遗留系统集成
问题:在混乱、模糊的遗留系统中进行集成时遇到困难。
最佳实践:通过性能分析,优化最常调用的函数或热点。在处理遗留系统时,考虑批量操作以减少开销。
- 安全问题
问题:在没有复杂判断的情况下执行特权函数时存在安全隐患。
最佳实践:实施健壮的错误处理机制以管理意外的 API 响应。确保强大的数据保护措施并遵守法规,以维护用户信任和敏感信息安全。
- 可扩展性与性能
问题:在满足关键任务系统严格的可扩展性、可用性和性能需求方面,可靠性尚未得到验证。
最佳实践:利用编译器优化,并使用较低的温度设置以获得更集中和确定性的输出。通过性能分析优化热点,以获得最显著的性能提升。
- 过度依赖函数调用
问题:模型可能不必要或不恰当地调用函数,即使不需要时也是如此。
最佳实践:仔细管理函数调用的实现方式。确保适当的错误处理和回退机制到位,即使外部服务不可用,也能维持系统可靠性。
- 隐私与透明度问题
问题:当 LLM 代表用户做出决策或采取行动时,存在关于透明度和用户同意的伦理问题。
最佳实践:实施清晰的文档和用户同意机制。确保数据处理负责任,并遵守 GDPR 或 HIPAA 等隐私法规。
总之,函数调用标志着 LLM 的重大进步,使其能够无缝地与企业和数据系统交互,并赋能开发者构建更动态、更实用的应用程序。通过轻松集成外部应用程序、系统和 API,LLM 变得高度通用,能够高效处理各种任务。像 DeepSeek V3 这样的模型正引领潮流,为这一变革性技术提供简化的访问途径,为 AI 创新开启无限可能。
常见问题解答
在 LLM 背景下,什么是函数调用?
函数调用是一种技术,允许大型语言模型识别何时需要外部函数或工具来执行特定任务,并生成结构化数据以执行该函数。
使用函数调用的主要优势是什么?
主要优势包括提高任务处理效率、增强开发者轻松更新函数的灵活性、无需大量更改即可添加新功能的可扩展性,以及个性化的用户交互。
Novita AI 是一个全能的云平台,能够激发你的 AI 抱负。集成 API、无服务器、GPU 实例——你所需的经济高效工具。无需基础设施,免费开始,让你的 AI 愿景成为现实。
