两件事:让模型调用你自己的函数(function calling),以及把它接进 LangChain / LlamaIndex。 整理日期:2026-10-18 | 相关:Python 快速开始 · 按任务选模型
get_weather,参数是北京」,你执行完把结果还给它,它再组织成自然语言回答。1. 你把「有哪些函数可用」告诉模型
2. 模型说「调用 X,参数是 Y」(它不执行,只是提议)
3. 你在本地执行 X(Y),拿到结果
4. 把结果作为工具消息回传,模型再生成最终回答⚠️ 模型永远不会真的执行你的代码。执行权一直在你手里——这也是安全边界。
🔴 description写得好不好,直接决定调用准确率。要写清「这个函数干什么、什么时候该用」,而不是重复函数名。
| 点 | 漏了会怎样 |
|---|---|
messages.append(msg) | 模型看不到自己刚才的调用,报错或重复调用 |
tool_call_id 对上 call.id | 报 tool_call_id 不匹配 |
| 再请求一次 | 只拿到「要调用 XX」,拿不到最终答案 |
openai_api_base / openai_api_key,不是 base_url。写错会静默走官方地址然后 401。ChatOpenAI() 不传参也能走珂艾。Windows 下用 set或系统环境变量面板设置,改完重开终端。
api_base(不是 base_url),这是 LlamaIndex 自己的命名。openai==0.28。三种配法:OPENAI_API_BASE 环境变量。所以最省事的做法就是设好这两个变量,不改代码。| 现象 | 原因 | 解决 |
|---|---|---|
报 tool_calls 为 None,模型直接答了 | description 写得太模糊 | 补清「何时调用」 |
报 tool_call_id 不匹配 | 回传时 id 写错 | 用 call.id 原值 |
| 死循环反复调同一个工具 | 只回传了结果没再请求 | 补第二次 create 调用 |
| LangChain 报 401 | 参数名写成 base_url | 改 openai_api_base |
| LlamaIndex 报 401 | 参数名写成 base_url | 改 api_base |
| 旧库 404 | api_base 漏 /v1 | 补上 |
| 环境变量不生效 | 进程启动时已读过 | 重开终端 / 重启服务 |
| 任务 | 推荐 |
|---|---|
| 工具调用为主(Agent) | claude-sonnet-5-5 — 工具调用最稳 |
| 复杂多步推理 | claude-opus-5-5 |
| 便宜大批量 | deepseek-v4-pro |
| 结构化输出(JSON) | gpt-6-astra |
不是所有模型都支持 function calling。用之前先在控制台确认该模型的能力,或直接试一次。
| 日期 | 改了什么 |
|---|---|
| 2026-10-18 | 由原「python 简单调用 function-calling demo」「python 简单 langchain 调用 demo」「python llama_index 配置」「python openai 官方库」四篇合并;补闭环四步与三个必须做对的点 |