不要错误地构建AI代理

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

不要错误地构建AI代理

最近我经常被问到关于生产中的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)

汇智网翻译整理,转载请标明出处