2025年软件开发新趋势:利用llms和ai优化工作流程的5种有效策略
伟大的尊敬的哈珀·里德的胡须和他附属的人写了一篇关于LLM代码生成及其技术和方法的优秀博客。
我发现哈珀的做法与我所使用的有很多相似之处,因此我想写一个简短的“+1”来捕捉这些相似性和差异,并总体上突出一些人们可以使用的更多技术和技术,以便在我们的AI朋友的帮助下制作出最佳软件。让我们深入探讨一下!
如果您想跳过所有这些内容并观看关于相同流程的超快速视频,请查看下面:
我方法中的一个关键区别是我对Google技术非常偏向。我可以就这个特定主题写一系列博客,但简而言之,在大约1.5个十年在Google轨道中,我仍然出于良好的原因使用Google技术。正如Doug Cutting(Hadoop的共同创始人)所说:“Google生活在未来几年,并向我们其他人发送消息。”
我喜欢从计划开始。在我作为开发者的经验中,我发现有时我过于专注于构建。我开始,构建一个原型,然后完全重新思考我的方法。这可能涉及不同的平台、底层技术、库或系统/软件架构。在这个阶段,LLM非常有帮助,因为我有一个虚拟的同伴程序员可以与我交流想法,而不是让我陷入过多的技术债务中。
与哈珀类似,我首先提示我的LLM问我一些可以帮助我思考设计和我想要构建的内容的问题。与许多方法相比,这些方法有些支离破碎,我喜欢在我的IDE中进行所有这些工作的无上下文切换选项,为此我使用Google的IDX。
在那之后,我会解释我想要做什么,并请Gemini提问。在我的IDE中拥有所有这些的好处是,LLM知道我有什么和没有的访问权限。例如,通过将IDX连接到我的Google Cloud项目,它知道我不仅需要任何数据仓库,而是可以具体使用BigQuery。这在后面很方便,因为同一个LLM可以利用所有这些上下文给我产品特定的命令和代码。
在此提及我喜欢使用IDX作为我的IDE有多个原因。首先,能够从任何设备访问我的IDE而不必担心我想在哪里工作,这很好。毕竟这只是一个Web应用程序。其次,IDX和GCP的集成非常多。将某些内容部署到Cloud Run只需几次点击或一个命令,包括身份验证。这使得事情变得非常简单和快速,我发现这在设计利用最新尖端技术的AI应用程序时,采用“先构建后提问”的方法是极其重要的。除了我们在这里讨论的Gemini LLM魔法之外,还有一些“老派”(因为这些功能超过6个月——在AI领域是一个永恒)代码助手功能,比如代码补全、代码解释和代码优化。我在这里不会花太多时间讨论这些,但这可能需要成为未来的博客文章。
回到IDX中的Gemini助手,问答通常看起来像这样:
然后我们进行这种类型的来回交流。值得注意的是,这些问题可以是技术性的,但并不总是。Gemini询问我关于功能的问题,并在进入技术设计之前帮助头脑风暴产品本身。
我们还会获得详细的推荐解释,以及替代方案及其优缺点。
最后,我会得到我们计划的细分,并可以进行调整:
项目计划:棒球出席统计Web应用程序
目标: 创建一个简单的Web应用程序,显示关于棒球比赛出席的“有趣”统计数据,这些数据来自使用AI的BigQuery公共数据集。每次刷新页面时,统计数据都会变化。
技术栈:
后端: Python
Web框架: Flask(微框架)
数据源: Google BigQuery公共数据集(具体数据集待确定)
AI: Python AI库(待确定)
第一阶段:数据获取和研究(我)
BigQuery数据集研究: 我将研究BigQuery公共数据集,以确定最适合棒球出席数据的数据集,确保它包含比赛日期、球队和出席人数的信息。我还将确定它的更新频率。
数据探索: 我将探索所选的数据集,以了解其结构和可用字段。
数据提取: 我将开始编写代码,从BigQuery中提取我们需要的数据,使用Python脚本。
第二阶段:AI分析和逻辑(我)
“有趣统计”定义: 我们已达成一致,“有趣”将包括数据中的比较、基于趋势和稀有事件。
AI逻辑开发: 我将开发核心逻辑,分析提取的数据,以识别和生成“有趣”的统计数据。这可能涉及:
- 比较球队之间的出席人数。
- 分析出席趋势(例如,白天与晚上的比赛)。
- 识别稀有事件(例如,稀有对决)。
AI库: 我将研究并选择适当的Python AI库来帮助进行分析。
动态统计: 我将确保代码能够确保生成的统计数据在每次页面刷新时都是不同的。
第三阶段:Web应用程序开发(我)
Flask设置: 我将设置Flask Web应用程序框架。
API端点: 我将创建一个API端点,该端点将运行AI代码并将有趣的统计数据返回到网页。
HTML/CSS: 我将为用户界面创建一个简单的HTML页面,并使用CSS进行样式设置。
JavaScript: 我将使用JavaScript使数据加载到页面上,并使页面刷新。
第四阶段:集成和测试(我)
集成: 我将集成数据提取、AI逻辑和Flask应用程序。
测试: 我将彻底测试应用程序,以确保它正确提取数据、生成有趣的统计数据,并在网页上正确显示。
第五阶段:部署(未来步骤)
部署: 一旦应用程序构建完成,我们可以讨论部署该应用程序的选项。
关键考虑因素:
简单性: 我们优先考虑干净和简单的用户界面。
动态统计: AI生成的统计数据在每次页面刷新时都会不同。
Python/Flask: 我们选择Python和Flask,因为它们在数据科学和Web开发方面的优势。
下一步:
如果您批准此计划,我将立即开始进行第一阶段:数据获取和研究。
您对此计划有任何问题或反馈吗?
值得指出的是,我特别没有从模型切换到模型,以防止上下文切换(无论是人类还是AI),但权衡是很少的。例如,我并不觉得不使用像Gemini 2.0 Flash Thinking这样的专用推理模型会让我错过什么,因为IDX中的Gemini模型在回答之前会进行推理,并在其“思维过程”中是迭代的。
Gemini代理然后执行命令,读取其输出,并使用这些输出来确定下一步。实际创建代码时也是如此;代码被编写、考虑、调整,然后在我的干预下重新编写。在每一步,我都有能力看到具体进行了哪些更改,并在需要时进行手动编辑。
以下是更改前端的示例:
我只需点击“更新
使用AI进行代码生成
当我告诉同事我喜欢使用AI进行代码生成,但仍然希望有人参与时,我经常听到类似“哈!我就知道这些AI的东西太好了,难以置信!”的讽刺评论,我想明确表示,这并不是事实。经过足够的迭代和提示工程,我最终可以让IDX中的Gemini代理完成从头到尾的所有工作,包括在GCP上进行HA部署,而无需输入一行代码或命令。但这样做就违背了目的:我希望我的AI统治者让我更高效,而不是花额外的时间学习如何让它们听从我的命令。
因此,我发现现实世界中最有效的方法是让Gemini代理构建我的原型,让代理将其部署到GCP,然后基本上只是将那些耗时的任务卸载给AI。
一个例子是:我告诉代理构建我们在这里所拥有的内容,但我知道我还想将用户指标写入数据库。我有自己的看法,想使用BigQuery。所以我只是告诉Gemini编写一个函数,每次用户访问页面时记录,并将输出到BQ数据库。我知道我需要先_创建_那个数据库,所以我明确告诉代理构建它。我可能会让Gemini问我是否_想_使用BigQuery、数据库的名称等,但在这种情况下,我通过明确说明节省了最多的时间。
这意味着,最终,我可以在一个小时内构建一个应用程序。而在过去,我可能会被困在记忆我需要如何设置Flask路由或React代码如何改变按钮的鼠标悬停行为上,我现在可以直接告诉Gemini去做我想要的事情。我记得有一次我告诉它让前端“更像棒球”,它就做到了。
我没有卸载的是我喜欢的、擅长的并且不花费太多时间的开发部分:我知道我想要的功能、我知道最有效的系统架构,以及我用来解决类似问题的工具。
最后,我会把好奇的读者指向Harper的原始帖子,其中详细介绍了许多我在这里未覆盖的技术。他谈到了从想法到部署的完整过程,几乎不需要在键盘上敲打,并包括在原型后你需要的核心内容,如测试、git集成等。