|
| 1 | +# Chat2API 项目代码文档 |
| 2 | + |
| 3 | +## 1. 项目概述 |
| 4 | + |
| 5 | +Chat2API 是一个多平台 AI 服务统一管理工具,通过利用官方 Web UI 实现零成本访问领先的 AI 模型。它支持 DeepSeek、GLM、Kimi、MiniMax、Qwen、Z.ai 等提供商,并与 openlcaw、Cline、Roo-Code 等工具无缝集成,使任何 OpenAI 兼容客户端都能开箱即用。 |
| 6 | + |
| 7 | +### 核心功能 |
| 8 | +- OpenAI 兼容 API:提供标准的 OpenAI 兼容 API 端点,实现无缝集成 |
| 9 | +- 多提供商支持:连接 DeepSeek、GLM、Kimi、MiniMax、Perplexity、Qwen、Z.ai 等 |
| 10 | +- 上下文管理:智能对话上下文管理,支持滑动窗口、令牌限制和摘要策略 |
| 11 | +- 函数调用支持:通过提示工程实现所有模型的通用工具调用能力,兼容 Cherry Studio、Kilo Code 等客户端 |
| 12 | +- 模型映射:灵活的模型名称映射,支持通配符和首选提供商/账户选择 |
| 13 | +- 自定义参数:支持自定义 HTTP 头,启用网络搜索、思考模式和深度研究功能 |
| 14 | +- 仪表板监控:实时请求流量、令牌使用和成功率 |
| 15 | +- API 密钥管理:为本地代理生成和管理密钥 |
| 16 | +- 模型管理:查看和管理所有提供商的可用模型 |
| 17 | +- 请求日志:详细的请求日志,用于调试和分析 |
| 18 | +- 代理配置:灵活的代理设置和路由策略 |
| 19 | +- 系统托盘集成:从菜单栏快速访问状态 |
| 20 | +- 多语言支持:英语和简体中文支持 |
| 21 | +- 现代 UI:清洁、响应式界面,支持明暗主题 |
| 22 | + |
| 23 | +## 2. 项目架构 |
| 24 | + |
| 25 | +Chat2API 采用 Electron 架构,分为主进程和渲染进程两部分。主进程负责核心功能实现,包括代理服务器、账户管理、模型管理等;渲染进程负责用户界面展示。 |
| 26 | + |
| 27 | +### 架构图 |
| 28 | + |
| 29 | +``` |
| 30 | +Chat2API/ |
| 31 | +├── src/ |
| 32 | +│ ├── main/ # Electron 主进程 |
| 33 | +│ │ ├── index.ts # 应用入口点 |
| 34 | +│ │ ├── tray.ts # 系统托盘集成 |
| 35 | +│ │ ├── proxy/ # 代理服务器管理 |
| 36 | +│ │ ├── ipc/ # IPC 处理器 |
| 37 | +│ │ ├── store/ # 数据存储 |
| 38 | +│ │ ├── oauth/ # OAuth 认证 |
| 39 | +│ │ ├── providers/ # 提供商管理 |
| 40 | +│ │ └── utils/ # 工具函数 |
| 41 | +│ ├── preload/ # 上下文桥接 |
| 42 | +│ └── renderer/ # React 前端 |
| 43 | +│ ├── components/ # UI 组件 |
| 44 | +│ ├── pages/ # 页面组件 |
| 45 | +│ ├── stores/ # Zustand 状态管理 |
| 46 | +│ └── hooks/ # 自定义钩子 |
| 47 | +├── build/ # 构建资源 |
| 48 | +└── scripts/ # 构建脚本 |
| 49 | +``` |
| 50 | + |
| 51 | +## 3. 主要模块职责 |
| 52 | + |
| 53 | +### 3.1 主进程 (Main Process) |
| 54 | + |
| 55 | +#### 3.1.1 应用核心 (src/main/index.ts) |
| 56 | +- 应用启动和初始化 |
| 57 | +- 窗口管理 |
| 58 | +- 系统托盘集成 |
| 59 | +- 异常处理 |
| 60 | + |
| 61 | +#### 3.1.2 代理服务 (src/main/proxy/) |
| 62 | +- 提供 OpenAI 兼容的 API 端点 |
| 63 | +- 管理请求路由和转发 |
| 64 | +- 实现负载均衡策略 |
| 65 | +- 模型映射和转换 |
| 66 | +- 会话管理 |
| 67 | + |
| 68 | +#### 3.1.3 数据存储 (src/main/store/) |
| 69 | +- 管理应用配置 |
| 70 | +- 存储提供商和账户信息 |
| 71 | +- 日志管理 |
| 72 | + |
| 73 | +#### 3.1.4 OAuth 认证 (src/main/oauth/) |
| 74 | +- 处理不同提供商的认证流程 |
| 75 | +- 令牌提取和管理 |
| 76 | + |
| 77 | +#### 3.1.5 提供商管理 (src/main/providers/) |
| 78 | +- 内置提供商支持 |
| 79 | +- 自定义提供商配置 |
| 80 | +- 提供商状态检查 |
| 81 | + |
| 82 | +### 3.2 渲染进程 (Renderer Process) |
| 83 | + |
| 84 | +#### 3.2.1 界面组件 (src/renderer/src/components/) |
| 85 | +- 仪表板组件 |
| 86 | +- 提供商管理组件 |
| 87 | +- 代理设置组件 |
| 88 | +- 模型管理组件 |
| 89 | +- 日志查看组件 |
| 90 | + |
| 91 | +#### 3.2.2 页面 (src/renderer/src/pages/) |
| 92 | +- 仪表板页面 |
| 93 | +- 提供商页面 |
| 94 | +- 代理设置页面 |
| 95 | +- 模型页面 |
| 96 | +- API 密钥页面 |
| 97 | +- 日志页面 |
| 98 | +- 设置页面 |
| 99 | + |
| 100 | +#### 3.2.3 状态管理 (src/renderer/src/stores/) |
| 101 | +- 仪表板状态 |
| 102 | +- 提供商状态 |
| 103 | +- 代理状态 |
| 104 | +- 日志状态 |
| 105 | +- 设置状态 |
| 106 | + |
| 107 | +## 4. 关键类与函数 |
| 108 | + |
| 109 | +### 4.1 主进程核心类 |
| 110 | + |
| 111 | +#### 4.1.1 ProxyServer (src/main/proxy/server.ts) |
| 112 | +- **职责**:实现基于 Koa 的代理服务器 |
| 113 | +- **主要方法**: |
| 114 | + - `start(port, host)`:启动代理服务器 |
| 115 | + - `stop()`:停止代理服务器 |
| 116 | + - `restart(port, host)`:重启代理服务器 |
| 117 | + - `isRunning()`:检查服务器是否运行 |
| 118 | + - `getStatistics()`:获取服务器统计信息 |
| 119 | + |
| 120 | +#### 4.1.2 LoadBalancer (src/main/proxy/loadbalancer.ts) |
| 121 | +- **职责**:实现负载均衡策略 |
| 122 | +- **主要方法**: |
| 123 | + - `selectAccount(model, strategy, preferredProviderId, preferredAccountId)`:选择合适的账户 |
| 124 | + - `markAccountFailed(accountId)`:标记账户失败 |
| 125 | + - `clearAccountFailure(accountId)`:清除账户失败状态 |
| 126 | + - `getAvailableAccounts(model, preferredProviderId, excludeFailed)`:获取可用账户列表 |
| 127 | + |
| 128 | +#### 4.1.3 ModelMapper (src/main/proxy/modelMapper.ts) |
| 129 | +- **职责**:支持请求模型到实际模型的映射 |
| 130 | +- **主要方法**: |
| 131 | + - `mapModel(requestedModel, provider)`:映射模型名称 |
| 132 | + - `getActualModel(requestedModel, providerId)`:获取实际模型名称 |
| 133 | + - `getPreferredProvider(requestedModel)`:获取首选提供商 |
| 134 | + - `addMapping(requestModel, actualModel, preferredProviderId, preferredAccountId)`:添加模型映射 |
| 135 | + |
| 136 | +#### 4.1.4 StoreManager (src/main/store/store.ts) |
| 137 | +- **职责**:管理应用数据存储 |
| 138 | +- **主要方法**: |
| 139 | + - `getConfig()`:获取应用配置 |
| 140 | + - `updateConfig(config)`:更新应用配置 |
| 141 | + - `getProviders()`:获取提供商列表 |
| 142 | + - `getAccountsByProviderId(providerId, activeOnly)`:获取指定提供商的账户 |
| 143 | + - `addLog(level, message, data)`:添加日志 |
| 144 | + |
| 145 | +### 4.2 渲染进程核心组件 |
| 146 | + |
| 147 | +#### 4.2.1 Dashboard (src/renderer/src/pages/Dashboard.tsx) |
| 148 | +- **职责**:展示应用仪表板,包括请求统计、提供商状态等 |
| 149 | + |
| 150 | +#### 4.2.2 Providers (src/renderer/src/pages/Providers.tsx) |
| 151 | +- **职责**:管理 AI 服务提供商和账户 |
| 152 | + |
| 153 | +#### 4.2.3 ProxySettings (src/renderer/src/pages/ProxySettings.tsx) |
| 154 | +- **职责**:配置代理服务器设置,包括端口、负载均衡策略等 |
| 155 | + |
| 156 | +#### 4.2.4 Models (src/renderer/src/pages/Models.tsx) |
| 157 | +- **职责**:管理和查看可用的 AI 模型 |
| 158 | + |
| 159 | +#### 4.2.5 ApiKeys (src/renderer/src/pages/ApiKeys.tsx) |
| 160 | +- **职责**:管理 API 密钥 |
| 161 | + |
| 162 | +## 5. 依赖关系 |
| 163 | + |
| 164 | +### 5.1 核心依赖 |
| 165 | + |
| 166 | +| 依赖 | 版本 | 用途 | |
| 167 | +|------|------|------| |
| 168 | +| Electron | 33+ | 跨平台桌面应用框架 | |
| 169 | +| React | 18+ | UI 框架 | |
| 170 | +| TypeScript | 5+ | 类型安全的 JavaScript | |
| 171 | +| Koa | 2.15+ | HTTP 服务器 | |
| 172 | +| Zustand | 5+ | 状态管理 | |
| 173 | +| Tailwind CSS | 3.4+ | CSS 框架 | |
| 174 | +| Axios | 1.7+ | HTTP 客户端 | |
| 175 | +| electron-store | 10+ | 数据存储 | |
| 176 | +| eventsource-parser | 3+ | 处理 Server-Sent Events | |
| 177 | +| i18next | 25+ | 国际化 | |
| 178 | + |
| 179 | +### 5.2 开发依赖 |
| 180 | + |
| 181 | +| 依赖 | 版本 | 用途 | |
| 182 | +|------|------|------| |
| 183 | +| electron-vite | 2.3+ | 构建工具 | |
| 184 | +| vite | 5.4+ | 前端构建工具 | |
| 185 | +| typescript | 5.6+ | 类型检查 | |
| 186 | +| tailwindcss | 3.4+ | CSS 框架 | |
| 187 | +| electron-builder | 25.1+ | 应用打包 | |
| 188 | + |
| 189 | +## 6. 项目运行方式 |
| 190 | + |
| 191 | +### 6.1 开发环境 |
| 192 | + |
| 193 | +#### 6.1.1 安装依赖 |
| 194 | +```bash |
| 195 | +npm install |
| 196 | +``` |
| 197 | + |
| 198 | +#### 6.1.2 启动开发服务器 |
| 199 | +```bash |
| 200 | +# Linux/macOS |
| 201 | +npm run dev |
| 202 | + |
| 203 | +# Windows |
| 204 | +npm run dev:win |
| 205 | +``` |
| 206 | + |
| 207 | +### 6.2 生产构建 |
| 208 | + |
| 209 | +#### 6.2.1 构建应用 |
| 210 | +```bash |
| 211 | +npm run build # 构建应用 |
| 212 | +npm run build:mac # 构建 macOS 版本 |
| 213 | +npm run build:win # 构建 Windows 版本 |
| 214 | +npm run build:linux # 构建 Linux 版本 |
| 215 | +npm run build:all # 构建所有平台版本 |
| 216 | +``` |
| 217 | + |
| 218 | +### 6.3 运行应用 |
| 219 | + |
| 220 | +#### 6.3.1 启动应用 |
| 221 | +```bash |
| 222 | +# 预览构建版本 |
| 223 | +npm start |
| 224 | + |
| 225 | +# 无沙箱模式启动 |
| 226 | +npm run start:sandbox |
| 227 | +``` |
| 228 | + |
| 229 | +## 7. 配置与部署 |
| 230 | + |
| 231 | +### 7.1 配置文件 |
| 232 | + |
| 233 | +应用数据存储在 `~/.chat2api/` 目录: |
| 234 | +- `config.json` - 应用配置 |
| 235 | +- `providers.json` - 提供商设置 |
| 236 | +- `accounts.json` - 账户凭证(加密) |
| 237 | +- `logs/` - 请求日志 |
| 238 | + |
| 239 | +### 7.2 代理配置 |
| 240 | + |
| 241 | +- **端口**:默认 8080,可在设置中修改 |
| 242 | +- **路由策略**:轮询(Round Robin)、填充优先(Fill First)、故障转移(Failover) |
| 243 | +- **API 密钥**:可在设置中启用 API 密钥认证 |
| 244 | + |
| 245 | +### 7.3 提供商配置 |
| 246 | + |
| 247 | +支持的提供商: |
| 248 | +- DeepSeek |
| 249 | +- GLM |
| 250 | +- Kimi |
| 251 | +- MiniMax |
| 252 | +- Perplexity |
| 253 | +- Qwen (CN) |
| 254 | +- Qwen AI (Global) |
| 255 | +- Z.ai |
| 256 | + |
| 257 | +每个提供商需要配置相应的认证信息,如令牌或凭证。 |
| 258 | + |
| 259 | +## 8. 开发指南 |
| 260 | + |
| 261 | +### 8.1 代码结构 |
| 262 | + |
| 263 | +- **主进程**:`src/main/` 目录,包含核心功能实现 |
| 264 | +- **渲染进程**:`src/renderer/src/` 目录,包含 UI 组件和页面 |
| 265 | +- **共享代码**:`src/shared/` 目录,包含主进程和渲染进程共享的代码 |
| 266 | + |
| 267 | +### 8.2 扩展提供商 |
| 268 | + |
| 269 | +要添加新的提供商支持,需要: |
| 270 | +1. 在 `src/main/providers/builtin/` 目录添加提供商实现 |
| 271 | +2. 在 `src/main/oauth/adapters/` 目录添加 OAuth 适配器 |
| 272 | +3. 在 `src/main/proxy/adapters/` 目录添加代理适配器 |
| 273 | +4. 在渲染进程中添加提供商图标和配置界面 |
| 274 | + |
| 275 | +### 8.3 调试技巧 |
| 276 | + |
| 277 | +- 使用 `npm run dev` 启动开发模式,支持热重载 |
| 278 | +- 主进程日志可在终端查看 |
| 279 | +- 渲染进程可使用 Chrome 开发者工具调试(在开发模式下自动打开) |
| 280 | + |
| 281 | +## 9. 常见问题 |
| 282 | + |
| 283 | +### 9.1 macOS:"App is damaged and can't be opened" |
| 284 | + |
| 285 | +由于 macOS 安全机制,从 App Store 外下载的应用可能会触发此警告。运行以下命令修复: |
| 286 | + |
| 287 | +```bash |
| 288 | +sudo xattr -rd com.apple.quarantine "/Applications/Chat2API.app" |
| 289 | +``` |
| 290 | + |
| 291 | +### 9.2 端口被占用 |
| 292 | + |
| 293 | +如果默认端口 8080 被占用,可在设置中修改代理端口。 |
| 294 | + |
| 295 | +### 9.3 提供商认证失败 |
| 296 | + |
| 297 | +- 检查令牌是否有效 |
| 298 | +- 确保网络连接正常 |
| 299 | +- 查看应用日志获取详细错误信息 |
| 300 | + |
| 301 | +## 10. 技术栈 |
| 302 | + |
| 303 | +| 组件 | 技术 | |
| 304 | +|------|------| |
| 305 | +| 框架 | Electron 33+ | |
| 306 | +| 前端 | React 18 + TypeScript | |
| 307 | +| 样式 | Tailwind CSS | |
| 308 | +| 状态管理 | Zustand | |
| 309 | +| 构建工具 | Vite + electron-vite | |
| 310 | +| 打包工具 | electron-builder | |
| 311 | +| 服务器 | Koa | |
| 312 | + |
| 313 | +## 11. 许可证 |
| 314 | + |
| 315 | +GNU General Public License v3.0。详见 [LICENSE](LICENSE) 文件。 |
| 316 | + |
| 317 | +## 12. 贡献指南 |
| 318 | + |
| 319 | +1. Fork 项目 |
| 320 | +2. 创建功能分支 (`git checkout -b feature/amazing-feature`) |
| 321 | +3. 提交更改 (`git commit -m 'Add amazing feature'`) |
| 322 | +4. 推送到分支 (`git push origin feature/amazing-feature`) |
| 323 | +5. 打开 Pull Request |
| 324 | + |
| 325 | +## 13. 更新日志 |
| 326 | + |
| 327 | +### v1.1.4 |
| 328 | +- 新增 Perplexity 提供商支持 |
| 329 | +- 改进上下文管理功能 |
| 330 | +- 优化模型映射逻辑 |
| 331 | +- 修复已知 bug |
| 332 | + |
| 333 | +### v1.1.3 |
| 334 | +- 新增函数调用支持 |
| 335 | +- 改进代理服务器性能 |
| 336 | +- 优化 UI 界面 |
| 337 | + |
| 338 | +### v1.1.2 |
| 339 | +- 新增 Qwen AI (Global) 支持 |
| 340 | +- 改进 OAuth 认证流程 |
| 341 | +- 修复稳定性问题 |
| 342 | + |
| 343 | +### v1.1.1 |
| 344 | +- 新增系统托盘集成 |
| 345 | +- 改进日志系统 |
| 346 | +- 修复 minor bug |
| 347 | + |
| 348 | +### v1.1.0 |
| 349 | +- 初始版本发布 |
| 350 | +- 支持多个 AI 提供商 |
| 351 | +- 提供 OpenAI 兼容 API |
| 352 | +- 实现基本的代理功能 |
0 commit comments