1. 优化技能描述,明确触发场景
Agent技能路由的核心在于每个技能描述的质量。像"数据分析助手"或"通用办公工具"这样模糊的描述会让模型混淆,导致误选。相反,你应该专注于定义技能何时应该被使用(即触发场景)。
- 反面示例:
技能名称:PPT生成器 描述:负责生成PPT。 - 正面示例:
技能名称:商务场景PPT生成器 描述:当用户需要创建报告材料、融资演讲、季度总结或演示文档时使用。
Anthropic的渐进式披露原则(在Claude中使用)强调了这一点:模型首先读取技能名称和描述来决定加载哪个技能。因此,投入精力编写可区分、场景聚焦的描述——把它们当作向量搜索中的"标题和摘要"。场景越清晰,命中率越高。
2. 构建技能树进行分层路由
当你有几十个甚至几百个技能时,避免将它们全部扁平化。相反,将技能组织成"技能树",以减少模型的决策负担。
- 第1步:按大领域分类 例如:研发、运营、营销、财务。
- 第2步:在领域内细分 在研发下,添加代码生成、代码审查、测试用例生成等子类别。
这种分层方法缩小了搜索空间。模型首先选择一个领域,然后选择子类别,最后选择具体技能——类似于大规模Agent系统在生产环境中的运作方式。
3. 添加负样本,明确何时不使用技能
很多开发者忽略了这一点:不仅要告诉模型何时使用技能,还要告诉它何时不使用。这能大幅减少"误触发"。
- 示例:
技能名称:SQL生成器 描述:仅用于生成SQL查询。不要用于数据库设计或性能优化。技能名称:前端代码生成器 描述:仅用于前端代码生成。不要用于后端API开发。
在技能描述中加入"何时不使用"是顶级AI社区的最佳实践,因为它能强化模型对技能边界的理解。
4. 对大型技能集实施召回+重排序
当技能数量达到数百甚至更多时,不要让大语言模型直接从整个池中选择。相反,采用"召回+重排序"工作流,类似于检索增强生成(RAG):
- 召回候选:使用基于嵌入或关键词搜索来检索最相关的10个技能。
- LLM重排序:将这10个候选传给LLM做最终选择。
以下是一个简化的代码示例(使用Python和一个假设的嵌入库):
from embedding_library import EmbeddingModel, retrieve_top_k
# 第1步:通过嵌入搜索检索前10个技能
user_query = "生成一个对列表排序的Python函数"
top_10_skills = retrieve_top_k(user_query, k=10)
# 第2步:传给LLM进行最终重排序
llm_prompt = f'''给定用户查询:"{user_query}",
根据相关性对以下技能进行排序并选择最佳的一个:
{top_10_skills}
'''
final_skill = llm_client.generate(llm_prompt)
这种方法将技能路由转化为可扩展的检索问题,是高级Agent研究中广泛使用的技术。
结论
随着Agent技能集不断扩展,将技能路由视为一个检索和语义匹配的挑战。通过优化描述、分层技能、添加负样本和实施召回重排序,你将确保你的Agent始终选择正确的技能——即使有数百个选项。这些策略不仅仅是理论上的,它们已经在工业级AI开发中得到实战验证,将使你的Agent(以及你的技术面试)脱颖而出。