第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

如何用大語(yǔ)言模型(LLM)生成Node.js API代碼模板?

標(biāo)簽:
Node.js 人工智能 API
使用单个命令生成自定义的 Node.js CRUD API 并带有 E2E 测试

LLM-Codegen enables the Node.js API boilerplate to automatically generate module code

长期以来,启动新的 Node.js 项目的一种常见方式是使用样板。这些样板帮助开发者重用熟悉的代码结构,实现标准功能,例如访问云文件存储。随着 LLM 的最新进展,项目样板文件似乎比任何时候都更有用。

在此进展的基础上,我扩展了现有的 Node.js API 模板功能,并添加了一个新的工具 LLM Codegen,该工具可以独立运行。这个工具使得模板可以根据文本描述自动生成任何用途的模块代码。生成的模块包括端到端测试(E2E测试)、数据库迁移、种子数据以及必要的业务逻辑。

历史故事

我最初创建了一个GitHub仓库,用于整合多年来我积累的最佳实践。这是一个Node.js API 模板项目,大部分实现基于实际运行在AWS上的Node.js API代码。

我对垂直切分架构和“清洁代码”原则充满热情,以保持代码库的可维护性和整洁。鉴于最近在大型语言模型(LLM)方面的进展,特别是它对大上下文的支持和生成高质量代码的能力,我决定基于我的样板代码,实验生成清洁的TypeScript代码。我的样板代码遵循我认为质量很高的特定结构和模式。关键是生成的代码能否遵循相同的模式和结构。根据我的发现,确实如此。

以下是一些 Node.js API 模板关键特性的概览:

  • 基于DDDMVC原则的垂直切分架构
  • 服务输入验证使用ZOD
  • 使用依赖注入(InversifyJS)解耦应用程序组件
  • 使用Supertest进行集成和E2E测试
  • 使用Dockercompose部署多服务

在过去的一个月里,我用周末的时间来规范化解决方案并实现了必要的代码生成逻辑。下面,我来分享一下具体的细节。

实现概要

让我们具体看看实现的细节。所有的代码生成逻辑都位于项目根目录下的 llm-codegen 文件夹内,方便大家查阅。Node.js 的样板代码独立于 llm-codegen,可以直接当作普通的模板使用,无需任何修改。

LLM-Codegen:代码生成文件夹结构

LLM-Codegen folder structure

它包括以下用例:

  • 根据输入描述生成新模块的干净、结构良好的代码。新生成的模块会集成到 Node.js REST API 应用程序中。
  • 创建数据库迁移,并为新模块扩展种子脚本,添加基本数据。
  • 为新代码生成和修复端到端测试,并确保所有测试均能通过。

生成的第一阶段代码干净且遵循垂直切片架构原则。它仅包含 CRUD 操作所需的必要业务逻辑。与其它代码生成方法相比,它生成的代码干净、可维护且编译无误,并且包含有效的 E2E 测试。

第二个用例涉及生成带有适当模式的数据库迁移脚本,并用必要的数据更新种子文件。这项任务特别适合LLM来处理,LLM处理得非常好。

最终的使用场景是生成E2E测试,这些测试有助于确认生成的代码正确工作。在运行E2E测试时,会使用一个SQLite3数据库来进行迁移和种子。

我们主要支持的大型语言模型包括OpenAI和Claude。

使用指南

要开始,请进入根文件夹 llm-codegen,并在终端中运行命令以安装所有依赖。

npm i (安装依赖包)

llm-codegen 不依赖于 Docker 或任何其他重型第三方依赖项,使得设置和运行变得简单直接。在运行工具之前,请确保在 .env 文件中至少设置一个 *_API_KEY 环境变量,例如 OPENAI_API_KEY, CLAUDE_API_KEY 等,并使用适合您选择的 LLM 提供商的 API 密钥。所有支持的环境变量,如 OPENAI_API_KEY, CLAUDE_API_KEY 等,都列在 .env.sample 文件中。您可以选择 OpenAI, Anthropic ClaudeOpenRouter LLaMA。截至12月中旬,OpenRouter LLaMA 出乎意料地免费使用。您可以在这里注册 here 并免费获取一个访问令牌。然而,这个免费的 LLaMA 模型的输出质量可以进一步提高,因为大多数生成的代码无法通过编译。

