news 2026/9/28 21:04:20

Innovus数字后端入门:Floorplan与Powerplan实战指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Innovus数字后端入门:Floorplan与Powerplan实战指南

1. 数字后端入门第一课:Floorplan与Powerplan到底在做什么

刚接触数字后端的人,十有八九会在Innovus里被Floorplan和Powerplan这两个环节卡住。工具报错一大堆,DRC违规满屏飘红,电源网络压降超标,绕线绕不通,时序怎么修都收敛不了——这些问题追根溯源,很多时候都是因为Floorplan和Powerplan阶段没做扎实。我见过太多项目,前端RTL综合出来的网表没问题,结果到了后端,因为布局规划不合理,整个项目返工重来。

这篇文章就是写给正在啃Innovus数字后端流程的朋友。不管你是刚入行的应届生,还是从模拟版图转过来的工程师,或者是做了几年但一直没系统梳理过Floorplan方法论的老手,都能从这里找到可以直接上手的东西。我会把Floorplan和Powerplan的完整流程拆开,讲清楚每一步为什么这么做、参数怎么算、工具怎么点、坑在哪里。核心关键词就几个:Innovus、Floorplan、Powerplan、数字后端、Cadence。读完你至少能做到:拿到一个综合后的网表,从零开始把Floorplan和Powerplan做出来,并且知道怎么判断做得好不好。

先说清楚这两个概念在数字后端流程里的位置。数字后端从RTL综合开始,拿到门级网表之后,依次经过Floorplan、Powerplan、Placement、CTS、Routing、Signoff这几个大阶段。Floorplan是物理设计的第一步,决定了芯片的die size、core area、macro摆放、IO位置、block形状。Powerplan紧跟在Floorplan之后,负责把电源和地网络铺到整个芯片上,保证每个标准单元、每个macro都能拿到稳定的供电。这两个阶段做得好,后面的Placement和Routing会顺很多;做得不好,后面每一步都在还债。

为什么很多人觉得Floorplan难?因为它不像写代码那样有明确的语法规则,更多依赖经验判断和权衡取舍。工具能帮你算utilization,但macro放哪里、power ring多宽、strap间距多少,这些决策需要你理解设计本身的特性。我个人的经验是,Floorplan阶段花的时间越多,后面debug的时间越少。一个中等规模的SoC,Floorplan做两三天很正常,急着往下推反而会出大问题。

2. 动手之前的准备工作:数据检查和环境搭建

2.1 综合网表和库文件的完整性确认

在Innovus里跑Floorplan之前,你得先把该准备的文件备齐。最核心的是综合后的网表文件(.v)、时序约束文件(.sdc)、物理库文件(.lef)、时序库文件(.lib)、以及工艺文件(.tf或.techlef)。这些东西缺一个,工具都跑不起来。

我习惯在启动Innovus之前,先用文本编辑器快速扫一遍网表,确认几个关键点:模块顶层名字对不对、有没有未解析的模块引用、电源地端口有没有正确声明。特别是电源地端口,如果综合的时候没处理好,后面Powerplan会非常麻烦。SDC文件也要检查,clock定义、input/output delay、false path这些约束是不是完整。我踩过一次坑,SDC里漏了一个generated clock的定义,结果CTS之后时序全乱,回头查了半天才发现是约束的问题。

库文件方面,LEF文件分tech LEF和cell LEF。tech LEF描述工艺层信息,比如金属层厚度、最小线宽、间距规则;cell LEF描述每个标准单元和macro的物理尺寸、pin位置。这两个文件必须和你的工艺节点匹配,用错版本会导致后续DRC大量违规。LIB文件要确认PVT corner覆盖了你的设计需求,通常至少要有SS、TT、FF三个corner。

2.2 Innovus启动脚本的规范写法

Innovus的启动方式有两种:交互式和批处理。新手建议先用交互式,方便随时查看和调试。启动命令很简单:

innovus -64

进入工具后,先加载设计:

set init_verilog "./netlist/top.v" set init_lef_file "./lef/tech.lef ./lef/cells.lef" set init_mmmc_file "./mmmc/view_definition.tcl" set init_top_cell "top" init_design

