热门搜索:和平精英 原神 街篮2 

您的位置:首页 > > 教程攻略 > ai资讯 >谷歌重磅:LLM时代,我们用Prompt生成代码大纲,用文学编程

谷歌重磅:LLM时代,我们用Prompt生成代码大纲,用文学编程

来源:互联网 更新时间:2026-08-23 13:44

接手一个大型项目,面对成千上万行代码,你会从哪里着手?或者,在review一个复杂的pull request时,如何快速抓住核心变更?再或者,想向非技术同事解释你的代码做了什么,该怎么表达才能让他们秒懂?这些问题,几乎是每位开发者日常都会遇到的灵魂拷问。一项研究数据更有意思:开发人员会把70%的时间花在“程序理解”上——也就是说,读代码的时间比写代码的时间还多。

这些场景都指向同一个核心挑战:如何既快又准地理解和传达代码的意图。传统的做法,比如写详细的注释或文档,要么太冗长,要么一迭代就过期。而硬啃代码本身,又耗时费力,尤其是面对那些逻辑复杂的“屎山”。

谷歌重磅:LLM时代,我们用Prompt生成代码大纲,用文学编程

Google的研究团队倒是拿出了一套新解法:利用AI生成代码的自然语言大纲,简称NL Outlines(Natural Language Outlines)。听起来不复杂,但这个思路背后蕴含的潜力,可能真会改变我们写代码和读代码的方式。

这可不是传统代码注释的简单升级,更像是对软件开发范式的一次重新定义。它把自然语言处理、机器学习跟软件工程的精髓揉在了一起,给开发者提供了一套前所未有的代码理解与交互的新工具。


01 NL Outlines:代码的自然语言骨架

什么是NL Outlines?

说白了,NL Outlines就是一种代码函数的高级概述,由一系列简洁的自然语言语句组成。这些语句巧妙地帮你把代码切分成逻辑块,并概括每块的核心思路。和传统注释比起来,NL Outlines更结构化、更抽象,相当于给你一张代码的“鸟瞰图”。

想象一下,以前你面对一个几十行代码的复杂函数,只能逐行去啃。现在有了NL Outlines,你快速扫几行自然语言描述,函数的逻辑结构就清清楚楚了。这不仅仅是看得快,更是为后续开发和维护提供了清晰的指引。

IDE中的NL Outlines示例

上图展示了一个集成了NL Outlines功能的IDE界面效果图。虽然论文没有直接给这套IDE的实现代码,但很直观地展示了它的应用场景:

  • 左侧面板是函数的NL Outline,提供了“计算距离矩阵”、“初始化路径”、“迭代添加节点”等一系列高级步骤概述。
  • 主编辑区是 nearest_neighbor_tour 函数的代码实现。
  • 代码中用绿色标注的注释,就是与左侧Outline对应的嵌入式描述,直接贴在相关代码前,上下文一目了然。
  • 界面顶部还有个搜索栏,暗示了可以基于NL Outlines进行代码搜索。

这个设计展示了NL Outlines如何与开发环境无缝结合:既给出了代码的高级视图,又与具体实现保持紧密联系。对开发者来说,理解代码结构、提高导航效率,都变得轻松很多。

NL Outlines的独特之处

1. 双向同步:

这个特性最让人兴奋。NL Outlines可以和代码保持双向同步。你改代码,大纲描述自动更新;你调大纲,代码也跟着变。这种动态关联,从根本上解决了长期困扰大家的“文档和代码过时”的老大难问题。

2. 灵活展示:

它既能作为独立的概述展示,也能穿插在代码之间,形成一种现代版的“文学编程”风格。开发者可以随时在高层次理解与细节之间快速切换,非常灵活。

3. AI驱动生成:

借助大语言模型,NL Outlines可以自动生成,不用手写。这不仅省时间,还能保证描述的准确性和一致性。更关键的是,AI能捕捉到人眼容易忽视的代码模式和结构,提供更全面、更深入的概述。


02 AI如何理解和概括代码?

LLM的选择与优化

Google团队尝试了多个顶级模型,包括Gemini 1.0 Pro、Ultra和Gemini 1.5系列。结果显示,Gemini 1.5系列在生成NL Outlines方面表现最好,无论准确性还是表述质量都明显领先。

