编辑 | 蔡芳芳
策划 | 李忠良
人工智能应用开发正在逐步成为各行业的核心创新驱动力,CUI 式的对话助手、串联业务流程的 Agent 或是内嵌在原有业务逻辑中的 AI 模块,都在不断拓展面向用户的新应用场景。然而,在实际的 AI 应用中,确保 AI 技术与具体业务需求紧密结合仍然是一个复杂的挑战。
AI 赋能应用开发,行业与技术边界将会如何重塑?日前 InfoQ《极客有约》X QCon 直播栏目特别邀请了阿里巴巴技术专家黄建磊、百度架构师 & 文心智能体平台技术负责人马根明与字节跳动技术专家王城波,在 QCon 全球软件开发大会 2024 上海站即将召开之际,共同探讨 AI 应用开发中的技术挑战和解决方案。
部分精彩观点如下:
在 10 月 18-19 日将于上海举办的 QCon 全球软件开发大会上,我们特别设置了【 AI 应用开发实践】专题,邀请各行业的优秀 AI 应用团队,分享在实际产品中成功应用 AI 技术的案例与最佳实践,从不同的业务应用形态出发,深入探讨 AI 创新的实际落地场景和关键技术。
在该专题论坛中,王城波老师将分享《 豆包 MarsCode 在 AI Coding 的探索与实践》;马根明老师将分享《 百度文心智能体开发实战与分发模式创新》。另外,黄建磊老师将在《 创新产品设计》专题论坛中分享《 Agent 驱动的智能答疑产品构建:问答、诊断与修复实践》查看大会日程解锁更多精彩内容: https://qcon.infoq.cn/2024/shanghai/schedule
以下内容基于直播速记整理,经过不改变原意的编辑。
直播完整回放视频参看:https://www.infoq.cn/video/IUKVbYfIXLgjB8Tvl3fd
大模型如何改变
传统应用开发流程
黄建磊:在各位的实践中,大模型的引入如何改变了传统的应用开发流程?能否结合您所在的团队,分享一个具体的项目来说明这一转变?
马根明:首先,大模型在编写代码方面提供了极大的便利。GitHub Copilot、百度 Comate 以及通义灵码等辅助工具,它们已经深入到我们整个开发流程中,帮助我们快速理解历史代码,提高问题排查和定位的效率。此外,AI 技术的应用使得代码自动化生成的覆盖率达到了 30% 以上,这意味着我们可以将更多的精力投入到业务开发中,专注于更有意义和核心的业务。现在,我们不再需要传统的编写代码和需求的方式,而是通过自然语言对话,使用提示词来指导开发。
黄建磊:从个人角度来看,AI 改变了我获取知识的方式。过去,我们依赖搜索引擎来解决问题,需要自己筛选和总结答案。现在我只需提出问题,AI 就能帮我搜索、总结并给出答案,大大减少了获取知识的成本。其次,这种变化让我在面对不熟悉的领域时更有信心。例如,如果需要用 Python 实现一个新功能,以前我可能需要花时间查找资料和学习,而现在我可以直接把需求描述给 AI 模型,它会根据我的需求用相应的语言实现功能,甚至还能帮我进行持续迭代和重构,这对我而言是一个巨大的改变。
从团队角度来看,我们部门作为阿里的研发运维基础设施,可以看到 AI 正在不断渗透到研发运维的各个流程中,提高效率。包括代码补全、自动代码评审、问题诊断、修复,以及答疑类产品等等,AI 正在极大地改变我们的工作方式。
王城波:字节的豆包 Marscode 本身就是面向辅助编程领域的产品。首先,在开发一些复杂的大型应用时,AI 以 Copilot 的形式,作为辅助编程的角色,帮助我们更高效地完成编码工作。其次,我们可以嵌入 AI 来实现 AI DevOps,帮助我们判断上线后的风险和指标变化,从而避免可能的问题。
另一方面,对于简单的场景,如开发脚本或相对简单的应用,AI 带来的变化是颠覆性的。正如马老师所说,我们从写代码变成了描述需求。例如,Cursor 等产品让即使是 8 岁的小女孩也能在 40 分钟内打造一个聊天机器人。在这些简单的应用场景中,我们看到了 Copilot workspace、replit agent、cursor composer 等产品的涌现,我们更多的是需要清晰地描述我们的需求,然后在 AI 的指导下,通过 AI 驱动编程来实现这些需求。
黄建磊:大模型与传统工具结合时的关键挑战是什么?如何确保 AI 驱动的工具能够无缝融入现有开发流程,提升工程师的生产力?
王城波:AI Coding 被认为是实现 AGI 的潜在突破点。然而,在实际落地过程中,我们面临两大方面的挑战:算法侧和工程侧。
在算法侧,主要难题是数据和模型。为了实现代码补全、问答、bug 修复或生成单测等功能,我们需要大量高质量的数据来训练模型。开源项目的数据与公司内部项目的数据在质量、风格上存在较大差异,这增加了数据准备的难度。由于大模型受限于 token 和上下文的数量,我们不能将整个代码库的内容一次性输入模型。因此,我们需要构建基于代码的知识图谱,以提高代码理解的能力。
在工程侧,我们需要考虑如何存储和处理这些大型知识库,以及如何在匹配时保证性能。此外,我们还需要考虑如何将 AI 技术与传统工程实践相结合。例如,在开发集成开发环境(IDE)时,我们需要考虑如何让 AI 与 IDE 紧密结合,以提供流畅的用户体验。
马根明:如何将传统应用能力与大模型对接?结合大模型的特点,我们可以对产品进行改造或重构。在这个过程中,我们可能需要进行平滑的升级和迭代,比如利用大模型提供的 function calling 和插件机制,将我们的能力与大模型对接。此外,我们还需要考虑大模型是否适合我们的业务以及如何将传统业务与大模型相结合,这涉及到数据清洗、数据安全以及国内特有的涉政安全等问题。我们需要避免这些问题的出现,确保产品的安全性和合规性。
黄建磊:大模型和智能体应用成为当前开发中的热门趋势。在您看来,智能体技术和大模型结合的开发工具未来会如何演进?如何更好地支持开发者与业务场景结合?
马根明:智能体其实就是基于大模型的应用,可以根据给定的目标或任务,自主地拆解任务、思考并使用工具来完善自己的能力。大模型通常通过 prompt 与人类交互,这种方式要求用户必须明确地表达自己的需求,而智能体则在此基础上增加了规划、记忆和工具等组件,使大模型更加智能和自适应。
智能体的开发范式改变了传统的软件开发流程。开发者只需明确表达自己的需求,智能体平台就能推荐相应的插件和生成复杂的提示词,从而简化了开发过程。用户甚至可以通过一句话创建一个智能体,例如,通过关联特定的插件,智能体可以自动执行任务,如规划行程、购票等。
王城波:在辅助编码领域,我认为智能体的发展方向可以概括为两个不同的路径。一种智能体面向的是初学者或对编程不太熟悉的用户,例如,通过简单的自然语言指令,智能体可以生成前端网页或应用。另一种智能体则更适合专业编程人员,它们专注于代码补全、bug 修复以及自动化测试等任务。面向初学者的智能体可能在大型项目中无法发挥太大作用,但它们非常适合作为编程学习的辅助工具,或者用于满足用户的兴趣和爱好。而面向专业开发者的智能体则更贴近实际的编程工作需求,它们在实际应用中会更加广泛。
AI 应用开发的挑战
黄建磊:AI 应用的开发并非易事。请问各位嘉宾,您在应用开发的过程中遇到过哪些主要的技术挑战?是如何解决这些问题的?
在评估业务效果时,我们不能仅依赖于采纳率这一指标,因为采纳率可能会被操纵。例如,如果模型总是只补全一个括号,采纳率可能会很高,但用户不会觉得 AI 很智能。因此,我们采用了更综合的指标,如 CPO(采纳率乘以尝试率、AI 反馈率,再乘以模型的 token 数和 token 的平均长度),来衡量整个业务效果。
马根明:首先,模型资源目前还是很昂贵的。无论是国内还是国外的模型,token 都是非常宝贵的资源,有效利用是个挑战。举个具体的例子,那就是 token 长短问题,有些网页资源的 url 很长,直接丢给模型浪费 token,为了解决这个问题,我们在过程中加入了 file_id 字段进行映射,来减少 token 消耗。且在工程上会把模型流式结果缓存解析,既保证模型效果,又尽量保证输出时间。
其次,我们面临的另一个挑战是大模型的响应速度相对较慢。为了提升用户体验,我们需要优化首 token 耗时。我们从工程上进行了优化,拆解流程,比如将一些串行任务进行并行处理,将多次模型交互尽量变成一次模型交互。此外,我们还采用了分阶段使用多模型的方式,用更快的模型进行规划,然后用一些处理复杂任务的模型,来处理数据。
黄建磊:以我们智能答疑产品的实践为例,我们主要遇到了两个问题。
我们发现的第一个问题是,用户来到平台的主要目的是为了转人工,而不是与智能答疑系统进行互动。为了解决这个问题,我们增加了一个自动问题定位。通过端到端的视角,我们综合了用户在平台层面的操作、应用层的异常状态以及容器层面的标准事件等信息,以综合定位出一个完整的问题。
第二个问题是,智能答疑体系缺乏私域知识。我们曾考虑通过人工编写来补充这些知识,让一线开发人员参与编写。然而,这个过程非常耗费精力和人力,而且开发人员对此有所抱怨,导致效果和质量都不理想。后来,我们转变了思路,意识到一线同学在日常编码、错误处理和答疑过程中已经积累了丰富的隐性私域知识。我们的目标是找到一种方法,通过模型等技术手段将这些隐性知识转化为显性知识,使模型能够利用这些知识。
黄建磊:AI 应用中,数据的质量和数量常常是影响模型表现的关键因素。请问各位嘉宾,您在数据收集和预处理的过程中遇到过哪些挑战?如何确保数据能够支持模型高效工作?
王城波:我们的数据主要分为两大块。第一块是与业务功能直接相关的数据,例如代码补全。这一部分需要大量的人工标注工作,因为公司内部的代码写法与开源社区的差异非常大。我们最初基于基础框架构建数据集,然后参考线上质量较好的工程进行扩展,最后用于训练模型。随着时间的推移,我们开发了一些检测工具,包括启发式和非启发式的工具,以实现自动化的代码训练。第二块数据是关于多点编辑的工作,这涉及到对 commit diff 的训练和清洗。难点在于用户的一些操作行为并没有反映在 git commit 上,因此我们需要持续进行标注工作。
马根明:数据主要有两种来源,一种是公开的网页数据,这类数据量很大,容易获取;另一种是专业数据,通常是格式化数据,但由于缺乏统一标准,每家公司的数据结构可能都不相同,这使得处理难度大大增加。为了确保数据质量,我们会采取自动化工具、策略或算法来进行数据清洗和标准化。此外,我们还需要定期进行数据审查,并引入监控机制,以确保数据的安全性和质量。
黄建磊:AI 在应用开发中的反馈速度对开发者的体验至关重要。在代码补全、调试等 AI 增强开发的场景中,您是如何优化反馈延迟、提升响应速度的?
马根明:在整个智能体的优化过程中,性能问题尤为突出,因为它不仅涉及模型调用,还涉及插件调用。智能体在执行过程中需要理解意图、规划任务,然后调用插件和模型,甚至可能涉及工作流,每一步都可能非常耗时。目前,我们采用多模型,并行处理,任务合并等策略优化,同时推进模型的耗时优化,以提高用户的感知体验。
王城波:在模型侧可以通过推理优化来提升性能,这包括模型量化、推测解码、投机采样或 token 优化等技术。其次,在工程链路中,我们需要快速获取代码上下文,并将其传递给我们的 prompt engine 以构造完整的 prompt。这个过程包括文件传输、与 IDE 中的 LSP 交互,以及快速完成 prompt 构造。然后,我们将请求发送给模型进行推理。
推理完成后,我们还需要对代码进行后处理,包括截断、过滤语法不正确的内容,以及处理敏感信息。为了减轻后处理的负担,我们应尽量在模型训练阶段就做到最好,使得模型的输出尽可能接近最终所需的结果。这需要我们在训练层面建立适当的指标并强化效果。
黄建磊:单一指令的场景,还是推荐大家使用小模型,性能会有明显提升。
黄建磊:如何在智能应用开发中评估和决策,以区分哪些功能改进或修补措施是必要的,而哪些可以等待底层模型的进一步完善?
马根明:不同的模型适用于不同的场景,我们需要根据模型的特点和业务需求来定制选择。具体问题需要具体分析,没有固定的推荐方案,一切都要根据业务去分析。
在工程和模型的侧重点上,如果问题能够通过工程过程解决,我们可能就不需要依赖模型。但模型有其独特的优势,例如大模型在语义理解方面的能力。传统搜索可能依赖关键词匹配,而大模型可以通过语义理解来提供更准确的搜索结果。比如,用户输入一个不完整的字词,通过语义理解,模型能够找到符合意图的内容。
王城波:我认为工程和模型之间是一种相辅相成的关系。工程的目的在于解决模型本身存在的问题,比如幻觉现象或者上下文限制,通过工程优化,我们能够让模型更好地发挥作用,实现更好的推理效果,而不损害其性能。随着模型的不断发展,例如最近出现的 O1 模型,它在 CoT 领域进行了强化,这实际上是一种思维链的增强。
未来展望
黄建磊:如何看待未来 AI 原生 IDE 的发展趋势?
王城波:“AI”指的是集成开发环境(IDE)中集成的人工智能功能,如代码补全等。而“原生”则涉及到当前 AI 辅助编程的两种方式:一种是现有的 IDE 通过插件集成 AI 功能,如 VS Code 配合 GitHub Copilot;另一种则是 AI 与 IDE 更深层次的融合。
我们内部目前还在讨论和试验阶段,短期内可能会存在 AI 原生 IDE 和 AI 插件两种形态。但从长远来看,随着 AI 能力的进一步发展,简单的补全或插件形式可能会限制用户体验。我们期望未来的用户交互能够更加适应 AI 的能力。随着 AI 能力的演进,IDE 可能从生产工具转变为展示工具。开发者的角色可能从机床操作者转变为监工,监督 AI 工作。AI 原生 IDE 的未来可能不再是我们直接编写代码的地方,而是展示 AI 生成结果的平台。
黄建磊:O1 CoT 对于我们未来智能体的开发范式会有哪些较大的影响?
马根明:在当前的智能体平台中,用户通常不需要深入理解复杂的模型或进行专业的训练。对于不熟悉模型的用户来说,他们可以通过使用智能体的范式来实现他们的目标。对于特定领域,如情感或法律,智能体平台也在提供垂直领域的模板和指导,以满足不同开发需求并进一步降低开发成本。
智能体的开发与传统的编程开发有所不同。它更侧重于表达和沟通,而不是编写代码。这种方式使得更多的人能够参与进来,共同探索如何创造出优秀的应用和智能体。最终,智能体的成功与否将取决于开发者的创造力和创新思维。
黄建磊:展望未来,AI 应用有哪些可能的发展方向?有哪些新的应用场景值得期待?
黄建磊:五年之内,我觉得 AI 应用最大的两个发展方向是智能体和 AGI。
马根明:我非常认同智能体是未来几年的大趋势。创作者可以利用 AI 技术轻松创作,每个人都可能拥有一个智能体作为私人秘书。当你需要信息时,智能体可以与你交流,为你答疑解惑。随着技术的发展,智能体将在更多方面发挥重要作用。
王城波:我注意到 OpenAI 提出了关于 AGI 的五个标准。首先,是聊天机器人,它们具备对话语言组织能力,比如 ChatGPT。其次,是推理者,它们能够像人类一样推理,解决多种复杂问题。第三是代理人,它们能够代表用户自主采取行动执行任务。第四是创新者,它们能够协助人类完成新发明。最后是组织者,它们能够完成组织级别的工作。
目前,智能体正处于一个充满活力的发展阶段,它们介于推理者和代理人之间,能够承担起我们通过训练或设计来代表人类意志的任务。未来,我猜想智能体可能会发展成为集合体,多个智能体集合在一起,形成一个具有组织概念的集合体。这种组织形式可能会是智能体发展的下一个阶段。
黄建磊:最后一个问题,AI 会取代程序员吗?
黄建磊:我个人觉得可能两三年就会取代初级程序员,但是不会取代中高级程序员。
王城波:我的观点与黄老师相似。AI 能够辅助完成基础的编码工作,这意味着只会基础编码的初级程序员可能会逐渐被淘汰。然而,对于中高级程序员来说,AI 将成为他们提升工作效率和达到更高领域的工具,而不是取代他们。
未来可能出现一种新的程序员——超级程序员。他们的特点包括:首先,他们能够借助 AI 编写大量代码,因此日均代码量会非常高;其次,他们能够跨多种编程语言工作,不局限于单一技术栈,甚至能够跨越前后端,成为一个全面的编程专家。
马根明:我的观点是,AI 应该被视为程序员的增强工具,而不是取代者。AI 很难取代人类,因为它是基于现有知识学习的,其创造力也受限于此。对于物理世界中的创新和复杂业务的处理,大部分工作仍然需要人类来组织和串联。作为程序员,我们应该保持积极的态度,快速学习和了解新技术,以保持竞争力,避免被淘汰。
活动推荐