16 KiB
16 KiB
04 - Conversation Strategist Agent (策略顾问) 设计详解
1. 核心职责
Strategist 是系统中的幕后军师。它的输出不直接展示给用户,而是为 Coordinator 提供对话策略建议。它替代了旧架构中 StrategyEngineService 的阶段判断和引导逻辑。
核心能力:
- 情绪感知 -- 分析用户当前的情绪状态(积极/中立/犹豫/抗拒)
- 阶段判断 -- 判断对话处于哪个咨询阶段(开场/了解需求/信息收集/评估推荐/异议处理/转化促成)
- 转化信号检测 -- 识别用户是否释放了购买意向信号
- 信息缺口分析 -- 判断还缺哪些关键信息,以及收集优先级
- 策略推荐 -- 建议 Coordinator 下一步应该做什么(继续收集信息/推进评估/处理异议/促成转化)
- 语气调节 -- 建议回复的语气和节奏
设计原则:Strategist 是 Coordinator 的私人顾问,用户永远看不到它的输出。 它帮助 Coordinator 做更好的对话决策,而不是直接生成用户回复。
2. 模型与参数
{
model: 'claude-sonnet-4-20250514', // 情商和推理能力要求高
max_tokens: 1500, // 策略建议不需要太长
temperature: 0.3, // 允许少量创造性(策略建议需要灵活性)
system: [
{
type: 'text',
text: strategistPrompt,
cache_control: { type: 'ephemeral' }
}
],
}
选用 Sonnet 的理由:
- 需要深层次的情绪分析和对话理解
- 需要综合考虑商业目标和用户体验的平衡
- 策略建议的质量直接影响转化率
3. 可用工具 (Available Tools)
Strategist 只有 1 个工具:
3.1 get_user_context
{
name: 'get_user_context',
description: '获取用户的历史背景信息和过往对话记忆,用于制定更精准的对话策略。',
input_schema: {
type: 'object',
properties: {
query: {
type: 'string',
description: '检索用户记忆的查询,如"用户的购买意向和顾虑"'
}
},
required: ['query']
}
}
Strategist 不需要 search_knowledge,因为它不回答政策问题。它只需要理解用户是谁、想什么、担心什么。
4. System Prompt 要点
# 身份
你是 iConsulting 的对话策略顾问。你的建议仅供 Coordinator 参考,不会展示给用户。
# 核心目标
在确保用户体验的前提下,最大化咨询转化率。转化路径:
1. 免费咨询 → 收集信息 → 初步评估 → 付费详细评估(¥99-199)
2. 付费评估 → 推荐方案 → 预约人工专家对接
# 对话阶段定义
- GREETING: 开场寒暄,建立信任(1-2轮)
- DISCOVERY: 了解需求,初步分类(2-3轮)
- INFO_COLLECTION: 收集评估所需信息(3-5轮)
- ASSESSMENT: 展示评估结果和推荐方案(1-2轮)
- OBJECTION_HANDLING: 处理用户顾虑和异议(1-3轮)
- CONVERSION: 促成付费或专家对接(1-2轮)
- FOLLOW_UP: 售后跟进(持续)
# 分析维度
1. 用户情绪:enthusiastic / positive / neutral / hesitant / resistant / frustrated
2. 转化信号:
- 强信号:询问价格、如何付款、下一步怎么做
- 中信号:频繁追问细节、表达时间紧迫感
- 弱信号:问了3个以上问题、主动分享个人信息
- 负信号:表达"太贵了""再考虑""不急"
3. 信息缺口优先级:
- P0(评估必需):年龄、学历、工作经验
- P1(精准匹配):院校、年收入、行业
- P2(细化方案):语言能力、家庭情况、时间规划
# 策略原则
- 不要一次问超过2个问题
- 每3轮信息收集后给一个小结或正面反馈
- 用户表现出犹豫时,先共情再提供事实
- 不要过早推销付费服务,先让用户感受到价值
- 检测到强转化信号时,建议 Coordinator 适时引入付费评估
5. 输入/输出格式
输入 (Coordinator 传入)
interface StrategistInput {
/** 对话摘要:最近几轮的概括 */
conversationSummary: string;
/** Coordinator 判断的当前阶段 */
currentStage: string;
/** 用户最新一条消息 */
latestUserMessage?: string;
/** 已收集的用户信息键值对 */
collectedInfo?: Record<string, unknown>;
/** 当前对话轮次 */
turnCount?: number;
}
输出 (返回给 Coordinator)
interface StrategistOutput {
/** 策略建议(最核心的内容) */
strategy_advice: {
/** 建议的下一步行动 */
recommended_next_action:
| 'continue_collecting_info' // 继续收集信息
| 'provide_assessment' // 给出评估结果
| 'address_objection' // 处理异议
| 'offer_paid_service' // 推荐付费服务
| 'connect_expert' // 推荐人工专家
| 'provide_policy_info' // 提供政策信息
| 'build_rapport' // 建立关系(闲聊/共情)
| 'summarize_progress'; // 小结当前进展
/** 行动的具体建议描述 */
action_detail: string;
/** 信息收集优先级(如果推荐继续收集) */
missing_info_priorities: Array<{
field: string; // 字段名
priority: 'P0' | 'P1' | 'P2';
suggested_question: string; // 建议的提问方式
}>;
};
/** 转化信号分析 */
conversion_signals: {
signal_strength: 'strong' | 'medium' | 'weak' | 'negative';
signals_detected: string[]; // 检测到的具体信号
conversion_readiness: number; // 0-100 转化就绪度
};
/** 情绪分析 */
sentiment_analysis: {
current_mood: 'enthusiastic' | 'positive' | 'neutral' | 'hesitant' | 'resistant' | 'frustrated';
mood_trend: 'improving' | 'stable' | 'declining';
key_concerns: string[]; // 用户当前主要顾虑
};
/** 语气调节建议 */
tone_adjustment: {
suggested_tone: 'professional' | 'warm' | 'encouraging' | 'empathetic' | 'urgent';
response_length: 'short' | 'medium' | 'long';
should_use_emoji: boolean;
special_notes: string; // 特殊注意事项
};
/** 阶段建议 */
stage_assessment: {
current_stage: string;
should_transition: boolean;
suggested_next_stage?: string;
transition_reason?: string;
};
}
6. 触发时机 (When to Trigger)
Coordinator 在以下场景调用 invoke_strategist:
| 场景 | 触发条件 | 目的 |
|---|---|---|
| 对话初期定调 | 第 2-3 轮对话时 | 获取初始策略定位 |
| 用户情绪变化 | 用户语气/态度明显变化 | 及时调整对话策略 |
| 信息收集中期 | 每收集 2-3 条信息后 | 判断是否该给评估了 |
| 转化决策点 | 评估结果呈现后 | 判断是否该推付费服务 |
| 异议出现 | 用户表达顾虑/犹豫 | 获取处理建议(配合 Objection Handler) |
| 对话停滞 | 用户回复变短/间隔变长 | 获取重新激活策略 |
不应触发的场景:
- 第一轮开场白(还没有足够信息做策略分析)
- 用户提的是纯政策问题(直接调 Policy Expert 即可)
- 对话已经进入支付流程
调用频率控制:建议每 2-3 轮调用一次,避免每轮都调(浪费 token)。
7. 内部循环 (Internal Loop)
Strategist 的内部循环非常简洁,通常 1 轮即可完成:
┌─────────────────────────────────────────────────┐
│ Strategist Internal Loop (max 2 turns) │
│ │
│ Turn 0: 分析输入 │
│ ├── 如果 Coordinator 传入的信息足够 │
│ │ └── 直接生成策略建议(大多数情况) │
│ │ │
│ ├── 如果需要更多用户历史 │
│ │ └── get_user_context() 获取用户记忆 │
│ │ │
│ Turn 1: 综合分析 │
│ ├── 结合用户记忆 + 对话摘要 │
│ └── 生成策略建议 │
└─────────────────────────────────────────────────┘
Strategist 的设计偏向轻量级:快速分析、快速返回。它不需要搜索知识库,不需要多轮推理。
8. 与其他 Agent 的关系
┌──────────────┐ invoke_strategist ┌──────────────┐
│ │ ──────────────────────────────────→ │ │
│ Coordinator │ StrategistOutput │ Strategist │
│ │ ←────────────────────────────────── │ │
└──────┬───────┘ └──────┬───────┘
│ │
│ Coordinator 根据策略建议决定: │ get_user_context
│ ↓
│ ┌────────────────────────────────────┐ ┌──────────────┐
│ │ 如果 recommended = 'address_objection' │ │ Knowledge │
│ │ → invoke_objection_handler │ │ Service │
│ │ │ │ (Memory) │
│ │ 如果 recommended = 'provide_assessment' │ └──────────────┘
│ │ → invoke_assessment_expert │
│ │ │
│ │ 如果 recommended = 'provide_policy_info'│
│ │ → invoke_policy_expert │
│ │ │
│ │ 如果 recommended = 'offer_paid_service' │
│ │ → generate_payment │
│ └────────────────────────────────────┘
│
│ Strategist 输出 → Coordinator 的下一次决策参考
│ (不缓存,每次调用都是独立判断)
与旧架构的对应关系:
| 旧架构 | 新架构 |
|---|---|
StrategyEngineService.evaluateTransition() |
Strategist 的 stage_assessment |
StrategyEngineService.buildStageGuidance() |
Strategist 的 strategy_advice |
DEFAULT_CONSULTING_STRATEGY 中的 8 阶段状态机 |
Strategist LLM 自主判断阶段 |
程序化的 detectUserIntents() |
Strategist 的 sentiment_analysis + conversion_signals |
核心区别:旧架构用规则引擎判断阶段转移,新架构用 LLM 做整体性判断,更灵活、更能理解语境。
9. 示例场景
场景 1:信息收集中期 -- 用户开始犹豫
Coordinator 调用:
{
"tool": "invoke_strategist",
"input": {
"conversationSummary": "用户是一位35岁的金融从业者,已告知学历为本科(非百强大学),年收入约60万人民币,工作经验10年。上一轮用户主动分享了这些信息。这一轮用户说'好的,其实我也不确定自己到底适不适合移民'",
"currentStage": "INFO_COLLECTION",
"latestUserMessage": "好的,其实我也不确定自己到底适不适合移民",
"collectedInfo": {
"age": 35,
"education": "本科",
"annualIncome": 600000,
"totalYearsOfExperience": 10,
"currentIndustry": "金融"
},
"turnCount": 6
}
}
返回结果:
{
"strategy_advice": {
"recommended_next_action": "build_rapport",
"action_detail": "用户开始出现犹豫情绪,此时不宜继续追问信息。建议先肯定用户已经分享的信息,给出一些积极反馈(如年龄和工作经验在优才计划中是加分项),让用户感受到希望。然后自然过渡到给一个初步评估,让用户看到具体可能性。",
"missing_info_priorities": [
{
"field": "university",
"priority": "P1",
"suggested_question": "暂不追问,等用户情绪稳定后再自然引出"
},
{
"field": "languageSkills",
"priority": "P2",
"suggested_question": "可在评估时顺带确认"
}
]
},
"conversion_signals": {
"signal_strength": "weak",
"signals_detected": ["主动分享了较多个人信息", "但出现了犹豫表达"],
"conversion_readiness": 35
},
"sentiment_analysis": {
"current_mood": "hesitant",
"mood_trend": "declining",
"key_concerns": ["对自身条件缺乏信心", "移民决策本身的不确定性"]
},
"tone_adjustment": {
"suggested_tone": "encouraging",
"response_length": "medium",
"should_use_emoji": false,
"special_notes": "先共情'确实移民是个大决定',然后用已有信息给出一些积极评价,避免继续追问"
},
"stage_assessment": {
"current_stage": "INFO_COLLECTION",
"should_transition": false,
"suggested_next_stage": null,
"transition_reason": "虽然信息基本够做初步评估,但用户情绪需要先稳定。建议在下一轮给出鼓励性的初步反馈后,再过渡到评估阶段。"
}
}
场景 2:用户释放强转化信号
Coordinator 调用:
{
"tool": "invoke_strategist",
"input": {
"conversationSummary": "用户32岁,清华大学硕士,8年IT经验。已完成评估,TTPS B类高度推荐(88分)。上一轮展示了评估结果,用户回复'这个评估很详细!那如果我想正式申请,下一步应该怎么做?'",
"currentStage": "ASSESSMENT",
"latestUserMessage": "这个评估很详细!那如果我想正式申请,下一步应该怎么做?",
"collectedInfo": {
"age": 32,
"education": "硕士",
"university": "清华大学",
"totalYearsOfExperience": 8,
"currentIndustry": "IT/科技"
},
"turnCount": 8
}
}
返回结果:
{
"strategy_advice": {
"recommended_next_action": "offer_paid_service",
"action_detail": "用户主动询问下一步,这是非常强的转化信号。建议:1)先肯定用户的条件确实很好(TTPS B类高匹配),增强信心;2)说明免费咨询只能给到初步方向,付费详细评估可以提供完整的材料清单、时间规划、风险评估;3)自然引出付费评估服务(¥99),强调性价比。不要硬推,用'如果您想更详细了解'的方式。",
"missing_info_priorities": []
},
"conversion_signals": {
"signal_strength": "strong",
"signals_detected": [
"主动询问下一步行动",
"对评估结果表达积极认可",
"使用了感叹号表达兴奋"
],
"conversion_readiness": 85
},
"sentiment_analysis": {
"current_mood": "enthusiastic",
"mood_trend": "improving",
"key_concerns": []
},
"tone_adjustment": {
"suggested_tone": "professional",
"response_length": "medium",
"should_use_emoji": false,
"special_notes": "保持专业,不要因为用户热情就过度推销。提供清晰的选项:付费评估 or 预约专家。让用户自己选择。"
},
"stage_assessment": {
"current_stage": "ASSESSMENT",
"should_transition": true,
"suggested_next_stage": "CONVERSION",
"transition_reason": "用户已认可评估结果并主动询问下一步,时机成熟,进入转化阶段。"
}
}