1. 项目概述:意图识别与工具智能路由系统
在构建AI助手时,工具选择是一个关键挑战。当系统工具数量从22个扩展到38个后,原有的10维意图识别体系开始失效,导致LLM频繁选错工具。本文介绍了一套17维关键词矩阵与三表联动架构,通过精确的意图识别和智能路由机制,将工具发现率从75%提升至100%。
这个系统的核心价值在于:
- 解决了工具数量膨胀带来的"选择困难症"
- 实现了从用户自然语言到精准工具推荐的自动化链路
- 通过动态System Prompt注入,引导LLM做出正确选择
- 建立了可扩展的架构,新增工具只需配置无需改代码
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 系统架构设计
2.1 三表联动机制
系统采用三个核心数据表协同工作:
| 表名 | 功能 | 数据结构示例 | 维护频率 |
|---|---|---|---|
| INTENT_CATEGORIES | 定义意图维度及关键词 | {"data_analysis":["数据分析","图表"...]} |
新增工具时 |
| INTENT_TOOL_MAPPING | 意图到工具映射 | {"data_analysis":["data_processor"...]} |
新增工具时 |
| INTENT_PRIORITY_MAP | 工具优先级配置 | {"data_analysis":{"recommended":[...]}} |
工具更新时 |
2.2 工作流程
- 输入解析:用户输入"帮我分析销售数据并生成柱状图"
- 意图识别:匹配到"data_analysis"意图(置信度0.85)
- 工具映射:获取对应工具列表[data_processor, data_visualization...]
- 优先级过滤:筛选出推荐工具集
- Prompt注入:动态生成包含决策树的System Prompt
- 工具执行:LLM选择data_visualization生成图表
3. 核心实现细节
3.1 意图识别算法
置信度计算采用多维度加权评估:
python复制def calculate_confidence(matched_keywords, total_keywords):
# 基础分:匹配关键词占比
base_score = len(matched_keywords) / total_keywords
# 权重调整因子
weights = {
'exact_match': 1.2, # 完全匹配
'partial_match': 0.8, # 部分匹配
'new_tool': 1.1 # 新工具关键词
}
# 应用权重
weighted_score = sum(
weights[get_match_type(kw)] for kw in matched_keywords
) / total_keywords
# 最终置信度(0-1范围)
return min(1.0, base_score * 1.5 + weighted_score * 0.5)
3.2 动态Prompt生成
System Prompt采用模块化设计:
python复制def build_system_prompt(intent, confidence):
prompt_parts = [CORE_PROMPT]
# 添加意图特定指引
if intent == "data_analysis":
prompt_parts.append(DATA_ANALYSIS_GUIDE)
# 根据置信度调整提示强度
if confidence > 0.8:
prompt_parts.append(STRONG_RECOMMENDATION)
elif confidence > 0.5:
prompt_parts.append(MODERATE_SUGGESTION)
return "\n\n".join(prompt_parts)
4. 关键问题与解决方案
4.1 多义词冲突处理
典型冲突案例:"PDF"可能属于:
- document_processing(文档处理)
- knowledge(知识检索)
解决方案:
- 建立关键词冲突检测机制
- 设置优先级:具体操作 > 通用检索
- 添加排除词列表
4.2 新工具集成流程
标准化接入步骤:
- 确定工具所属意图类别(或新建)
- 添加工具关键词到INTENT_CATEGORIES
- 配置INTENT_TOOL_MAPPING关系
- 设置优先级(recommended/alternative)
- 编写决策树指引
5. 性能优化策略
5.1 缓存机制
python复制@lru_cache(maxsize=1000)
def get_tools_for_intent(intent):
return INTENT_TOOL_MAPPING.get(intent, [])
5.2 异步处理
python复制async def parallel_intent_detection(text):
tasks = [
detect_intent(text, category)
for category in INTENT_CATEGORIES
]
return await asyncio.gather(*tasks)
6. 实测效果与数据
测试数据集(500条真实用户请求):
| 指标 | 优化前 | 优化后 | 提升 |
|---|---|---|---|
| 准确率 | 72% | 98% | +26% |
| 响应时间 | 420ms | 280ms | -33% |
| 新工具发现率 | 60% | 100% | +40% |
| 用户满意度 | 3.8/5 | 4.7/5 | +24% |
7. 扩展应用场景
这套架构可应用于:
- 多模态工具选择(图像+文本处理)
- 跨平台API路由
- 企业内部系统集成
- IoT设备控制指令分发
8. 开发者实践建议
-
关键词设计原则:
- 覆盖常见表达方式("柱状图"、"条形图")
- 包含同义词和近义词
- 区分大小写敏感场景
-
调试技巧:
python复制# 启用详细日志
logging.basicConfig(
level=logging.DEBUG,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
- 测试策略:
- 边界测试:极短/极长输入
- 模糊测试:错别字、混合语言
- 压力测试:高并发请求
9. 典型问题排查指南
9.1 工具未被正确推荐
检查步骤:
- 验证意图识别结果
- 检查映射表配置
- 查看优先级设置
- 分析System Prompt内容
9.2 响应时间过长
优化方向:
- 引入缓存层
- 预计算常用路径
- 并行化处理
10. 演进路线
未来优化方向:
- 自适应关键词权重调整
- 用户反馈驱动的意图优化
- 多LLM协同决策机制
- 基于使用频率的动态路由
这套系统在实际应用中展现了强大的适应能力。在一个电商客服场景的部署中,仅用2周就完成了从22个到58个工具的扩展,同时保持了95%以上的准确率。关键在于建立了标准化的工具接入流程和持续优化的反馈机制。
