摘要
Andrej Karpathy 最近在YC分享关于人工智能时代软件的观点,他认为软件可以分为1.0、2.0、3.0三种编程范式,每种编程范式有其优劣点,而且目前是共存的。回顾最近一年AI coding的发展历程(可以阅读Cursor相关文章),以及Multi-Agent Systems目前存在的在现实问题中具有巨大潜力同时也有失败率较高的问题,再结合自己近期的实践,我非常赞同他的观点,并且进一步认为:使用LLM或者Agent解决现实问题(或者说“接管数字世界”),现阶段的可行路径应当是:整体流程应当由人在洞察LLM优缺点的基础上进行设计和控制,流程的每个环节在提供充足的知识和数据的基础上由LLM决策和执行。本文将介绍我们最近在客户上云场景初步实践了基于openAPI代码和AI coding技术构建上云智能体的技术方案,这个方案目前还不够成熟,但是已经能够证明:“充足的数据和知识加工”、“在洞察LLM优缺点的基础上由人设计和控制整体流程”、“每个环节交由LLM在给定的数据和知识上进行自主决策和执行”等三个核心设计理念,是解决实际问题的一条正确路径,能够充分减少LLM幻觉,提高任务执行正确率。欢迎大家一起讨论改进。
一、上云智能体的业务场景
上云智能体服务的场景是:云用户通过自然语言完成云资源的自动化创建和统一安全管控,以及轻量级数据开发PoC。
二、如何构建上云智能体
1、为什么不将openapi注册成mcp server,然后在应用中直接使用mcp?
原因有二:1、mcp server需要事先注册api,且api的数量一般限于几十个,如果过多的api,LLM选择api的效果和性能都有问题。但是阿里云openapi的数量是数以万计的,上云场景客户可能会使用任意一个openapi,无法事先指定api范围;2、mcp server完全依赖LLM选择api、推理api参数值。但是实际上目前的LLM不仅在选择api和推理api参数值上存在明显的幻觉问题,更重要的是存在大量api的入参依赖于其他api的出参,在前一个api还没有被执行的情况下,后一个api无法确定入参。所以api调用关系的推理、api之间参数值的传递等工作,需要通过LLM以外的手段实现,通过这些额外的手段给LLM提供精准数据,才有可能有效避免LLM幻觉,提升精度。
2、为什么要通过AI coding构建上云智能体?
本文所说的AI coding是指:在事先加工阿里云openapi数据和代码的基础上,利用LLM自动生成代码,通过多轮迭代满足客户的上云需求。AI coding的好处是:(1)面对数以万计的openapi,LLM基于用户问句和api知识,选择合适的api和推理api参数,生成代码,可以避免预先选择少量api的问题;(2)AI coding并不是一次性端到端的满足用户需求,而是通过多轮迭代逐步生成代码的方式响应用户需求,可以解决api之间参数依赖的问题,提升智能体正确率。
3、AI coding如何构建上云智能体?
(1)openapi数据加工
主要是解析api文档、参数说明;识别api参数值之间的关系;加工api代码;构建RAG。
(2)关键模型强化学习
推测Qwen基模已经学习了openapi的公开数据,但是由于openapi接口存在多个版本,部分api参数有明确的来源约束等原因,需要通过强化学习提升Qwen对api调用关系、api参数值知识的记忆程度和遵循程度,减少代码生成时的幻觉。
(3)设计智能体整体流程
整体流程包括识别问句意图、识别api、推理参数值;生成代码;代码执行结果分析;问句改写等。整体流程本质上是工作流模版,但是工作流实例的每个环节的调用参数、流程是否继续循环或者结束,完全由LLM决定。
(4)LLM自主决策和执行代码
结合PE、RAG、ICL等技术,LLM从加工后的openapi数据中获取知识和样例,自主根据用户问句生成和执行代码,自主分析执行结果,自主判断是否已满足用户需求,从而决定是否进入下一轮工作流实例或者结束流程。
三、技术实现
1、技术架构
(1)数据来源:阿里云产品的官网文档、阿里云openAPI
(2)基础设置:百炼、自行开发的代码执行器
(3)AI coding在线部分:Multi agent链路,多个agent自主决策和执行,直到agent判断用户需求已经满足或者超时退出。
(4)AI coding离线部分:包括基于LLM的数据挖掘和关键模型的强化学习等工作。前者负责给multi agent加工高质量的数据和知识,后者负责提升LLM对open api知识的理解和记忆程度,以及生成代码时的代码规范遵循程度。
(5)上云智能体:用户交互日志用来记录goodcase和badcase,回流日志;官网文档RAG,用于补充一些云产品的最佳实践和特殊用法;效果评测智能体,用于跟踪版本效果和性能;代码缓存器用于提升高频需求的响应性能。
2、AI coding构建上云智能体要解决的关键技术问题
(1)如何减少LLM生成代码时的幻觉?LLM发生幻觉时,如何解决幻觉带来的问题?
LLM幻觉是不可避免的,减少幻觉的有效方法有:每一次调用LLM时的问题要聚焦、提供高质量的prompt、ICL、领域内强化学习等。目前上云智能体侧重于通过加工阿里云openapi的文档和代码,在每一轮LLM生成代码时,力求提供准确的api说明和基于上一轮执行结果的推理出来的参数值。同时,上云智能体在设计整体流程时,下一轮生成代码时会将上一轮的代码和报错信息作为prompt,可以有效解决上一轮幻觉导致的代码错误在本轮再次出现,从而减小幻觉出现的概率。同时高质量的ICL,以及通过回流goodcase和badcase开展强化学习也是关键。
(2)如何提高LLM选择api和推理参数值的精度?
从调用情况分析,Qwen基模应当已经学习过阿里云openapi的数据,有一定的api选择和参数值推理能力。但是由于云产品的openapi存在一到多个版本、部分参数值需要调用其他api获取等问题,Qwen基模对云资源的创建关系、api之间的调用关系、api之间的参数传递关系都存在精度问题。所以,上云智能体通过离线挖掘api参数文档、加工api样例代码等多种方法,丰富LLM接收到的api知识,从而提升api选择和参数值推理的精度。
(3)api参数值的推理,特别是依赖于前一个api出参的api参数值如何精准“传递”?
上云智能体通过问句改写的方式实现参数值传递,即:每一轮迭代的最后一步都是针对智能体当前计算结果,修改问句,从而实现前一轮api的出参传递给下一轮api。
(4)如何进行问句改写?
不同于搜广推query改写的目的是扩大召回和提升精度,上云智能体问句改写的目的是提醒智能体在下一轮生成代码时,目前已有哪些信息,基于这些信息进一步推理还需要调用哪些api以及已有哪些参数值。所以,上云智能体需要理解和获取api调用关系、api参数值关系,才能进行有效的问句改写。
四、当前效果
以下由AI创建的云资源均已被释放,所以目前无法访问,仅作为创建结果的说明。
1、创建单个云资源
用户需求:在杭州建一个4C8G的ECS
上云智能体:
(1)首先分析用户意图,识别云资源产品名称和相关参数;(视频时间:0:07)
(2)然后生成代码执行步骤和代码;(视频时间:0:19)
(3)第一轮代码执行,基于已执行结果生成下一轮新的问句;(视频时间:0:38)
(4)进入第二轮循环(视频时间:1:00)
(5)第二轮代码执行,基于已执行结果生成下一轮新的问句;(视频时间:1:09)
(6)判断用户需求得到满足,结束任务。(视频时间:1:26)
2、云资源访问限制
用户需求:在杭州建一个4C8G的ECS,我IP 是,140.205.11.239,可以连上去。
上云智能体:
(1)首先分析用户意图,识别云资源产品名称和相关参数;(视频时间:0:11)
(2)然后生成代码(视频时间:0:20)
(3)第一轮代码执行结束,基于已执行结果生成下一轮新的问句(视频时间:0:38)
(4)进入第二轮循环(视频时间:1:18)
(5)第二轮代码执行结束,基于已执行结果生成下一轮新的问句(视频时间:1:22)
(6)进入第三轮循环(视频时间:1:47)
(7)第三轮代码执行结束,基于已执行结果生成下一轮新的问句(视频时间:1:53)
(8)判断用户需求得到满足,结束任务。(视频时间:2:11)
3、创建多种云资源并设置拓扑关系
用户需求:我的IP是:140.205.11.251,帮我在杭州创建一个轻量级 WEB 服务环境,有公网EIP挂在SLB上作为入口,下挂2个ECS作为服务器,并且可以访问1台RDS MySQL作为数据库。
上云智能体:
(1)首先分析用户意图,识别云资源产品名称和相关参数;(视频时间:0:14)
(2)第一轮分析api调用关系;(视频时间:0:36)
(3)第一轮代码执行结束,基于已执行结果生成下一轮新的问句,还需要13步动作需要执行;(视频时间:0:58)
(4)进入第二轮循环;(视频时间:2:11)
(5)生成第二轮代码;(视频时间:2:26)
(6)第二轮代码执行结束,基于已执行结果生成下一轮新的问句,还需要11步动作需要执行;(视频时间:2:40)
(7)进入第三轮循环;(视频时间:3:38)
(8)第三轮代码执行结束,基于已执行结果生成下一轮新的问句,还需要9步动作需要执行;(视频时间:3:58)
(9)经过8轮循环,判断用户需求得到满足,结束任务。(视频时间:5:25)
4、上一轮AI生成的代码出错下一轮自动纠错
用户需求:帮我在上海构建一个消息队列压测环境,需要一个RockMQ实例,前面配合2台ECS,一台作为生产者,一台作为消费者。这两台ECS都有公网IP便于调试。
上云智能体:
(1)首先分析用户意图,识别云资源产品名称和相关参数;(视频时间:0:06)
(2)第一轮生成代码执行步骤;(视频时间:0:18)
(3)第一轮AI生成的代码;(视频时间:0:30)
(4)第一轮代码执行结束,基于已执行结果生成下一轮新的问句,还需要6步动作需要执行;(视频时间:0:40)
(5)第二轮代码执行结束,基于已执行结果生成下一轮新的问句,还需要4步动作需要执行;(视频时间:1:42)
(6)第三轮代码执行结束,由于改步代码执行报错,所以问句保持不变,进入下一轮循环;(视频时间:2:40)
(7)第四轮代码执行结束,基于已执行结果生成下一轮新的问句,还需要1步动作需要执行;(视频时间:3:15)
(8)后面几轮代码持续出错,查看代码报错信息,提示某个参数,AI没有推理出参数值;(视频时间:5:32)
(9)第十轮代码执行结束,判断用户需求得到满足,结束任务。(视频时间:6:22)
五、后续展望
1、性能
(1)模型加速:大模型推理加速、大模型代码生成加速。
(2)框架提速:代码合并执行、代码并行执行。
(3)优化代码缓存器,提高命中率。
2、效果
(1)除了openapi数据外,继续清洗阿里云官网文档数据,丰富云产品关系知识。
(2)提升api选择、api参数值推理、参数值合规性检查、以及代码生成的强化学习效果。
(3)提升问句改写效果。
来源 | 阿里云开发者公众号
作者 | 伍胥、森泽、叶临、鸿度、马权、苗刀