253 lines
12 KiB
Markdown
253 lines
12 KiB
Markdown
# iConsulting Agent 三层架构设计
|
||
|
||
## 问题背景
|
||
|
||
当前 AI 回复存在以下问题:
|
||
- 回复过于冗长,没有抓住用户核心需求
|
||
- 重复性表达多,效率低
|
||
- 缺乏对用户意图的准确理解
|
||
- 没有自我评估机制
|
||
|
||
## 设计目标
|
||
|
||
作为 Agent,应该做到:
|
||
1. **准确理解用户意图** - 基于对话上下文、历史经验判断用户当前需要什么
|
||
2. **自我评估** - 判断 AI 是否已经给出用户想要的答案
|
||
3. **主动行动** - 如果未达到用户需求,主动调用工具寻找解决方案
|
||
4. **简洁高效** - 回答抓住重点,简短有效
|
||
|
||
## 三层架构
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────────┐
|
||
│ 用户消息输入 │
|
||
└─────────────────────────┬───────────────────────────────────┘
|
||
│
|
||
▼
|
||
┌─────────────────────────────────────────────────────────────┐
|
||
│ 第一层:意图分类器 │
|
||
│ IntentClassifier │
|
||
│ ┌─────────────────────────────────────────────────────────┐│
|
||
│ │ • 分析用户意图类型(简单查询/深度咨询/需要行动/闲聊) ││
|
||
│ │ • 确定建议的最大回复长度 ││
|
||
│ │ • 识别是否需要调用工具 ││
|
||
│ │ • 检测是否为后续问题 ││
|
||
│ │ • 提取关键实体(签证类型、职业等) ││
|
||
│ └─────────────────────────────────────────────────────────┘│
|
||
│ 输出:IntentResult { type, maxResponseLength, needsTools } │
|
||
└─────────────────────────┬───────────────────────────────────┘
|
||
│
|
||
▼
|
||
┌─────────────────────────────────────────────────────────────┐
|
||
│ 第二层:ReAct Agent │
|
||
│ Claude API + Tool Loop │
|
||
│ ┌─────────────────────────────────────────────────────────┐│
|
||
│ │ 思考 (Thought) ││
|
||
│ │ └─► 分析用户真实需求 ││
|
||
│ │ └─► 评估当前信息是否足够 ││
|
||
│ │ └─► 决定是否需要调用工具 ││
|
||
│ │ ││
|
||
│ │ 行动 (Action) ││
|
||
│ │ └─► 调用合适的工具获取信息 ││
|
||
│ │ └─► 支持最多10轮工具调用 ││
|
||
│ │ ││
|
||
│ │ 观察 (Observation) ││
|
||
│ │ └─► 分析工具返回结果 ││
|
||
│ │ └─► 决定是否需要继续行动 ││
|
||
│ │ ││
|
||
│ │ 生成 (Generate) ││
|
||
│ │ └─► 根据意图分类结果控制回复长度 ││
|
||
│ │ └─► 聚焦用户核心问题 ││
|
||
│ └─────────────────────────────────────────────────────────┘│
|
||
│ 输出:AI 回复文本 │
|
||
└─────────────────────────┬───────────────────────────────────┘
|
||
│
|
||
▼
|
||
┌─────────────────────────────────────────────────────────────┐
|
||
│ 第三层:回复质量门控 │
|
||
│ ResponseGate │
|
||
│ ┌─────────────────────────────────────────────────────────┐│
|
||
│ │ 质量检查: ││
|
||
│ │ • 长度检查 - 是否超过建议长度 ││
|
||
│ │ • 相关性检查 - 是否回答了用户问题 ││
|
||
│ │ • 冗余检查 - 是否包含重复/冗余表达 ││
|
||
│ │ • 完整性检查 - 是否包含必要信息 ││
|
||
│ │ • 语气检查 - 是否符合场景要求 ││
|
||
│ │ ││
|
||
│ │ 优化处理: ││
|
||
│ │ • 裁剪过长回复(在句子边界处裁剪) ││
|
||
│ │ • 移除冗余表达 ││
|
||
│ └─────────────────────────────────────────────────────────┘│
|
||
│ 输出:优化后的最终回复 │
|
||
└─────────────────────────┬───────────────────────────────────┘
|
||
│
|
||
▼
|
||
┌─────────────────────────────────────────────────────────────┐
|
||
│ 最终回复输出 │
|
||
└─────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
## 第一层:意图分类器 (IntentClassifier)
|
||
|
||
### 意图类型
|
||
|
||
| 类型 | 说明 | 建议长度 | 需要工具 |
|
||
|------|------|----------|----------|
|
||
| `SIMPLE_QUERY` | 简单查询,直接回答 | 300字 | 否 |
|
||
| `DEEP_CONSULTATION` | 深度咨询,需要知识库 | 800字 | 是 |
|
||
| `ACTION_NEEDED` | 需要执行操作 | 500字 | 是 |
|
||
| `CHAT` | 闲聊寒暄 | 100字 | 否 |
|
||
| `CLARIFICATION` | 需要追问澄清 | 150字 | 否 |
|
||
| `CONFIRMATION` | 确认/否定 | 200字 | 否 |
|
||
|
||
### 分类规则
|
||
|
||
1. **关键词匹配** - 快速识别意图模式
|
||
2. **上下文分析** - 判断是否为后续问题
|
||
3. **实体提取** - 识别签证类型、职业等关键信息
|
||
4. **工具推荐** - 根据意图推荐合适的工具
|
||
|
||
### 代码位置
|
||
|
||
`packages/services/conversation-service/src/infrastructure/claude/intent-classifier.ts`
|
||
|
||
## 第二层:ReAct Agent
|
||
|
||
### ReAct 思维框架
|
||
|
||
在 System Prompt 中注入 ReAct 思维模式:
|
||
|
||
```
|
||
<thinking_framework>
|
||
在回答用户问题时,请遵循以下思维框架:
|
||
|
||
1. 理解 (Understand)
|
||
- 用户的核心问题是什么?
|
||
- 用户的真实需求是什么?
|
||
- 这是后续问题还是新问题?
|
||
|
||
2. 评估 (Evaluate)
|
||
- 我当前掌握的信息是否足够?
|
||
- 是否需要调用工具获取更多信息?
|
||
- 之前的对话是否已经回答过类似问题?
|
||
|
||
3. 行动 (Act)
|
||
- 如果信息不足,调用合适的工具
|
||
- 优先使用:知识库搜索 > 经验召回 > 网络搜索
|
||
|
||
4. 生成 (Generate)
|
||
- 直接回答核心问题
|
||
- 避免冗余的开场白和结束语
|
||
- 控制回复长度,抓住重点
|
||
</thinking_framework>
|
||
```
|
||
|
||
### 工具循环
|
||
|
||
- 最多支持 10 轮工具调用
|
||
- 每轮:思考 → 调用工具 → 观察结果 → 决定下一步
|
||
- 当信息足够时停止调用,生成最终回复
|
||
|
||
### 代码位置
|
||
|
||
`packages/services/conversation-service/src/infrastructure/claude/prompts/system-prompt.ts`
|
||
|
||
## 第三层:回复质量门控 (ResponseGate)
|
||
|
||
### 检查项
|
||
|
||
| 检查项 | 说明 | 未通过处理 |
|
||
|--------|------|------------|
|
||
| `length` | 长度是否超标 | 裁剪至建议长度 |
|
||
| `relevance` | 是否与问题相关 | 标记警告 |
|
||
| `redundancy` | 是否有冗余表达 | 移除冗余 |
|
||
| `completeness` | 是否信息完整 | 标记警告 |
|
||
| `tone` | 语气是否合适 | 标记警告 |
|
||
|
||
### 冗余表达清单
|
||
|
||
```
|
||
- "根据我的了解"
|
||
- "让我来帮您"
|
||
- "非常感谢您的咨询"
|
||
- "希望以上信息对您有所帮助"
|
||
- "如果您还有其他问题"
|
||
- ...
|
||
```
|
||
|
||
### 代码位置
|
||
|
||
`packages/services/conversation-service/src/infrastructure/claude/response-gate.ts`
|
||
|
||
## 集成流程
|
||
|
||
```typescript
|
||
// claude-agent.service.ts 伪代码
|
||
|
||
async sendMessage(message, history) {
|
||
// 第一层:意图分类
|
||
const intent = intentClassifier.classify(message, history);
|
||
|
||
// 构建带 ReAct 框架的 System Prompt
|
||
const systemPrompt = buildSystemPrompt({
|
||
...config,
|
||
intentHint: intent, // 注入意图信息
|
||
});
|
||
|
||
// 第二层:ReAct Agent 处理
|
||
const response = await this.claudeClient.chat({
|
||
systemPrompt,
|
||
messages: history,
|
||
tools: intent.needsTools ? this.getTools() : [],
|
||
maxTokens: this.calculateMaxTokens(intent),
|
||
});
|
||
|
||
// 第三层:回复质量门控
|
||
const gateResult = responseGate.check(response, intent, message);
|
||
|
||
// 返回优化后的回复
|
||
return gateResult.optimizedResponse || response;
|
||
}
|
||
```
|
||
|
||
## 预期效果
|
||
|
||
### 改进前
|
||
```
|
||
用户:189签证要多少分?
|
||
|
||
AI:非常感谢您的咨询!关于澳大利亚189独立技术移民签证,
|
||
这是一个非常重要的移民类别。让我来为您详细解答。
|
||
|
||
首先,189签证是一种打分制签证,需要达到一定的分数才能获邀。
|
||
根据目前的政策...(以下省略500字)
|
||
|
||
希望以上信息对您有所帮助!如果您还有其他问题,欢迎继续咨询。
|
||
```
|
||
|
||
### 改进后
|
||
```
|
||
用户:189签证要多少分?
|
||
|
||
AI:189签证需要至少65分才能提交EOI。
|
||
目前获邀分数线约为85-95分,具体取决于职业。
|
||
|
||
主要加分项:年龄、英语、工作经验、学历、州担保等。
|
||
```
|
||
|
||
## 文件清单
|
||
|
||
| 文件 | 状态 | 说明 |
|
||
|------|------|------|
|
||
| `intent-classifier.ts` | ✅ 已创建 | 意图分类器 |
|
||
| `response-gate.ts` | ✅ 已创建 | 回复质量门控 |
|
||
| `system-prompt.ts` | 🔄 待更新 | 加入 ReAct 框架 |
|
||
| `claude-agent.service.ts` | 🔄 待更新 | 集成三层架构 |
|
||
|
||
## 后续优化方向
|
||
|
||
1. **机器学习分类** - 用训练数据替代规则分类
|
||
2. **动态长度调整** - 根据反馈自动调整建议长度
|
||
3. **个性化门控** - 根据用户偏好调整检查规则
|
||
4. **A/B 测试** - 对比优化前后的用户满意度
|