DeepSeek Function Calling 实战代码(用的是deepseek)
·
DeepSeek Function Calling 实战
Function Calling 到底是干嘛的?
很多人以为 Function Calling 是让大模型“帮你去执行代码”,其实不对。
实际流程是这样:
- 你把本地函数(比如
get_weather)的描述(名字、参数格式)告诉模型。 - 用户问“北京天气咋样”,模型理解后返回一个 JSON:
{"name":"get_weather","arguments":{"location":"北京"}}。 - 你的本地代码收到这个 JSON,自己在沙盒环境里执行真正的
get_weather函数。 - 把执行结果(比如
{"temp":22})再传回模型,模型组织成自然语言回答。
关键点:
- 模型只输出 JSON 指令,不执行任何代码。
- 真正的函数执行发生在你的本地环境(或任意安全沙盒)。
- 传递的只是数据(JSON),不是可执行脚本。安全性由此而来——模型无法注入恶意代码。
所以 Function Calling 的本质是:大模型成为“任务调度器”,输出结构化指令,你用自己的环境执行。
样例代码(DeepSeek 版)
import json
from openai import OpenAI
client = OpenAI(
api_key="你的key",
base_url="https://api.deepseek.com"
)
# 这是本地真正的函数
def get_weather(location: str):
# 你可以调用真实 API,这里模拟
return {"location": location, "temp": 22, "condition": "sunny"}
# 告诉模型:有这么一个工具
tools = [{
"type": "function",
"function": {
"name": "get_weather",
"description": "查询指定城市的天气",
"parameters": {
"type": "object",
"properties": {
"location": {"type": "string", "description": "城市名"}
},
"required": ["location"]
}
}
}]
user_msg = "北京天气怎么样?"
# 第一次请求:模型判断是否需要调用工具
res = client.chat.completions.create(
model="deepseek-v4-flash",
messages=[{"role": "user", "content": user_msg}],
tools=tools,
tool_choice="auto"
)
msg = res.choices[0].message
if msg.tool_calls:
for tc in msg.tool_calls:
# 解析模型返回的 JSON 参数
args = json.loads(tc.function.arguments)
# 本地执行真正的函数
result = get_weather(**args)
# 第二次请求:把执行结果交给模型生成最终回答
final = client.chat.completions.create(
model="deepseek-v4-flash",
messages=[
{"role": "user", "content": user_msg},
msg,
{"role": "tool", "tool_call_id": tc.id, "content": json.dumps(result)}
]
)
print(final.choices[0].message.content)
else:
print(msg.content)
模型返回的 JSON 如下:
{
"name": "get_weather",
"arguments": "{\"location\":\"北京\"}"
}
本地工程拿到后,程序去调用 get_weather("北京")函数。

为什么这个设计很重要?
- 安全:模型只输出 JSON,不会让你
eval("rm -rf /")。执行权完全在你手里。 - 灵活:你可以让模型调度任何本地工具(查数据库、调 API、发邮件、控制硬件),模型只负责“说该干什么”,实际怎么做你说了算。
- 可扩展:加一个新工具,只需要把它的描述(JSON Schema)丢给模型,不需要改模型的代码。
迁移到 DeepSeek 的两步
# 1. 改 base_url
# 2. 改 model 名称
client = OpenAI(
base_url="https://api.deepseek.com",
api_key="你的key"
)
# model 用 deepseek-v4-flash 或 deepseek-v4-pro
其他和 OpenAI 一模一样。
总结
Function Calling = 大模型输出 JSON 命令,你本地执行真正的函数。模型不跑代码,只做调度。
这才是它的本质。搞清楚这点,你就知道为什么它既强大又安全了。
更多推荐


所有评论(0)