尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

用AI Agent攻克RISC-V AI芯片软件栈:从工具链到推理引擎的实践指南

发布时间:2026/9/25 10:29:35

资讯中心
01
ARTICLE

用AI Agent攻克RISC-V AI芯片软件栈:从工具链到推理引擎的实践指南

用AI Agent攻克RISC-V AI芯片软件栈:从工具链到推理引擎的实践指南
1. 为什么会有用AI造AI这个念头RISC-V芯片软件栈的深坑作为一个长期在工具链和芯片软件栈里摸爬滚打的人我太清楚一个现实做一块RISC-V AI芯片的硬件其实不是最难的部分最难的是把配套的软件栈从0到1搭起来。指令集可以买IP、可以自己扩展RTL代码可以找人写可一旦芯片流片回来摆在桌面上的是一堆裸芯片没有编译器、没有算子库、没有运行时、没有推理引擎那它跟一块砖头的区别就不大了。之所以想到用AI Agent来做这件事是因为过去一年我在实际工作中被软件栈的琐碎折磨得不轻。RISC-V的开放特性是一把双刃剑它给了你自定义指令的自由但也意味着你没法像ARM那样直接拿到一整套成熟的工具链生态。每加一条自定义指令就得改编译器后端、改汇编器、改调试器、改算子实现改完还要验证正确性。这些工作量大、重复度高、又极其考究细节简直是为AI Agent量身定制的苦力活。当然这不是一句让AI去写代码这么简单。真正的问题是AI Agent能做到什么程度它能不能理解RISC-V自定义指令的语义能不能在交叉编译环境里自主完成改代码、编译、跑仿真、看报错、再改的闭环如果不能边界在哪里这个系列的文章就是带着这些问题往下走的。在展开之前有读者可能已经被热搜词里那几个概念绕晕了Agent、LLM、AI模型到底有什么区别网上常说的DeepSeek到底属于哪个这里我先用最直白的话说清楚后面所有讨论都建立在这组概念之上。1.1 Agent、LLM、AI模型到底谁是谁AI模型是最大的筐任何能完成某种智能任务的程序都能往里装从传统机器学习模型到深度学习模型都算。**LLM大语言模型是AI模型中的一个子类核心能力是预测下一段文字它读到你的输入按概率生成最合理的回复。而Agent智能代理**是在LLM之上包了一圈行动能力的系统它不光能说还能调用工具、查资料、跑命令、执行计划并且能根据执行结果反复调整下一步动作。用一句话区分AI模型是大脑LLM是大脑皮层Agent是大脑手脚自主意识的组合体。那DeepSeek属于哪个DeepSeek本身是一个LLM它的本体是那个能跟你对话、能写代码、能逻辑推理的大模型。但当你通过API或Agent框架把它接到工具链上让它自己决定先看报错、再改代码、再编译的时候它就成了Agent的一部分。所以正确的说法是DeepSeek是LLM它可以被用来搭建Agent但它本身不是Agent。这个区分很重要因为后面整个系列的实践思路都是围绕怎么把LLM封装成能干活儿的Agent来展开的而不是简单地把代码丢给大模型让它一口气生成完。1.2 这个系列到底想解决什么问题我把目标定得很具体用AI Agent辅助完成一块RISC-V AI芯片的软件栈建设覆盖从工具链适配、算子库生成到推理引擎验证的完整链路。这个系列不是纯理论科普而是围绕真实项目推进过程中的决策、踩坑、取舍来写。比如自定义指令要不要改GCC编译器还是先用汇编手写算子AI Agent自动生成的算子代码凭什么相信它是对的怎么设计Agent的验证回路让它在出错时能自我纠正而不是越改越离谱多智能体架构里让哪个Agent负责编译、哪个Agent负责验证、哪个Agent总控调度才不会互相打架这些问题每一篇都会拆开揉碎了讲。如果你正准备做RISC-V方向的AI芯片或者你手上有一块RISC-V开发板想跑大模型却折腾不好软件甚至你只是好奇AI Agent到底能不能在工程里真干活——这个系列应该能给你一些参考答案至少能帮你少踩几个我踩过的坑。2. RISC-V AI芯片的软件栈全景五个必须啃下的模块要用Agent去搭软件栈首先得自己心里有数一个完整的AI芯片软件栈到底由哪些部分组成我梳理下来至少有这么五块硬骨头缺一块都不行。2.1 工具链从指令集到机器码的桥梁软件栈最底层的是工具链包括汇编器、编译器、链接器和调试器。对RISC-V来说基础的GCC工具链是现成的但问题在于你做的是AI芯片几乎必然要加自定义指令来加速矩阵运算、卷积、激活函数这些AI负载。每加一条自定义指令GCC的汇编器就得认识它编译器后端就得知道怎么生成它反汇编器也得能把它翻译回来。这块工作官方GCC社区一般是不管的——你自己加的指令自己维护工具链的补丁。以往这活儿靠几个工程师手工改数月现在我尝试让Agent去读GCC后端源码理解RISC-V的指令编码格式然后自动生成定义指令、模式匹配、代码生成所需的那些代码骨架。Agent做得快不快是一回事至少它能同时盯住几十个文件的改动一致性这比人强。2.2 算子库AI计算的最后冲刺算子库是软件栈里跟性能最直接相关的一层。卷积、矩阵乘法、归一化、激活函数、Attention这些算子在硬件上长什么样直接决定了你得写什么样的算子实现。RISC-V没有像CUDA那样统一的库生态大多数团队得拿自定义向量指令或者自研的张量指令手写算子。这里有个常态化的矛盾算子数量多每个还有不同形状、不同数据类型的变体手工调优累死人纯靠编译器自动生成又往往达不到峰值性能。AI Agent在这个环节的价值是半自动生成验证让Agent按照硬件指令集手册生成算子的第一版实现然后在仿真器上采集性能数据Agent根据数据反推瓶颈在哪条指令上再有针对性地重写。听着像天方夜谭实测下来Agent确实能完成第一版但性能离手工调优还有差距。这个系列后面会有专门一篇讲我让它优化矩阵乘法的过程里面全是翻车现场。2.3 运行时与驱动让芯片活起来芯片跑起来需要驱动和运行时。驱动负责把内核态的命令传给硬件运行时负责管理模型加载、内存分配、算子调度、多核同步。这块工作不性感但缺了它上面所有层都是空中楼阁。对RISC-V AI芯片来说运行时通常要适配几种主流的AI推理框架接口比如ONNX Runtime、TFLite或者自研一套极简的调度器。让Agent写驱动难度很大因为涉及硬件寄存器操作、中断处理、DMA传输这些跟硬件强相关的内容Agent的幻觉特别容易在这种地方冒出来——它会一本正经地写出一个看似合理、但寄存器地址完全是错的函数。这也是我在系列里反复强调的核心观点Agent写的代码必须放进仿真环境里跑跑不过就是假的。2.4 推理引擎与模型转换接住生态有了算子库和运行时上层还需要推理引擎把ONNX/TFLite这类的模型格式解析成计算图再把计算图映射到底层算子。这里最繁琐的是算子兼容层因为模型里的算子五花八门你硬件上支持的算子集合就那么几十个中间需要大量的融合-拆分-替换逻辑。Agent在这个模块能帮上忙的地方是批量生成算子映射规则和转换测试用例。比如给它一个算子的语义描述让它生成对应的IR转换代码再自动生成随机的输入数据去跟参考实现对比。这类语义清晰、边界明确、验证方式简单的任务是AI Agent最擅长、最不容易翻车的场景。2.5 软硬件协同验证最后的闭环软件栈每一块都写完还不够得证明它们合在一起能工作。协同验证环境一般包含指令集仿真器ISA Simulator、基于Verilator的RTL仿真平台或者FPGA原型。模型跑出的结果要与CPU上同样的模型结果对比误差要在可接受范围内。这个验证环节天然适合Agent搭建自动化流水线Agent负责盯仿真日志、解析pass/fail、把失败的用例喂给负责修代码的Agent。我在实践中把这一层称为验证回路它是整个系统的安全网。没有这层回路的话AI Agent生成的软件栈就是一本没法证明自己正确的天书我们绝对不敢让它上板。3. AI Agent的真实分工它到底能干哪些活、哪些活不能交给它前面把软件栈全景打开了一遍你可能已经发现不是所有活都适合Agent干。我自己在动手过程中逐渐总结出一套分工方法论可以拿出来分享一下。3.1 Agent的核心骨架规划、记忆、工具、执行一个能真正干活的Agent光有LLM做脑子是不够的。我常用的最小骨架包含四个部分规划器把大任务拆解成可执行的子任务序列。比如适配自定义指令到GCC会被拆成读指令编码规范、改汇编器定义、改编译器模式、写测试用例、跑回归五个步。记忆模块短期记忆存对话上下文和当前的编译错误长期记忆存已经确认有效的代码模板和踩坑记录。芯片软件栈里经验极其碎片化记忆模块能避免Agent每次重新踩同一个坑。工具集Agent手边的工具箱包括终端、文件读写、GCC/RISCV工具链调用、仿真器接口、性能分析器。没有工具集的Agent只会说有了工具集才开始做。执行与反馈回路执行每一步操作后把返回结果喂回给规划器决定下一步是继续、回退还是换方案。实际搭建的时候不需要从零造轮子。社区里已经有几套成熟的Agent框架可以选大部分支持自定义工具集和记忆持久化。我的建议是别一上来就奔着最复杂的设计去先搭一个能跑通编译闭环的极简Agent再逐步加功能不然你没几天就会被调试Agent本身烦死。3.2 单Agent还是多智能体一个炸锅的话题网上关于多智能体的讨论很多热搜词里就有多智能体 ai agent coding协助开发规范怎么搭、怎么写。我在这篇文章里先给个结论芯片软件栈初期用单Agent中期拆成多Agent但核心是让Agent间通过文件系统交流而不是靠复杂的消息协议。原因很简单。软件栈的各个模块虽然彼此依赖但接口相对稳定——GCC生成汇编汇编被链接器吃链接器产出可执行文件仿真器执行它。这些天然的阶段边界非常适合多Agent接力编译Agent干完活把产物和状态写进文件验证Agent看到文件更新自己开始跑测试出错后诊断Agent带着测试报告去找编译Agent算账。真正难的是怎么定义Agent之间的工作交接单。我目前用的是JSON格式的task描述包含输入文件路径、输出文件路径、验收条件、上下文摘要。实测下来比让Agent之间直接传递自然语言要稳定一个数量级。3.3 从0到1搭建Agent的最小可用形态如果你想复现这个系列里的做法最少的代码量大概是这样子伪代码框架给大家一个直观印象定义工具集 run_shell(command) - 执行终端命令返回stdout/stderr read_file(path) - 读取文件内容 write_file(path, data) - 写入文件内容 invoke_simulator(bin) - 在RISC-V仿真器上跑可执行文件返回输出 定义任务循环 用户给出目标如让sqrt算子适配到vector指令 agent.plan(目标) - 生成子任务列表 for step in 子任务列表: result agent.execute(step) if 验证不通过: 获取报错信息重新规划 else: 继续下一步这个最小闭环大概几百行代码就能跑起来。核心点在于Agent的工具集里一定要有调用仿真器的能力否则它就是闭着眼睛写代码连自己写错没写错都不知道。4. 系列路线图从指令集啃到推理引擎这个系列文章不是一次性讲完而是分多篇渐进展开的。我把整个推进路线设计成六段基本对应我实际项目推进的顺序也方便读者跟着节奏走。4.1 第一段让Agent吃透RISC-V指令集手册没有这个基础后续全白搭。这一篇会讲怎么把指令集手册的结构化信息喂给Agent怎么让Agent学会新指令编码位域的推算逻辑以及怎么验证Agent对指令语义的理解是真的——方法是让它根据语义写一个指令模拟器的单测跑对了才算真懂。这里会重点讨论一个坑LLM对RISC-V规范原文的模糊记忆经常出错比如把load/store的偏移位宽记错或者把向量寄存器的数量搞混。我最后的解决思路是不让Agent背手册而是让它每次需要指令语义时先调用工具读取手册对应章节再基于读到的内容做推导。4.2 第二段自动生成指令集模拟器与汇编器适配有了对指令集的理解下一步就是让Agent去改模拟器和汇编器。这个阶段会实际检验Agent修改多文件代码的一致性能力改一条指令往往涉及解码、编码、反汇编、执行语义、调试打印等多处代码。这里面最费时间的不是写代码而是调试Agent改出来的代码。我会在这一篇分享一套分层验证的Prompt引导策略先让Agent改执行语义部分跑纯功能测试再让它改汇编编码部分验证编码二进制是否与规范一致最后合并测试。4.3 第三段算子库骨架的自动生成到这一步Agent开始接触AI负载了。给定一个算子的公式和硬件指令集让Agent生成C实现、NEON式的向量化不过这里是RISC-V的V向量指令、以及性能测试框架。这一篇的核心是讨论性能与正确性的折中。Agent很容易写出正确但慢的代码真正逼近硬件峰值需要反复看性能报告、调整数据布局和指令调度。我的计划是让Agent读取仿真器的指令统计接口根据哪条指令执行次数最多来定位热点然后有针对地改写。4.4 第四段推理引擎的算子映射层算子库基础打牢了开始做模型转换和算子映射。这个阶段最烦的是各类模型里算子形状的排列组合同样的卷积输入通道数不同、padding模式不同、stride不同映射代码的分支就铺天盖地。让Agent基于算子语义描述批量生成映射分支再用自动生成的随机测试用例去覆盖边界是这一篇的重头戏。我会详细展示怎么构造语义对照测试集来防止Agent生成看似对齐、实则有隐蔽错误的映射逻辑。4.5 第五段全链路验证与回归软件栈各层组装完成后进入全链路验证。用一组真实的视觉模型比如ResNet、MobileNet的小型版本从ONNX导入跑完整个软件栈跟CPU参考输出做逐层对比。这一篇会讲回归测试策略怎么分优先级跑用例、怎么处理精度误差的阈值、怎么在Agent改代码后自动触发回归并定位是哪个模块引入的退化。4.6 第六段FPGA原型上的实战演习最后一段把软件栈从仿真器挪到FPGA原型板上。这一篇不是纯软件内容了会涉及板卡启动、DMA搬运、内存分配和中断这些偏硬件的部分。这里我要提前打预防针Agent在FPGA调试上的能力非常有限大部分时序问题、总线问题还得人肉排查。我的计划是让Agent只负责日志收集和辅助分析不指望它直接定位硬件问题。这个边界等写到那篇时会展开细说。5. 我在启动这个项目时踩过的一些坑既然这是导读篇我想先把几个早知道就好了的坑说在前面给打算动手的朋友提个醒。5.1 别让Agent直接改GCC源码除非你有验证马甲GCC源码是几十万行的庞然大物Agent很容易在改完一个文件后因为上下文窗口不够忘了另一个文件的对应改动。我的经验是先让Agent生成补丁文件的期望差异清单人确认逻辑合理后再让Agent动手。简单说就是先审方案后审代码。5.2 Agent生成的仿真器代码一定要做差分验证指令集模拟器是后面所有验证的地基最怕的是模拟器本身的实现错了。我的做法是拿一条真实指令在RTL仿真器里跑出结果再拿同一个程序在Agent写的模拟器里跑两者输出逐位对比。凡是没做过差分验证的模拟器本质上都是不可信的。5.3 记忆模块的过拟合问题Agent的长期记忆如果记录太杂会在后续任务里频繁引用错误经验。比如某个问题是环境配置导致的Agent会把环境配置记成代码逻辑的坑下次改代码时反而缩手缩脚。我现在倾向给记忆模块加标签硬件相关、工具链相关、算法相关、环境相关。每个标签单独存储查询时限制标签范围避免串味。5.4 让Agent自己写测试来验证自己是个危险设计听起来很美好实际上Agent写的测试大概率跟Agent写的实现共享同样的盲区——它不理解的地方测试也测不出来。我的补救是至少准备一组由人工审定的金标准测试用例Agent新增的测试可以扩充分支覆盖但不能替代金标测试。6. 动手前需要准备的工具与环境清单在开始这个系列之前我建议你先把下面这些工具和环境准备好动手时会顺畅很多。RISC-V工具链基于GCC的交叉编译器建议用带向量扩展V扩展支持的新版本AI算子离不开向量指令。指令集仿真器至少准备一个功能仿真器如Spike和一个性能仿真器能统计指令周期数。功能仿真器管正确性性能仿真器管调优。RTL仿真环境Verilator是开源社区最常用的选择用来做指令的黄金参考验证。Agent框架选一个支持自定义工具集和记忆持久化的主流框架即可不一定非得是最新的稳定优先。模型样例准备几个小型的、结构经典的AI模型ResNet系列、MobileNet系列、一个小Transformer用于全链路验收。版本管理强烈建议用Git管理Agent每次的改动Commit信息里让Agent标注改了哪个文件、为什么改、验证结果如何。没有这个习惯你根本无法解释为什么昨天的代码还能跑、今天的就不跑了。这个环境清单看着东西不少但大部分都是开源生态里现成的。真正需要你自己写的是胶水代码——把工具链、仿真器、Agent框架串起来的那层东西。我个人的实际体会是用AI Agent造芯片软件栈目前还到不了全自动无人值守的程度但已经能帮我把那些重复性强、逻辑明确、又烦人的活分担掉一大半。我最舒服的工作模式是Agent批量铺开干粗活我在关键节点做方案审查和验收测试。人负责定方向和把质量关Agent负责把量铺开这台戏才能唱下去。下一篇文章开始我们就正式进入第一段实践让Agent吃透RISC-V指令集手册。建议对指令集基本概念不熟的朋友先把RISC-V的特权架构和向量扩展手册大体翻一遍那样看后续的怎么把规范喂给Agent会轻松很多。
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。