要运行llm-codegen,运行以下命令。

运行npm start命令(启动项目)

接下来,请输入模块描述和名称。在这里,你可以详细描述模块的需求,比如实体属性和需要的操作。剩下的核心任务由三个微代理完成:DeveloperTroubleshooterTestsFixer

这是一个成功的代码生成过程的例子。

Example of a successful code generation

代码生成成功了

下面是一个修复编译错误的另一个例子,展示了如何解决一个编译时的错误。

Example demonstrating how a compilation error was fixed

以下是一个生成的 orders (订单)模块代码示例,仅供参考:

Example of a generated orders module code

关键是你可以逐步生成代码,从一个模块开始,逐步添加其他模块,直到所有必要的API都完成。这种方法只需几次命令就能完成所有所需模块代码的生成。

— 它是怎么工作的

正如前面提到的,所有工作均由这些微代理完成:Developer(开发者),Troubleshooter(故障排除者)和 TestsFixer(测试修复者),由 Orchestrator(管理者)管理。它们按照列出的顺序运行,其中 Developer 生成大部分代码。每次代码生成步骤后,会检查缺失的文件,根据其角色(例如,路由、控制器、服务)。如果缺失文件,则会再次尝试生成代码,并在提示中包含关于缺失文件的说明和每个角色的示例。一旦开发者完成其工作,TypeScript 编译开始。如果发现任何错误,则 Troubleshooter 接管,将错误反馈到提示并等待修正。最后,当编译成功时,运行E2E测试。每当测试失败时,TestsFixer 介入并根据具体说明进行操作,确保所有测试通过并使代码保持干净整洁。

所有微型代理都继承自 BaseAgent 类,并积极利用其基础方法的实现。这里有一个 Developer 实现供参考:

Developer class implementation

每个代理都使用自己特定的提示。你可以在这里查看 GitHub 链接,看看开发者(Developer)使用的提示。

经过大量的研究和测试,我改进了所有微代理程序的提示,结果是得到了干净、结构良好的代码,很少的问题。

在开发和测试期间,它被用来处理各种模块描述,从简单的到高度详细的。以下是一些例子:

    - 负责图书馆书籍管理的模块必须处理对书籍的创建、读取、更新、删除(CRUD)操作。  
    - 负责订单管理的模块。它必须提供处理客户订单的创建、读取、更新、删除(CRUD)操作。用户可以查看订单的详细信息,更新订单状态或信息,并删除已取消或已结束的订单。订单必须包含以下属性:名称、状态、下单来源、描述、图片URL  
    - 该资产管理系统中的“资产”模块提供对公司资产的创建、读取、更新、删除(CRUD)操作。用户可以向库存添加新的资产,更新维护计划、资产位置等信息,并删除已处置或已售出的资产记录。

使用 gpt-4o-miniclaude-3-5-sonnet-20241022 进行测试,显示了相当的代码输出质量,尽管 Sonnet 更贵。Claude Haiku (claude-3–5-haiku-20241022) 虽然价格与 gpt-4o-mini 相当,但更便宜,经常生成无法编译的代码。总体而言,使用 gpt-4o-mini,一次代码生成会话平均消耗大约 11k 输入 token 和 15k 输出 token。按每 1M 输入 token 15 美分和每 1M 输出 token 60 美分(截至 2024 年 12 月)的 token 价格计算,每个会话的成本约为 2 美分。

以下是Anthropic的使用日志,显示token的消耗情况。

Anthropic usage logs showing token consumption

经过我过去几周的测试,我得出结论,虽然生成的测试可能存在一些问题,但95%的情况下生成的代码是的可编译和可运行。

希望这里能给你一些灵感,并可以作为你下一个 Node.js API 或当前项目升级的起点。如果你有改进建议,欢迎通过提交代码或更新提示的方式贡献。

如果你觉得这篇文章不错,不妨给个赞或在评论区分享你的想法或问题,无论是想法还是问题。感谢你的支持,祝你玩得开心!

更新通知 [2025年2月9日]:LLM-Codegen的GitHub仓库更新,新增了对DeepSeek API的支持。它的价格比gpt-4o-mini更便宜,输出质量几乎与gpt-4o-mini相同,不过响应时间稍长,偶尔会出现API请求错误。

除非另有注明,所有图片均为作者提供,未特别标注的。

點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消