MistAI 是一个基于 Go 与 Fyne 的本地桌面 AI 助手应用,支持调用兼容 OpenAI 的大语言模型接口(如 OpenAI、OpenRouter、自定义 OpenAI 风格 API),并通过 MongoDB 持久化对话、词典与翻译记录。
应用提供多会话管理、词典/翻译历史面板、全局快捷键、流式输出与可视化配置界面,适合作为日常问答、翻译与单词管理工具。
目前只支持windows平台
- 多会话对话
- 左侧会话列表:新建、切换会话
- 会话消息保存在 MongoDB 中,可持久化历史记录
- 流式响应与控制
- 模型回复以流式方式展示
- 支持「停止输出」按钮中断当前生成
- 智能翻译与词典模式
- 将翻译结果与词典结构化数据写入数据库
- 右侧「历史记录」列表展示查询过的单词
- 历史记录与详情
- 悬停查看单词详细解释
- 支持从历史中快速回顾或复制内容
- 全局快捷键与剪贴板
- 在系统中按下
Ctrl + C时,应用会读取当前剪贴板内容并填入输入框(gui/gui.go:125) - 自动聚焦到输入框,方便一键提问
- 在系统中按下
- 输入体验优化
- 多行输入框(
MyWidget/myWidget.go:68) Enter发送消息,Shift + Enter换行
- 多行输入框(
- 可视化配置
- 内置设置窗口:选择 API 类型、填写 API Key、API URL 和模型名称(
gui/gui.go:801) - 配置信息保存在根目录的
config.json中(config/config.go:7)
- 内置设置窗口:选择 API 类型、填写 API Key、API URL 和模型名称(
- 语言与运行时
- Go(
go.mod中声明为go 1.24.3,建议使用最新稳定版 Go)
- Go(
- 桌面 UI
fyne.io/fyne/v2:跨平台桌面 UI 框架(gui/gui.go:1)
- 数据库
- MongoDB 作为持久化存储(
database/db.go、database/message.go:1) - 使用官方驱动
go.mongodb.org/mongo-driver
- MongoDB 作为持久化存储(
- AI/LLM 调用
- 自定义
llm包封装聊天接口(llm/llm.go:1) - 支持 OpenAI/OpenRouter/自定义兼容 OpenAI 协议的 API
- 自定义
- 其他
github.com/robotn/gohook:全局快捷键监听(gui/gui.go:125)github.com/atotto/clipboard:系统剪贴板访问(gui/gui.go:127)github.com/sirupsen/logrus:结构化日志(main.go:19)
仅列出主要目录与文件,帮助快速理解项目结构:
main.go:应用入口,负责加载配置、初始化数据库并启动 GUI(main.go:11)config/config.go:定义AppConfig、MongoConfig并负责读写config.json(config/config.go:7)
database/db.go:MongoDB 连接、初始化与关闭逻辑message.go:词典与翻译等业务数据结构与数据库操作(database/message.go:1)
service/message_service.go:对话消息服务,负责与 LLM 通信与流式输出(service/message_service.go:1)conversation_service.go:会话管理相关逻辑config_service.go:包装配置读写逻辑,供 GUI 使用(service/config_service.go:1)
gui/gui.go:Fyne 界面构建、会话列表、聊天区域、历史面板以及设置窗口(gui/gui.go:1)
llm/llm.go:封装聊天接口调用逻辑,构造系统提示、控制上下文长度等(llm/llm.go:1)
MyWidget/myWidget.go:自定义组件,如可悬停标签与支持Shift + Enter换行的多行输入框(MyWidget/myWidget.go:68)
example/example.go:Fyne 性能测试示例(example/example.go:1)
- Go:建议 Go 1.21+(
go.mod当前为1.24.3) - MongoDB:建议 5.0 或更高版本
- 操作系统:支持 Fyne 的主流桌面系统(Windows/macOS/Linux)
应用运行时会从项目根目录读取 config.json,对应结构定义在 config/config.go:7 中:
{
"provider": "openai",
"api_key": "YOUR_API_KEY",
"api_url": "https://api.openai.com/v1/chat/completions",
"model": "gpt-4.1-mini",
"mongodb": {
"connection_string": "mongodb://localhost:27017",
"database_name": "chat_assistant",
"connection_timeout": 10
}
}字段说明:
provider:API 类型"openai":OpenAI 官方接口"openrouter":OpenRouter 接口(如https://openrouter.ai/api/v1/chat/completions)"custom":自定义兼容 OpenAI 协议的第三方接口(如代理服务、其他厂商 API)
api_key:你的模型服务 API Key(请不要将真实 Key 提交到版本库)api_url:聊天接口地址,例如 OpenAI、OpenRouter 或代理地址model:使用的模型名称(如gpt-4.1-mini、xiaomi/mimo-v2-flash:free等)mongodb.connection_string:MongoDB 连接字符串mongodb.database_name:数据库名称mongodb.connection_timeout:连接超时时间(秒)
安全提示:仓库中的示例
config.json仅用于本地开发,请务必替换为你自己的 Key,避免泄露到公共仓库。说明:
config.json不会被编译进可执行文件,应用在运行时从当前工作目录读取该文件;如果文件不存在,程序会创建一个默认的空配置(provider为"custom",api_key/api_url/model为空),此时需要你在界面中的设置窗口中手动填写正确的模型服务信息。
- 安装依赖
- 安装 Go(1.21+)
- 安装并启动 MongoDB
- 获取代码
- 如果是从远程仓库拉取:
git clone <your-repo-url> MistAI cd MistAI
- 如果你已经在本地有此项目,直接进入项目根目录即可。
- 如果是从远程仓库拉取:
- 配置
config.json- 在项目根目录创建或修改
config.json,填入你的 API 配置与 MongoDB 信息(参见上文示例)
- 在项目根目录创建或修改
- 启动 MongoDB
- Windows:
net start MongoDB
- Windows:
- 运行应用
- 调试运行:
go run main.go
- 或构建二进制:
go build -o app.exe . ./app.exe
- 调试运行:
启动后会看到标题为「AI 助手」的桌面窗口(gui/gui.go:159)。
- 基本对话
- 在底部输入框中输入问题,按
Enter发送 - 使用
Shift + Enter换行,不立即发送(MyWidget/myWidget.go:80)
- 在底部输入框中输入问题,按
- 会话管理
- 左侧面板用于创建和切换会话
- 不同会话的消息会分别保存到 MongoDB 中
- 历史记录与词典
- 右侧「历史记录」列表显示查询过的单词或翻译条目(
gui/gui.go:175) - 悬停可查看详细释义与例句
- 右侧「历史记录」列表显示查询过的单词或翻译条目(
- 设置与模型
- 点击界面中的「⚙」按钮打开设置窗口(
gui/gui.go:801) - 可切换 API 类型(OpenAI、OpenRouter、自定义)、修改 URL、模型与 API Key
- 点击界面中的「⚙」按钮打开设置窗口(
- 全局快捷键
- 在系统中复制文本后按
Ctrl + C,应用会自动将剪贴板内容填入输入框并聚焦(gui/gui.go:125)
- 在系统中复制文本后按
- 日志
- 应用在启动时配置
logrus日志,并将日志输出到app.log(main.go:23) - 便于排查连接 MongoDB 或调用 LLM 过程中出现的问题
- 应用在启动时配置
- 数据库结构
- 词典与翻译相关的结构定义在
database/message.go中(database/message.go:18等) - MongoDB 迁移与设计说明见
MONGODB_MIGRATION.md
- 词典与翻译相关的结构定义在
- 实验代码
example/example.go提供了一个 Fyne 性能测试示例,可独立运行(example/example.go:10)
- 无法连接 MongoDB
- 检查 MongoDB 服务是否已启动
- 检查
config.json中的connection_string是否正确
- 模型调用失败
- 检查
api_key、api_url与model是否正确 - 确认当前网络环境或代理设置支持访问对应的模型服务
- 检查
- 界面无响应或闪退
- 确保 Go 和依赖库版本与
go.mod兼容 - 可删除本地构建缓存后重新运行:
go clean -modcache
- 确保 Go 和依赖库版本与
如果你希望继续扩展 MistAI(例如增加本地模型、更多快捷键或导出功能),可以从 gui/、service/ 与 llm/ 目录入手进行二次开发。