一个基于 Wails 框架和 Vue 3 的 AI 聊天应用,提供流畅的对话体验和多Tab会话管理功能。
wachat = Wails AI Chat
- 🚀 轻量级桌面应用 - 基于 Wails 2.x,Go + Vue 3 技术栈
- 💬 流式AI对话 - 实时流式输出,更自然的对话体验
- 🎨 现代化 UI - 简洁优雅的界面设计
- 📑 多Tab管理 - 支持多个对话标签页,类似浏览器的使用体验
- 💾 本地持久化 - SQLite 数据库存储对话历史
- 🔌 OpenAI 兼容 - 支持 OpenAI API 和其他兼容接口
- ⚡ Markdown 渲染 - 完美支持代码高亮和数学公式
- 📚 RAG 知识库 - 集成 go-rag 和 Qdrant 向量数据库,支持文档检索增强对话
- 框架: Wails v2.10.2
- 语言: Go 1.22+
- 数据库: SQLite (gorm)
- AI SDK: Cloudwego Eino - 字节跳动开源的 LLM 应用开发框架
- RAG: go-rag - 知识库检索增强生成系统
- 向量数据库: Qdrant - 高性能向量搜索引擎
- 框架: Vue 3.5+ (Composition API)
- 构建工具: Vite 6
- 样式: TailwindCSS 3
- 类型检查: TypeScript 5.6+
- Markdown: vue-renderer-markdown
- 数学公式: KaTeX
- UI 设计: 参考 deepchat 的界面设计
- Go: 1.22 或更高版本
- Node.js: 20.19.0 或更高版本
- pnpm: 9.15.0 或更高版本
- Wails CLI: 2.10.2
go install github.com/wailsapp/wails/v2/cmd/wails@latestgit clone https://github.com/wangle201210/wachat.git
cd wachat# 安装 Go 依赖
go mod tidy
# 安装前端依赖
cd frontend
pnpm install
cd ..创建配置文件:
cp config.example.yaml config.yaml编辑 config.yaml 配置您的 AI 服务:
# AI Service Configuration
ai:
base_url: "https://api.openai.com/v1"
api_key: "your-api-key-here"
model: "gpt-3.5-turbo"
# RAG Configuration (Optional)
rag:
enabled: true # 是否启用 RAG 功能
auto_start: false # 启动时自动启动 RAG 服务
top_k: 5 # 检索返回的文档数量
default_knowledge_base: "" # 默认知识库名称
server:
address: ":8000" # RAG 服务监听地址
# Qdrant Configuration (Optional)
qdrant:
enabled: true # 是否启用 Qdrant
auto_start: false # 启动时自动启动 Qdrant
server:
address: ":6333" # Qdrant 服务地址
grpc_address: ":6334" # Qdrant gRPC 地址
# Binary Manager Configuration (Optional)
binaries:
enabled: false
use_embedded: false # false: use local bin/, true: use embedded
bin_path: "./bin"
startup_order:💡 提示:
- 支持 OpenAI 官方 API
- 支持其他兼容 OpenAI API 的服务(如 Ollama、Azure OpenAI 等)
- RAG 功能可选,不需要时可设置
rag.enabled: false- 配置文件使用 YAML 格式,更易于管理和维护
- 可以通过设置
binaries.enabled: false禁用嵌入的二进制服务- 配置支持热重载,修改配置文件后会自动生效
# 启动开发服务器(热重载)
wails dev💡 提示:如果遇到配置文件加载问题,可以设置环境变量:
export WACHAT_CONFIG_PATH=/path/to/your/project wails dev
# 构建生产版本
wails build
# 特定平台构建
wails build -platform darwin/arm64 # macOS Apple Silicon
wails build -platform darwin/amd64 # macOS Intel
wails build -platform windows/amd64 # Windows
wails build -platform linux/amd64 # Linux构建完成后,可执行文件位于 build/bin/ 目录。
macOS 系统对未签名的应用会提示"已损坏"。为了让用户能够正常打开应用,需要对应用进行签名。
推荐方式:使用我们提供的签名脚本(无需 Apple Developer 账号)
# 构建 + 签名 + 打包(一键完成)
./scripts/build-and-sign.sh这会在 build/dist/ 目录生成一个签名的 ZIP 文件,用户解压后可以正常打开。
用户首次打开说明:
- 右键点击应用 -> 选择"打开" -> 点击"打开"
- 或在系统设置 > 隐私与安全性中点击"仍要打开"
📖 详细的签名说明和其他签名方案,请参阅 签名指南
- 支持打开多个对话Tab,类似浏览器标签页
- 点击 "+" 按钮创建新会话
- 每个Tab独立显示对话内容
- 关闭Tab时自动切换到相邻Tab
- 最少保持一个Tab打开
- 点击右上角历史按钮打开/关闭侧边栏
- 显示所有已保存的对话
- 点击对话可快速切换当前Tab内容
- 支持删除历史对话
- 新建Tab时不立即创建数据库记录
- 仅在用户发送第一条消息时才保存对话
- 避免产生大量空对话记录
- AI 回复采用流式输出
- 实时显示生成的内容
- 自动滚动到最新消息
- 完整的 Markdown 语法支持
- 代码块高亮显示
- 数学公式渲染(KaTeX)
wachat 集成了强大的 RAG(Retrieval Augmented Generation)功能,让 AI 能够基于您的文档知识库提供更准确的回答。
-
启用 RAG 功能
在
config.yaml中启用 RAG:rag: enabled: true auto_start: true top_k: 5 default_knowledge_base: "my_docs" # 设置默认知识库 qdrant: enabled: true auto_start: true
-
访问知识库管理
- 点击主界面右上角的 "知识库管理" 按钮
- 首次使用会自动下载 go-rag 和 Qdrant 服务
- 下载完成后点击 "启动服务"
-
创建知识库
在知识库管理界面中:
- 输入知识库名称(如 "my_docs")
- 点击 "创建知识库"
-
上传文档
支持多种文档格式:
- PDF 文档
- Markdown 文件
- HTML 网页
- 纯文本文件
上传方式:
- 本地文件: 选择文件上传
- 网页 URL: 输入网页地址,自动抓取内容
-
配置检索参数
在知识库管理页面顶部:
- TopK: 每次检索返回的文档数量(1-100)
- 默认知识库: 选择对话时使用的知识库
-
开始对话
配置完成后:
- 返回聊天界面
- 发送消息时,AI 会自动从知识库检索相关内容
- 基于检索到的文档提供更准确的回答
应用使用 SQLite 存储数据,数据库文件位于用户目录:
- macOS/Linux:
~/.wachat/chat.db - Windows:
%USERPROFILE%\.wachat\chat.db
数据库包含两张表:
conversations- 存储会话信息messages- 存储消息记录
前端通过 Wails Runtime 监听后端事件:
stream:start- 流式响应开始stream:response- 接收流式内容块stream:end- 流式响应结束stream:error- 流式响应错误conversation:title-updated- 会话标题更新
A: 修改 config.yaml 文件中的配置:
# 使用 Ollama 本地模型
ai:
base_url: "http://localhost:11434/v1/chat/completions"
api_key: ""
model: "llama2"
# 使用 Azure OpenAI
ai:
base_url: "https://your-resource.openai.azure.com/openai/deployments/your-deployment/chat/completions?api-version=2024-02-15-preview"
api_key: "your-azure-key"
model: "gpt-35-turbo"
# 使用 SiliconFlow (DeepSeek)
ai:
base_url: "https://api.siliconflow.cn/v1"
api_key: "sk-your-key-here"
model: "deepseek-ai/DeepSeek-V3"A: 直接删除数据库文件:
# macOS/Linux
rm ~/.wachat/chat.db
# Windows (PowerShell)
Remove-Item $env:USERPROFILE\.wachat\chat.dbA:
- Go 代码修改需要重启
wails dev - Vue 代码修改会自动热重载
- 如果遇到问题,尝试清理缓存:
rm -rf frontend/dist
A:
- 在
config.yaml中启用 RAG 和 Qdrant - 点击主界面右上角的 "知识库管理" 按钮
- 首次使用会下载必要的服务(go-rag 和 Qdrant)
- 启动服务后,创建知识库并上传文档
- 在顶部设置栏选择默认知识库
- 返回聊天界面,AI 会自动使用知识库内容
A:
- 检查端口占用: 确保端口 8000(go-rag)和 6333(Qdrant)没有被占用
- 检查配置: 确认
config.yaml中的配置正确 - 查看日志: 在应用日志中查看具体错误信息
- 手动清理: 删除
~/.wachat/go-rag和~/.wachat/qdrant目录后重新下载
A: 目前支持:
- PDF 文档(.pdf)
- Markdown 文件(.md)
- HTML 网页(.html)
- 纯文本文件(.txt)
- 网页 URL(自动抓取内容)
A:
- 使用清晰、具体的问题
- 调整
top_k参数(增加返回的文档数量) - 确保上传的文档内容质量高、结构清晰
- 使用支持 embedding 的高质量 AI 模型
- 为不同主题创建独立的知识库
- 基础聊天功能
- 多Tab会话管理
- 本地数据持久化
- 流式消息输出
- Markdown 和代码高亮
- RAG 知识库集成
- Qdrant 向量数据库
- 文档上传和索引
- 知识库管理界面
- 配置热重载
- 消息编辑和重新生成
- 对话导出(JSON/Markdown)
- 主题切换(深色/浅色)
- 系统提示词设置
- 模型参数调整(temperature、max_tokens等)
- 快捷键支持
- 多语言国际化
- Wails - 优秀的 Go + Web 框架
- Vue.js - 渐进式 JavaScript 框架
- Cloudwego Eino - 字节跳动开源的 LLM 应用开发框架,提供统一的 AI 接入能力
- go-rag - 基于 Go 的 RAG 系统,提供知识库检索增强能力
- Qdrant - 高性能向量搜索引擎,为 RAG 提供向量存储和检索
- deepchat - UI 设计参考,提供了优秀的聊天界面设计灵感
如有问题或建议,欢迎提交 Issue。
Made with ❤️ using Wails and Vue