这个发现挺有意思——对Prompt工程师来说是个重要提醒:选模型做代码理解和生成时,不是越新越大就越好。模型的特定能力、训练数据的质量,以及针对任务的微调程度,才是关键因素。

下面通过一个具体的例子,直观感受下NL Outlines是怎么用的。

这是一个NL Outlines的SYSTEM PROMPT的系统示例,最终经过几轮迭代,生成了下面的代码(上下滑动查看):

from openai import OpenAI
import json
import time

# 初始化DeepSeek AI客户端
client = OpenAI(api_key="sk-ee3", base_url="https://api.deepseek.com")

def gen(prompt):
    """模拟APPL的gen函数,使用DeepSeek AI生成回复"""
    response = client.chat.completions.create(
        model="deepseek-chat",
        messages=[
            {"role": "system", "content": "You are a helpful assistant skilled in step-by-step reasoning."},
            {"role": "user", "content": prompt}
        ],
        max_tokens=1024,
        temperature=0.7,
        stream=False
    )
    return response.choices[0].message.content

def cot_sc(question: str, num_samples: int = 5):
    # 设置系统提示和用户问题
    system_prompt = "You are a helpful assistant skilled in step-by-step reasoning."
    user_prompt = f"Question: {question}\nLet's approach this step-by-step:"
    
    # 生成多个CoT推理样本
    samples = [gen(user_prompt) for _ in range(num_samples)]
    
    # 从每个样本中提取最终答案
    final_answers = []
    for sample in samples:
        # 解析每个样本的最后一行作为最终答案
        final_answer = sample.split('\n')[-1].strip()
        if final_answer.startswith("Therefore, "):
            final_answer = final_answer[len("Therefore, "):]
        final_answers.append(final_answer)
    
    # 进行自洽性检查
    consistency_prompt = "Now, let's analyze the consistency of our reasoning:\n"
    for i, answer in enumerate(final_answers):
        consistency_prompt += f"Sample {i+1}: {answer}\n"
    consistency_prompt += "Based on the above samples, the most consistent answer is:"
    
    # 生成最终结论
    final_conclusion = gen(consistency_prompt)
    
    return final_conclusion

# 示例使用
question = "If a train tra vels 120 km in 2 hours, what is its a verage speed in km/h?"
start_time = time.time()
result = cot_sc(question)
end_time = time.time()

print(f"Final conclusion: {result}")
print(f"Total time taken: {end_time - start_time:.2f} seconds")

这段代码的NL Outline长这样:

  • 1行:导入必要的库和初始化DeepSeek AI客户端
  • 6行:定义gen函数模拟APPL的生成功能
  • 19行:定义cot_sc函数实现CoT-SC算法
  • 21行:设置系统提示和用户问题
  • 25行:生成多个CoT推理样本
  • 28行:从每个样本中提取最终答案
  • 39行:进行自洽性检查
  • 46行:生成最终结论
  • 51行:示例使用和时间测量

解释几点:

  • 这个实现定义了一个 gen 函数来模拟APPL的生成,直接调用了DeepSeek AI的API,避免了对APPL库的依赖。
  • cot_sc 函数完整实现了CoT-SC算法的流程:生成样本、提取答案、自洽性检查、生成结论。
  • 用列表推导式并行生成了多个推理样本。
  • 额外加了时间测量,方便评估性能。

这个代码保留了原始逻辑,同时解决了环境依赖冲突的问题。不过这个案例也说明一个现实问题:环境依赖的冲突是开发中很常见的困扰。


03 AI如何生成这些大纲?

生成高质量的NL Outlines不是简单活。AI不仅要理解代码的语法,还要理解其语义和意图。研究团队用的是一线大语言模型(如Gemini系列)来完成。

生成过程

  • 1. 输入代码:

    把需要解释的函数送入AI模型。
  • 2. 提示工程:

    用精心设计的prompt,指导AI生成符合要求的大纲。
  • 3. 生成大纲:

    AI分析代码,吐出对应的自然语言描述。
  • 4. 后处理:

    对生成的大纲做一些清理和格式化。

两种主要的生成技术

团队探索了两种方向:

1. 交错生成(Interlea ved Generation):

  • 方法:让AI模型直接在原始代码中插入大纲注释。
  • 优点:结果可以直接用,和代码紧密集成。
  • 缺点:可能意外改代码,需要额外验证。