这里有个细节很多人忽略:init_mmmc_file里定义的view列表决定了你后续能看哪些corner的时序。我一般会定义至少三个view:setup view用SS corner,hold view用FF corner,power view用TT corner。这样在Floorplan阶段就能同时关注不同corner下的时序和功耗情况。

注意:init_design之前一定要确认LEF文件路径正确,如果工具找不到cell的物理信息,后面place的时候会报"cell not found in LEF"的错误。

2.3 设计规模评估与die size预估

加载完设计后,第一件事是看设计的规模。用report_area命令可以看综合后的面积报告,用report_cell可以看标准单元和macro的数量。这些数据决定了你的die size大概要多大。

Die size的估算有个经验公式:core area = standard cell area / target utilization。Target utilization一般在0.6到0.75之间,具体取决于设计的拥塞程度。如果设计里macro多、连线复杂,utilization要放低一点,给绕线留空间。我通常先用0.65估算一个初始值,然后在Floorplan过程中根据实际情况调整。

举个例子,假设标准单元总面积是500000平方微米,target utilization设0.65,那core area大概是769230平方微米。如果core是正方形,边长约877微米。再加上IO ring和power ring的宽度,die size大概要放到950微米左右。这个估算不是精确值,但能给你一个合理的起点。

3. Floorplan核心流程:从die size到macro摆放

3.1 Die size与core area的确定方法

在Innovus里创建Floorplan有两种方式:手动指定die size,或者让工具根据utilization自动算。我一般先用自动算的方式起步:

floorPlan -r 1.0 0.65 5.0 5.0 5.0 5.0

这条命令的意思是:aspect ratio为1.0(正方形),target utilization为0.65,四边各留5微米margin。工具会根据标准单元面积自动算出core大小和die大小。

但自动算出来的结果往往需要手动调整。比如设计里有大macro,自动算的core可能放不下;或者IO位置有特殊要求,die的形状需要改成矩形。这时候就要用floorPlan -d手动指定die的宽高,再用floorPlan -b指定core的边界。

我个人的习惯是:先用自动算的结果作为参考,然后根据macro的数量和大小手动调整。如果macro总面积占比超过30%,utilization要降到0.55到0.6,否则后面绕线会非常痛苦。

3.2 Macro摆放的三大原则与实操技巧

Macro摆放是Floorplan里最考验经验的部分。放得好,后面绕线顺畅、时序容易收敛;放得不好,congestion到处冒,timing怎么修都修不干净。我总结下来有三个核心原则:

原则一:沿边缘和角落摆放。Macro尽量靠边放,把中间区域留给标准单元。这样做的原因是标准单元之间的连线通常比macro到标准单元的连线更密集,把中间区域留给标准单元可以减少绕线拥塞。如果macro放在中间,标准单元被挤到四周,连线会绕来绕去,congestion必然严重。

原则二:按数据流方向摆放。如果设计里有明确的数据流,比如从输入端口经过一系列处理模块到输出端口,macro的摆放要顺着这个方向。这样可以让关键路径的连线最短,有利于时序收敛。我做过一个图像处理芯片,数据从左边输入,经过多个处理模块从右边输出,macro按这个方向摆好之后,关键路径的延迟比乱摆减少了15%左右。

原则三:Macro之间留足通道。Macro和macro之间、macro和core boundary之间要留出足够的绕线通道。通道宽度取决于这个区域需要穿过多少根线。一般来说,macro之间至少留20到30微米的通道,如果这个区域连线密集,要留到50微米以上。通道不够宽,绕线器绕不过去,就会产生DRC违规。

在Innovus里摆放macro的命令是:

placeInstance macro_name x_coordinate y_coordinate -fixed

-fixed表示这个macro位置固定,后面place和route阶段不会移动它。摆放的时候可以用GUI拖拽,也可以用命令精确控制。我建议先用GUI大致摆好,再用命令微调坐标,确保对齐。

3.3 IO placement与pin assignment的注意事项

IO placement决定了信号从芯片外部进入内部的路径。如果IO位置不合理,信号线要从芯片一端绕到另一端,延迟大、拥塞重。IO placement的基本原则是:按功能分组,相关信号放在一起;高速信号靠近对应的处理模块;电源地IO均匀分布。

