feat: update auto reply and packaging

This commit is contained in:
ly1213
2026-06-29 17:44:22 +08:00
parent 1ca66dc0af
commit 2d5ee7f08d
19 changed files with 1147 additions and 227 deletions

View File

@@ -0,0 +1,169 @@
# 本地改动说明(对比 origin/develop
生成时间2026-06-29
本地分支:`develop`
对比基准:`origin/develop`
远程仓库:`https://git.lzwcai.com/ly1213/qiweimanager-master.git`
> 说明:本文只梳理当前工作区相对 Git 远程基线的本地改动,未提交 Git也未改动远程仓库。
## 一、改动概览
本次本地改动主要围绕自动客服、素材发送、知识库重建提示和安装包资源打包四块:
1. 新增“只回复外部客户”开关,开启后企业内部成员消息会被自动忽略,不再触发 AI 回复或转人工。
2. 优化素材发送逻辑,支持按素材子文件夹命中问题场景,显式要求“全部”时才发送该匹配文件夹内全部素材。
3. 优化素材话术和发送顺序,统一使用“您”,并在发送图片/视频/动图后补充描述;发送文件时携带文件名,便于企微侧展示。
4. 命中素材时会把知识库中相关文字说明整理后一起发送,更接近真实客服“先说明、再发资料/或发完资料补描述”的场景。
5. 优化知识库重建错误提示:重建成功后清除旧的知识库错误;向量索引失败时保留明确错误和扫描统计。
6. 优化 Windows 安装包打包,把 `tools` 目录、PDF 渲染依赖 DLL、语音转码工具等运行资源纳入安装包。
## 二、功能改动明细
### 1. 只回复外部客户
- 配置结构新增 `identity.replyExternalOnly`,默认值为 `false`,保持原有行为不变。
- 前端“监听策略”区域新增开关:`只回复外部客户,忽略企业内部成员`
- 后端处理消息时,在身份识别完成后判断:
- 开关关闭:按原逻辑处理内部/外部/未知身份。
- 开关开启且识别为内部成员:直接忽略消息,记录原因为 `internal_ignored_external_only`
涉及文件:
- `config/types.go`
- `frontend/src/components/AutoReply.vue`
- `frontend/src/main.js`
- `helper/auto_reply.go`
- `helper/auto_reply_test.go`
### 2. 素材按文件夹/场景匹配发送
- 去掉了原先“全部资料”这类泛化请求直接短路的粗粒度逻辑,改为更细的判断:
- 用户只说“全部资料/全部文件”,但没有明确具体场景、文件夹或素材关键词时,不自动群发,仍走澄清/普通回复,避免误发大量资料。
- 用户带有明确场景或文件夹关键词例如“0505尾部切刀的资料全部发我”会发送匹配文件夹内的全部素材。
- 用户明确要求某类素材,例如“全部视频/全部图片”,会按类型收集对应素材。
- “资料/文件”不再默认只理解成普通文件;只有出现 `文档、表格、手册、说明书、ppt、pdf、doc、docx、xls、xlsx` 等明确文档词时,才限制为普通文件类型。
涉及文件:
- `helper/auto_reply_materials.go`
- `helper/auto_reply_test.go`
### 3. 素材发送话术与顺序
- 默认话术从“发你”改为“发给您”,包括图片、视频、动图、文件和组合素材话术。
- AI 生成素材开场白的 prompt 增加要求:必须使用“您”。
- 命中素材后,会先从知识库命中片段中整理最多 3 条文字说明,作为“相关排查说明”发送给客户。
- 发送顺序调整:
- 普通文件:先发说明话术,再发文件。
- 图片/视频/动图:先发素材,再发描述文字,使描述更像跟在图片或视频下面。
- 示例素材索引里的 caption 也同步改成“发给您”。
涉及文件:
- `helper/auto_reply_material_caption.go`
- `helper/auto_reply_materials.go`
- `config/materials/materials.json`
- `helper/auto_reply_test.go`
### 4. 文件消息展示文件名
- 普通文件消息 `type=11031` 发送时,额外传入文件名字段:
- `fileName`
- `file_name`
- 文件名从实际路径 `filepath.Base(path)` 提取。
- `requestdata/sendVWorkFileMessage.json` 同步增加文件名占位符,便于底层请求模板使用。
涉及文件:
- `helper/auto_reply_materials.go`
- `requestdata/sendVWorkFileMessage.json`
### 5. 知识库重建提示与错误状态
- 知识库重建接口在失败时也返回已扫描到的统计信息,包括耗时、文件数、分片数和失败文件列表,方便前端展示。
- 关键词模式下不强制重建向量索引。
- 混合/向量模式下,如果 embedding 重建失败,会返回已扫描的知识库索引并保留知识库错误。
- 知识库重建成功后,会清除旧的知识库错误,避免前端一直显示历史失败信息。
- 前端 section alert 支持 `success / warn / error` 三种类型,成功提示会自动清掉对应区域旧错误。
涉及文件:
- `helper/auto_reply_http.go`
- `helper/auto_reply_knowledge.go`
- `helper/auto_reply_status.go`
- `helper/auto_reply_knowledge_test.go`
- `frontend/src/components/AutoReply.vue`
### 6. 安装包运行资源打包
- NSIS 安装脚本新增复制 `$INSTDIR\tools`,安装后会带上运行工具目录。
- 打包脚本复制 `pdftoppm.exe` 时,会同步复制同目录 DLL避免部署环境缺 DLL 导致 PDF 解析不可用。
- 打包阶段将 `tools\pdf` 整个目录同步进 NSIS runtime。
- 当前本地已生成的新安装包中包含语音转码工具 `silkdecode.exe`
涉及文件:
- `build/windows/installer/project.nsi`
- `scripts/package-windows.ps1`
最新本地安装包:
`build/bin/qiweimanager-amd64-installer_20260629_145726.exe`
## 三、测试与验证情况
本地新增/调整的自动化测试覆盖了以下场景:
- 开启“只回复外部客户”后,内部成员消息不会触发回复,并记录忽略原因。
- 普通场景素材请求遵守 `maxPerReply` 限制。
- 明确要求某个匹配文件夹“全部资料”时,会发送该文件夹下全部素材。
- 泛化“全部资料都发我”不会直接群发。
- 素材默认话术统一改为“发给您”。
- 命中素材时,会把知识库相关说明与素材一起发送。
- 知识库重建成功后清除旧错误embedding 失败时保留知识库错误并返回扫描结果。
建议开发同事复核时运行:
```powershell
go test ./helper ./config
npm.cmd --prefix frontend run build
```
如果需要验证安装包资源,请重点检查安装目录下是否存在:
```text
tools/audio/silkdecode.exe
tools/pdf/pdftoppm.exe
```
## 四、注意事项
- 当前工作区还有 Wails 构建生成文件的差异痕迹,主要是 `frontend/wailsjs/runtime/runtime.d.ts``frontend/wailsjs/runtime/runtime.js`。这些看起来是 Wails CLI 版本差异造成的生成文件变化,不属于本次核心业务逻辑改动,建议提交前由开发同事确认是否需要保留。
- `go.mod`、部分 `frontend/wailsjs/go/*` 文件在 `git status` 中可能因换行符显示为修改,但当前 `git diff --name-only` 未显示实际内容差异。
- 本文档本身是新增的本地说明文件,不属于产品运行逻辑。
- 另有一份未跟踪文档 `yuanzhipeng提交内容梳理.md`,是之前梳理 yuanzhipeng 提交内容生成的说明文档。
## 五、当前实际内容差异文件
根据 `git diff --name-only`,当前有实际内容差异的文件如下:
```text
build/windows/installer/project.nsi
config/materials/materials.json
config/types.go
frontend/src/components/AutoReply.vue
frontend/src/main.js
frontend/wailsjs/runtime/runtime.d.ts
frontend/wailsjs/runtime/runtime.js
helper/auto_reply.go
helper/auto_reply_http.go
helper/auto_reply_knowledge.go
helper/auto_reply_knowledge_test.go
helper/auto_reply_material_caption.go
helper/auto_reply_materials.go
helper/auto_reply_status.go
helper/auto_reply_test.go
requestdata/sendVWorkFileMessage.json
scripts/package-windows.ps1
```