在AI编程领域,近期可以说热闹非凡,有多来越多的人开始从Github Copilot转向Cursor(Karpathy大佬),就在Cursor的热度还未消退之时,又一顶流出炉,AI编程助手Replit Agent。
Replit Agent支持根据自然语言提示从零开始创建应用,从开发环境、编写代码、安装软件包、配置数据库、部署等全部自动化,经过网友测评:
-
2分钟,手机上创建一个APP
-
2分43秒,创建类似Wordle的游戏
-
4分钟,构建了一个用于提交漏洞的网站
-
5分钟,创建一个LLM应用并且部署到线上
那么要做好大模型AI编程,又该了解哪些技术尼,今天PaperAgent带来香港科技大学领衔发布的最新AI编程方面技术综述:A Survey on Large Language Models for Code Generation。
近年来用于代码生成的大型语言模型(LLMs)的年代概述。时间线主要是根据发布日期建立的。公开可用模型检查点的模型以绿色突出显示。
提出了一个分类体系,用于对大模型在代码生成领域的最新进展进行系统化梳理和评估。这个分类体系涵盖了从数据管理到模型架构,再到性能评估和实际应用等多个方面:
用于代码生成的大型语言模型(LLMs)的分类体系
-
数据管理:包括数据筛选、清洗和预处理,以确保数据集的质量和适用性。
-
预训练:涉及使用大规模未标注代码数据集对模型进行预训练,以使其掌握编程语言的基本结构和语义。
-
模型架构:讨论了编码器-解码器和解码器-only模型架构在代码生成中的应用。
-
预训练任务:介绍了因果语言建模(CLM)和去噪自编码(DAE)等预训练任务,这些任务有助于模型学习代码的内在结构和逻辑。
-
指令调整:通过使用结构化的指令数据对模型进行微调,以提高其遵循自然语言指令的能力。
-
强化学习与反馈:利用编译器或解释器的反馈,通过强化学习进一步优化模型的代码生成能力。
-
提示工程:通过精心设计的提示来引导模型生成更准确和高质量的代码。
-
仓库级别和长文本:探讨了如何处理和生成整个代码仓库级别的任务,这要求模型能够理解和生成跨文件的代码。
-
检索增强:介绍了检索增强生成(RAG)方法,通过检索相关信息来增强模型的生成能力。
-
自主编码代理:讨论了基于LLMs的自主编码代理,这些代理能够执行复杂的编程任务。
-
评估:介绍了评估LLMs代码生成能力的指标和方法,包括自动评估指标和人类评估。
-
实际应用:展示了LLMs在实际软件开发中的应用案例,如代码辅助工具和自动化编程平台。
数据管理与处理方法
详细讨论了大型语言模型(LLMs)在代码生成任务中的数据管理与处理的重要性和方法。
描述用于代码生成的大型语言模型(LLMs)预训练阶段所使用的标准数据预处理工作流程的图表
-
数据的重要性:强调了高质量数据集对于训练有效LLMs的关键作用,特别是在代码生成领域,数据的规模和多样性直接影响模型的性能。
-
数据收集:介绍了从开源代码库如GitHub和Stack Overflow等平台收集数据的方法,这些平台提供了大量的编程语言数据。
-
数据预处理:讨论了数据预处理的重要性,包括数据清洗、去重、过滤和脱敏等步骤,以确保数据集的质量和安全性。
-
数据分类:将数据集分为预训练数据集、指令调整数据集和性能评估基准测试数据集,每个分类在LLM开发的不同阶段都扮演着特定的角色。
-
预训练数据集:详细介绍了用于预训练的一些大规模代码数据集,如CodeSearchNet、Google BigQuery、The Pile、CodeParrot、GitHub Code、ROOTS和The Stack等。
-
指令调整数据集:讨论了用于指令调整(instruction tuning)的数据集,这些数据集包含自然语言指令和相应的代码示例,用于提高模型遵循指令生成代码的能力。
-
基准测试数据集:介绍了用于评估LLMs代码生成能力的基准测试数据集,如HumanEval、MBPP、CoNaLa、Spider、CONCODE、ODEX、CoderEval、ReCode和StudentEval等。
-
数据合成:探讨了合成数据在解决数据稀缺性和隐私问题中的应用,以及如何通过数据合成技术生成高质量的训练数据。
-
数据挑战与机遇:指出了在数据管理与处理过程中面临的挑战,如确保数据的代表性、处理数据偏见和隐私问题,同时也提出了改进数据质量和利用合成数据的机遇。
用于评估代码生成的大型语言模型(LLMs)的常用基准测试的详细统计数据。标记为“#PL”的列表示每个数据集中包含的编程语言数量。为了简洁起见,我们列出了支持少于或包括五种编程语言(PLs)的基准测试的编程语言。对于支持六种或更多PLs的基准测试,我们仅提供支持的PLs的数量。
代码生成预训练
强调了预训练在培养LLMs代码生成能力中的核心作用,并讨论了预训练过程中的关键要素和面临的挑战。
-
预训练的重要性:预训练是LLMs开发的关键步骤,它允许模型在大量未标注的代码数据上学习编程语言的基本结构、语法和语义。
-
预训练数据集:为了有效地预训练LLMs,需要使用大规模、多样化的代码数据集。这些数据集可能包括开源代码库、编程书籍、在线论坛和问答网站的内容。
-
预训练任务:
-
因果语言建模(CLM):在解码器-only模型中,CLM任务涉及基于前面的tokens预测下一个token,这有助于模型理解代码的顺序和逻辑。
-
去噪自编码(DAE):在编码器-解码器模型中,DAE任务涉及对输入序列进行掩码或扰动,然后训练模型来预测或恢复原始序列,这有助于模型学习代码的深层结构和语义。
-
预训练模型架构:讨论了不同的模型架构,包括编码器-解码器模型和解码器-only模型,以及它们在代码生成中的适用性。
-
预训练的挑战:指出了预训练过程中的一些挑战,如数据质量、数据多样性和计算资源的需求。
-
预训练的影响:强调了预训练对提高LLMs在代码生成任务上的性能的重要性,包括代码的准确性、可读性和风格一致性。
用于代码生成的decoder-only架构的大型语言模型(LLMs)概览
RAG用于代码生成
探讨了检索增强生成(Retrieval-Augmented Generation, RAG)在大型语言模型(LLMs)中的应用,特别是在代码生成任务中。
检索增强型代码生成(RACG)的工作流程图示。接收到查询(指令)后,检索器从大规模向量数据库中选择相关上下文。随后,检索到的上下文与查询合并,并将此组合输入输入到生成器(LLM)中,以产生目标代码解决方案。
-
检索增强生成(RAG):介绍了RAG的概念,即模型在响应查询时,首先从大量文档中检索相关信息,然后将检索到的信息与原始查询结合,以提高响应的质量和准确性。
-
代码生成中的RAG:讨论了RAG在代码生成中的应用,指出LLMs在处理代码生成任务时,可以通过检索外部数据库中的相关知识来克服知识过时和生成不准确的问题。
-
RAG框架组件:描述了RAG框架的主要组成部分,包括向量数据库、检索器、重排器和生成器,并提到了实现RAG的工具,如LangChain和LLamaIndex。
-
RAG在代码生成的挑战:包括检索信息的质量、检索信息与查询的有效整合、过度依赖检索信息可能导致的不准确响应,以及检索额外信息对LLMs上下文窗口大小的需求。
-
RAG在代码生成的应用案例:提到了一些尝试将RAG应用于代码生成的研究工作,如使用图神经网络(HGNN)来增强代码摘要生成,以及通过检索源代码数据库中的代码片段来辅助代码生成。
-
未来研究方向:包括改进检索信息的质量、优化检索信息与查询的整合方法、减少对检索信息的依赖,以及开发更有效的上下文管理策略。
自主编码Agents
讨论了基于大型语言模型(LLMs)构建的自主编码智能体(Autonomous Coding Agents),这些智能体在软件开发和代码生成领域展现出了类似智能体的特性。
一个由LLM驱动的自主Agent系统的一般架构**。**规划:Agent将大型任务分解为更小、可管理的子目标,或进行自我批评和对过去行为的自我反思,以从错误中学习并提高未来的表现。记忆:这个组件使代理能够存储和检索过去的信息。工具:Agent被训练以调用外部函数或API。行动:Agent执行行动,无论是否使用工具,以与环境互动。灰色虚线代表系统内的数据流。
-
自主编码智能体的定义:自主编码智能体是指利用LLMs作为核心计算引擎的系统,这些系统能够自主地制定和执行问题解决计划,通过调用工具或API与环境进行交互。
-
智能体架构:介绍了自主编码智能体的典型架构,通常包括LLM基础的智能体、记忆模块、规划组件和工具使用模块。这些组件协同工作,使智能体能够在软件工程任务中实现高度自动化。
-
智能体的应用案例:
-
AgentCoder:一个由多个专业化智能体组成的框架,包括负责代码生成的编程智能体、负责生成单元测试用例的测试设计智能体,以及执行代码并提供反馈的测试执行智能体。
-
CodeAct:通过可执行的Python代码整合LLM智能体动作,与生成JSON或文本格式的智能体不同。
-
AutoCodeRover:旨在自动解决GitHub问题以改进程序。
-
Devin 和 OpenDevin:AI软件工程师智能体,能够处理软件工程任务,如解决GitHub问题。
-
智能体的挑战:指出了在实现完全自动化的软件工程师智能体方面仍需克服的挑战,包括提示设计、上下文长度、智能体数量和工具集的优化。
-
未来研究方向:提高智能体的推理能力、增强与人类开发者的交互、以及开发能够处理更复杂编程问题的智能体。
https://arxiv.org/pdf/2406.00515``A Survey on Large Language Models for Code Generation``https://docs.replit.com/replitai/agent``https://sunnyd.top/blog/learn-cursor-0-why-use-cursor
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。