尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Cherry Studio架构解析:统一61个LLM提供商的3个设计决策,从0到跑通
Cherry Studio架构解析统一61个LLM提供商的3个设计决策从0到跑通【免费下载链接】cherry-studioAI productivity studio with smart chat, autonomous agents, and 300 assistants. Unified access to frontier LLMs项目地址: https://gitcode.com/GitHub_Trending/ch/cherry-studio同时用OpenAI和DeepSeek对话、挂一份本地PDF让模型读、再接一个联网搜索工具——常见的做法是开三个网页来回复制密钥。Cherry Studio把这些事塞进同一个桌面窗口这个Electron多模型AI客户端目前用一套配置管理61个LLM提供商、916个模型并完整接管流式响应的生命周期。本文拆它的3个设计决策和流管理机制最后给本地跑通路径。读完你能向同事讲清楚为什么流状态放在主进程很重要以及Electron里IPC为什么值得拆成两条通道。两个进程、四类数据架构全景一图看懂把这个应用想象成两层楼的餐厅。一楼大厅是渲染进程Chromium React 19只负责呈现和接输入二楼厨房是主进程Node.js所有实活都在这模型调用、SQLite、文件解析、IM通道。楼层之间只开两个固定窗口即preload桥接的两类IPCDataApi窗口处理资源给我话题列表、消息分页IpcApi窗口处理指令开一条流、批准一个工具调用。数据也分成四桶各管各的BootConfigJSON文件启动前同步读放Chromium参数、Cache内存临时态和跨窗口协调、PreferenceSQLite用户设置、DataApiSQLite Drizzle话题、消息等业务数据。Monorepo布局与之对应src/main、src/renderer、src/preload、src/shared跨进程类型与契约外加 packages/aiCore/、packages/provider-registry/ 等独立包。决策一IPC拆成REST数据面和RPC指令面做法renderer到main的通信被刻意分成两条互不共享代码的通道。DataApi走资源范式path加method寻址禁止副作用IpcApi走RPC范式namespace.action寻址所有请求收敛到单一传输通道入参必须过zod校验发送窗口必须通过来源信任检查。为什么这么选DataApi被当成未来可能部署成远端服务器的东西所以刻意禁副作用保留可替换性而开窗、开流这类系统指令天然是本地的、有副作用的归RPC通道。放弃的备选各服务随手注册ipcMain.handle的便利。现在任何能力必须在 src/shared/ipc/schemas/ 声明route才存在——代价是每个新IPC都要动schema收益是编译期全类型、一份可审计的能力清单schema漂移直接构建失败。决策二流与持久化由主进程持有做法所有活动流注册在AiStreamManager里以topicId为键的Map持久化监听器在流终止时落库不管当时还有没有窗口在听。为什么渲染进程是UI容器随时可能关窗或崩溃。流状态放渲染进程关窗即丢数据、即断流放主进程关窗只是退订重开窗口用ai.stream.attach重连。配套不变量很克制一个topic至多一条活动流订阅者之间平等没有属主窗口概念。放弃的备选渲染进程直接持有流引用、自己fetch的简单写法。UI改为从chunk广播加共享缓存重建视图复杂一些换来关窗不丢数据。决策三提供商做成数据目录按端点选SDK包做法61个提供商和916个模型存在 packages/provider-registry/ 的JSON目录里data/providers.json、data/models.json选哪个ai-sdk/*包由端点上的adapterFamily字段决定而不是提供商ID。为什么一个中转商可能同时提供OpenAI方言和Anthropic方言的端点按提供商ID选包必然错乱把它固化成端点配置字段请求时就不需要靠apiHost字符串做启发式猜测。放弃的备选每个提供商写死一个switch分支。目录由脚本生成新增提供商的成本是加数据和一个creator而不是改核心代码。核心机制一行注册、两层钩子、一次tee分发提供商注册。在 packages/aiCore/ 里非内置提供商通过注册API接入支持动态导入只有实际用到的包才会加载import { registerProvider, AiCore } from cherrystudio/ai-core import { createGroq } from ai-sdk/groq registerProvider({ id: groq, name: Groq, creator: createGroq, supportsImageGeneration: false }) const groqExecutor AiCore.create(groq, { apiKey: groq-key })插件钩子。钩子分两类串行钩子链式执行、可以改数据transformParams进模型、transformResult改结果并行钩子不依赖顺序、只跑副作用onRequestStart/onRequestEnd。另有transformStream返回TransformStream处理流本身。内置的webSearch、logging插件就是这么写的const customPlugin definePlugin({ name: audit-logging, enforce: pre, onRequestStart: async (ctx) { // 并行钩子请求开始时触发适合打点等副作用 }, transformParams: async (params, ctx) { // 串行钩子返回值才是真正发给模型的参数 return { ...params, temperature: 0.2 } }, transformResult: async (result, ctx) result })流的生命周期。一轮对话从ai.stream.open路由进来dispatch按canHandle(topicId)选中上下文提供者持久聊天、临时聊天、agent会话三种prepareDispatch解析模型并落用户消息manager.send创建ActiveStream。之后pipeStreamLoop把chunk流一分为二一路广播给监听器网页窗口、SSE HTTP、飞书/Discord/QQ等IM通道适配器、持久化后端一路累积成消息快照。一个值得注意的细节用户在生成中途插话steer时不是杀了重开而是入队加yield加续跑——在跑的轮次让位并持久化完成后接上续跑。完整链路文档见 docs/references/ai/core-architecture.md。本地跑通三步加一个提供商两条路git clone https://gitcode.com/GitHub_Trending/ch/cherry-studio cd cherry-studio pnpm install pnpm devNode版本以.node-version为准。跑起来后建议沿三个点读代码请求入口src/main/ipc/handlers/ai.ts 的ai.stream.open路由顺着dispatch到AiStreamManager加提供商轻量路径用aiCore的registerProvider动态导入形式要进目录再往packages/provider-registry/的data加数据加IPC能力route必须在src/shared/ipc/schemas/声明handler放在src/main/ipc/handlers/漏掉声明就调不到。局限与取舍谁不该用它Electron底子摆在那Chromium加Node内存占用和冷启动都偏重。如果你的场景是浏览器里的轻量插件或纯Web端选它只会为用不上的能力付成本。上手曲线不低。双IPC通道、四套数据系统且旧IPC通道迁移尚未完成IpcChannel和裸注册还在并存读代码前得先过一遍docs/references/的参考文档找方位。本地优先没有协作面。数据落在本地SQLite没有多用户、团队同步和权限管理需要团队级知识库共享或集中管控的不在它的边界内。结语适合谁以及两条能直接搬走的做法日常要同时接多家模型、本地跑工具与知识库、还想从IM里唤起AI的人直接用现成的想借鉴架构的建议拿走两件事把数据面REST范式、纯数据、可换到远端和指令面RPC范式、本地专用、严格校验拆成两条独立通道各自的寻址、错误模型和校验策略互不妥协流式响应的状态交给不会崩的那个进程持有用topic级寻址加一topic一活动流的不变量让断线重连成为天然结果而不是补丁。【免费下载链接】cherry-studioAI productivity studio with smart chat, autonomous agents, and 300 assistants. Unified access to frontier LLMs项目地址: https://gitcode.com/GitHub_Trending/ch/cherry-studio创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

