145 lines
4.4 KiB
Markdown
145 lines
4.4 KiB
Markdown
# 讨论记录:增加国内大模型厂商接入
|
||
|
||
## 对话概述
|
||
|
||
**日期**:2026-03-31
|
||
**目标**:为 MimiClaw 项目增加国内大模型厂商的接入,特别是硅基流动和火山方舟(豆包模型)
|
||
|
||
## 对话内容
|
||
|
||
### 用户需求
|
||
用户希望给当前项目增加国内大模型厂商的接入,包括:
|
||
1. 硅基流动的免费模型
|
||
2. 火山方舟的豆包模型
|
||
|
||
### 项目现状分析
|
||
|
||
#### 项目基本信息
|
||
- **项目名称**:MimiClaw
|
||
- **运行平台**:ESP32-S3(纯C语言)
|
||
- **交互方式**:Telegram机器人
|
||
- **功能**:AI助手,支持工具调用,本地记忆
|
||
|
||
#### 当前LLM集成状态
|
||
1. **支持的提供商**:
|
||
- Anthropic (Claude)
|
||
- OpenAI (GPT)
|
||
|
||
2. **配置方式**:
|
||
- 构建时配置:`main/mimi_secrets.h`
|
||
- 运行时配置:串口CLI命令,存储在NVS中
|
||
|
||
3. **关键代码文件**:
|
||
- `main/llm/llm_proxy.c`:LLM代理核心实现
|
||
- `main/llm/llm_proxy.h`:LLM代理头文件
|
||
- `main/mimi_config.h`:全局配置定义
|
||
- `main/cli/serial_cli.c`:命令行界面
|
||
|
||
4. **提供商检测机制**:
|
||
- `provider_is_openai()`函数检查是否为OpenAI提供商
|
||
- 根据提供商选择不同的API URL、Host和Path
|
||
|
||
### 国内大模型厂商API兼容性调研
|
||
|
||
#### 硅基流动 (SiliconFlow)
|
||
- **API兼容性**:OpenAI兼容模式
|
||
- **Base URL**:`https://api.siliconflow.cn/v1`
|
||
- **特点**:
|
||
- 提供100+高性能大模型
|
||
- 新用户注册送免费额度
|
||
- 价格比OpenAI官方便宜80%+
|
||
- 支持OpenClaw等工具集成
|
||
|
||
#### 火山方舟 (字节跳动豆包模型)
|
||
- **API兼容性**:兼容OpenAI SDK
|
||
- **Base URL**:`https://ark.cn-beijing.volces.com/api/v3`
|
||
- **特点**:
|
||
- 豆包大模型系列
|
||
- 新用户首次开通可享受50万token免费试用
|
||
- 支持函数调用、工具调用等高级功能
|
||
|
||
### 技术实现分析
|
||
|
||
#### 当前架构特点
|
||
1. **提供商抽象**:
|
||
- 使用`s_provider`变量存储提供商名称
|
||
- 通过`provider_is_openai()`函数区分提供商
|
||
- 根据提供商选择不同的API配置
|
||
|
||
2. **API调用流程**:
|
||
- 构建请求体
|
||
- 设置请求头(根据提供商不同)
|
||
- 发送HTTP请求
|
||
- 解析响应(根据提供商不同)
|
||
|
||
3. **工具调用支持**:
|
||
- 支持Anthropic的tool_use格式
|
||
- 支持OpenAI的function calling格式
|
||
- 有格式转换函数`convert_tools_openai()`
|
||
|
||
#### 实现方案讨论
|
||
由于硅基流动和火山方舟都提供OpenAI兼容的API,理论上可以复用现有的OpenAI集成代码,只需要:
|
||
1. 修改Base URL
|
||
2. 可能需要调整认证方式
|
||
3. 可能需要处理特定的模型名称
|
||
|
||
## 待解决问题
|
||
|
||
1. **认证方式差异**:
|
||
- 硅基流动:使用API Key
|
||
- 火山方舟:可能使用不同的认证方式
|
||
|
||
2. **模型名称规范**:
|
||
- 需要了解具体的模型ID格式
|
||
- 例如:硅基流动的`deepseek-ai/DeepSeek-V3`,火山方舟的豆包模型名称
|
||
|
||
3. **功能支持差异**:
|
||
- 工具调用格式是否完全兼容
|
||
- 上下文长度限制
|
||
- 特殊功能支持情况
|
||
|
||
## 下一步计划
|
||
|
||
基于讨论,制定了以下实施计划:
|
||
|
||
### 阶段一:准备与设计
|
||
1. 详细调研硅基流动和火山方舟的API文档
|
||
2. 确定具体的实现方案
|
||
3. 设计配置结构和命令行接口
|
||
|
||
### 阶段二:核心实现
|
||
1. 修改LLM代理以支持新的提供商
|
||
2. 添加配置管理功能
|
||
3. 更新命令行界面
|
||
|
||
### 阶段三:测试与优化
|
||
1. 功能测试
|
||
2. 性能优化
|
||
3. 文档更新
|
||
|
||
## 相关资源
|
||
|
||
### 项目文件
|
||
- `main/llm/llm_proxy.c`:LLM代理实现
|
||
- `main/llm/llm_proxy.h`:LLM代理头文件
|
||
- `main/mimi_config.h`:配置定义
|
||
- `main/cli/serial_cli.c`:命令行界面
|
||
|
||
### 外部文档
|
||
- 硅基流动OpenClaw集成文档
|
||
- 火山方舟兼容OpenAI SDK文档
|
||
- ESP32-S3开发文档
|
||
|
||
## 技术要点总结
|
||
|
||
1. **复用现有架构**:可以充分利用现有的OpenAI集成代码
|
||
2. **提供商扩展**:需要扩展提供商检测和配置机制
|
||
3. **配置管理**:需要支持新的API密钥和Base URL配置
|
||
4. **兼容性处理**:可能需要处理API响应格式的细微差异
|
||
|
||
## 风险与挑战
|
||
|
||
1. **API兼容性风险**:虽然声称兼容,但可能存在细微差异
|
||
2. **内存限制**:ESP32-S3内存有限,需要确保新功能不会导致内存不足
|
||
3. **网络稳定性**:国内网络环境可能影响API调用稳定性
|
||
4. **认证安全性**:需要确保API密钥的安全存储和传输 |