在Innovus里,IO placement通常通过loadIoFile命令加载一个IO文件来指定。IO文件的格式是每行一个IO,包含IO名字、位置、方向等信息。如果没有IO文件,工具会按默认规则自动摆放,但效果通常不理想。

Pin assignment是IO placement的延伸,指的是把内部模块的pin分配到core boundary上的具体位置。这一步在层次化设计里特别重要。Pin的位置要和对应模块的位置匹配,否则连线会绕远路。我一般会用assignPin命令手动指定关键pin的位置,剩下的让工具自动分配。

提示:IO placement和pin assignment做完之后,一定要用checkPinAssignment检查一遍,确认没有pin重叠或者位置冲突。

3.4 拥塞分析与utilization的平衡艺术

Floorplan做完之后,不要急着往下走,先做一次拥塞分析。Innovus里可以用reportCongestion命令查看congestion map。如果某个区域congestion严重,说明这个区域的standard cell密度太高或者macro摆放不合理,需要调整。

Utilization的平衡是个艺术。Utilization太高,绕线资源不够,congestion严重;Utilization太低,芯片面积浪费,成本增加。我通常的做法是:先按0.65的utilization做Floorplan,跑一次congestion分析,如果congestion在可接受范围内(比如hotspot不超过5个),就继续往下走;如果congestion严重,就把utilization降到0.6甚至0.55,重新调整macro位置。

这里有个经验数据:对于28nm工艺,如果设计里没有大macro,utilization可以做到0.7到0.75;如果有多个大macro,utilization要降到0.55到0.65;如果是16nm及以下工艺,因为金属层电阻增大、绕线资源更紧张,utilization还要再降0.05到0.1。

4. Powerplan实战:电源网络的设计与验证

4.1 Power ring的设计参数与计算过程

Powerplan的第一步是设计power ring。Power ring是围绕core area的一圈电源和地线,负责把芯片外部的电源引到内部。Power ring的宽度和层数取决于设计的功耗需求。

计算power ring宽度的方法是这样的:先估算芯片的总功耗,然后根据电源电压算出总电流,再根据金属层的电流密度限制算出需要的金属宽度。举个例子,假设芯片总功耗是2W,电源电压1.0V,那总电流就是2A。如果用的金属层电流密度限制是1mA/微米,那需要的金属总宽度就是2000微米。如果power ring用两层金属,每层走一半电流,那每层需要1000微米宽。但power ring是环形的,实际宽度要除以环的周长。假设core周长是4000微米,那每层power ring的宽度大概是0.25微米。这个计算是简化版,实际还要考虑温度降额、electromigration余量等因素。

在Innovus里创建power ring的命令是:

addRing -nets {VDD VSS} -type core_rings -follow core \ -layer {top M1 bottom M1 left M2 right M2} \ -width 2.0 -spacing 1.0 -offset 1.0

这条命令的意思是:在core四周创建VDD和VSS的ring,top和bottom用M1层,left和right用M2层,线宽2微米,间距1微米,距离core边界1微米。

4.2 Power strap的间距计算与布局策略

Power strap是从power ring向内延伸的电源线,负责把电源送到core内部的每个角落。Strap的间距决定了电源网络的密度和压降。间距太小,浪费绕线资源;间距太大,压降超标。

Strap间距的计算要考虑两个因素:IR drop和electromigration。IR drop是电源线上的电压降,一般要求不超过电源电压的5%。Electromigration是电流密度过大导致的金属原子迁移,会导致金属线断裂。这两个因素都要求strap有足够的密度。

我通常先用一个经验值起步:strap间距设为50到100微米,然后跑IR drop分析,根据结果调整。如果IR drop超标,就把间距缩小;如果IR drop余量很大,可以适当放大间距节省绕线资源。

在Innovus里创建strap的命令是:

addStripe -nets {VDD VSS} -layer M3 -direction vertical \ -width 1.5 -spacing 1.0 -set_to_set_distance 50.0

这条命令在M3层创建垂直方向的strap,线宽1.5微米,间距1微米,每组strap之间的距离50微米。水平方向的strap在M4层类似创建。

4.3 Via阵列的规划与连接可靠性

Power ring和strap之间、不同金属层的strap之间,需要通过via连接。Via阵列的设计直接影响电源网络的可靠性。Via太少,接触电阻大,IR drop严重;Via太多,占用绕线资源。

