现在进入真正落地。
先说一个原则,不同模型 Provider 的 API 形式会变化,所以我们不把模型名称写死在课程代码里。
统一从环境变量读:
OPENAI_MODEL
ANTHROPIC_MODEL
OLLAMA_MODEL
这样以后模型升级,不需要改代码。
项目结构
建议:
provider-demo/
├── providers.py
└── demo.py
为了让本节代码块自包含,下面我们先写成一个文件,后面项目阶段再拆目录。
安装依赖
如果你要测试云 Provider:
pip install openai anthropic
环境变量:
OPENAI_API_KEY
OPENAI_MODEL
ANTHROPIC_API_KEY
ANTHROPIC_MODEL
如果使用本地 Ollama:
OLLAMA_MODEL
并确保本机 Ollama 服务已经启动。
一个完整的多 Provider 示例
下面这个文件可以保存为:
provider_demo.py
如果没有云 API Key,也可以只使用 LocalModelProvider,或者把运行部分切换为你已有的 Provider。
这里的“完整”指适配结构完整,不是说三种外部服务在任何电脑上都能零配置运行。OpenAI 和 Claude 需要相应 SDK、API Key 与可用模型;本地版本需要 Ollama 服务和已经下载的模型。外部 SDK 与接口还会更新,遇到参数不匹配时先核对安装版本和对应官方文档,不要为了让示例跑通去修改 Agent Engine。
如何运行本地版本
假设 Ollama 已经启动,并且本地已有一个模型。
Linux / macOS:
export LLM_PROVIDER=local
export OLLAMA_MODEL=你的本地模型名
python3 provider_demo.py
Windows PowerShell:
$env:LLM_PROVIDER="local"
$env:OLLAMA_MODEL="你的本地模型名"
python3 provider_demo.py
如何切 OpenAI
Linux / macOS:
export LLM_PROVIDER=openai
export OPENAI_API_KEY=你的密钥
export OPENAI_MODEL=你的模型名
python3 provider_demo.py
如何切 Claude
Linux / macOS:
export LLM_PROVIDER=anthropic
export ANTHROPIC_API_KEY=你的密钥
export ANTHROPIC_MODEL=你的模型名
python3 provider_demo.py
最值得观察的不是输出内容。
而是,main() 完全没有因为 Provider 不同而改逻辑。
它始终:
provider = build_provider()
response = provider.chat(messages)
这就是解耦真正落地。
把三个具体示例并排比较,更容易抓住“适配”的含义:它们各用自己的请求入口和文本读取方式,最后才变成内部的 ProviderResponse。
![图片[1]-小节三:实现 OpenAIProvider、ClaudeProvider、LocalModelProvider——真正的难点是“适配”,不是“复制三份代码”-大赛人网](https://www.dsrw.com/wp-content/uploads/2026/11/image-1443.png)
这里展示的是本节代码中的文本链路,不代表三家 Tool Calling 已经全部适配完成。特别是当前 LocalModelProvider 示例在传入 tools 时会明确拒绝,而不是默默忽略工具请求。
为什么本节不急着把三家的 Tool Calling 全部统一?
因为下一部分才正式进入 Tool。
如果这一节现在把每一家 Tool Schema、Tool Call Block、Tool Result 格式全部展开,课程会变成 API 罗列。
我们当前只需要先把边界搭好:
Agent Engine
↓
Provider Interface
↓
不同模型
后面 Tool System 会再给 ProviderResponse 增加统一 ToolRequest。
课程应该一层一层长,而不是一次把所有复杂度堆上来。
















请登录后查看评论内容