Windows 桌面聊天客户端:流式对话、本地保存会话。助理名默认「威斯特」。
- 阶段 1:
backend=openai,直连 DeepSeek(OpenAI 兼容) - 阶段 2:
backend=astrbot,对接本机 AstrBot 管家(人格 / 记忆 / 知识库)
- 确认已安装 Node.js(装 LTS 即可)
- 安装依赖并启动:
npm install
npm run devnpm install 会自动触发 postinstall,检查并补装 Electron 二进制。
若 Electron 下载失败(国内网络常见),先设镜像再补装:
set ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/
npm run fix-electronnpm run dist产物在 release/(已 gitignore):
| 文件 | 说明 |
|---|---|
Chatwith-*-portable.exe |
免安装单文件,推荐 |
Chatwith-*-x64.exe |
NSIS 安装包 |
win-unpacked/Chatwith.exe |
解压目录直接运行 |
首次运行:把项目里的 config.example.json 复制到数据目录并改名为 config.json,填入 API Key。数据目录位置见下方「数据目录」一节。
所有用户数据都不在仓库里,统一放在数据目录下:
| 内容 | 文件 |
|---|---|
| 配置(含 API Key) | config.json |
| 会话 | sessions/*.json |
| 待办 | todos.json |
数据目录的位置(src/main/paths.ts 的 getDataRoot()):
- 环境变量
CHATWITH_DATA_DIR(最高优先级,便于测试或多套数据切换) - 开发运行:仓库同级的
Data/ - 打包运行:可执行文件同级的
Data/
举例:仓库在 D:\code\chatwith,开发运行时数据目录就是 D:\code\Data\。
这样做的意义:仓库目录可以随意提交、打包、分享、备份,永远不会带上会话内容和 API Key;git clean 或切换分支也不会误删你的聊天记录。
- 安装依赖:
npm install - 配置 API:复制
config.example.json到数据目录并改名为config.json,按下方填写 - 启动桌面:
npm run dev - 终端对话测试(不开窗口):
- 交互:
npm run chat - 单次:
npm run chat -- --once "你好"
- 交互:
若 Electron 下载失败:
set ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/
npm run fix-electron配置文件统一放在数据目录下的 config.json。示例:
{
"backend": "openai",
"apiKey": "<DeepSeek API Key>",
"model": "deepseek-v4-flash",
"baseURL": "https://api.deepseek.com",
"assistantName": "威斯特",
"astrbotUsername": "chatwith"
}管家为 AstrBot 桌面安装版(默认监听 127.0.0.1:6185)。Chatwith 只连 http://127.0.0.1:6185,不要把 AstrBot 安装路径写进 config.json;安装目录默认只读(勿改内嵌源码/数据库)。详见 plans/stage-2.md。
- 启动 AstrBot 桌面端,确认可打开
http://127.0.0.1:6185/api/v1/docs - 在 AstrBot 设置中创建 API Key,并勾选
chatscope - 数据目录下的
config.json:
{
"backend": "astrbot",
"apiKey": "<AstrBot API Key,abk_ 开头>",
"baseURL": "http://127.0.0.1:6185",
"model": "deepseek/deepseek-v4-pro",
"assistantName": "威斯特",
"astrbotUsername": "chatwith"
}说明:
- AstrBot 用的是自有接口
POST /api/v1/chat,不是 OpenAI/v1/chat/completions baseURL填 AstrBot 根地址(不要加/api/v1)- 切回 DeepSeek:把
backend改回openai,并恢复 DeepSeek 的apiKey/baseURL/model - 先用
npm run chat冒烟,再开桌面窗口 - 多轮冒烟(可选):
node scripts/verify-astrbot-multiturn.mjs
- Markdown 渲染:表格/代码块/加粗/行内代码;超宽表格自动收起为块,点击弹出可拖动、可关闭的弹窗
- 消息宽度自适应:随窗口缩放,不再固定 50 字宽
- 底部状态栏:连接状态(正常/回复中/异常)、模型、本次 token 与费用(优先真实值,来自 AstrBot agent_stats;无数据时估算)、余额占位,点击看详情
- 待办气泡:桌面透明悬浮窗,显示最近待办与倒计时;可拖动、贴屏幕边缘自动收边、到点系统通知 + 响铃;主窗口侧边栏「📌 待办气泡」添加,数据存
Data/todos.json - 链路稳定性(W6):连接失败自动重试 1 次;三级超时(连接 30s / 首包 60s / 流中断 180s)均明确报错;空响应检测;推理内容泄漏过滤(chain_type=null 的「🤔 思考」块)
- 左侧:+ 新对话(若当前已是空对话,不会重复创建)
- 双击会话名可重命名;右键或 × 删除
- Enter 发送,Shift+Enter 换行;生成中可停止
- 会话保存在数据目录的
sessions/下(仓库外,天然不进 Git)
- 用户数据(
config.json、sessions/、todos.json)全部在仓库外的Data/,仓库里没有任何密钥或聊天记录 - 切勿把 API Key 提交到 Git 或贴进公开文档;
.gitignore仍保留config.json/data/作为兜底 - 若 Key 曾泄露,请到 DeepSeek / AstrBot 控制台轮换密钥
管家仍在本机 AstrBot;ECS 只做 HTTPS 入口。说明见 plans/mobile-ecs.md 与 deploy/ecs/README.md。
cd mobile
npm install
npm run dev本机调试:设置里 API Base 填 http://127.0.0.1:6185。公网:按 deploy/ecs 搭隧道后 Base 填 https://你的域名。
- 总规划:
plans/plan-1.md - 阶段 1 MVP:
plans/stage-1-mvp.md(已完成) - 阶段 2(AstrBot / 人格·记忆·知识库):
plans/stage-2.md(已完成) - 手机 + ECS:
plans/mobile-ecs.md