我的经验是:在power ring的拐角处和strap的交叉点,via要打满。其他地方可以适当稀疏。Innovus里可以用addVia命令手动添加via,也可以用editPowerVia自动添加。

注意:Via的尺寸要符合工艺的DRC规则。有些工艺对via的间距和包围有特殊要求,比如via到金属边缘的距离不能小于某个值。这些规则在tech LEF里有定义,做Powerplan之前要仔细看一遍。

4.4 IR drop分析与electromigration检查

Powerplan做完之后,必须做IR drop分析和electromigration检查。IR drop分析用reportIRDrop命令,electromigration检查用reportEM命令。

IR drop分析的结果通常用heat map显示,红色区域表示压降大,绿色区域表示压降小。如果红色区域出现在标准单元密集的区域,说明这个区域的电源供应不足,需要加strap或者加宽strap。如果红色区域出现在macro附近,可能是macro的电源pin没有正确连接到power网络。

Electromigration检查会报告哪些金属线的电流密度超标。超标的线需要加宽或者增加并联路径。我遇到过一次,一个电源strap的电流密度刚好卡在限制值上,工具报了warning,当时没在意,结果流片后测试发现那条线有轻微的性能退化。后来再做项目,EM检查的余量至少留20%。

5. 验证与优化:Floorplan和Powerplan做完之后怎么检查

5.1 物理验证检查清单

Floorplan和Powerplan做完之后,不要急着跑place。先做一轮物理验证,确认没有低级错误。我通常检查这几项:

  • DRC检查:用verifyGeometry命令检查有没有金属间距违规、宽度违规。Powerplan阶段最常见的DRC问题是strap和macro的pin重叠、via阵列超出金属边界。
  • LVS检查:用verifyConnectivity命令检查电源网络的连接性。确认每个标准单元的电源pin都连接到了VDD网络,地pin都连接到了VSS网络。
  • Congestion检查:用reportCongestion查看拥塞情况。如果congestion hotspot超过10个,建议调整Floorplan。
  • IR drop检查:确认最大IR drop在允许范围内。一般要求静态IR drop不超过5%,动态IR drop不超过10%。

5.2 常见DRC违规的修复方法

Powerplan阶段最常见的DRC违规是metal spacing violation和via enclosure violation。Metal spacing violation通常是strap之间的距离太近,解决方法要么是加大间距,要么是调整strap的层分配。Via enclosure violation是via到金属边缘的距离不够,解决方法是加大via的尺寸或者调整via的位置。

还有一种常见的违规是macro的power pin没有正确连接。有些macro的power pin在LEF里定义的位置和实际不符,导致strap连不上去。这种情况需要手动在macro的pin位置添加metal patch,把strap和pin连起来。

5.3 时序与拥塞的早期评估

虽然Floorplan阶段还没有做place和route,但可以用reportTiming做一个粗略的时序评估。Innovus会根据net的估算长度算一个虚拟的时序,虽然不精确,但能帮你发现明显的时序问题。如果某个路径的slack特别差,可能是相关的模块摆放太远,需要调整位置。

拥塞评估前面说过了,这里补充一点:如果congestion集中在某个macro周围,可能是这个macro的pin朝向不对。Macro的pin应该朝向标准单元区域,这样连线最短。如果pin朝向芯片边缘,连线要绕一大圈,congestion必然严重。

6. 避坑指南:那些年我踩过的Floorplan与Powerplan的坑

6.1 Macro摆放太靠中间导致绕线拥塞

这是我早期最常犯的错误。刚学的时候觉得macro放中间看起来整齐,结果place之后congestion map红成一片,绕线器根本绕不通。后来才明白,macro应该靠边放,把中间区域留给标准单元。这个教训让我养成了一个习惯:每次放完macro,先跑一次congestion分析,确认中间区域是绿色的才继续。

6.2 Power ring宽度不够导致IR drop超标

有一次做一个低功耗设计,我觉得功耗不大,power ring就做窄了一点。结果IR drop分析显示最大压降到了8%,超过5%的限制。回头加宽power ring,重新跑分析,压降降到3%才通过。这件事告诉我,power ring的宽度不能凭感觉,一定要根据功耗算。

6.3 Strap间距过大导致电源供应不足

