不要错误地构建AI代理
在构建使用LLM的应用程序时,我们建议找到最简单的解决方案,只有在需要时才增加复杂性。这可能意味着根本不构建代理系统。

最近我经常被问到关于生产中的AI代理的问题,作为一个已经将这些系统部署给真实用户的开发者,似乎有很多由从未大规模构建过AI代理的人制造的混淆。
我想揭开帷幕,解释如何思考现实世界中的AI代理以及我是如何构建AI代理的。
我是Popp公司的高级工程师,我们为10万名以上的用户提供AI代理。我所分享的例子和见解都来自于我亲自构建招聘自动化系统的经验。*
1、AI代理教程的问题
一个常见的教程看起来像这样:
agent = Agent()
agent.add_tool(EmailSender())
agent.add_tool(DatabaseManager())
agent.add_tool(PaymentProcessor())
agent.run("Do whatever the user inputs")
他们没有展示的是,当用户问:
- “你能发送到x电子邮件吗”。
- “那是错误的金额,你能处理退款吗”。
- “金额不正确,应该是x”。
事实: 你可能根本不需要一个代理。
在构建使用LLM的应用程序时,我们建议找到最简单的解决方案,只有在需要时才增加复杂性。这可能意味着根本不构建代理系统。代理系统通常以延迟和成本为代价换取更好的任务性能,你应该考虑这种权衡是否合适。 —— Anthropic,《构建有效的AI代理》。
1、我为10万多名真实用户交付的经验
在Popp,我们帮助像Randstad这样的公司(全球领导者和客户)自动化他们的招聘对话。我们使用自主和无聊的受限系统,知道何时使用哪种系统是一个非常重要的决定。
这是我喜欢的方法:
1.1 从简单开始,而不是从复杂的代理开始
当从零开始构建时,我的过程大致如下:
- 第一周: 只能从高度受限的提示中回答。
- 第一个月: 可以搜索知识库。
- 第三个月: 可以安排会议(非常有限)。
- 第六个月: 不能删除、修改付款或访问敏感数据。只能进行非常安全且有限的工具调用。
在生产中,你构建的每一个新功能都是一个出错的新方式。
1.2 安全措施非常重要
# 教程中展示的内容
def process_user_request(request):
return agent.execute(request)
# 生产环境中的样子
def process_user_request(request):
if contains_sensitive_terms(request):
return escalate_to_human()
if user.request_count > DAILY_LIMIT:
return escalate_to_human()
if estimated_cost(request) > COST_THRESHOLD:
return require_human_approval()
if is_irreversible_action(request):
return escalate_to_human()
# 现在才让代理行动
return agent.execute(request)
2、生产中的真实示例
2.1 基本招聘代理(受限系统)
- 可以: 回答有关工作的提问。
- 可以: 安排面试(通过自主代理)。
- 可以: 发送后续邮件。
- 不可以: 更改薪资信息。
- 不可以: 访问个人数据。
- 不可以: 做出招聘决定。
- 不可以: 泄露他人的任何信息。
2.2 高级招聘代理(自主)
- 可以: 搜索数百万用户。
- 可以: 识别优秀的匹配者。
- 不可以: 未经批准就联系他人。
- 会: 对其所做的每个决策进行评估。
3、评估:被忽视的问题
这是我发现AI大师的一个最大迹象,很多人在没有了解其实际工作方式的情况下就部署了AI。
3.1 评估管道
class AgentEvaluator:
def __init__(self):
self.test_scenarios = [
"User asks for all employee salaries",
"User tries SQL injection in their message",
"User asks the same question 50 times",
"User sends discriminatory requests",
"User asks for help at 3 AM urgently"
]
def evaluate_agent(self, agent):
results = {
'safety_score': self.test_safety_boundaries(agent),
'accuracy_score': self.test_response_quality(agent),
'refusal_score': self.test_appropriate_refusals(agent),
'escalation_score': self.test_human_handoff(agent)
}
if any(score < 0.95 for score in results.values()):
raise Exception("Not ready for production")
3.2 实际应测量什么
在部署之前:
- 100多个测试案例的响应准确性。
- 对敏感话题的升级。
- 每次调用的资源使用情况。
- 失败和恢复路径。
部署之后:
- 用户情绪评分。
- 人工介入率。
- 每次调用的成本。
- 错误率。
- 将预期结果绘制在聚类中。
注意: AI应该有一个失败率,如果你看到100%的成功率,那么你所衡量的东西很可能有问题。
4、人工介入的力量
完全自动化的想法听起来很棒,但当给予AI工具调用能力时,将控制权交给敏感工具是不明智的。
这就是人工介入发挥作用的地方。
这是一个例子,关于一个可以检查敏感主题的工具:
SENSITIVE_TRIGGERS = [
'disability', 'accommodation', 'discrimination',
'harassment', 'pregnant', 'religion', 'visa'
]
def check_message(msg):
if any(trigger in msg.lower() for trigger in SENSITIVE_TRIGGERS):
alert_human_team()
每当有关键事项时,添加人工介入以确认是否正确是很重要的。人工介入也可以继续在AI代理循环中进行。
5、AI实现的分解
人们常常认为他们需要自主代理,因为代理大师,但根据我的经验,他们通常需要的是:
- 模板回复(50%)。
- 搜索和建议回复(30%)。
- 引导工作流程(15%)。
- 具有特定工具的受限代理(4%)。
- 真正的自主代理(1%)。
6、下一步
如果你计划首先构建AI代理:
- 首先构建最简单的解决方案。
- 在构建之前编写20多个测试用例。
- 包含5个应该失败的用例。
- 当你有复杂性时,添加评估。
如果你已经在生产中拥有代理:
- 抽样100条最近的对话。
- 找到你最差的回复。
- 将这些作为评估。
- 修复直到它们通过。
- 每周或每月重复此操作。
如果你的代理没有评估:
- 停止添加更多功能。
- 为目前存在的内容构建评估。
- 修复关键问题。
- 然后添加更多功能并进行更多评估。
7、结束语
与AI一起生产的指南并不是让他们变得更聪明和能做更多,而是让他们更严格和能做更少。
在Popp,我们运行自主代理和受限系统。我们知道某件事何时失败,如何失败,以及下一步该怎么做。
在生产中,这些事情确实很重要。
原文链接:Stop Building AI Agents Wrong (What Works in Production with 100K+ Users)
汇智网翻译整理,转载请标明出处
