# ChatBot **Repository Path**: SKINGAP/chat-bot ## Basic Information - **Project Name**: ChatBot - **Description**: 聊天机器人 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-07-07 - **Last Updated**: 2026-07-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 聊天机器人后端与调试台 这是一个可在本地运行的后端服务与调试台,用于验证“像本人语气生成回复”的流程。 你可以通过网页调试台创建用户档案、升级会员、维护内部理论资料,并生成普通版和进阶版回复。网页调试台只用于开发联调,不是面向小程序用户的产品页面。 ## 目前能力 - 通过 6 道表达偏好题创建演示用户风格档案(仅结构化沟通偏好参与生成) - 创建普通会员与进阶会员(模拟支付) - 普通版 29 元/30 天,仅根据场景描述和文字聊天生成可复制文本回复,每日最多 100 次,不接收聊天截图 - 进阶版 59 元/30 天,每期包含 20 次高质量进阶回复;每次先生成三条候选,再进行第二轮编辑审稿,并判断这轮是否适合主动询问、给出未回复预案;支持目标导向回复、参考资料上下文、聊天截图上下文、带证据和不确定性说明的暂定沟通特点分析、联系人关系档案和历史续聊,同时保留每日 100 次普通文字回复 - 进阶会员可购买 9.9 元/10 次的进阶加量包;先使用本期包含次数,再使用购买后 90 天有效的加量次数,加量次数需在进阶会员有效期内使用 - 进阶回复采用“合格才计次”:截图 OCR 预览、模型失败、超时和未通过正式质量条件的安全备用回复不扣次数 - 每次进阶回复可选择简短(8~80 字)、适中(60~120 字)或详细(100~180 字),超长结果会自动重试并在必要时安全收紧 - 本地 JSON 文件持久化(开发友好、易查看) - 本地调试台(`http://127.0.0.1:3000`)用于手工验证接口 - 当前默认并固定使用 DeepSeek 路线;聊天截图先在后端本机 OCR,再把识别文字交给 DeepSeek,原图不外发 - 仍可通过电脑上已登录的桌面 WorkBuddy 调用 DeepSeek,不需要单独申请 DeepSeek API Key - Kimi 路由暂时停用;即使环境变量误设为 `MODEL_PROVIDER=kimi`,后端也会回退到 DeepSeek,不会调用 Kimi - WorkBuddy 本地模型服务未启动或不可用时自动使用 Mock 模式 ## 快速开始 安装 Node.js(建议 20+)后,在项目目录执行: ```bash npm install npm start ``` ### 只输入 API Key 启动 DeepSeek Windows 上双击项目根目录的 `启动DeepSeek聊天助手.cmd`,按提示粘贴一次 DeepSeek API Key 即可。输入内容不会显示;启动器会自动设置官方接口地址、`deepseek-v4-flash` 模型、超时和本地截图 OCR,然后启动后端。如果 3000 端口上运行的是本项目旧后端,启动器会自动关闭旧实例再接管;如果是其他程序,则会停止并提示,不会误关其他程序。 也可以在 PowerShell 中运行: ```powershell npm run start:deepseek ``` API Key 只保留在本次启动进程中,关闭窗口后失效,不会写入项目文件、数据文件、Git 或 Windows 的长期环境变量。已经在聊天或截图中公开过的密钥应先撤销,再使用新密钥。详细配置见 `docs/deepseek-direct-integration.md`。 如果使用 WorkBuddy 路由测试真实回复,请先确保桌面 WorkBuddy 已经登录。 也可以直接使用一条命令同时启动本地模型服务和小程序后端: ```powershell npm run start:model ``` 看到“WorkBuddy 模型服务已就绪”和“小程序后端”启动提示后,就可以在微信开发者工具或手机预览中测试真实回复。这个窗口需要保持运行;按 `Ctrl+C` 会同时停止由该命令启动的两个服务。如果 8080 端口已经有 WorkBuddy 模型服务,命令会直接复用;如果 3000 端口已有旧后端,会提示先关闭,避免小程序仍连接到旧配置。 如果想分别查看两个服务的日志,也可以打开两个 PowerShell 窗口。第一个窗口进入项目目录,启动 WorkBuddy 本地模型服务: ```powershell npm run workbuddy ``` 这个窗口需要保持运行。第二个窗口进入同一个项目目录,启动调试台: ```powershell $env:MODEL_PROVIDER = 'workbuddy' npm start ``` 浏览器打开 `http://127.0.0.1:3000`,生成回复后会明确显示 `真实模型:WorkBuddy` 或 `Mock 回复`。如果显示 Mock,页面会同时显示原因;最常见的原因是第一个窗口里的 WorkBuddy 本地模型服务还没有启动完成。 `npm run workbuddy` 会使用本机 `F:\WorkBuddy` 安装目录,把 WorkBuddy 切换为专门的聊天代写角色。它只开放 `Read` 工具读取本次请求附带的临时聊天截图,文件修改、终端、网络等其他工具均保持关闭。如果以后移动了 WorkBuddy,可先设置 `WORKBUDDY_CLI_PATH` 为 WorkBuddy 内 `codebuddy.js` 的完整路径。 默认地址: ```text http://localhost:3000 ``` 修改端口(Linux/macOS): ```bash PORT=4312 npm start ``` 修改端口(Windows PowerShell): ```powershell $env:PORT='4312' npm start ``` ## 测试 ```bash npm test ``` ## 进阶回复计次与字数限制 - 后端在调用模型前预留 1 次额度,只在真实模型输出通过安全、格式和所选字数范围检查后确认扣除;异常中断会自动退回预留额度。 - 本期 20 次用完后才会消耗加量包;会员包含次数和加量包剩余次数会分别展示。 - 截图 OCR 只负责帮助用户确认聊天上下文,不占用进阶回复次数。 - 单次进阶输入上限:场景描述 500 字、对方文字 3000 字、确认的最后一句 500 字、聊天目的 100 字、长期结果 150 字、截图识别文字 6000 字。 - 字数下限遇到明确拒绝等适合短回复的场景会放宽,避免为了凑字数破坏自然表达。 ## 微信小程序联网版 小程序放在 `miniprogram/` 目录。当前开发配置会通过局域网连接电脑后端,再由电脑后端调用 DeepSeek(直连或 WorkBuddy 路线)生成真实回复。会员开通仍是模拟支付,不会产生真实扣款。 ### 打开方式 1. 打开微信开发者工具。 2. 选择“导入项目”。 3. 项目目录选择本仓库根目录。 4. AppID 可以选择测试号或游客模式。 5. 确认手机和电脑连接同一个 Wi-Fi。 6. DeepSeek 直连只需运行已配置环境变量的 `npm start`;WorkBuddy 路由需分别运行 `npm run workbuddy`,以及在设置 `MODEL_PROVIDER=workbuddy` 后运行 `npm start`,两个窗口都要保持打开。 7. 在开发者工具中关闭“校验合法域名、web-view(业务域名)、TLS 版本以及 HTTPS 证书”。当前 `project.config.json` 已按本地调试关闭域名校验。 8. 点击“预览”,用手机微信扫码进入。首页正常显示会员和档案状态,说明已连接电脑后端。 当前小程序后端地址写在 `miniprogram/config.js`: ```text http://192.168.1.7:3000 ``` 如果电脑更换网络后 IP 发生变化,在 PowerShell 执行 `ipconfig`,把 `API_BASE_URL` 改成新的无线局域网 IPv4 地址。手机若提示无法连接,还需在 Windows 防火墙中允许 Node.js 通过“专用网络”。 本地 HTTP 地址只用于开发者工具和真机调试。正式发布时,必须把后端部署为 HTTPS,并在微信公众平台配置 request 合法域名。 ### 可测试流程 1. 进入“风格设定”,完成 6 道表达偏好选择题,随后保存风格档案。 2. 进入“普通版回复”,填写场景描述和对方说的话,然后生成并复制回复。 3. 进入“升级会员”,模拟开通普通版或进阶版。 4. 进入“进阶版回复”,填写场景描述、本次聊天目的和希望长期结果,选择聊天截图,生成并复制回复。 5. 开通进阶版并生成成功后进入“关系档案与历史聊天”,可以按联系人归档记录、维护关系阶段和长期备注、设置下次维护提醒,也可以从某段记录继续回复、收藏、复制或删除。普通版不保存历史聊天。 小程序不向用户展示理论资料、资料标题或筛选标签。开发者维护的情感沟通理论会作为内部策略,按对话内容和目标自动匹配。所有情感沟通都会注入“双向吸引与持续选择”的核心规则,再按当前阶段选择情绪稳定、清楚意图、自主、具体欣赏、回应感、可靠、边界或共同新鲜感中的一到两项;冲突、拒绝和严肃边界场景不会被强行改写成暧昧话术。当前场景分类为普通聊天和情感沟通;后续扩展销售等应用时,可增加新的 `applications` 分类和对应理论,不需要重新增加用户资料页。 ### 小程序隐私边界 - 小程序只生成可复制文本,不自动代发消息。 - 风格设定不上传聊天记录,只保存用户从情境题中选出的结构化表达偏好。 - 聊天截图只作为本次生成的临时上下文:WorkBuddy 路由使用请求结束即删除的随机临时文件;DeepSeek 直连在本机内存中 OCR,只发送识别文字。截图和完整转写都不会写入本地业务数据或回复日志。 - 回复日志不保存场景描述、对方原话、本次聊天目的原文、希望长期结果原文或截图路径。 - 进阶版成功生成的文字对话会保存在当前微信本机,最多 100 段,供按联系人归档、历史查看、续聊和收藏;联系人关系档案最多 200 份,只保存用户确认的昵称、关系阶段、长期备注和维护提醒。续聊时只使用用户选择的历史记录及对应联系人中用户确认过的信息,不读取其他联系人的历史。用户可删除单段、清空历史或单独删除关系档案,不会把截图写入历史。普通版回复不会写入历史聊天。 ## 环境变量 - `PORT`:服务端口,默认 `3000` - `DATA_DIR`:本地 JSON 数据目录,默认 `data` - `MODEL_PROVIDER`:模型路由,可选 `deepseek` 或 `workbuddy`,默认 `deepseek`;`kimi` 当前不会启用,会安全回退到 `deepseek` - `DEEPSEEK_API_KEY`:仅在 `MODEL_PROVIDER=deepseek` 时使用,必须通过服务端环境变量提供 - `SCREENSHOT_OCR_ENABLED`:DeepSeek 路由的本地截图文字识别,默认 `true` - `SCREENSHOT_OCR_TIMEOUT_MS`:单次本地图片识别超时,默认 `30000` - `SCREENSHOT_OCR_MAX_CHARACTERS`:最多提供给回复模型的截图识别字符数,默认 `8000` - `SCREENSHOT_OCR_MAX_QUEUE`:单进程同时处理和等待的截图 OCR 请求上限,默认 `4` - `WORKBUDDY_BASE_URL`:WorkBuddy 本地模型服务地址,默认 `http://127.0.0.1:8080` - `WORKBUDDY_MODEL`:启动 WorkBuddy 时选择的模型,默认 `deepseek-v4-pro` - `WORKBUDDY_REQUEST_TIMEOUT_MS`:等待 WorkBuddy 回复的最长毫秒数,默认 `180000` - `WORKBUDDY_CLI_PATH`:可选,桌面 WorkBuddy 内 `codebuddy.js` 的完整路径 - `WORKBUDDY_INSTALL_DIR`:可选,桌面 WorkBuddy 安装目录 WorkBuddy 请求会同时包含场景描述、文字聊天、用户主动选择续聊的上一轮文字记录和本次上传的截图。截图会先经过真实文件格式、Base64 内容、文件大小和像素尺寸校验,再以临时附件路径提供给 WorkBuddy;临时文件会在请求结束后删除。DeepSeek 路由完成本机 OCR 后会立即从模型请求中移除原图,只保留识别文字和“用户在左/右侧”的说话方标记。模型可根据当前对话给出暂定的沟通与互动特点,但必须引用可观察信号、说明样本局限,且不得用自拍、头像或外貌单独推断性格,也不得输出心理诊断或 MBTI、依恋类型等无依据标签。 ## 隐私边界 - 系统只会返回可复制文本,不会自动代发消息 - 服务端回复日志不保存场景描述、原始聊天文本或续聊上下文;小程序会在当前微信本机保存用户主动生成的文字历史,供查看、续聊和收藏。只有用户点击“继续聊天”后,所选的一段文字记录才会作为本次模型上下文发送 - 进阶版聊天截图为临时上下文,仅用于本次生成,不会写入 `replyLogs` - 项目不会读取或保存 WorkBuddy 的登录令牌;选择 DeepSeek 路由时只从当前服务进程环境读取 API Key,不会写入数据库或响应