Strap间距过大是另一个常见问题。有一次为了省绕线资源,把strap间距设到了150微米,结果IR drop分析显示core中间区域的压降特别大。后来把间距缩到80微米,问题解决。我的经验是:strap间距不要超过100微米,功耗大的设计要缩到50到60微米。

6.4 Via太少导致连接电阻过大

Via数量不足会导致连接电阻增大,进而加剧IR drop。我见过一个案例,power ring和strap之间的via只打了几个,结果那个区域的IR drop比周围高了2%。后来把via打满,问题消失。Via的原则是:能打满的地方尽量打满,特别是电源主干路径上。

6.5 忽略EM检查导致后期返工

Electromigration检查容易被忽略,因为它的后果不像IR drop那么直观。但EM问题一旦在流片后暴露,就是不可逆的。我现在的习惯是:Powerplan做完之后,EM检查必须过,而且余量至少留20%。如果某个线的电流密度接近限制值,要么加宽,要么加并联路径。

6.6 IO placement不合理导致信号绕远路

IO placement不合理会导致信号线绕远路,增加延迟和拥塞。我做过一个设计,高速接口的IO放在了芯片的另一端,信号线要横穿整个芯片,延迟增加了200皮秒。后来把IO移到靠近处理模块的位置,延迟降到50皮秒。IO placement的原则是:相关信号靠近相关模块,高速信号优先考虑。

7. 从Floorplan到Placement的衔接要点

Floorplan和Powerplan做完之后,下一步是Placement。这两个阶段的衔接有几个关键点要注意。

第一,确认Floorplan的def文件已经保存。Innovus里用defOut命令导出def文件,这个文件包含了Floorplan的所有信息,是后续步骤的输入。

第二,检查power network的连接性。Placement之前,工具会检查每个标准单元的电源pin是否能连接到power网络。如果有pin连不上,place会报错。

第三,设置place的约束。比如setPlaceMode里可以设置congestion effort、timing effort等参数。Floorplan阶段如果congestion比较严重,place的congestion effort要设高一点。

第四,确认macro的placement status是fixed。如果macro没有fixed,place阶段工具可能会移动macro,导致Floorplan白做。

我个人的流程是:Floorplan做完之后,先跑一次快速place,看看congestion和timing的大致情况。如果问题不大,就继续做CTS;如果问题严重,就回到Floorplan调整。这个迭代过程可能要做两三次,但比后面route阶段再发现问题要好得多。

8. 一些提高效率的脚本技巧

Innovus支持Tcl脚本,把常用的操作写成脚本可以大幅提高效率。我分享几个我常用的脚本片段。

自动检查DRC并报告:

verifyGeometry set drc_count [llength [dbGet top.markers]] puts "Total DRC violations: $drc_count"

批量摆放macro:

set macro_list [list "macro1" "macro2" "macro3"] set x 10.0 foreach macro $macro_list { placeInstance $macro $x 10.0 -fixed set x [expr $x + 100.0] }

自动调整strap间距并重新生成:

proc adjust_strap {new_distance} { deleteStripe -nets {VDD VSS} addStripe -nets {VDD VSS} -layer M3 -direction vertical \ -width 1.5 -spacing 1.0 -set_to_set_distance $new_distance }

这些脚本看起来简单,但在实际项目中能省很多时间。特别是当你要反复调整参数的时候,脚本比手动操作快得多。

9. 关于工具版本和工艺节点的适配经验

不同版本的Innovus在命令和默认参数上可能有差异。比如Innovus 18.1和21.1在addStripe的默认via生成策略上就不一样。我建议在项目开始前,先确认工具版本和工艺库的兼容性。有些工艺库只支持特定版本的Innovus,用错版本会导致LEF解析错误。

工艺节点方面,28nm及以上和16nm及以下的Floorplan策略差别很大。28nm的金属层电阻相对小,IR drop问题不突出,strap间距可以大一些。16nm及以下金属层电阻增大,IR drop成为主要矛盾,strap要密、power ring要宽。而且先进工艺的DRC规则更复杂,via的enclosure要求更严格,Powerplan阶段要留更多余量。