金山办公校招软件运维开发工程师笔试题型深度解析与备考指南

金山办公校招软件运维开发工程师笔试题型深度解析与备考指南

金山办公2020校招软件运维开发工程师笔试题(二)——看完这篇,校招笔试题型不再抓瞎每年秋招季,我都会收到不少学弟学妹的私信,问软件运维开发工程师的笔试题到底考什么。很多人把“运维”等同于“修电脑”,…

📅 2026/10/28 9:22:12
JEECG-Boot接口幂等性实战:Token+分布式锁避坑

JEECG-Boot接口幂等性实战:Token+分布式锁避坑

JEECG-Boot接口幂等性实战:Token分布式锁避坑 【免费下载链接】jeecg-boot 【低代码v2.0,一句话即可生成整个系统】企业级AI低代码平台,一键生成前后端代码甚至整个系统。 AI Skills 一句话画流程、设计表单、生成报表、大屏。内置 AI应用平台…

📅 2026/11/9 6:29:18
JEECG-Boot 接口幂等性怎么落地:Token 机制与分布式锁两把钥匙,一次说清

JEECG-Boot 接口幂等性怎么落地:Token 机制与分布式锁两把钥匙,一次说清

JEECG-Boot 接口幂等性怎么落地:Token 机制与分布式锁两把钥匙,一次说清 【免费下载链接】jeecg-boot 【低代码v2.0,一句话即可生成整个系统】企业级AI低代码平台,一键生成前后端代码甚至整个系统。 AI Skills 一句话画流程、设计…

📅 2026/10/28 1:14:12
MORE NEWS

更多资讯

📰

哪种电工证最有前途呢培训机构怎么选

电工证哪个最有前途值不值得考?转岗电工必看的干货指南 你现在找工作卡在特种作业证上,别人都有证,你没证,企业不招,项目进不了,工资也上不去。 哪种电工证最有前途呢?值不值得考 ?这些问题你现在就得搞清楚,否则真会耽误你的职业发展。…

📰

山东临沂电工证怎么考保姆级教程:怕考不过白交培训费?这篇全讲透

山东临沂电工证怎么考保姆级教程:怕考不过白交培训费?这篇全讲透 怕考不过白交培训费?这几乎是每个想考电工证的人心里的担忧。山东临沂作为工业重镇,电工证不仅关系到职业发展,更直接影响到工资水平。如果你正计划考电工证,这篇保姆级教程能帮你避开坑…

📰

水暖工属特种行业吗通过率揭秘 想找工作必须知道的真相

水暖工属特种行业吗通过率揭秘 想找工作必须知道的真相 你是不是也遇到过这种情况?明明干了几年水暖工,却被告知必须要有特种作业证才能继续干下去?这不是危言耸听,而是行业新规下现实的写照。水暖工是否属于特种行业,这关系到你能否继续上岗、能否拿到…

📰

高压电工证可以接380v电压吗?没有学历也能考的上岗必备证书详解

高压电工证可以接380v电压吗?没有学历也能考的上岗必备证书详解 你是不是也担心自己学历不高,根本报不上名?别急,高压电工证不仅 上岗必备 ,而且对学历的要求其实没有你想象中那么高,关键是你得知道怎么操作。…

📰

电工基础是电工证吗?上岗必备的真相和全流程解析

电工基础是电工证吗?上岗必备的真相和全流程解析 怕考不过白交培训费?你不是一个人。在驻马店,很多建筑工人都在问“电工基础是电工证吗”,其实这是一个容易混淆的概念,很多人误以为掌握电工基础就等于拿到了电工证,结果在找工作或上岗时吃了亏。本文从…

📰

电工证含金量高不高?怎么验证电工证的真伪全攻略

电工证含金量高不高?怎么验证电工证的真伪全攻略 实操考试心里没底怕挂科,特别是像你这样刚毕业的驻马店工程类学生,第一次接触电工证考试,心里难免会打鼓。电工证作为特种作业操作证,其 含金量…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