优化 AI 软件工程 | 原创,AI翻译
目录
- 为人工智能优化软件工程
- AI优先开发的扁平架构
- Python在AI驱动工作流中的优势
- 上下文工程和令牌优化
- 组织代码以获得AI协助
- 作为一个手动AI代理蓬勃发展
- 在企业环境中使用AI工具
- 工具选择和上下文管理
- 构建可重用的提示系统
- 利用Python进行Java开发
- 用于Java项目支持的Python脚本
- 跨语言开发策略
- AI辅助的代码生成
- AI时代的编程语言
- Python、Rust和Java的未来
- 性能与简洁性的权衡
- 语言演进与AI集成
为人工智能优化软件工程
在本博客中,我利用了数百个脚本来辅助翻译、playground、frontmatter维护和Telegram机器人。我相信这种开发方法可能代表了为人工智能优化的软件工程的未来。
我不太依赖Python模块功能,也不想像大型Java Spring项目那样组织代码。
在我的职业生涯中,我参与了许多软件项目。我见过令人印象深刻的银行架构、微服务、最小化重复的有效多国设计、基于Spring构建的强大基础框架,以及带有集中配置的强大治理。
虽然这些银行架构令人印象深刻,但如果今天开始,我会考虑为LLMs和AI进行优化。这将涉及更好的上下文工程、改进的关注点分离,以及优先考虑AI优先思维而非以人为中心的设计。尽管Spring提供了多层和良好的抽象,但对于LLMs和AI来说,导航起来可能很困难。
我认为我们应该追求更扁平的结构,类似于扁平化组织。这意味着只使用两个级别:第一级调用第二级。在一个函数中,最好直接调用另外50个函数,而不是有50个嵌套级别或堆栈。AI/LLM在判断或推断过于复杂、嵌套的结构时会遇到困难,但它们擅长处理100到200行代码的小函数。Python非常适合从其他文件调用和导入。
Python代码比Java更容易的一个原因是它的依赖管理很简单。你只需要使用 pip install 来添加一个依赖。而使用Maven,你需要在一个POM XML文件中编写依赖,然后使用 mvn compile 让Maven下载依赖。
Python 简单性的另一个原因是它的代码可以直接运行,没有麻烦。
尽管从Java 11开始,java 命令可以直接执行单文件源代码程序,而无需单独使用 javac 编译。然而,Java项目通常很大,所以必须使用 mvn spring-boot:run 加上一些属性配置来运行它们。
第三个原因是Python的模块设计很简单;你可以使用 from 和 import 轻松地从其他文件导入代码。
目前,许多AI聊天机器人可以直接在聊天机器人窗口中运行Python代码,比如Grok。
将100个Java文件(每个大约1000行代码)与一些简单的Python脚本进行比较是不公平的。对于这类项目,我更倾向于拥有1000个Python文件,每个大约100行代码。
选择代码行或函数进行编辑是可以接受的。但是,你需要知道在哪里选择。为什么不让AI来处理这个任务,让我们的生活更轻松呢?所以,我们只需要使用“全选”来选择所有代码并告诉AI/LLM如何编辑。
对于Python,使用 if __name__ == "__main__": 在文件中运行和测试函数更容易。其他Python文件也可以更容易地调用此文件内的函数,而无需运行测试。
这是为AI优化的上下文工程。我们可以用其他方式来处理吗?AI/LLM是自回归的。但是,当我们使用Copilot或Claude Code时,我们不知道AI软件代理是如何帮助我们的。它们应该替我们考虑。
我们能否在用户端特别安排代码以减少令牌使用量?对于这一点,拥有1000个Python文件,每个文件100行代码的方法是很好的。因为在让其他Python代码调用它们之前,你可以轻松地验证函数和代码文件。
但一个问题是,如果你想同时修改几个代码文件,这并不容易。简单的方法是,你可以将代码复制到AI聊天机器人,让它们告诉你如何编辑这些文件中的代码。
也许,我们不需要使用行数来分隔函数或逻辑。但我们应该这样做,将逻辑分离成小函数。我们可以通过按逻辑类型自然地分离它们来实现,这样它们看起来更短。
为什么我们要进行为AI优化的软件工程?因为AI功能强大,我们应该为AI优化一切,然后让AI尽可能地帮助软件工程。
这不仅适用于代码,也适用于任何文本。假设我们是非常挑剔的编辑;我们不希望AI一次性编辑我们的大量文本。我们想逐段检查。对于代码,我们可以容忍小的错误或bug。对于文本,我们可以容忍它们,因为大多数读者不太挑剔。
但代码不同,有时即使是微小的错误也可能导致大型项目完全失效。
对于XML或YAML文件,我们可能不需要过多地分离它们,因为它们已经高度结构化。
而对于HTML文件,我们应该进行一些分离。与其将数百个JavaScript文件与数百个HTML文件一起编写,容易超过1000行代码,不如使用JavaScript的 import 来管理。对于JavaScript代码,我们可以使用上述方法进行分离。
我们希望以一种让AI轻松帮助我们添加、编辑、删除和运行代码的方式来组织代码。这是一个开始。想象一下有一天,所有的代码都可以由AI轻松生成或修复。世界将高度数字化。
想象一下我自己编写100个大型软件项目,并提供API以连接其他系统。这包括我的日常议程;如今,我本人就像一家拥有1000名员工的科技公司。它们是为我的需求定制的,为了赚钱或为我的利益花钱。这真的很棒。
作为一个手动AI代理蓬勃发展
AI代理应该用代码自动运行。现在,这篇文章的标题是“手动AI代理”。你可能会觉得我在开玩笑,但我没有。
我说“手动AI代理”的原因是,对于大公司来说,由于安全数据问题和长期考虑,技术采用速度缓慢。
市场上有很多新技术;谁知道什么会持久,什么会很快消失。
它们也有安全数据方面的顾虑。通常,他们希望与数据政策严格并受公众监督的大品牌合作。这解释了为什么微软成为财富500强公司中的顶级合作伙伴。其他公司使用他们的Teams、Microsoft Office 365、Azure和Copilot。
这意味着我们将使用大量工具来工作,类似于那些API中的工具使用或函数调用。我们将自己进行提示工程或上下文工程。
我们可能不会使用Claude Code或Manus来完成复杂的任务,而是使用普通的AI聊天机器人及其API来执行任务。
AspectJ 很好,因为它使用AOP编程来拦截方法。Spring中的过滤器也很好,可以捕获HTTP请求的日志。Log4j中的logger很好,可以将特定日志重定向到文件。IntelliJ IDEA 很好,因为它具有将对象导出为文本的功能。
SQL客户端很好,因为它们可以轻松导出CSV或Excel格式的行文件。Git diff 很好,因为它可以为你提供比较文本。
它们都帮助你为AI聊天机器人提供更好的上下文。AI聊天机器人也可以帮助许多Python脚本执行任务。
要成为一个有效的AI代理,你需要使用许多有效的工具来帮助你完成任务,无论是简单还是复杂。
所以你不需要像那些自动化AI代理那样多次询问AI聊天机器人。你可以仔细选择你将使用的工具。
因此,像手动AI代理一样工作有其好处。然而,AI代理技术发展迅速,并向世界展示了其潜力。
如果它们非常有用,大公司就会像AI聊天机器人一样采用它们。否则,它们无法与已采用这些技术的公司竞争——不仅是其他大公司,还有小型初创公司。因为现在的AI如此强大,一个拥有几十名员工的初创公司可能会击败那些拥有1000名员工的公司。
作为手动AI代理工作有时是不可避免的。除了缺乏先进的AI技术,这份工作还有其他好处。找到好工作也不容易。所以在这种情况下,它恰好给了我们空间,利用我们的传统智慧来最大限度地利用AI聊天机器人。
这意味着我们可以组织和积累我们的提示,为AI聊天机器人创建系统提示,类似于Claude或Grok中已暴露的那些。这样,我们就不需要反复编写提示。我们可以使用Python脚本来帮助我们编写提示。我们可以获取HTTP请求的日志,并编写提示来生成API测试用例。
编程的魔力在于其无限的抽象层次。它类似于函数,你可以有100个函数调用层次。例如,微信是建立在iOS之上的,而微信小程序是建立在微信之上的。iOS本身是建立在Objective-C或Swift之上的,而Objective-C或Swift又建立在LLVM和Apple ARM芯片的指令集之上。
利用Python进行Java开发
在AI时代,如何利用Python来帮助Java开发?我喜欢Python。自ChatGPT于2022年11月底发布以来,在过去的3年左右的时间里,我使用Python最多。
一种帮助方法是使用Python为Java项目编写SQL辅助脚本、测试脚本和日志搜索脚本。
使用Python分析Java的POM文件和包依赖。使用Python检查Java中的数据一致性。我们可以用Python做很多事情,而不是Java。
但是Java没有PyTorch。Python可以用200行代码完成的事情,Java需要500行。但通过使用AI工具,你也不能轻易获得自己的PyTorch版本。即使是像TinyGrad这样的东西也需要时间来构建。
为什么要先编写我们自己的脚本?一个原因是它具有超强的可定制性。没有公共软件或开源项目可以直接帮助我们,尤其是在大公司中的项目。
大公司的大项目开发时间长达十年或更长时间。它们已经有很多定制。
因此,未来大公司的大项目周围将会有很多周边项目。大公司内部编码代理工具中将会有更多类似Claude的代码路由器。将会有更多为大公司定制的Postman、SQL客户端和编译器。
使用Python代码也可以连接到Java代理。
这意味着我需要精通Python和Java,这样我才知道如何利用一种语言来帮助另一种语言。
我可以在AI的帮助下使用Python为自己和公司项目创建许多东西。Java似乎不是障碍。Java,搭配Spring、数据库,以及Angular、Vue或React作为前端,不应该成为Python提供大量帮助的障碍。
编程是如此灵活的东西。限制在于我们的想象力。
AI发展迅猛。我们可以通过我们能够多么容易地利用AI在编码和学习方面的帮助来实现各种事情来衡量AI的进步。
我们有一天能否编写一些AI代理,然后这些代理帮助创建一个完整的TikTok,包括它的许多微服务和大型iOS或Android项目?
如果AI如此强大,我们今天应该做什么?可能什么也不做,因为我们今天所做的事情,在AI的帮助下会很容易实现。在2025年,我们一年在AI帮助下的工作,可能在2030年AI的能力下只需要一个月就能完成。
这引出了我们的根本问题:我们生活的目的是什么?这一切为了什么?如何过上美好的生活?
AI像其他技术一样出现,给我们带来自由。但在这个资本社会中,每个人似乎都像机器一样忙碌。
回到主题。所以Python也可以帮助编写Java代码。你可以使用Python获取编写代码的上下文,然后让Copilot为你编写代码,让你一次性做对。
AI关乎提示工程和上下文工程。提示和上下文有助于AI聊天机器人的响应。
Python可以帮助提供上下文;Python可以帮助生成提示。
所以这不仅仅是关于Java,而是所有其他编程语言。Python可以深度地帮助它们。那么为什么我们仍然需要使用其他编程语言呢?
正是Python的内在设计使其性能不如其他编程语言,如C、C++或Rust。
AI时代的编程语言
AI现在如此强大,我们必须从AI的角度重新思考一切。未来10年哪些编程语言会流行?
Python肯定会。许多AI聊天机器人使用Python在浏览器中执行代码,例如Grok。Python因其简洁、易学和不错的性能而受欢迎。它被许多软件项目采用。
Python比C++、Java和Rust慢。Java拥有庞大的社区。Rust构建在C之上。
我想知道许多项目是否会被Rust重写或取代。被Rust重写意味着参照一个旧项目并使用Rust实现相同的功能。被取代意味着用其他语言编写的软件现在被用Rust编写的类似软件取代。
Rust语法相对复杂。但在AI时代,这不是一个大问题,因为AI将帮助编写代码。对于复杂语法,人类实际上也没有太多麻烦。
我认为印地语或泰米尔语相当复杂。但对于生活在北方的印度人来说,印地语不是问题,对于生活在南方的印度人来说,泰米尔语也不是问题。
但对于像我这样的中国公民来说,我认为学习它是一个大问题。
乍一看,印地语中的所有字符对我来说都相似。我认为印地语和阿拉伯语的区别就像中文和日文,或者英文和西班牙文的区别。
编程语言之间的差异小于自然语言之间的差异。一个重要原因是编程语言只在字符外观上有所不同,而自然语言在发音上也有所不同。自然语言在两个方面有所不同:字符集和发音。
编程语言只有大约一个世纪的历史,但自然语言有超过100个世纪。人们花在某件事上的时间越多,差异就越大。观点略有不同的人会创造自己的版本。
这解释了英语口音。在一些TikTok视频中,人们说最糟糕的英语口音是伯明翰。
所以实际上,Rust没有太大问题。它的性能相当好,因为它建立在C/C++之上。
性能对于许多应用程序至关重要。如今,许多应用程序被数十亿人使用。对于底层云计算基础设施,它们的服务被多次调用。因此,即使是小小的性能提升也能节省大量资金。
Rust有很多缺点吗?人们抱怨的一点是它很难学。学习曲线很陡峭。AI带来了好消息,因为它在学习方面提供了很大帮助。
我不需要过多地了解Rust。作为一个有10年经验的软件工程师,我可以利用AI来帮助编写许多简单的Rust应用程序。我只需要了解基本的Rust编译命令,如 cargo 和 cargo build。我甚至不需要过多地了解Rust语法本身。
对于Rust,可变性或借用模型不会给我带来麻烦。对于少于200行代码的简单应用程序,我可以要求AI通过提供错误消息直接修复错误。
但如果Rust这么好,为什么人们仍然大量使用Python呢?因为Python在另一方面也很好。它非常易于使用和学习。它拥有庞大的社区和许多库。
Python仍然具有足够好的性能,可以支持数百万甚至数千万用户的产品。大多数产品都没有那么多用户。如果你确实有这么多用户,你可以雇佣Rust或Java程序员来优化性能。
Python适用于许多开发:机器学习、Web开发、数学、教学和脚本编写。虽然Python在桌面应用程序方面表现不佳,但MicroPython用于Raspberry Pi。
AI时代的Java怎么样?它也会很好,因为它拥有庞大的用户基础和社区。AI对此帮助很大。它被许多大公司使用。他们倾向于不改变他们的主要编程语言。对于他们的一些大型遗留项目,使用新的编程语言来重写项目需要十年的努力。AI将对此有所帮助,但过程仍然会很慢。
通常,大公司的理性人不会考虑改变他们的主要编程语言。他们的主要业务在其他领域。他们不太关心技术。如果他们关心,他们就会成为软件或互联网公司并在开源社区中处于领先地位。然而,财富500强公司中没有多少人关心这一点。
由于AI的出现,将会有很多初创公司。初创公司喜欢做新事物,所以他们会尝试新的编程语言。在AI时代,敏捷的编程语言将在中小型企业中获胜。
在算法竞赛中,最喜欢的编程语言会改变吗?C++已经在这个领域占据了几十年。在实际的算法竞赛中,你不能使用AI。但我认为在AI时代,参与者会更少。
既然那些人非常擅长编程,而且AI带来了如此多的机会,为什么不让更多的人为用户构建实际产品,而不是练习算法问题呢?即使是算法竞赛的GOAT,Gennady Korotkevich,也选择了加入Devin。
但算法竞赛对于聪明的程序员来说,可以是一种放松或悠闲的爱好。它就像象棋或篮球。人们做它是因为喜欢或需要,而不是出于其他原因。许多人在三四十岁时打篮球。他们可能是出于健康原因或为了让生活更有趣。
对于iOS和Android,是Java、Kotlin、Swift和Objective-C。由于AI,不会有重大变化,因为选择有限。在最终用户方面,性能要求不高。谷歌和苹果对他们的平台有很高的控制权。如果谷歌和苹果不改变,程序员就不会改变。
但对于服务器,选择很多。更友好的AI语言将胜出。
过程式编程语言将比面向对象语言更受欢迎。过程式语言直接且易于由AI生成,而OOP语言有许多嵌套级别或设计模式。
AI的出现会不会使编程语言更多?我认为会。Zed和OCaml将拥有更多用户。LLMs/AI非常擅长学习模式,所以很容易用其他语言重写项目。
编程语言未来将面临更多竞争。那些在性能、语法和编译器质量方面表现优异的语言将自然变得更受欢迎。这种竞争就像LLMs一样。那些天生优秀的产品,如Claude和DeepSeek,就会受欢迎。
如果AI变得如此强大,以至于我们不再需要学习编程怎么办?那还有很长的路要走。假设我们有一个非常大的项目,包含1,000个Java文件。AI可能需要10年才能轻松地完成这些任务。