提升Agent稳定性的实践思考:大模型AI工程的挑战与解决方案
提升Agent稳定性的实践思考:大模型AI工程的挑战与解决方案
一、背景
随着大模型技术的迅速发展,各种基于大模型的应用正不断涌现并扩展到多个业务场景,包括AIGC生成图像、小蜜机器人、客服机器人及自动文档处理等。得益于Agent的规划能力,这些AI应用能够处理日益复杂的任务。然而,在复杂场景中,Agent的稳定性问题也逐渐显露,例如回答的幻觉问题、知识库训练质量、工程重试和异常处理等,都直接影响了Agent的稳定性。因此,尽管基础模型的能力至关重要,本文将从工程的角度讨论一些同样影响Agent应用稳定性的因素和解决办法。作者在盒马AI智能应用项目中参与了多个项目,包括智能小蜜机器人、智能客服和AIGC等,本文内容主要基于盒马智能客服的实际应用场景而总结而成。
二、Agent的简单介绍
AI Agent,即人工智能代理,是一种能够感知环境、作出决策并执行操作的智能实体。与传统的人工智能不同,AI Agent 具备自主思考并使用工具逐步实现目标的能力。例如,当用户要求AI Agent处理退款业务时,它能够通过与用户的交互确认意图(如退款商品、退款原因和退款比例),并自动调用退款系统进行处理,而无需人工干预每一个步骤。
关键模块包括:
- Prompt:提示词;
- Chain:将多个任务或操作按一定顺序组合实现特定目标的方法;
- LLM:大模型基座;
- Tools:工具的参数定义、描述定义和逻辑实现;
- Actions:Agent规划下一步的行动。
三、Agent面临的稳定性问题
以电商客服机器人作为典型应用场景,业务背景为电商,知识结构以知识库(以问答形式维护)为主,用户主要为售前咨询或下单顾客,Agent的主要功能是回答用户问题。
3.1 幻觉问题
3.1.1 原因
幻觉问题是LLM(大型语言模型)应用开发中常见的问题,指的是模型在生成文本时产生的错误信息、无根据的断言或虚假内容。尽管这些内容在表面上看似合乎逻辑,但却不基于事实或真实数据。其主要原因包括:
- 数据训练不足或质量不高,模型基于有限或不准确的数据进行训练,从而导致生成内容缺乏真实依据;
- 模型复杂性,复杂的模型更容易产生不合理的联想和推断;
- 语言和语义的复杂性,自然语言本身具有模糊性和多义性,可能导致模型产生误解。
3.1.2 RAG增强
通过基于知识召回的RAG(Retrieval-Augmented Generation)技术,可以初步解决80%的幻觉问题;
通过提示词的方式,即使在RAG没有相关知识的情况下,也要提示模型不要给出无依据的回答,以缓解幻觉问题;
通过算法微调语料训练,让模型学习真实的、正确的客服数据。
不同的业务场景对RAG的要求是不同的,例如在内外小蜜系列中,对于RAG的研究是非常深入的,包括检索和生成等。然而,在Agent场景中,重点仍然是规划能力和工具的精准调用,但RAG仍然是Agent的重要模块,是其稳定性的保障。较好的RAG实践可以参考《RAG优化方案与实践》。
3.1.3 Memory补充
在许多业务场景中,用户自身的信息直接影响回答的准确性。例如,当用户询问“我的XX卡折扣是多少?”时,若没有用户的身份信息,Agent的回答可能不准确。通过将用户的身份信息(如会员等级)纳入到prompt中,可以更准确地回答用户问题。例如:
user: 我的XX卡折扣是多少?
aiAssistant: 您好,您是尊贵的高级会员,XX卡可以享受6折的折扣优惠;
3.1.4 工程优化
-
Query重写辅助RAG更好的召回:通过query重写,补全语句中的缺失实体或错误语义,提升RAG召回的成功率。
-
知识的脏数据和及时性问题:知识库中的过时数据可能会干扰RAG的质量,因此需要建立有效的知识维护和管理机制。
3.2 语料质量问题
高质量的线上业务数据对于微调至关重要。当前电商领域的语料中包含大量的卡片内容,导致大模型在理解能力上受到限制。为此,需要将语料语言化,确保模型能够更好地理解用户的意图。
3.2.1 问题
大模型对于卡片内容的理解能力偏弱,尤其是在客服场景中,许多交互可能涉及复杂的JSON数据结构,这会使得模型在处理过程中产生困难。
3.2.2 解决思路:语言化
通过将复杂的结构化数据转化为自然语言描述,简化模型的理解过程。例如:
user: 我买的苹果保质期多久?
aiAssistant: 请问您是要确认XX时间买的XX元的XX商品订单吗?(目前这个订单状态是XX)
这样,Agent将能够更有效地理解并响应用户提问。
3.2.3 需要优质的打标体系
建立精准的标注体系和打标机制,确保数据质量,并通过小二的业务直觉来识别和解决异常案例,以不断提升系统的稳定性。
3.3 工程稳定性
由于Agent的输出内容和格式存在一定的随机性,因此在ReAct模式下,可能会出现循环调用的问题。此外,Agent还可能面临多种异常情况,因此需要对Agent框架进行完善的异常处理和兜底设计。
3.3.1 控制循环轮数
为避免Agent在异常情况下陷入循环,通过限制调用次数或设定时间上限来解决潜在的死循环问题。
3.3.2 Agent异常时的合理尝试
针对不同的异常情况,合理决定是否重试,包括LLM调用超时和工具调用异常等。
3.3.3 人工托管的兜底机制
在重要场景下,AI应用应具备人工托管能力,以保障用户体验和业务连续性。当Agent无法解决问题时,及时转人工处理。
3.3.4 Agent输出格式兼容性
由于不同模型的输出格式可能存在差异,需要在工程中实现JSON格式的兼容,以确保Agent的输出符合预期。
4. 监控
从监控的角度来看,系统应对多个关键节点进行有效监控。各个节点的监控能够帮助系统更好地实现性能和稳定性保障。
4.1 LLM维度的监控
4.2 Tool调用监控
监控工具调用的耗时情况,以便及时优化。
4.3 RAG监控
通过监控大模型和工具的调用情况,可以为后续的优化和稳定性提升提供依据。