仅本页所有页面
由 GitBook 提供支持
1 / 29

开发文档

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用于对于当前代码的分析,包括每个代码的函数使用、结构分析、数据流向等

客户端构成

数据与存储

渲染进程


开发前须知

网页端 PR 教程

文档编写指南

开发计划

客户端构成

概述

基本对应代码仓库下src/main/的相关代码,并对其进行补充描述

数据与存储

概述

该部分主要解释客户端中数据的存储逻辑以及重要数据的流向

渲染进程

概述

基本对应代码仓库下src/renderer/的相关代码,并对其进行补充描述

整个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

Assets

静态资产

Components

自定义组件

Config

设置和预定义数据结构的集中存储库

Context

状态管理和环境配置

Databases

数据库的结构定义、版本管理、格式转换与更新

Handler

Redux 状态管理

Hooks

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)

Pages

渲染页面

Providers

适配AI服务提供商接口

Queue

知识库队列管理

Services

业务层核心代码

Store

模块化状态管理

Types

TS接口

Utils

工具类

WebSearchProvider

联网搜索相关类

Windows

快捷助手相关代码