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

开发文档

Loading...

开发前须知

网页端 PR 教程

文档编写指南

开发计划

客户端构成

概述

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

数据与存储

概述

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

渲染进程

Loading...

Assets

静态资产

Components

自定义组件

Config

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

Context

状态管理和环境配置

Databases

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

Handler

Redux 状态管理

Hooks

Loading...

Loading...

Pages

渲染页面

Loading...

Queue

知识库队列管理

Services

业务层核心代码

Store

模块化状态管理

Types

TS接口

Utils

工具类

WebSearchProvider

联网搜索相关类

Windows

快捷助手相关代码

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 | 拉取请求)


文档结构

该part用于对于当前代码的分析,包括每个代码的函数使用、结构分析、数据流向等

客户端构成

数据与存储

渲染进程


在 GitHub 中,拉取请求(Pull Request,简称 PR)是一种协作机制,允许您通知他人您对仓库所做的更改,并请求将这些更改合并到主项目中。这对于协作开发、代码审查以及确保项目质量至关重要。有关拉取请求的更多详细介绍,请阅读

当然,如果你只是想快速进行一次拉取请求的操作,且曾经还没有过给项目提交修改的经验,那么在提交代码前相信一定能帮到你,请务必仔细阅读(不仔细也没事就是小心被人骂罢了)。

拉取请求文档-GitHub开发文档
这份更简单的文档

Providers

适配AI服务提供商接口

I18n

项目国际化(internationalization)

概述

基本对应代码仓库下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

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 {}
}

参考