Dyad 桌面AI应用构建器-开源项目文档
Dyad桌面AI应用构建器项目摘要(142字) Dyad是一款开源本地化AI应用构建器,支持用户使用自有API密钥在Mac/Windows平台开发AI应用。项目采用Electron+React+TypeScript技术栈,包含三大核心模块:1)应用管理模块实现应用全生命周期管理;2)聊天交互模块提供流式消息处理与版本控制;3)AI模型管理模块支持OpenAI等主流模型接入。系统采用分层架构设计,通
在团队协作里,“文档滞后于代码”几乎是常态。本次分享我们通过hivulse蜂巢这个产品针对Dyad这个最新开源的项目做了文档生成给大家进行分享
Dyad是一个本地化的开源AI应用构建器,支持用户使用自己的AI API密钥,在Mac/Windows平台上构建和部署AI驱动的应用程序。项目采用 Electron + React + TypeScript 技术栈,集成了数据库管理、AI模型接入、云服务集成等功能。
系统架构
架构概览
重要性: 高
项目采用 Electron 桌面应用架构,结合 React 前端和 Node.js 后端。前端通过 IPC 与主进程通信,主进程负责文件系统操作、数据库访问和第三方服务集成。项目使用 Drizzle ORM 管理 SQLite 本地数据库,支持多种 AI 模型提供商接入。
核心业务模块
应用管理模块
重要性: 高
负责应用的创建、导入、复制、重命名、删除和切换等生命周期管理功能。通过 apps 表存储应用基本信息和集成配置(GitHub、Supabase、Neon、Vercel)。
应用管理模块说明
模块概述
应用管理模块是Electron应用的核心业务模块,全面管理应用的生命周期。该模块采用分层架构设计,整合数据访问层、业务逻辑层和用户界面层,为用户提供完整的应用开发和管理体验。主要功能包括应用创建、配置管理、对话交互、版本控制、模板中心及系统设置等。
核心功能
1. 应用生命周期管理
- 应用创建:支持通过用户提示或模板创建新应用
- 应用配置:管理基本信息及外部服务集成
- 应用操作:提供重命名、复制、删除等功能
- 版本控制:记录应用版本历史和变更
2. 对话交互系统
- 聊天管理:维护对话记录和消息历史
- 流式交互:实现实时消息传输处理
- 双面板布局:支持可调整的聊天与预览界面
3. 模板中心
- 模板管理:提供官方和社区模板资源
- 项目初始化:基于模板快速创建项目
- 后端集成:支持数据库等后端服务连接
4. 系统配置管理
- 通用设置:主题、自动更新等基础配置
- AI配置:模型参数、对话控制等高级设置
- 集成管理:第三方服务连接配置
- 数据重置:系统数据清除功能
数据架构设计
数据库表结构
| 表名 | 描述 | 主键 | 关键字段 |
|---|---|---|---|
apps |
应用基本信息 | id |
name, path, created_at, updated_at |
chats |
应用对话记录 | id |
appId, title, created_at |
messages |
消息记录 | id |
chatId, content, timestamp |
versions |
版本信息 | id |
appId, commitHash, version |
language_model_providers |
模型提供商 | id |
name, apiKey, endpoint |
language_models |
语言模型 | id |
customProviderId, modelName, config |
表关系设计
索引优化策略
| 表名 | 索引字段 | 索引类型 | 用途 |
|---|---|---|---|
apps |
name | 普通索引 | 名称查询优化 |
apps |
created_at | 普通索引 | 创建时间排序 |
chats |
appId | 外键索引 | 关联查询优化 |
chats |
created_at | 普通索引 | 时间排序 |
versions |
appId, commitHash | 唯一索引 | 防止版本重复 |
language_model_providers |
name | 唯一索引 | 提供商名称唯一性 |
模块架构
重要特性
1. 数据持久化与安全
- 单例数据库连接:确保连接稳定性
- 自动迁移机制:简化数据库更新流程
- 错误恢复:自动修复损坏的数据库
- 类型安全ORM:使用Drizzle ORM保障数据安全
2. 用户体验优化
- 响应式界面:支持可调整布局
- 流式交互:提升实时体验
- 灵感提示:辅助应用创建
- 版本管理:自动检测更新
3. 系统集成能力
- 多服务集成:支持GitHub等第三方服务
- 模板生态:官方和社区模板支持
- AI模型管理:灵活配置
- 外部服务连接:数据库等后端集成
4. 配置管理
- 模块化设置:分类配置管理
- 集成管理:统一服务连接
- 数据重置:安全清除功能
架构作用
作为核心业务模块,应用管理模块承担以下职责:
- 业务中枢:整合核心业务流程
- 数据管理:提供统一数据访问
- 用户交互:实现完整界面体验
- 系统集成:作为外部服务核心节点
通过清晰的分层架构和模块化设计,确保系统可维护性、可扩展性和稳定性,提供一站式应用管理方案。
聊天交互模块
模块概述
聊天交互模块提供完整的用户与AI交互体验,整合本地存储、UI组件、状态管理和IPC通信等子系统,构建功能丰富、响应迅速的聊天环境。
核心功能
-
聊天交互
- 消息收发与管理
- 流式响应处理
- 附件上传与处理
- Markdown渲染展示
- 统一错误处理
-
版本控制
- Git集成
- 数据库快照管理
- 版本切换与恢复
-
AI提案管理
- 变更建议展示
- 审批流程集成
- 状态跟踪
-
应用管理
- 应用创建与配置
- 基本操作功能
AI模型管理模块
重要性: 高
负责管理不同AI模型提供商的配置和接入,支持主流模型包括OpenAI、Anthropic、Google和Ollama等。相关配置信息存储在language_model_providers和language_models表中。
AI模型管理模块说明
模块概述
作为Electron应用程序的核心数据管理层,AI模型管理模块专注于本地SQLite数据库的全生命周期管理。基于Drizzle ORM和Better-SQLite3构建,该模块提供类型安全、结构清晰且易于维护的本地数据存储方案,专门用于管理AI模型相关的业务数据。
核心功能
数据库管理
- 连接管理:采用单例模式确保数据库连接的高效性和唯一性
- 自动迁移:支持数据库结构的自动更新与版本控制
- 错误恢复:具备数据库文件损坏检测和自动修复能力
- 安全访问:通过代理模式实现懒加载和访问控制
数据模型管理
管理六大核心业务实体,构建完整的AI模型生态系统:
| 实体名称 | 描述 | 主要功能 |
|---|---|---|
apps |
应用基础信息表 | 存储应用配置和外部服务连接信息 |
chats |
对话记录表 | 管理应用内的对话会话记录 |
messages |
消息记录表 | 存储具体消息内容和对话历史 |
versions |
版本控制表 | 管理应用版本信息和提交历史 |
language_model_providers |
模型提供商表 | 存储AI模型服务商信息 |
language_models |
语言模型表 | 管理具体语言模型配置和参数 |
数据关系架构
graph TD;
"apps" -->|"一对多"| "chats"
"apps" -->|"一对多"| "versions"
"chats" -->|"一对多"| "messages"
"language_model_providers" -->|"一对多"| "language_models"
"chats" -->|"一对一"| "apps"
"messages" -->|"一对一"| "chats"
"versions" -->|"一对一"| "apps"
"language_models" -->|"一对一"| "language_model_providers"
数据完整性保障
| 表名 | 外键约束 | 引用关系 | 索引策略 |
|---|---|---|---|
chats |
appId → apps.id |
确保对话归属于有效应用 | 无索引 |
messages |
chatId → chats.id |
确保消息归属于有效对话 | 无索引 |
versions |
appId → apps.id |
确保版本归属于有效应用 | (appId, commitHash) 唯一索引 |
language_models |
customProviderId → language_model_providers.id |
确保模型归属于有效提供商 | 无索引 |
技术架构
设计模式应用
- 单例模式:确保数据库连接全局唯一,避免重复开销
- 代理模式:通过Proxy实现数据库方法的懒加载和安全访问
- 模块化设计:分离表结构定义与数据库操作逻辑,提升可维护性
性能优化
- 时间戳处理:使用SQLite内置
unixepoch()函数提高效率 - 外键约束:通过数据库级约束保证数据一致性
- 唯一性约束:防止重复数据插入,维护数据质量
- 索引优化:在关键业务字段建立唯一索引,提升查询性能
模块职责
数据持久化
负责应用所有业务数据的本地存储,包括:
- 应用配置
- 对话历史
- 消息记录
- 版本信息
- AI模型配置
数据一致性维护
通过外键约束、唯一性约束和事务机制,确保数据操作的一致性。
数据访问接口
为应用其他模块提供统一、类型安全的数据访问接口,简化底层操作。
数据库运维
处理数据库初始化、迁移、备份和恢复等任务,确保数据存储的可靠性。
架构定位
作为应用的数据访问层核心,该模块为上层业务提供可靠的数据服务。专注于管理AI模型相关数据,包括:
- 模型提供商信息
- 具体模型配置
- 版本控制
通过标准化接口和严格访问控制,确保数据安全性和一致性,同时降低维护复杂度,为应用稳定运行提供数据基础。
版本控制模块
重要性: 中
管理应用版本历史和部署记录,versions表存储Git提交哈希和数据库时间戳,支持版本切换和恢复功能。
版本控制模块说明
模块概述
版本控制模块作为Electron应用的核心数据访问层,专注于本地SQLite数据库的全生命周期管理。基于Drizzle ORM和Better-SQLite3构建,提供类型安全、结构清晰的本地数据存储方案。
核心职责
-
数据库连接管理
- 单例模式维护数据库连接
- 动态获取数据库文件路径
- 自动创建用户数据目录
-
数据库初始化与迁移
- 自动检测并修复损坏的数据库文件
- 启用SQLite外键约束
- 执行Drizzle ORM迁移脚本
-
数据模型管理
- 定义6张核心业务表
- 建立字段约束和表间关联
- 通过唯一索引防止重复数据
-
安全访问机制
- 使用Proxy实现代理访问
- 提供懒加载功能
-
错误处理
- 数据库损坏检测与修复
- 操作日志记录
数据模型设计
表结构
| 表名 | 描述 |
|---|---|
apps |
应用基础配置 |
chats |
对话记录存储 |
messages |
消息内容存储 |
versions |
版本控制信息 |
language_model_providers |
模型服务商信息 |
language_models |
具体模型配置 |
关键字段
| 表名 | 主键 | 外键 | 索引 |
|---|---|---|---|
apps |
id |
- | - |
chats |
id |
appId |
- |
messages |
id |
chatId |
- |
versions |
id |
appId |
(appId, commitHash)唯一索引 |
language_models |
id |
customProviderId |
- |
模块流程
AI模型管理模块
重要性: 高
负责管理不同AI模型提供商的配置和接入,支持主流模型包括OpenAI、Anthropic、Google和Ollama等。相关配置信息存储在language_model_providers和language_models表中。
AI模型管理模块说明
模块概述
作为Electron应用程序的核心数据管理层,AI模型管理模块专注于本地SQLite数据库的全生命周期管理。基于Drizzle ORM和Better-SQLite3构建,该模块提供类型安全、结构清晰且易于维护的本地数据存储方案,专门用于管理AI模型相关的业务数据。
核心功能
数据库管理
连接管理:采用单例模式确保数据库连接的高效性和唯一性
自动迁移:支持数据库结构的自动更新与版本控制
错误恢复:具备数据库文件损坏检测和自动修复能力
安全访问:通过代理模式实现懒加载和访问控制
数据模型管理
管理六大核心业务实体,构建完整的AI模型生态系统:
实体名称
描述
主要功能
apps
应用基础信息表
存储应用配置和外部服务连接信息
chats
对话记录表
管理应用内的对话会话记录
messages
消息记录表
存储具体消息内容和对话历史
versions
版本控制表
管理应用版本信息和提交历史
language_model_providers
模型提供商表
存储AI模型服务商信息
language_models
语言模型表
管理具体语言模型配置和参数
数据关系架构
graph TD;
"apps" -->|"一对多"| "chats"
"apps" -->|"一对多"| "versions"
"chats" -->|"一对多"| "messages"
"language_model_providers" -->|"一对多"| "language_models"
"chats" -->|"一对一"| "apps"
"messages" -->|"一对一"| "chats"
"versions" -->|"一对一"| "apps"
"language_models" -->|"一对一"| "language_model_providers"
技术架构
设计模式应用
单例模式:确保数据库连接全局唯一,避免重复开销
代理模式:通过Proxy实现数据库方法的懒加载和安全访问
模块化设计:分离表结构定义与数据库操作逻辑,提升可维护性
性能优化
时间戳处理:使用SQLite内置unixepoch()函数提高效率
外键约束:通过数据库级约束保证数据一致性
唯一性约束:防止重复数据插入,维护数据质量
索引优化:在关键业务字段建立唯一索引,提升查询性能
模块职责
数据持久化
负责应用所有业务数据的本地存储,包括:
应用配置
对话历史
消息记录
版本信息
AI模型配置
数据一致性维护
通过外键约束、唯一性约束和事务机制,确保数据操作的一致性。
数据访问接口
为应用其他模块提供统一、类型安全的数据访问接口,简化底层操作。
数据库运维
处理数据库初始化、迁移、备份和恢复等任务,确保数据存储的可靠性。
架构定位
作为应用的数据访问层核心,该模块为上层业务提供可靠的数据服务。专注于管理AI模型相关数据,包括:
模型提供商信息
具体模型配置
版本控制
通过标准化接口和严格访问控制,确保数据安全性和一致性,同时降低维护复杂度,为应用稳定运行提供数据基础。
版本控制模块
重要性: 中
管理应用版本历史和部署记录,versions表存储Git提交哈希和数据库时间戳,支持版本切换和恢复功能。
版本控制模块说明
模块概述
版本控制模块作为Electron应用的核心数据访问层,专注于本地SQLite数据库的全生命周期管理。基于Drizzle ORM和Better-SQLite3构建,提供类型安全、结构清晰的本地数据存储方案。
核心职责
数据库连接管理
单例模式维护数据库连接
动态获取数据库文件路径
自动创建用户数据目录
数据库初始化与迁移
自动检测并修复损坏的数据库文件
启用SQLite外键约束
执行Drizzle ORM迁移脚本
模块流程
基础设施模块
数据库访问层
重要性: 高
基于 Drizzle ORM 实现的 SQLite 数据库访问层,定义了所有数据表结构和关系,包括 apps、chats、messages、versions、language_model_providers 和 language_models 表。
数据库访问层模块说明
- 模块概述
本模块作为应用的核心数据持久化组件,基于Drizzle ORM框架构建,采用SQLite作为底层存储引擎。主要功能包括:
完整的数据库生命周期管理
结构定义与类型安全映射
自动迁移与连接管理
数据访问接口封装
通过模块化设计和代理模式实现操作安全性与执行效率的平衡。
- 核心功能
2.1 数据库结构管理
表结构定义:定义6张核心业务表,涵盖应用管理、对话系统、版本控制和AI模型配置
关系建模:建立完整的数据关系网络,支持一对多和一对一关联
约束管理:实现主键、外键、唯一性约束和索引优化
2.2 类型安全保障
TypeScript集成:自动生成类型定义,确保编译时类型检查
ORM映射:提供类型安全的数据库操作接口
字段验证:通过ORM层实现数据完整性验证
2.3 数据库迁移管理
版本控制:采用快照文件和迁移脚本管理结构演进
自动迁移:应用启动时自动执行必要更新
增量更新:仅执行变更部分,提升效率
2.4 连接与访问管理
单例模式:确保数据库连接的唯一性和复用性
代理访问:通过Proxy实现懒加载和访问控制
错误恢复:自动检测和修复损坏的数据库文件
3.2 数据模型关系图
- 性能优化策略
4.1 索引优化
– 常用查询字段索引
CREATE INDEX chats_app_id_idx ON chats (appId);
CREATE INDEX messages_chat_id_idx ON messages (chatId);
CREATE INDEX versions_app_id_idx ON versions (appId);
CREATE INDEX language_models_provider_id_idx ON language_models (providerId);
4.2 查询优化
外键字段索引提升JOIN性能
使用SQLite内建函数优化时间排序
复合索引优化多条件查询
- 安全与可靠性
5.1 数据完整性
外键约束防止孤立数据
NOT NULL约束确保必填字段
唯一性约束避免冗余
5.2 错误恢复
自动检测并修复损坏文件
完整操作日志记录
单例模式保证连接稳定
5.3 访问控制
代理模式实现安全访问
未初始化检测机制
敏感信息环境变量管理
- 模块架构流程
- 架构定位
作为数据持久化核心组件,本模块:
与路径管理模块协作确保存储位置正确
集成日志模块提供操作追踪
通过ORM与业务层解耦
保障数据一致性、完整性和安全性
为系统稳定运行提供基础支撑。
更多推荐



所有评论(0)