微信扫码
与创始人交个朋友
我要投稿
图片由修猫制作
01
NL Outlines:代码的自然语言骨架
上图展示了一个集成了NL Outlines功能的IDE界面,虽然论文中没有直接提供这个具体的IDE实现代码,但它展示了NL Outlines如何在实际开发环境中应用。
1、左侧面板显示了函数的NL Outline,提供了函数功能的高级概述。这些概述包括计算距离矩阵、初始化路径、迭代添加节点等步骤。
2、主编辑区域显示了 nearest_neighbor_tour 函数的具体代码实现。
3、代码中插入了与左侧Outline对应的注释(以绿色标注),这些注释直接嵌入在相关代码段之前,提供了即时的上下文说明。
4、界面顶部有一个搜索栏,暗示了可以基于NL Outlines进行代码搜索的功能。
这个界面展示了NL Outlines如何无缝集成到开发环境中,既提供了代码的高级概述,又保持了与具体实现的紧密联系。这种设计可以帮助开发者更快地理解代码结构,提高导航效率,并在编写和维护代码时提供上下文支持。
02
AI如何理解和概括代码?
上下滑动查看更多
Slide left and right to see more
经过几轮迭代得到下面的代码
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 travels 120 km in 2 hours, what is its average 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: 示例使用和时间测量
主要的解释如下:
1、定义了一个gen函数来模拟APPL的生成功能,它直接使用DeepSeek AI的API。
2、cot_sc函数实现了完整的CoT-SC算法,包括生成多个样本、提取答案、进行自洽性检查,以及生成最终结论。
3、使用标准的Python列表推导式来并行生成多个样本。
4、添加了时间测量,以便了解整个过程所需的时间。
这个实现保留了原始代码的核心逻辑和结构,同时避免了对APPL库的依赖。它直接使用DeepSeek AI的API来生成响应,实现了类似的功能。
注:APPL语言是一个可以直接运行各种Prompt技术的Python语言,起始代码没问题,但我的环境中的APPL库与环境中的litellm库版本不兼容,最终迭代版本为模拟APPL的gen函数实现CoT-SC,关于APPL语言下一篇文章会详细介绍。
03
AI如何生成这些大纲?
上图表展示了不同大语言模型(LLM)在生成NL Outlines时的性能评估结果,比较了两种主要的生成技术:交错生成(Interleaved Generation)和行号填充(Line Number Infilling)。
评估维度包括:
1. Overall(整体质量)
2. Helpful(有用性)
3. Correct(正确性)
4. Detail(详细程度)
5. Style(风格)
图中使用颜色编码来表示性能等级,从红色(最差)到深绿色(最佳)。
主要观察结果:
1. Gemini 1.5 Pro和Flash在大多数指标上表现最佳,特别是在整体质量、有用性和正确性方面。
2. 交错生成技术在某些模型上似乎比行号填充表现略好,尤其是在整体质量和有用性方面。
3. 所有模型在正确性方面都表现相对较好,这表明生成的NL Outlines通常能准确反映代码内容。
4. 详细程度和风格方面的评分相对较为分散,这可能反映了不同评估者对这些方面的主观偏好。
5. DeepSeek-Coder-Instruct模型在某些指标上表现相对较弱,特别是在行号填充技术中。
这些结果说明,最新的LLM模型(如Gemini 1.5系列)能够生成高质量、有用且正确的代码大纲,为开发者提供了有价值的代码理解辅助工具。同时,不同的生成技术可能会影响输出质量,这为进一步优化NL Outlines生成方法提供了方向。
04
NL Outlines如何改变开发流程?
研究者用这张图片展示了NL Outlines(自然语言大纲)在软件开发中的多种应用场景,主要分为三个方面:代码理解、代码维护和开发者体验。
展开来讲,至少有以下五个方面可以考虑:
53AI,企业落地应用大模型首选服务商
产品:大模型应用平台+智能体定制开发+落地咨询服务
承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2024-05-28
2024-04-26
2024-04-11
2024-08-21
2024-07-09
2024-08-13
2024-07-18
2024-10-25
2024-07-01
2024-06-17