面向AI编程2: 哈哈哈,我已经是AI的Pair Programmer了

在AI技术飞速发展的今天,人工智能正在成为开发者的得力助手,特别是在编程过程中,AI工具像大语言模型(LLM)正逐渐成为程序员的“编程搭档”。然而,尽管如此,如何让LLM更好地理解你的项目并有效地协作,依然是一个值得探讨的问题。

通过一段时间的实践,我发现其核心思想可以归结为“面向LLM写算法”。在这一过程中,AI不仅仅是一个被动的代码生成器,它更多的是通过理解项目结构、上下文和逻辑来参与开发。这使得编程的方式和范式发生了微妙而深刻的变化。

  1. 项目结构与Embedding的结合

从目前的技术来看,要让LLM理解你的项目,最常见的做法是将整个项目拆解成多个文件,并为每个文件生成embedding。通过embedding,AI能够以更高效的方式理解代码的语义,并在需要时与其他部分进行匹配。然而,embedding匹配只是其中的一个步骤,更多的是需要利用上下文信息来确保模型理解代码的具体含义。

同时,本地的切片和索引变得尤为重要。实际上,向量并非唯一的索引方式,对于代码的处理来说,文本索引、带有类信息的索引也同样关键。这个索引过程类似于我们构建抽象语法树(AST)的方式,可以是纯文本,也可以是编译器生成的中间AST产物。关键在于如何权衡索引的轻量性和重度化需求,以便高效地为LLM提供准确的上下文。

  1. 面向LLM写代码的范式

我们可以将LLM看作是现代编程中的一种全新的“API”。过去,我们面向文件系统编写代码,面向数据库编写增删改查,面向前端框架如Vue编写HTML,而如今,面向LLM编写算法已成为新的编程方式。每种API背后都有一个强大的引擎,LLM的引擎同样也可以被当作黑盒子,提供基于自然语言的查询和结果返回。

2.1 LLM像SQL

我认为,LLM的查询方式本质上有点像SQL查询引擎,不同的是,LLM查询的并不是存储在数据库中的数据,而是你手中现有的代码、上下文或其他相关信息。我们不再直接从数据库中提取记录,而是通过自然语言和足够的上下文来“拼接”查询。LLM返回的结果通常是一个JSON格式的结构,这种输出形式使得它可以非常方便地与其他代码逻辑进行交互。

2.2 本地索引与查询

与SQL的查询不同,LLM的查询不仅仅依赖于其内部模型和数据库,更多依赖于本地建立的索引。例如,SQL引擎的索引是数据库内部的B+树结构,而LLM的索引则是你在本地为代码和文档建立的索引。这种方式使得LLM能够在给定的上下文中更好地理解和返回正确的结果。

  1. 代码生成与上下文管理

在AI时代,开发者不仅仅是通过传统的编程手段写代码,更多的是通过与LLM的互动来生成、调整和优化代码。为了提高生成代码的质量和准确性,程序员需要有效地管理和提供足够的上下文。这不仅涉及到在对话中与LLM的交互,更涉及到项目结构和信息的合理组织和索引。

LLM的查询引擎依赖于提供给它的上下文信息,类似于如何使用SQL查询时提供的条件或字段。如果没有正确的上下文,LLM的响应就会变得模糊甚至无效。因此,如何有效地整理和提供项目中的上下文信息,以及如何管理本地的代码索引,成为了开发者在AI时代中的新挑战。

总结

随着AI技术的发展,编程的范式正在发生深刻的变化。从“面向文件系统写代码”到“面向LLM写算法”,AI已经不再仅仅是一个工具,而是成为了开发过程中不可或缺的一部分。在这一过程中,embedding技术、本地索引、上下文管理等新方式将极大地改变程序员的工作方式。

通过理解这些技术,程序员将能够更高效地与LLM合作,自动化更多开发任务,同时确保生成的代码更加准确和智能。总的来说,AI时代的编程不仅仅是写代码,更是与AI进行协同工作的一种全新体验。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/878823.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CubeMX 生成代码 在VScode 中显示未定义,解决办法

CubeMX 生成代码 在VScode 中显示未定义,解决办法CubeMX 生成代码 在VScode 中显示未定义,解决办法 1. 背景 CubeMX 生成代码 在VScode 中显示未定义,未定义、头文件路径无效,在当实际上是可以编译成功的。 2. 原因 keil软件编译器会预编译一些头文件,vscode没有编译 3. 解…

从《だから僕は音楽を辞めた》到《エルマ》

《エルマ》专辑访谈从《だから僕は音楽を辞めた》到《エルマ》 从专辑制作实况到更深层的乐器与演奏方式的执着,除了n-buna、suis之外,支援ヨルシカ的下鹤光康(吉他)、キタニタツヤ(贝斯)、Masack(鼓)、平畑彻也(钢琴)六人畅谈一切。超过一万五千字的特别专访。首先想…

vscode+edie插件配置STM32开发环境,彻底摆脱KEIL

安装 首先去vscode官网下载适合自己的安装包,一般来说选择 User Installer x64 即可,具体安装过程请参考其他教程,此处不再赘述: Vscode官网安装完成后打开,在左侧边栏打开插件市场,搜索并安装如下四个插件:C/C++ (C语言代码提示的核心插件) Chinese (中文显示) Emb…

本地部署DeepSeek并用Python调用

本地部署DeepSeek并用Python试调用之,总体来说过程比较顺畅。目录需要下载的软件安装步骤安装Ollama并运行模型DeepSeek安装Hollama试用python调用 需要下载的软件OllamaSetup.exe(Ollama是一个管理和运行大语言模型的开源工具) Hollama_0.25.1-win-x64.exe【可选】(Hollam…

12 网络编程详解

知识预备网络通信 :​ 网络通信是指,将一台设备(Host1)中的数据通过网络传输到另一台设备(Host2)。java.net 包下提供了许多用于完成网络通信的类或接口。 ​ 相关流程图如下 :网络 :​ 两台或两台以上的设备通过一定物理设备(交换机,网关服务器等等)连接起来…

25.2.4小记(FoxandRabbit代码复现)

1.接口(interface)不仅可以用于定义方法的签名,还可以充当类型的一部分。其本身可以作为类来引用 eg.Cell[][] field 数组中的对象是实现了这个接口的类的实例。 是一种特殊的classreturn list.toArray(new Cell[list.size()]);中list.toArray是将原来的数组填充到()中的对…

2015 纯碱

回调后有一波多头行情

2015 锰硅

年后回调后有波多头行情 具体等交易系给出信号

2024 山东一轮省集组合计数选讲学习笔记

https://www.luogu.com/article/hcy6mqry 初等双射 通常的方法是构造一个不会映射到自己的对合,这样就就可以把所有的组合对象分为数量相等的两类。 还有一种方法就是给等式两边找到一个相同的组合意义,以证明他们相等,这个不一定是一个映射,它允许“一对多”“多对一”。 …

TCP和UDP协定的基础知识解析,从网路效能到网路安全看TCP、UDP协议

TCP和UDP协定的基础知识解析,从网路效能到网路安全看TCP、UDP协议TCP和UDP协定是网路通讯中不可或缺的基础。 TCP以其可靠性著称,能够确保资料完整传输,适合文件传输和邮件服务等场景。它透过建立连接和确认机制,提供稳定的通讯体验。相比之下,UDP更注重速度和即时性。它无…