2. 行号填充(Line Number Infilling):

  • 方法:AI生成大纲语句及其对应的代码行号。
  • 优点:生成效率高,不修改原始代码。
  • 缺点:需要额外的整合步骤。

两种方法各有适用场景,不存在绝对的优劣之分。

解析与后处理

生成之后,还需要一系列步骤来确保质量:

  • 1. 错误检测:

    检查格式错误、行号越界、重复行号等问题。
  • 2. 内容过滤:

    移除无关或重复信息,保证简洁。
  • 3. 对齐优化:

    调整语句位置,让它们跟代码结构完美对应。
  • 4. 样式统一:

    标准化语言表达,让整个项目的大纲风格一致。

这些步骤不仅提高了质量,也为后续应用和扩展打下了基础。

不同LLM生成NL Outlines的性能对比

上图展示的是不同LLM在生成NL Outlines时的性能评估结果,对比了交错生成和行号填充两种技术。评估维度包括整体质量、有用性、正确性、详细程度和风格。颜色编码从红到深绿,代表从差到优。

主要观察结果:

  • Gemini 1.5 Pro和Flash在大多数指标上表现最好,尤其整体质量、有用性和正确性方面。
  • 交错生成技术通常比行号填充略好一些。
  • 所有模型在正确性方面都比较稳,说明生成的大纲基本能准确反映代码内容。
  • 详细程度和风格方面的评分比较分散,说明不同评估者对这些方面的主观偏好还挺明显的。

这些结果说明,像Gemini 1.5系列这样的最新模型,确实能生成高质量、有用且正确的代码大纲,为开发者提供了可靠的辅助工具。而不同的生成技术选择,也会影响最终输出的质量。


04 NL Outlines如何改变开发流程?

NL Outlines在软件开发中的应用场景

研究者用这张图展示了NL Outlines在软件开发中的多种应用,主要归为三类:代码理解、代码维护和开发者体验。展开来讲,至少有以下五个方面值得关注:

1. 代码理解与导航

这是最直接的应用。当你打开一个新项目或看同事的代码时,不用再逐行硬读,通过简洁的自然语言描述就能快速get到整体结构和关键逻辑。在IDE里,NL Outlines可以集成到符号列表中,提供函数概览。点击大纲语句直接跳到对应代码位置,实现精确导航。还可以用于智能代码折叠,根据需求展开或隐藏细节。可以预见,不管是VS Code还是其他IDE,相关的插件很快就会出来。

2. 代码维护与重构

NL Outlines在维护过程中扮演的是“活文档”的角色。代码一改,大纲自动更新,解决了传统注释容易过时的问题。更有意思的是,你可以通过编辑大纲来指导代码变更。比如,修改一个语句来表达逻辑变更的高级意图,然后让AI自动完成对应的代码修改。这种方式让开发者能在更抽象的层面上思考和操作代码,同时保留对细节的控制。

3. 代码生成与原型设计

NL Outlines提供了一种新的交互模式:先写或改大纲,然后让AI根据大纲生成或调整代码。这种方法不仅能产生更符合预期的代码,还能在生成过程中进行更精细的控制和迭代。对于快速原型设计特别有价值——先写个高级功能描述,快速生成可工作的代码框架,再逐步细化完善。

4. 代码审查

审查时,NL Outlines可以显著提高效率。审查者先看大纲变更,快速了解修改的主要内容和意图,再深入具体的代码细节。这既加速了审查过程,还有助于发现高层次的设计问题。对于大型变更或复杂重构,大纲甚至可以自动生成变更摘要,帮助审查者更好评估修改的影响。

5. 代码搜索与复用

NL Outlines给代码搜索带来了新可能。你可以用自然语言查询来搜代码库,找到实现特定功能或遵循某种模式的代码段。这种基于语义的搜索比传统的关键词搜索更强大、更直观。当需要实现类似功能时,通过搜索和比较大纲,可以快速找到参考实现,提高开发效率。

关于宇宙的好的网名有哪些
关于宇宙的好的网名有哪些

类型:角色扮演

大小:1

语言:简体中文

平台:互联网

游戏下载

手机号码测吉凶
本站所有软件,都由网友上传,如有侵犯你的版权,请发邮件haolingcc@hotmail.com 联系删除。 版权所有 Copyright@2012-2013 haoling.cc