我做过一个16nm的项目,刚开始按28nm的经验做Powerplan,结果IR drop怎么都过不了。后来把strap间距从100微米缩到50微米,power ring加宽了一倍,才勉强通过。先进工艺的电源网络设计,保守一点没坏处。

10. 面试中常被问到的Floorplan与Powerplan问题

数字后端面试里,Floorplan和Powerplan是高频考点。我整理了几个常见问题和我自己的回答思路。

问题一:Floorplan阶段如何确定die size?

回答思路:先根据标准单元面积和target utilization估算core area,再根据macro数量和大小调整。Utilization的选择要考虑设计拥塞程度,macro多、连线复杂的设计要降低utilization。最后加上IO ring和power ring的宽度得到die size。

问题二:Macro摆放的原则是什么?

回答思路:沿边缘和角落摆放,按数据流方向摆放,macro之间留足绕线通道。核心目的是减少congestion,优化关键路径延迟。

问题三:Power ring的宽度怎么算?

回答思路:根据总功耗和电源电压算总电流,再根据金属层电流密度限制算需要的金属总宽度,除以ring的周长得到每层ring的宽度。要考虑温度降额和EM余量。

问题四:IR drop超标怎么解决?

回答思路:先定位IR drop大的区域,如果是电源供应不足,加strap或者加宽strap;如果是via连接电阻大,增加via数量;如果是power ring宽度不够,加宽power ring。解决之后重新跑分析确认。

问题五:Floorplan做完之后怎么验证?

回答思路:DRC检查、LVS检查、congestion检查、IR drop检查、EM检查。确认没有违规之后再往下走。

这些问题看起来简单,但要答得好,需要你对每个步骤的原理有深入理解。面试官通常会追问细节,比如"为什么utilization要设0.65而不是0.7",这时候你就要能说出拥塞和绕线资源的权衡关系。

11. 我个人在实际项目中的几点体会

做了这么多年数字后端,Floorplan和Powerplan始终是我最重视的环节。我的体会是:这两个阶段没有捷径,就是多看、多试、多总结。每个设计都有自己的特点,别人的经验可以借鉴,但不能照搬。

我现在的习惯是:拿到一个新设计,先花半天时间看网表、看约束、看库文件,理解这个设计在做什么、数据流是怎样的、有哪些特殊要求。然后再动手做Floorplan。这个"看"的过程看似浪费时间,实际上能避免很多返工。

另外,工具的命令和参数要熟悉,但不要迷信工具。工具能帮你算utilization、能帮你做IR drop分析,但最终的决策还是要靠人。比如macro放哪里、power ring多宽,这些没有标准答案,需要你根据设计的具体情况判断。

最后分享一个小技巧:每次做完Floorplan和Powerplan,把关键参数和结果记录下来,比如utilization、die size、IR drop最大值、congestion hotspot数量。下次做类似设计的时候,这些数据就是你的参考基准。积累多了,你就能形成自己的经验公式,做Floorplan的速度和 quality都会大幅提升。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/28 21:03:54

AI智能体重构旅行规划:Prompt工程与FastAPI实时票务接口实战

1. 旅行规划工作流为什么需要AI智能体重构做过旅行规划的人都有一个共同感受:这件事看起来简单,实际上是一个典型的多约束优化问题。你要同时考虑时间窗口、预算上限、交通衔接、景点开放时间、个人偏好、同行人意见,甚至还要留出应对突发状况…

作者头像 李华
网站建设 2026/9/28 21:02:07

国内推荐权威优选即用型马铃薯葡萄糖琼脂培养基PDA哪家可靠

近年来,随着食品检测、农产品质检、科研实验等领域对微生物检测的需求持续攀升,即用型马铃薯葡萄糖琼脂培养基PDA作为霉菌、酵母菌培养计数的核心耗材,采购需求逐年上涨。目前行业普遍存在三大痛点:一是报价不透明,同规…

作者头像 李华
网站建设 2026/9/28 21:00:10

LlamaIndex vs LangChain 深度选型:LLM应用架构实战解析

# LlamaIndex vs LangChain 深度选型:LLM应用架构实战解析大模型应用开发已经从早期的Prompt工程迈入了深水区。你不再只是调一个API、拼一段Prompt,而是要面对海量数据接入、复杂工具调用和多步工作流编排。在构建RAG系统和Agent架构时,框架…

作者头像 李华