问答

进一步引入更多的AI模型供应商

Authored by

留学专家菊叔

Authored on

进一步引入更多的模型供应商


工作日志:项目 Alpha

核心任务:扩展现有 AI 集成框架,支持多个模型供应商,降低对单一供应商的依赖,并为不同应用场景提供最佳模型选择。

上午:需求分析与技术选型

当前状态:系统深度集成 OpenAI API,用于内容生成与摘要。但成本与可用性成为潜在瓶颈。

新供应商调研:

Anthropic (Claude): 优势在于长文本处理和更细致的对话控制,适合用于文档分析和复杂的客户支持机器人。

Google (Gemini): 强大的多模态能力是其亮点,可为未来的图像内容分析功能提供支持。

本地化模型 (via Ollama): 对于处理敏感数据或需要确保最高数据隐私的场景,部署本地模型是理想方案。成本可控,无外部 API 依赖。

架构方案:插件化改造

决定采用 Drupal 的插件系统(Plugin System)来重构 AI 服务层。创建一个新的插件类型 AIConnector

每个供应商将作为一个独立的插件实现。这种方式具备极高的可扩展性。未来添加新的供应商,仅需开发一个新的插件,而无需修改核心业务逻辑。站点构建者(Site Builder)可以通过 UI 轻松启用、禁用和配置不同的供应商。

每个插件将负责处理:

1. API 密钥和端点(Endpoint)的配置管理。

2. 请求数据的格式化(适配不同供应商的 API 规范)。

3. 响应数据的标准化解析。


下午:原型开发与实施

配置界面

利用 Drupal Form API,为 AI 核心模块的配置页面增加一个新的垂直标签页(Vertical Tab),用于管理模型供应商。通过该界面,站点管理员可以:

1. 查看所有可用的供应商插件。

2. 为已启用的供应商输入 API 密钥或其他凭证。

3. 设置默认使用的模型供应商。

配置使用 Drupal 的配置系统(Configuration System)进行存储,便于在不同环境间同步。

开发第一个插件:AnthropicClaudeConnector

作为概念验证,开始编写 Anthropic Claude 的连接器插件。

服务定义:在模块的 `services.yml` 文件中定义了一个新的服务,该服务使用 Guzzle HTTP 客户端与 Anthropic API 进行通信。

插件实现:创建了 `AnthropicClaudeConnector` 类,实现了 `AIConnector` 接口。主要工作是转换内部通用的请求对象为 Anthropic API 所需的 JSON 结构,并处理其独特的 `system` prompt 参数。

遇到的问题

主要挑战在于统一不同供应商的错误码和消息。例如,身份验证失败的 HTTP 状态码和响应体各不相同。初步解决方案是在插件基类(Base Plugin)中定义一组标准的异常类型,如 `AuthenticationException`, `RateLimitException` 等。每个具体插件负责捕获其特定的 API 错误,并抛出标准化的异常。


本日总结与后续步骤

成功完成了向多供应商架构迁移的设计工作,并初步实现了第一个新供应商插件的原型。插件化思路被证明是正确且高效的。

下一步计划:

完善插件:为 Claude 插件增加完整的错误处理和日志记录。

功能切换:在内容生成的用户界面上,增加一个选项,允许编辑根据任务类型选择不同的模型供应商。

编写测试:为新的插件系统和 Claude 插件编写内核测试(Kernel Tests),确保其稳定运行。

文档更新:更新项目文档,指导其他开发者如何为系统贡献新的模型供应商插件。

Tags