博客详情页
  • 下载
  • 开发
  • 文档
  • 学习
  • 支持
  • 社区
  • 动态
Repositories
EN
Repositories
EN
利用大模型AI辅助研发快速实现openUBMC的NCSI协议命令字解析

利用大模型AI辅助研发快速实现openUBMC的NCSI协议命令字解析

技术干货

2025/08/07
钱昱霏

利用大模型AI辅助研发快速实现openUBMC的NCSI协议命令字解析

背景:协议命令字开发遭遇重复劳动难题

NCSI(Network Controller Sideband Interface,网络控制器边带接口)是一种用于 BMC 与网络控制器通信的协议。在openUBMC 25.06版本项目开发过程中,我面临着以下几方面的挑战:

  • 模块代码重复率高:
    不同命令之间,除了命令字的请求响应体存在差异外,其他代码的重复度极高。
  • 测试数据需手动编写:
    需要自己手动计算二进制测试数据,过程复杂且极易出错。
  • 文档晦涩难懂:
    NCSI 协议文档仅有英文版本,阅读需耗费大量精力,且容易对部分章节产生误解。

为保证高质量交付,我将目光投向了当下热门的 AI 辅助编码能力,期望借助大模型的力量辅助完成这项开发工作。

重复模式分析:抓住“可自动化”的核心

当前 AI 辅助编码能力尚未能完全替代人工手写,盲目让 AI 独立编写代码只会适得其反。因此,首要任务是对代码结构与功能模块进行分析,识别出适合 AI 发挥作用的场景。

1. 协议文档理解和命令字提取

经过多年迭代优化,当前大模型对自然语言的理解效率极高,尤其在英文文档理解方面表现突出,因此可通过大模型提取 NCSI 命令字的请求体和响应体封装格式。

images

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,为后续命令字解析工作提供了坚实的理论依据。

images

模板编写:

将任务拆解为多步骤,通过迭代式生成与问答交互,可进一步提升代码生成准确性。

我将任务分成三步,并编写了对应的Prompt:

1.生成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. 返回相同的错误码
请生成完整的函数代码。

images

Prompt示例2: 测试用例生成

请基于以下测试模式,为 [MODULE_NAME] 模块生成完整的测试用例:
现有测试模式:
function TestNCSIBroadcastFilter:test_enable_broadcast_filter()
要求:
1. 为 [MODULE_NAME] 创建测试类 TestNCSI[MODULE_NAME]
2. 包含 setUp 和 tearDown 方法
3. 为每个公共函数生成测试用例
4. 包含成功和失败场景测试
5. 验证请求报文格式
6. 包含边界条件测试
请生成完整的测试文件。

images

Prompt示例3: 代码优化

代码优化建议
分析 src/lualib/ncsi/ncsi_protocol/ 目录下的代码,
识别可以进一步优化的重复模式。

当前已优化的模式:
1. 使用 handle_channel_operation 通用函数
2. 使用 ncsi_utils.create_custom_cmd_table
3. 使用命令表模式

请分析还有哪些重复代码可以进一步优化,
并提供具体的优化方案和代码实现。

images

高效 Prompt 编写技巧总结

最后,给大家分享一些我自己总结的有效Prompt编写技巧:

images

总结

尽管目前无法实现 “一键生成完整代码”,但大模型在研发辅助中仍具较高实用价值。这种新型开发模式有望颠覆传统开发流程,为 BMC、固件领域带来革新性体验。

期待在 openUBMC 社区看到更多 AI 辅助编码实践,激发更多创新思路。欢迎开发者分享经验、交流见解,共同探索 AI 辅助编码的无限可能。

欢迎关注我们

社区官网:https://www.openubmc.cn

代码仓地址:https://gitcode.com/openUBMC/network_adapter

【版权声明】Copyright © 2026 openUBMC Community。本文由openUBMC社区首发,欢迎遵照CC-BY-SA 4.0协议规定转载。转载时敬请在正文注明并保留原文链接和作者信息。

【免责声明】本文仅代表作者本人观点,与本网站无关。本网站对文中陈述、观点判断保持中立,不对所包含内容的准确性、可靠性或完整性提供任何明示或暗示的保证。本文仅供读者参考,由此产生的所有法律责任均由读者本人承担。

关于作者

钱昱霏

进入BMC领域4个月的BMC开发者,专注于软件开发与自动化效率提升,在AI辅助研发有独特的见解。