鏇存柊鏂囨。

This commit is contained in:
renjianbo
2026-01-22 11:18:40 +08:00
parent 86fe398908
commit 1fe7df6a6e
14 changed files with 3392 additions and 52 deletions

View File

@@ -27,12 +27,12 @@
"state": { "state": {
"type": "markdown", "type": "markdown",
"state": { "state": {
"file": "docs/Obsidian笔记体系/Daily/2026-01-20.md", "file": "docs/Obsidian笔记体系/Projects/知你-调测/数美文本风险拦截实施方案.md",
"mode": "source", "mode": "source",
"source": false "source": false
}, },
"icon": "lucide-file", "icon": "lucide-file",
"title": "2026-01-20" "title": "数美文本风险拦截实施方案"
} }
} }
], ],
@@ -68,7 +68,7 @@
"state": { "state": {
"type": "search", "type": "search",
"state": { "state": {
"query": "签名", "query": "节点对齐和自动布局",
"matchingCase": false, "matchingCase": false,
"explainSearch": false, "explainSearch": false,
"collapseAll": false, "collapseAll": false,
@@ -200,33 +200,33 @@
}, },
"active": "25c9f7051aac05b3", "active": "25c9f7051aac05b3",
"lastOpenFiles": [ "lastOpenFiles": [
"docs/Obsidian笔记体系/Projects/saars开发/aiapply/未命名 7.md", "docs/Obsidian/高频命令.md",
"docs/Obsidian笔记体系/Projects/知你-调测/数美文本风险拦截实施方案.md",
"docs/Obsidian笔记体系/Projects/saars开发/aiapply/查看日志的方法.md",
"docs/Obsidian笔记体系/Projects/saars开发/aiapply/聊天智能机器人(苏苏).md",
"docs/cursor/cursor.md",
"docs/Obsidian笔记体系/Projects/saars开发/aiapply/可新增节点类型建议.md",
"docs/Obsidian笔记体系/Projects/saars开发/aiapply/已实现工作流模板快速应用功能。功能总结如下.md",
"docs/Obsidian笔记体系/Projects/saars开发/aiapply/项目低代码智能体功能扩展.md",
"docs/Obsidian笔记体系/Projects/saars开发/aiapply/aiagent节点类型扩展说明.md",
"docs/Obsidian笔记体系/Projects/saars开发/aiapply/Agent和模板节点的区别.md",
"docs/Obsidian笔记体系/Projects/saars开发/aiapply/智能需求分析与解决方案生成器_使用说明.md",
"docs/Obsidian笔记体系/Projects/saars开发/aiapply/android应用agent.md",
"docs/Obsidian笔记体系/Projects/saars开发/aiapply/未命名.md",
"docs/Obsidian笔记体系/Projects/saars开发/aiapply/未命名 1.md",
"docs/Obsidian笔记体系/Projects/saars开发/aiapply/开发低代码智能体平台 - 完整开发提示词.md",
"docs/Obsidian笔记体系/Projects/saars开发/aiapply/下一步可选方向.md",
"docs/Obsidian笔记体系/Projects/saars开发/aiapply/个人简历.md",
"docs/Obsidian笔记体系/Projects/saars开发/aiapply/未命名 4.md",
"docs/Obsidian笔记体系/Projects/saars开发/aiapply/已完成的增强功能.md",
"docs/Obsidian笔记体系/Projects/saars开发/aiapply/# 创建Agent经验总结.md",
"docs/Obsidian笔记体系/Daily/2026-01-20.md", "docs/Obsidian笔记体系/Daily/2026-01-20.md",
"docs/Obsidian笔记体系/Projects/saars开发/aiapply/节点配置中的温度和最大Token数是什么意思.md", "docs/Obsidian笔记体系/Projects/saars开发/aiapply/节点配置中的温度和最大Token数是什么意思.md",
"docs/Obsidian笔记体系/Projects/saars开发/aiapply/工作流和Agent平台提示词目录.md", "docs/Obsidian笔记体系/Projects/saars开发/aiapply/工作流和Agent平台提示词目录.md",
"docs/Obsidian笔记体系/Projects/saars开发/aiapply/工作流测试工具.md", "docs/Obsidian笔记体系/Projects/saars开发/aiapply/工作流测试工具.md",
"docs/Obsidian笔记体系/Projects/saars开发/aiapply/工作流Workflowvs Agent智能体的区别.md", "docs/Obsidian笔记体系/Projects/saars开发/aiapply/工作流Workflowvs Agent智能体的区别.md",
"docs/Obsidian笔记体系/Projects/saars开发/aiapply/电商系统用户订单处理流程设计方案.md", "docs/Obsidian笔记体系/Projects/saars开发/aiapply/电商系统用户订单处理流程设计方案.md",
"docs/Obsidian笔记体系/Projects/saars开发/aiapply/# 工作流和Agent平台架构方案分析.md",
"docs/cursor/cursor.md",
"docs/Obsidian笔记体系/Projects/知你-调测/知你--调测.md",
"com.xiaomi.appstore.appclaim.signature.verification.apk", "com.xiaomi.appstore.appclaim.signature.verification.apk",
"docs/Obsidian笔记体系/Areas/07-系统安全/权限管理框架.md",
"docs/Obsidian笔记体系/Areas/04-资源与包管理/动态加载与热修复原理.md",
"docs/Google开发文档体系/最佳实践/安全最佳实践.md",
"docs/Obsidian笔记体系/Daily/2026-01-13.md",
"docs/Obsidian笔记体系/Daily/2026-01-14.md",
"docs/Obsidian笔记体系/Daily/2026-01-15.md",
"docs/Obsidian笔记体系/Projects/saars开发/aiapply/未命名 2.md",
"docs/Obsidian笔记体系/Projects/saars开发/aiapply/android应用agent.md",
"docs/git/git设置用户名和邮箱.md",
"docs/Obsidian笔记体系/Projects/saars开发/aiapply/未命名 6.md",
"docs/Obsidian笔记体系/Projects/saars开发/aiapply/未命名 5.md",
"docs/Obsidian笔记体系/Projects/saars开发/aiapply/内容生成助手Agent.md",
"docs/Obsidian笔记体系/Projects/saars开发/aiapply/智能需求分析与解决方案生成器_使用说明.md",
"docs/Obsidian笔记体系/Projects/saars开发/aiapply/Agent和模板节点的区别.md",
"docs/Obsidian笔记体系/Projects/saars开发/aiapply/未命名.md",
"docs/Obsidian笔记体系/Projects/saars开发/aiapply/未命名 4.md",
"docs/android面试/系统原理/DPMS常见面试题", "docs/android面试/系统原理/DPMS常见面试题",
"docs/DPMS常见面试题", "docs/DPMS常见面试题",
"ams常见面试题.txt", "ams常见面试题.txt",

View File

@@ -0,0 +1,461 @@
## 已实现的节点类型
### 1. Switch节点多分支路由
- 后端根据字段值进行多分支路由支持 cases  default
- 前端已添加到节点工具箱使用 Operation 图标
- 执行类似条件节点根据 sourceHandle 过滤边
### 2. Merge节点合并分支
- 后端支持 merge_all、merge_first、merge_last 模式
- 策略array、object、concat
- 前端:已添加到节点工具箱
### 3. Wait节点等待条件
- 后端支持 condition、time 等待类型
- 功能:条件等待(轮询)、固定时间等待
- 前端已添加到节点工具箱使用 Timer 图标
### 4. JSON处理节点
- 后端支持 parse、stringify、extract、validate 操作
- 功能JSON解析、字符串化、路径提取、基本验证
- 前端:已添加到节点工具箱
### 5. 文本处理节点
- 后端支持 split、join、extract、replace、format 操作
- 功能:文本拆分、合并、正则提取、替换、模板格式化
- 前端已添加到节点工具箱使用 Edit 图标
### 6. 缓存节点
- 后端支持 get、set、delete、clear 操作
- 功能:内存缓存(单次执行会话内有效),支持 TTL
- 前端已添加到节点工具箱使用 Box 图标
## 实现细节
### 后端实现
- workflow_engine.py  execute_node 方法中添加了6个节点的执行逻辑
- Switch节点支持分支过滤类似条件节点
- 缓存节点使用内存存储_cache_store  _cache_timestamps
### 前端实现
- WorkflowEditor.vue 中添加了节点类型定义
- customNodeTypes 中注册了所有新节点使用 DefaultNode
- 添加了默认配置和图标导入
### 验证器更新
- workflow_validator.py 中添加了新节点类型到允许列表
## 使用方式
1. 在节点工具箱中找到新节点Switch、Merge、等待、JSON处理、文本处理、缓存
2. 拖拽到画布创建节点
3. 点击节点配置参数(在右侧属性面板)
4. 连接节点并执行工作流
所有节点已实现并通过 linter 检查。可以在工作流编辑器中测试这些新节点。
## 已实现的节点类型
### 1. 向量数据库节点vector_db
- 后端支持 search、upsert、delete 操作
- 功能:
- 向量相似度搜索(余弦相似度)
- 向量存储和更新
- 集合管理
- 实现:内存存储(生产环境建议使用 ChromaDB、Pinecone 
- 前端已添加到节点工具箱使用 Connection 图标
### 2. 日志节点log
- 后端支持 debug、info、warning、error 级别
- 功能:
- 记录日志消息
- 可选包含数据
- 集成系统日志记录器
- 前端已添加到节点工具箱使用 Document 图标
### 3. 错误处理节点error_handler
- 后端支持 notify、retry、stop 模式
- 功能:
- 捕获上游节点错误
- 错误重试(可配置重试次数和延迟)
- 错误通知(记录日志)
- 注意:简化实现,主要用于错误检测和通知
- 前端已添加到节点工具箱使用 Warning 图标
### 4. CSV处理节点csv
- 后端支持 parse、generate、convert 操作
- 功能:
- CSV解析支持表头
- CSV生成从字典列表或数组列表
- CSV格式转换改变分隔符等
- 实现:使用 Python 内置 csv 模块
- 前端已添加到节点工具箱使用 Document 图标
### 5. 对象存储节点object_storage
- 后端支持 upload、download、delete、list 操作
- 功能:
- 文件上传
- 文件下载
- 文件删除
- 文件列表
- 支持提供商s3、oss、cos
- 注意:当前为接口框架,实际使用需安装相应 SDK如 boto3、oss2
- 前端已添加到节点工具箱使用 Box 图标
## 实现细节
### 后端实现
- workflow_engine.py  execute_node 方法中添加了5个节点的执行逻辑
- 向量数据库使用内存存储_vector_store支持余弦相似度计算
- CSV处理使用 Python 内置 csv 模块
- 对象存储提供接口框架便于后续集成实际 SDK
### 前端实现
- WorkflowEditor.vue 中添加了节点类型定义
- customNodeTypes 中注册了所有新节点
- 添加了默认配置
### 验证器更新
- workflow_validator.py 中添加了新节点类型到允许列表
## 使用说明
1. 向量数据库节点:用于 RAG 应用和语义搜索
- 先使用 upsert 存储向量
- 使用 search 进行相似度搜索
1. 日志节点:用于调试和监控
- 设置日志级别和消息模板
- 可选择是否包含数据
1. 错误处理节点:用于错误捕获和处理
- 配置重试次数和延迟
- 选择错误处理模式
1. CSV处理节点用于数据处理
- parse将 CSV 文本解析为数组
- generate将数据生成为 CSV 文本
1. 对象存储节点:用于文件存储
- 当前为接口框架,实际使用需要:
- AWS S3安装 boto3
- 阿里云 OSS安装 oss2
- 腾讯云 COS安装 cos-python-sdk-v5
所有节点已实现并通过 linter 检查。可以在工作流编辑器中测试这些新节点。
## 已实现的节点类型
### 1. Slack节点slack
- 后端支持 send_message、create_channel、get_messages 操作
- 功能:
- 发送消息到频道
- 创建频道
- 获取频道消息
- 配置:需要配置 Slack Token
- 前端已添加到节点工具箱使用 Message 图标
### 2. 钉钉节点dingtalk/dingding
- 后端支持 send_message、create_group 操作
- 功能:
- 通过 Webhook 或 API 发送消息
- 创建群组
- 配置:需要配置 Webhook URL 或 Access Token
- 前端已添加到节点工具箱使用 Message 图标
### 3. 企业微信节点wechat_work/wecom
- 后端支持 send_message、create_group 操作
- 功能:
- 发送消息(需要先获取 access_token
- 创建群组
- 配置:需要配置 Corp ID、Corp Secret、Agent ID
- 前端已添加到节点工具箱使用 Message 图标
### 4. 短信节点sms
- 后端支持 send、batch_send 操作
- 功能:
- 发送短信
- 批量发送短信
- 支持提供商aliyun、tencent、twilio
- 注意:实际使用需要安装相应 SDK
- 前端已添加到节点工具箱使用 Message 图标
### 5. PDF处理节点pdf
- 后端支持 extract_text、generate、merge、split 操作
- 功能:
- 提取 PDF 文本
- 生成 PDF
- 合并多个 PDF
- 拆分 PDF
- 注意需要安装 PyPDF2  pdfplumber 
- 前端已添加到节点工具箱使用 Document 图标
### 6. 图像处理节点image
- 后端支持 resize、crop、convert、ocr 操作
- 功能:
- 图像缩放
- 图像裁剪
- 格式转换
- OCR 文字识别
- 注意需要安装 Pillow OCR 需要 pytesseract  tesseract-ocr
- 前端已添加到节点工具箱使用 Picture 图标
### 7. Excel处理节点excel
- 后端支持 read、write、convert、formula 操作
- 功能:
- 读取 Excel 文件
- 写入 Excel 文件
- 格式转换Excel ↔ CSV/JSON
- 公式计算
- 注意需要安装 openpyxl  pandas 
- 前端已添加到节点工具箱使用 Document 图标
## 实现细节
### 后端实现
- workflow_engine.py  execute_node 方法中添加了7个节点的执行逻辑
- 通信节点使用 HTTP API 调用(需要配置相应的 Token/Secret
- PDF/图像/Excel 处理节点提供接口框架,实际使用需要安装相应库
### 前端实现
- WorkflowEditor.vue 中添加了节点类型定义
- customNodeTypes 中注册了所有新节点
- 添加了默认配置和图标导入包括 Picture 图标
### 验证器更新
- workflow_validator.py 中添加了新节点类型到允许列表
## 依赖说明
### 通信节点
- Slack需要有效的 Slack Token
- 钉钉:需要 Webhook URL 或 Access Token
- 企业微信:需要 Corp ID、Corp Secret、Agent ID
- 短信:需要安装相应 SDK
- 阿里云pip install alibabacloud-dysmsapi20170525
- 腾讯云pip install tencentcloud-sdk-python
- Twiliopip install twilio
### 文件处理节点
- PDFpip install PyPDF2 pdfplumber
- 图像pip install PillowOCR 需要 pip install pytesseract 并安装 tesseract-ocr
- Excelpip install openpyxl pandas
所有节点已实现并通过 linter 检查。可以在工作流编辑器中测试这些新节点。注意:部分节点需要安装相应的依赖库才能正常使用。
## 已实现节点
- 子工作流节点subworkflow
- 功能:调用其他工作流;支持输入映射
- 说明当前为占位实现返回映射后的输入与目标 workflow_id后续可集成真正的子工作流执行
- 代码执行节点code
- 功能执行简易 Python 代码JS 执行为占位
- 安全使用受限 exec生产需更严格沙箱
- 默认result = input_data
- OAuth节点oauth
- 功能:获取/刷新 Token占位返回模拟 token
- 默认provider、client_id、client_secret、scopes
- 数据验证节点validator
- 功能基础类型校验支持 on_errorreject/continue/transform
- 默认 schema 空对象
- 批处理节点batch
- 功能:按批次拆分/分组/聚合数据;可选择等待完成
- 默认batch_size=100mode=split
## 后端
- backend/app/services/workflow_engine.py新增上述节点的执行逻辑占位或简化实现
- backend/app/services/workflow_validator.py允许的新节点类型列表已更新
## 前端
- frontend/src/components/WorkflowEditor/WorkflowEditor.vue
- 节点类型已加入工具箱iconssubworkflow/批处理用 Grid/Operationcode  Editvalidator/OAuth 用 Document
- customNodeTypes 已注册默认配置已添加
- 图标导入已补充 Picture之前图像节点用到
## 依赖说明
- 子工作流:需后续集成实际工作流调用
- 代码执行:当前仅受限 PythonJS 需集成运行时
- OAuth占位返回 mock token实际需对接各 provider
- 数据验证为简化版复杂校验可接入 jsonschema
- 批处理:基础分批逻辑;可按需扩展并行/异步处理
如需把子工作流执行接入真正的 WorkflowEngine、完善代码执行安全沙箱或接入真实 OAuth provider可继续迭代。

View File

@@ -0,0 +1,53 @@
### 工作流模板快速应用
在工具栏添加了“应用模板”按钮,支持:
1. 模板列表展示
- 从模板市场或工作流模板API加载模板
- 显示模板名称、描述、节点数、使用次数、评分等信息
- 支持搜索过滤(按名称、描述、分类)
1. 模板应用功能
- 一键应用:点击模板即可应用到当前工作流
- 智能ID映射自动重新生成节点和边的ID避免冲突
- 智能定位:新节点自动添加到画布右侧,不覆盖现有节点
- 自动布局:应用后自动执行布局,使工作流更清晰
1. 用户体验优化
- 模板卡片式展示,悬停高亮
- 显示模板统计信息(节点数、使用次数、评分)
- 精选模板标记
- 加载状态提示
### 使用方法
1. 点击工具栏的“应用模板”按钮
2. 在对话框中选择模板(可搜索)
3. 点击模板卡片即可应用
4. 模板节点会自动添加到画布,并执行自动布局
### 技术实现
- 模板加载优先从模板市场API获取失败则回退到工作流模板API
- ID冲突处理为每个模板节点生成新的唯一ID
- 位置计算:根据现有节点位置计算偏移量,避免重叠
- 自动布局:应用模板后自动执行层次布局算法
功能已集成到工作流编辑器中,可在 Agent 管理页面或工作流设计器中使用。

View File

@@ -1,23 +0,0 @@
## 现在可以测试了
请重新测试 Agent
1. 点击右上角“测试运行”
2. 执行应该能正常启动
3. 节点应该显示执行动画:
- 执行中的节点:蓝色边框 + 脉冲动画
- 已完成的节点:绿色边框
- 失败的节点:红色边框
如果仍有问题,请查看:
- 后端日志docker-compose -f docker-compose.dev.yml logs -f backend celery
- 前端控制台:查看 [rjb] 前缀的调试日志
现在链路调用应该可以正常工作了。

View File

@@ -0,0 +1,112 @@
## 查看日志的方法
### 方法1使用专用脚本推荐
运行以下命令查看 Switch 节点的详细日志:
cd /home/renjianbo/aiagent
python3 check_switch_logs.py
该脚本会显示:
- Switch 节点的匹配过程(字段值、匹配的分支)
- 分支过滤过程(保留/移除的边)
- 意图理解节点的输出
- 所有节点的输出摘要
### 方法2查看所有执行日志
运行以下命令查看完整的执行日志:
cd /home/renjianbo/aiagent
python3 check_execution_logs.py
### 方法3查看后端控制台日志
如果后端服务正在运行,日志会直接输出到控制台。查找包含 [rjb] Switch 的日志行。
### 方法4通过 API 查看
可以通过 API 获取执行日志:
# 获取执行ID从最近的执行记录中
# 然后访问:
GET /api/v1/execution_logs/executions/{execution_id}?node_id=switch-intent
## 修复内容
1. 日志保存到数据库Switch 节点的日志现在会通过 self.logger 保存到数据库的 execution_logs 
2. 更详细的日志信息:
- 匹配阶段:字段名、字段值、匹配的分支、处理后的输入数据
- 过滤阶段:过滤前后的边数、每条边的处理结果
1. 控制台日志:同时输出到控制台,便于实时查看
## 测试步骤
1. 执行一次 Agent 测试发送一条消息
2. 运行日志查看脚本:
   python3 check_switch_logs.py
3. 查看输出,重点关注:
- Switch节点匹配检查字段值是否正确提取
- Switch节点过滤后检查是否只保留了一条边
## 预期输出示例
Switch节点相关日志:
[1] 16:07:23.123 [INFO]
    节点: switch-intent (switch)
    消息: Switch节点匹配: field=intent, field_value=greeting, matched_case=greeting-handle
    数据:
      {
        "field": "intent",
        "field_value": "greeting",
        "matched_case": "greeting-handle",
        ...
      }
[2] 16:07:23.125 [INFO]
    节点: switch-intent (switch)
    消息: Switch节点分支过滤: branch=greeting-handle, 保留1条边移除5条边
    数据:
      {
        "branch": "greeting-handle",
        "edges_kept": 1,
        "edges_removed": 5
      }
如果仍有问题请运行 check_switch_logs.py 并分享输出我可以进一步分析。

View File

@@ -0,0 +1,119 @@
## 已创建的内容
### 1. Python 生成脚本
- 文件: backend/scripts/generate_chat_agent.py
- 功能: 自动生成并创建聊天智能体 Agent
- 状态: 已成功运行Agent 已创建到数据库
### 2. 详细说明文档
- 文件: 聊天智能体示例说明.md
- 内容: 工作流结构、节点说明、使用方法、配置要点、测试示例
### 3. JSON 配置文件
- 文件: 聊天智能体示例.json
- 功能: 可直接导入到平台的 Agent 配置
### 4. 数据库中的 Agent
- 名称: 智能聊天助手(完整示例)
- ID: 78ba9dfb-31fa-4550-833b-c44d4378cf6c
- 状态: 草稿draft
- 节点数: 15 个
- 连接数: 19 条
## 工作流特性
该示例展示了以下能力:
1. 记忆管理:使用 Cache 节点存储对话历史
2. 意图识别LLM 分析用户意图和情感
3. 多分支路由Switch 节点根据意图分发到 6 个处理分支
4. 上下文传递Transform 节点合并用户输入和记忆
5. 个性化回复:针对不同意图生成不同风格的回复
6. 多轮对话:支持上下文记忆和连贯对话
## 工作流结构
开始  查询记忆  合并上下文  意图理解  Switch路由
                                              ├─→ 问候处理
                                              ├─→ 问题回答
                                              ├─→ 情感回应
                                              ├─→ 请求处理
                                              ├─→ 告别回复
                                              └─→ 通用回复
                                              ↓
合并回复 → 更新记忆 → 格式化回复 → 结束
## 下一步操作
1. 查看 Agent
- 在 Agent 管理页面找到 智能聊天助手(完整示例)
- 点击“设计”按钮查看工作流
1. 配置 API 密钥
- 在工作流编辑器中,为每个 LLM 节点配置 API 密钥
- 确保模型提供商和模型名称正确
1. 测试 Agent
- 点击“测试”按钮
- 输入测试消息(如“你好”、“今天心情不错”等)
- 查看执行结果和回复
1. 发布 Agent
- 测试通过后,点击“发布”按钮
- Agent 状态变为“已发布”
- 可以点击“使用”按钮进行对话测试
1. 自定义扩展
- 根据需求修改 Prompt
- 添加新的意图分支
- 增强记忆功能
- 集成外部工具
## 文件位置
- 生成脚本: backend/scripts/generate_chat_agent.py
- 说明文档: 聊天智能体示例说明.md
- JSON 配置: 聊天智能体示例.json
所有文件已创建完成,可以直接使用。如需进一步定制或有问题,请告知。

View File

@@ -0,0 +1,472 @@
# 数美文本风险拦截实施方案
## 一、需求概述
在聊天页面ConversationActivity实现基于数美API的文本风险拦截功能根据风险等级显示不同级别的警告提示。
## 二、风险等级与提示对应关系
根据数美接口返回的 `riskLevel` 字段:
| riskLevel | 风险等级 | 提示内容 | 处理方式 |
|-----------|---------|---------|---------|
| PASS | 通过 | 无提示 | 正常发送消息 |
| REVIEW | 二级警告 | "聊天内容存在风险,请谨慎交流" | 显示警告,允许用户选择是否发送 |
| REJECT | 三级警告 | "当前聊天内容可能存在风险,请谨慎核实信息真实性" | 显示警告,建议用户修改内容 |
## 三、技术实现方案
### 3.1 架构设计
```
ConversationFragment (聊天界面)
TextRiskInterceptor (风险拦截器)
ShumeiApiClient (数美API客户端)
数美API服务器
```
### 3.2 核心组件
#### 3.2.1 TextRiskInterceptor风险拦截器
**职责**
- 在消息发送前拦截文本消息
- 调用数美API进行风险检测
- 根据风险等级决定是否允许发送或显示警告
**关键方法**
```java
public interface TextRiskInterceptor {
/**
* 检测文本风险
* @param text 待检测文本
* @param callback 检测结果回调
*/
void checkTextRisk(String text, RiskCheckCallback callback);
/**
* 风险检测回调
*/
interface RiskCheckCallback {
void onRiskCheckResult(RiskCheckResult result);
}
}
```
#### 3.2.2 ShumeiApiClient数美API客户端
**职责**
- 封装数美API调用逻辑
- 处理请求参数构建
- 解析响应结果
**关键参数**
- accessKey: "4OLLd2djEWRoCDVAbRAV"
- appId: "default"
- eventId: "text"
- type: "TEXTRISK"
- data.text: 待检测文本
- data.tokenId: 用户token
- data.ip: 用户IP
- data.deviceId: 设备ID
- data.nickname: 用户昵称
#### 3.2.3 RiskWarningDialog风险警告对话框
**职责**
- 显示二级/三级警告提示
- 提供用户操作选项(继续发送/取消/修改)
### 3.3 集成点
#### 3.3.1 消息发送拦截点
`ConversationFragment``ConversationInputPanel` 中,消息发送前进行拦截:
**位置**`ConversationInputPanel.sendTextMessage()` 或类似方法
**拦截流程**
1. 用户点击发送按钮
2. 获取输入框文本内容
3. 调用 `TextRiskInterceptor.checkTextRisk()` 进行风险检测
4. 根据检测结果:
- PASS直接发送消息
- REVIEW显示二级警告用户确认后发送
- REJECT显示三级警告建议用户修改
#### 3.3.2 警告提示显示位置
**方案一:对话框提示(推荐)**
- 在消息发送前弹出警告对话框
- 显示风险等级和提示内容
- 提供"继续发送"和"取消"按钮
**方案二:消息气泡提示**
- 在聊天界面中插入系统警告消息
- 显示在风险消息的上方或下方
- 使用灰色背景,区别于普通消息
**方案三:顶部横幅提示**
- 在聊天界面顶部显示警告横幅
- 持续显示一段时间后自动消失
- 可手动关闭
### 3.4 数据模型
#### 3.4.1 RiskCheckResult风险检测结果
```java
public class RiskCheckResult {
private String riskLevel; // PASS, REVIEW, REJECT
private String riskDescription; // 风险描述
private String riskLabel1; // 一级标签
private String riskLabel2; // 二级标签
private String riskLabel3; // 三级标签
private double probability; // 风险概率
private String filteredText; // 过滤后的文本
private List<RiskLabel> allLabels; // 所有风险标签
}
```
#### 3.4.2 响应解析
根据数美接口文档,关键字段:
- `code`: 1100 表示成功
- `riskLevel`: 风险等级PASS/REVIEW/REJECT
- `riskDescription`: 风险描述
- `allLabels`: 所有检测到的风险标签数组
- `filteredText`: 过滤后的文本(敏感词被替换为**
## 四、实现步骤
### 步骤1创建数美API客户端
**文件**`app/src/main/java/com/xunpaisoft/social/im/risk/ShumeiApiClient.java`
**功能**
- 封装数美API调用
- 构建请求参数
- 解析响应结果
- 错误处理
**关键代码**
```java
public class ShumeiApiClient {
private static final String API_URL = "http://api-text-bj.fengkongcloud.com/text/v4";
private static final String ACCESS_KEY = "4OLLd2djEWRoCDVAbRAV";
private static final String APP_ID = "default";
private static final String EVENT_ID = "text";
private static final String TYPE = "TEXTRISK";
public void checkTextRisk(String text, String tokenId, String ip,
String deviceId, String nickname,
Map<String, String> extra,
RiskCheckCallback callback) {
// 构建请求参数
// 发送POST请求
// 解析响应
// 回调结果
}
}
```
### 步骤2创建风险拦截器
**文件**`app/src/main/java/com/xunpaisoft/social/im/risk/TextRiskInterceptor.java`
**功能**
- 在消息发送前拦截
- 调用数美API检测
- 根据风险等级处理
**关键代码**
```java
public class TextRiskInterceptor {
private ShumeiApiClient apiClient;
public void interceptBeforeSend(String text, InterceptCallback callback) {
// 获取用户信息tokenId, ip, deviceId, nickname等
// 调用数美API检测
// 根据riskLevel处理
}
}
```
### 步骤3创建警告对话框
**文件**`app/src/main/java/com/xunpaisoft/social/im/risk/RiskWarningDialog.java`
**功能**
- 显示二级/三级警告
- 提供用户操作选项
**关键代码**
```java
public class RiskWarningDialog {
public static void showReviewWarning(Context context, String message,
OnConfirmListener listener) {
// 显示二级警告:"聊天内容存在风险,请谨慎交流"
}
public static void showRejectWarning(Context context, String message,
OnConfirmListener listener) {
// 显示三级警告:"当前聊天内容可能存在风险,请谨慎核实信息真实性"
}
}
```
### 步骤4集成到ConversationFragment
**修改文件**`uikit/src/main/java/cn/wildfire/chat/kit/conversation/ConversationFragment.java`
**集成点**:消息发送方法
**关键代码**
```java
// 在发送文本消息前拦截
private void sendTextMessage(String text) {
// 先进行风险检测
textRiskInterceptor.interceptBeforeSend(text, new InterceptCallback() {
@Override
public void onInterceptResult(RiskCheckResult result) {
if (result.getRiskLevel().equals("PASS")) {
// 风险等级为PASS直接发送
doSendMessage(text);
} else if (result.getRiskLevel().equals("REVIEW")) {
// 二级警告
RiskWarningDialog.showReviewWarning(
getContext(),
"聊天内容存在风险,请谨慎交流",
new OnConfirmListener() {
@Override
public void onConfirm() {
doSendMessage(text);
}
@Override
public void onCancel() {
// 取消发送
}
}
);
} else if (result.getRiskLevel().equals("REJECT")) {
// 三级警告
RiskWarningDialog.showRejectWarning(
getContext(),
"当前聊天内容可能存在风险,请谨慎核实信息真实性",
new OnConfirmListener() {
@Override
public void onConfirm() {
// 仍然允许发送,但建议用户修改
doSendMessage(text);
}
@Override
public void onCancel() {
// 取消发送,建议用户修改内容
}
}
);
}
}
@Override
public void onError(String error) {
// 检测失败,可以选择直接发送或提示错误
// 建议:检测失败时允许发送,避免影响用户体验
doSendMessage(text);
}
});
}
```
## 五、性能优化
### 5.1 异步处理
- 风险检测在后台线程进行
- 不阻塞UI线程
- 显示加载提示
### 5.2 缓存机制
- 相同文本内容可以缓存检测结果
- 减少重复API调用
- 提高响应速度
### 5.3 超时处理
- 设置API调用超时时间建议1-2秒
- 超时后允许发送,避免影响用户体验
- 记录超时日志
### 5.4 频率限制
- 避免频繁调用API
- 可以设置检测间隔如500ms内不重复检测
- 减少服务器压力
## 六、用户体验设计
### 6.1 加载提示
- 检测过程中显示"正在检测..."提示
- 使用ProgressDialog或Toast
- 避免用户等待焦虑
### 6.2 警告对话框设计
**二级警告REVIEW**
- 标题:"风险提示"
- 内容:"聊天内容存在风险,请谨慎交流"
- 按钮:"继续发送" / "取消"
- 样式:黄色警告图标
**三级警告REJECT**
- 标题:"高风险提示"
- 内容:"当前聊天内容可能存在风险,请谨慎核实信息真实性"
- 按钮:"仍然发送" / "取消并修改"
- 样式:红色警告图标
### 6.3 错误处理
- API调用失败时记录日志但不阻止发送
- 网络异常时,提示用户但允许发送
- 避免因检测失败影响正常聊天
## 七、数据获取
### 7.1 用户信息获取
- `tokenId`: 从用户登录信息获取
- `ip`: 从网络请求中获取或使用设备IP
- `deviceId`: 从设备信息获取Android ID或设备唯一标识
- `nickname`: 从当前用户信息获取
### 7.2 额外信息extra
- `topic`: 会话ID或话题ID
- `atId`: 发送者用户ID
- `room`: 群聊ID如果是群聊
- `receiveTokenId`: 接收者用户ID
## 八、测试方案
### 8.1 测试用例
**测试用例1正常文本**
- 输入:"你好"
- 预期riskLevel = PASS直接发送
**测试用例2二级风险文本**
- 输入:包含敏感词但风险较低
- 预期riskLevel = REVIEW显示二级警告
**测试用例3三级风险文本**
- 输入:"加个好友吧 qq12345"
- 预期riskLevel = REJECT显示三级警告
**测试用例4API调用失败**
- 模拟网络异常
- 预期:允许发送,记录错误日志
**测试用例5API超时**
- 模拟超时情况
- 预期:允许发送,记录超时日志
### 8.2 性能测试
- API响应时间测试
- 并发检测测试
- 内存占用测试
## 九、注意事项
### 9.1 隐私保护
- 用户聊天内容需要加密传输
- 遵守数据保护法规
- 不存储敏感内容
### 9.2 用户体验
- 检测速度要快,避免用户等待
- 检测失败不应阻止正常聊天
- 警告提示要清晰但不影响使用
### 9.3 成本控制
- 数美API可能有调用费用
- 考虑是否需要限制检测频率
- 可以只检测文本消息,不检测图片/视频
### 9.4 兼容性
- 确保不影响现有聊天功能
- 向后兼容,不影响旧版本
- 考虑不同Android版本的兼容性
## 十、实施优先级
### 第一阶段(核心功能)
1. 实现数美API客户端
2. 实现风险拦截器
3. 集成到消息发送流程
4. 实现二级/三级警告对话框
### 第二阶段(优化)
1. 添加缓存机制
2. 优化性能
3. 完善错误处理
4. 添加日志记录
### 第三阶段(增强)
1. 支持更多消息类型检测
2. 添加统计功能
3. 优化用户体验
4. 添加配置管理
## 十一、代码示例
### 11.1 数美API调用示例
```java
// 构建请求参数
Map<String, Object> requestParams = new HashMap<>();
requestParams.put("accessKey", "4OLLd2djEWRoCDVAbRAV");
requestParams.put("appId", "default");
requestParams.put("eventId", "text");
requestParams.put("type", "TEXTRISK");
Map<String, Object> data = new HashMap<>();
data.put("text", text);
data.put("tokenId", getUserTokenId());
data.put("ip", getUserIp());
data.put("deviceId", getDeviceId());
data.put("nickname", getCurrentUserNickname());
Map<String, String> extra = new HashMap<>();
extra.put("topic", conversationId);
extra.put("atId", getCurrentUserId());
extra.put("room", getGroupId()); // 如果是群聊
extra.put("receiveTokenId", getTargetUserId());
data.put("extra", extra);
requestParams.put("data", data);
// 发送POST请求
// 解析响应获取riskLevel
```
### 11.2 风险等级判断
```java
String riskLevel = result.getRiskLevel();
if ("PASS".equals(riskLevel)) {
// 通过,直接发送
} else if ("REVIEW".equals(riskLevel)) {
// 二级警告
} else if ("REJECT".equals(riskLevel)) {
// 三级警告
}
```
## 十二、总结
本方案提供了完整的数美文本风险拦截实现思路,包括:
- 架构设计
- 核心组件
- 集成方案
- 性能优化
- 用户体验
- 测试方案
实施时建议分阶段进行,先实现核心功能,再逐步优化和完善。

View File

@@ -196,15 +196,20 @@ nav:
- Obsidian笔记体系/Projects/saars开发/aiapply/工作流测试工具.md - Obsidian笔记体系/Projects/saars开发/aiapply/工作流测试工具.md
- Obsidian笔记体系/Projects/saars开发/aiapply/工作流Workflowvs Agent智能体的区别.md - Obsidian笔记体系/Projects/saars开发/aiapply/工作流Workflowvs Agent智能体的区别.md
- Obsidian笔记体系/Projects/saars开发/aiapply/智能需求分析与解决方案生成器_使用说明.md - Obsidian笔记体系/Projects/saars开发/aiapply/智能需求分析与解决方案生成器_使用说明.md
- Obsidian笔记体系/Projects/saars开发/aiapply/未命名 2.md
- Obsidian笔记体系/Projects/saars开发/aiapply/未命名 3.md
- Obsidian笔记体系/Projects/saars开发/aiapply/未命名 4.md
- Obsidian笔记体系/Projects/saars开发/aiapply/未命名 5.md
- Obsidian笔记体系/Projects/saars开发/aiapply/未命名 6.md
- Obsidian笔记体系/Projects/saars开发/aiapply/未命名 7.md
- Obsidian笔记体系/Projects/saars开发/aiapply/电商系统用户订单处理流程设计方案.md - Obsidian笔记体系/Projects/saars开发/aiapply/电商系统用户订单处理流程设计方案.md
- Obsidian笔记体系/Projects/saars开发/aiapply/节点配置中的温度和最大Token数是什么意思.md - Obsidian笔记体系/Projects/saars开发/aiapply/节点配置中的温度和最大Token数是什么意思.md
- Obsidian笔记体系/Projects/saars开发/aiapply/项目低代码智能体功能扩展.md - Obsidian笔记体系/Projects/saars开发/aiapply/项目低代码智能体功能扩展.md
- Obsidian笔记体系/Projects/saars开发/aiapply/# 创建Agent经验总结.md
- Obsidian笔记体系/Projects/saars开发/aiapply/aiagent节点类型扩展说明.md
- Obsidian笔记体系/Projects/saars开发/aiapply/下一步可选方向.md
- Obsidian笔记体系/Projects/saars开发/aiapply/个人简历.md
- Obsidian笔记体系/Projects/saars开发/aiapply/可新增节点类型建议.md
- Obsidian笔记体系/Projects/saars开发/aiapply/已完成的增强功能.md
- Obsidian笔记体系/Projects/saars开发/aiapply/已实现工作流模板快速应用功能。功能总结如下.md
- Obsidian笔记体系/Projects/saars开发/aiapply/开发低代码智能体平台 - 完整开发提示词.md
- Obsidian笔记体系/Projects/saars开发/aiapply/查看日志的方法.md
- Obsidian笔记体系/Projects/saars开发/aiapply/聊天智能机器人(苏苏).md
- Obsidian笔记体系/Projects/知你-调测/数美文本风险拦截实施方案.md
- gerrit: - gerrit:
- gerrit/gerrit上传代码详细指南.md - gerrit/gerrit上传代码详细指南.md
- gerrit/gerrit分支规范.md - gerrit/gerrit分支规范.md