Cherry Studio 开发文档
支持多服务商集成的AI对话客户端
概述
对 Cherry Studio的代码和开发环境进行简单描述
Cherry Studio是一个基于electron开发的AI对话客户端,在拥有基本的AI对话功能的前提下,Cherry Studio融合了多种可以增强AI对话的交互功能,包括但不限于本地知识库,MCP,联网搜索,多种软件/格式导出 等等。截止到3月28日,Cherry Studio的总代码行数已经超过了5w行。所以,对于想要对其进行二次开发或者进行软件维护的开发者来说,开发文档的搭建迫在眉睫。
基于该开发文档,GitHub Issues & Pull Request,以及与其他开发者的沟通,每一位开发者都能够以更快的速度上手,为Cherry Studio贡献自己的一份力量。
开发前须知
对于新手来说,怎么开始第一次PR?怎么帮助开发者社区进行文档修改?这些工作和“写代码”没有直接关系,但是却是作为开源程序员不得不学习的流程。
关于PR (Pull Requests | 拉取请求)
在 GitHub 中,拉取请求(Pull Request,简称 PR)是一种协作机制,允许您通知他人您对仓库所做的更改,并请求将这些更改合并到主项目中。这对于协作开发、代码审查以及确保项目质量至关重要。有关拉取请求的更多详细介绍,请阅读拉取请求文档-GitHub开发文档
当然,如果你只是想快速进行一次拉取请求的操作,且曾经还没有过给项目提交修改的经验,那么在提交代码前这份更简单的文档相信一定能帮到你,请务必仔细阅读(不仔细也没事就是小心被人骂罢了)。
文档结构
该part用于对于当前代码的分析,包括每个代码的函数使用、结构分析、数据流向等
客户端构成
数据与存储
渲染进程
概述
基本对应代码仓库下src/main/的相关代码,并对其进行补充描述
概述
该部分主要解释客户端中数据的存储逻辑以及重要数据的流向
概述
基本对应代码仓库下src/renderer/的相关代码,并对其进行补充描述
目录结构
.
├── assets
│ ├── fonts
│ │ ├── icon-fonts
│ │ └── ubuntu
│ ├── images
│ │ ├── apps
│ │ ├── paintings
│ │ ├── providers
│ │ └── search
│ └── styles
├── components
│ ├── Files
│ ├── Avatar
│ ├── DragableList
│ ├── Ellipsis
│ ├── EmojiPicker
│ ├── Icons
│ ├── Layout
│ ├── ListItem
│ ├── MinApp
│ ├── OAuth
│ ├── Popups
│ ├── Scrollbar
│ ├── TopView
│ └── app
├── config
├── context
├── databases
├── handler
├── hooks
├── i18n
│ ├── Files
│ ├── locales
│ └── translate
├── pages
│ ├── agents
│ │ ├── Files
│ │ └── components
│ ├── apps
│ ├── files
│ ├── history
│ │ ├── Files
│ │ └── components
│ ├── home
│ │ ├── Files
│ │ ├── Inputbar
│ │ ├── Markdown
│ │ ├── Messages
│ │ ├── Tabs
│ │ └── components
│ ├── knowledge
│ │ ├── Files
│ │ └── components
│ ├── paintings
│ ├── settings
│ │ ├── Files
│ │ ├── AssistantSettings
│ │ ├── DataSettings
│ │ ├── DisplaySettings
│ │ ├── MCPSettings
│ │ ├── ModelSettings
│ │ ├── ProviderSettings
│ │ └── WebSearchSettings
│ └── translate
├── providers
├── queue
├── services
├── store
├── types
├── utils
├── webSearchProvider
└── windows
├── menu
└── mini
├── Files
├── chat
│ ├── Files
│ └── components
├── home
│ ├── Files
│ └── components
└── translate
useAssistant.ts
📝代码语言:TypeScript |📘阅读时间:10分钟
概述
此模块包含多个自定义 Hook,用于在 Cherry Studio 应用中管理助手、主题以及相关设置。通过这些 Hook,可以方便地读取和更新 Redux 状态,从而实现助手的创建、修改和删除,同时还支持主题的管理和模型的设置。
代码组成
function
useAssistants
useAssistants 钩子提供对所有助手列表的访问,同时支持更新、添加和删除助手操作。删除助手时,还会清理与该助手关联的所有主题。
// Declaration
function useAssistants(): {
assistants: Assistant[],
updateAssistants: (assistants: Assistant[]) => void,
addAssistant: (assistant: Assistant) => void,
removeAssistant: (id: string) => void
}
补充描述
本函数使用 useAppSelector 从 Redux 中获取当前助手数组。
本函数通过 useAppDispatch 触发对应的 Redux 动作(action),实现对助手的更新。
当删除助手时,会遍历该助手的所有主题,并调用 TopicManager.removeTopic 对其进行清理。
外部用例
// Example Usage
import { useAssistants } from './useAssistant'
export const useExample = () => {
const { assistants, updateAssistants, addAssistant, removeAssistant } = useAssistants()
// 添加新助手
addAssistant(newAssistant)
// 更新助手数组
updateAssistants(updatedAssistants)
// 删除指定助手,同时清理其主题
removeAssistant(assistantId)
return {}
}
参考
I18n
项目国际化(internationalization)