小节三:实现 OpenAIProvider、ClaudeProvider、LocalModelProvider——真正的难点是“适配”,不是“复制三份代码”

现在进入真正落地。

先说一个原则,不同模型 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——真正的难点是“适配”,不是“复制三份代码”-大赛人网

这里展示的是本节代码中的文本链路,不代表三家 Tool Calling 已经全部适配完成。特别是当前 LocalModelProvider 示例在传入 tools 时会明确拒绝,而不是默默忽略工具请求。

为什么本节不急着把三家的 Tool Calling 全部统一?

因为下一部分才正式进入 Tool。

如果这一节现在把每一家 Tool Schema、Tool Call Block、Tool Result 格式全部展开,课程会变成 API 罗列。

我们当前只需要先把边界搭好:

Agent Engine
 ↓
Provider Interface
 ↓
不同模型

后面 Tool System 会再给 ProviderResponse 增加统一 ToolRequest。

课程应该一层一层长,而不是一次把所有复杂度堆上来。

© 版权声明
THE END
喜欢就支持一下吧
点赞5 分享
评论 抢沙发
头像-大赛人网
欢迎您留下宝贵的见解!
提交
头像-大赛人网

昵称

取消
昵称

    请登录后查看评论内容