环境搭建
pip install openai httpx os json
在阿里云百炼平台上创建实例,获取大模型的api key
export DASHSCOPE_API_KEY="your-api-key"
检查环境变量是否写入
echo $DASHSCOPE_API_KEY

使用国内大模型实现function calling demo
因为上篇博客是从openai里创建api-key,支付方式不支持国内,故简单做法可直接使用国内大模型的api,且首次创建有免费额度可以使用,推荐。
且服务器不用走代理。
from openai import OpenAI
import os, json, httpx
# —— 关键:把 openai SDK 指向 Qwen 的“OpenAI 兼容”地址,并使用 DashScope 的 API Key ——
client = OpenAI(
api_key=os.environ.get("DASHSCOPE_API_KEY"),
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
# 如需代理可解除注释并修改端口:
# http_client=httpx.Client(proxies="http://127.0.0.1:7890", timeout=30.0)
)
# 1) 定义工具(函数)schema
tools = [
{
"type": "function",
"function": {
"name": "add",
"description": "计算两个数相加的结果",
"parameters": {
"type": "object",
"properties": {
"a": {"type": "number", "description": "加数1"},
"b": {"type": "number", "description": "加数2"}
},
"required": ["a", "b"],
"additionalProperties": False
}
}
}
]
# 2) 本地实现要被调用的函数
def add(a: float, b: float) -> float:
return a + b
FUNC_MAP = {"add": add}
# 3) 用户提问
messages = [{"role": "user", "content": "请把 1.5 和 2.25 相加"}]
# 4) 第一次请求:允许模型决定是否调用函数
resp = client.chat.completions.create(
model="qwen-plus", # 也可以用 "qwen-max" / "qwen-turbo" 等
messages=messages,
tools=tools,
tool_choice="auto"
)
msg = resp.choices[0].message
print("🔎 模型第一次输出:", msg)
# 5) 如果模型请求调用函数:解析参数 → 本地执行 → 回传结果
if msg.tool_calls:
tc = msg.tool_calls[0]
name = tc.function.name
args = json.loads(tc.function.arguments or "{}")
result = FUNC_MAP[name](**args)
messages.extend([
msg, # 模型的函数调用请求
{
"role": "tool",
"tool_call_id": tc.id,
"name": name,
"content": json.dumps({"result": result}, ensure_ascii=False)
}
])
# 6) 让模型把结构化结果转成自然语言
final = client.chat.completions.create(
model="qwen-plus",
messages=messages
)
print("✅ 最终回答:", final.choices[0].message.content)
else:
print("✅ 最终回答(未调用工具):", msg.content)


被折叠的 条评论
为什么被折叠?



