利用大模型AI辅助研发快速实现openUBMC的NCSI协议命令字解析 本文将分享openUBMC 25.06版本交付中的一个真实案例作为一名刚接触 openUBMC 的开发者在项目交付过程中如何借助 AI 辅助策略快速完成 NCSI 标准命令字的 Lua 代码编写。同时通过实战总结出可复用的 Prompt 编写技巧与代码重构范式旨在帮助社区开发者更高效地完成简单重复的协议命令字开发工作。作者简介钱昱霏进入BMC领域4个月的BMC开发者专注于软件开发与自动化效率提升在AI辅助研发有独特的见解。背景协议命令字开发遭遇重复劳动难题NCSINetwork Controller Sideband Interface网络控制器边带接口是一种用于 BMC 与网络控制器通信的协议。在openUBMC 25.06版本项目开发过程中我面临着以下几方面的挑战模块代码重复率高不同命令之间除了命令字的请求响应体存在差异外其他代码的重复度极高。测试数据需手动编写需要自己手动计算二进制测试数据过程复杂且极易出错。文档晦涩难懂NCSI 协议文档仅有英文版本阅读需耗费大量精力且容易对部分章节产生误解。为保证高质量交付我将目光投向了当下热门的 AI 辅助编码能力期望借助大模型的力量辅助完成这项开发工作。重复模式分析抓住“可自动化”的核心当前 AI 辅助编码能力尚未能完全替代人工手写盲目让 AI 独立编写代码只会适得其反。因此首要任务是对代码结构与功能模块进行分析识别出适合 AI 发挥作用的场景。1. 协议文档理解和命令字提取经过多年迭代优化当前大模型对自然语言的理解效率极高尤其在英文文档理解方面表现突出因此可通过大模型提取 NCSI 命令字的请求体和响应体封装格式。2. 编写命令处理函数为避免大模型自由发挥预设协议请求和响应体函数格式能更有效地引导其生成所需代码。同时为与 openUBMC 社区编码风格保持一致可将已有代码作为上下文传递给大模型作为参考。对于操作日志记录等 BMC 专有的要求也可通过模板提供给大模型要求其在所有设置类命令字函数中添加操作日志记录。3. 编写测试用例保证生成代码符合协议要求为了保证生成代码的质量利用openUBMC社区UT框架可以快速验证生成代码是否正确。同样测试代码也可以利用大模型生成。由于 NCSI 通讯采用二进制格式利用大模型对协议的理解能力可快速推导所需测试数据省去手动编写二进制数据的繁琐过程。编码实战Prompt模板实用技巧在工具选型上采用 GPT-4.1 与 Cursor 组合。经过多轮实践总结出一套高效 Prompt 模板现分享如下。实战成果自动生成80个函数与测试用例准确率超90%UT覆盖率达86%以上。整体开发效率提升65%累计节省30人天。代码风格与社区通用规范一致顺利通过 SIG Committer 审核。知识背景设置得益于 Cursor 强大的上下文感知机制同一仓库内的代码文件会被自动纳入大模型的分析范围开发者无需额外配置 Lua 语法和编码风格。不过由于 NCSI 协议文档不属于仓库内置文件需单独处理。值得一提的是Cursor 支持将完整协议文档作为知识库集成到上下文环境中。笔者已将公开的 NCSI 协议文档导入 Cursor为后续命令字解析工作提供了坚实的理论依据。模板编写将任务拆解为多步骤通过迭代式生成与问答交互可进一步提升代码生成准确性。我将任务分成三步并编写了对应的Prompt1.生成NCSI命令字的响应和解析函数。2.针对生成的函数生成对应的UT函数和测试数据。3.优化所有新增代码。Prompt示例1生成新函数请基于以下现有代码模式为新的NCSI命令 [COMMAND_NAME] 生成相应的函数 参考的头文件定义 命令类型宏定义参考 test-main/ncsi 路径下头文件中的命令常量 包结构定义参考头文件中的请求/响应结构体定义 长度宏定义参考头文件中的 *_REQ_LEN、*_RSP_LEN、*_PAD_LEN 等宏 现有模式 function ncsi_cmd.ncsi_enable_channel(package_id, channel_id, eth_name) 要求 1. 函数名为 ncsi_[COMMAND_NAME] 2. 参数为 package_id, channel_id, eth_name 3. 包含相同的参数验证逻辑 4. 调用对应的模块函数 5. 返回相同的错误码Prompt示例2: 测试用例生成请基于以下测试模式为 [MODULE_NAME] 模块生成完整的测试用例 现有测试模式 function TestNCSIBroadcastFilter:test_enable_broadcast_filter() 要求 1. 为 [MODULE_NAME] 创建测试类 TestNCSI[MODULE_NAME] 2. 包含 setUp 和 tearDown 方法 3. 为每个公共函数生成测试用例 4. 包含成功和失败场景测试 5. 验证请求报文格式 6. 包含边界条件测试 请生成完整的测试文件。Prompt示例3: 代码优化代码优化建议 分析 src/lualib/ncsi/ncsi_protocol/ 目录下的代码 识别可以进一步优化的重复模式。 当前已优化的模式 1. 使用 handle_channel_operation 通用函数 2. 使用 ncsi_utils.create_custom_cmd_table 3. 使用命令表模式 请分析还有哪些重复代码可以进一步优化 并提供具体的优化方案和代码实现。高效 Prompt 编写技巧总结最后给大家分享一些我自己总结的有效Prompt编写技巧总结尽管目前无法实现 “一键生成完整代码”但大模型在研发辅助中仍具较高实用价值。这种新型开发模式有望颠覆传统开发流程为 BMC、固件领域带来革新性体验。期待在 openUBMC 社区看到更多 AI 辅助编码实践激发更多创新思路。欢迎开发者分享经验、交流见解共同探索 AI 辅助编码的无限可能。欢迎关注我们社区官网https://www.openubmc.cn代码仓地址https://gitcode.com/openUBMC/network_adapter