news 2026/10/2 5:27:34

SAP BAPI实现标准成本批量标记与发布,摆脱CK24手动操作

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SAP BAPI实现标准成本批量标记与发布,摆脱CK24手动操作

做SAP CO模块的同行应该都有过这种经历:月底要推标准成本,CK24里一个物料一个物料地进去点标记、点发布,物料一多就是几百次点击。我印象最深的一次,一个项目上线后第一轮成本估算,两千多个物料在CK24界面里翻页翻到怀疑人生,还漏了十几个,结果财务月底结账时发现有的物料还在“创建”状态,标准价格根本没生效。后来我改用BAPI批量处理,才把这摊事彻底理顺。这次重点聊BAPI_COSTESTIMATE_MARKING和BAPI_COSTESTIMATE_RELEASING这两个函数,看看怎么用它们把CK24的标准成本标记、发布流程搬到程序里跑,以及从“代码能跑”到“业务能收”之间到底要趟过哪些坑。

1. 从CK24到BAPI:什么样的场景逼你放弃手动操作

1.1 手动CK24的流程回顾

在SAP标准功能里,标准成本估算从创建到生效分为三步。先由成本核算员用CK11N按成本核算变式跑一张成本估算,这个时候成本估算的状态是“创建”,物料主数据里的标准价格不会被改动。确认估算结果OK之后,进CK24做“标记”,标记动作相当于告诉系统“这张成本估算我认可了”,但用户还是看不到标准价格的变动。最后在CK24里再点“发布”,系统才会把这张成本估算的价格写到物料主数据的标准价格字段里。

CK24界面里可以按单个成本估算操作,也可以进入“标准成本估价”的批量视图。实际业务里,很多人是先从CK11N批处理生成估算,再在CK24用会计视图批量标记、发布。手动操作的时候比较容易出问题的在于:筛选条件里日期、工厂、成本核算变式一旦选错,很容易把老版本的成本估算给标出来,新手特别容易在这里翻车。另外,CK24的操作记录没有统一的日志表,全靠人为确认,出问题以后回溯非常费劲。

1.2 自动化动手的三个信号

什么情况应该果断放弃手动操作,改成BAPI?我总结下来主要是这三类:

  • 物料数量大:月初几百上千个物料要推价,人工翻页和勾选消耗大量时间,而且越到后半夜越容易出错。
  • 系统集成要求高:上游PLM、供应商协同平台推送新BOM和采购价,SAP需要自动接收数据并完成成本估算刷新。人工再敲一遍CK24就失去集成的意义了。
  • 价格变动频繁:采购价格一个月改好几次,每次都要重跑成本估算并标记发布,人工跟不上业务节奏。月结窗口就那么短,财务留给你推价的时间通常只有半天。

手动和BAPI的差距不是一星半点,我整理过一个对比:

对比维度手动CK24BAPI方式
单批次处理量受界面和人工翻页限制循环几千个无压力
出错率筛选条件选错、点错行参数固定后基本可控
过程审计只有操作者自己的记忆可以写日志表留痕
扩展性每次新需求都要新增操作步骤程序里加条件就行
异常处理报错后人工介入可以按RETURN消息定制处理逻辑

当然,不是说所有场景都必须上BAPI。一两个物料的临时重估,直接在CK24点两下比写程序快得多。我自己的判断标准是:只要一个批次超过30个物料,或者这个操作每周至少出现一次,就应该考虑用BAPI。

2. 标记与发布的状态机逻辑:两个BAPI为什么不能合并成一个

2.1 成本估算的三种状态

要真正用好这两个BAPI,得先理解成本估算背后的状态机。SAP在表CKMLHD里用KKZMA和KKZMP两个字段来标识成本估算处于什么阶段:

  • 创建:KKZMA为空。CK11N刚算出结果,只是个“草图”,物料主数据里的价格完全不受影响。
  • 标记:KKZMA为X,KKZMP为空。表示这张成本估算已经被确认,但还没覆盖物料主数据。
  • 发布:KKZMA为X,KKZMP为X。价格已经正式更新到物料主数据标准价字段,并记入物料分类账。

用生活里的场景打比方,这就像新产品的定价流程:销售先出一个报价单(创建),部门经理确认签字(标记),最后财务审批入账(发布)。签字和入账之间是有业务缓冲的,因为一旦入账要改回来就很麻烦。

2.2 标记和发布的功能边界及参数对比

SAP没有把标记和发布合成一个BAPI,不是因为技术上做不到,而是这两个动作的授权对象和业务含义本来就不一样。标记通常由成本核算员操作,发布一般需要成本主管或财务人员审核后操作。如果合成一个BAPI,就无法在程序里区分操作责任。另外,发布动作会改物料主数据和物料分类账,往往要触发新的月结期间,拆分可以让调用方更灵活:统一标记后,可以按批次发布,出了问题的物料单独回滚,影响面可控。

从BAPI参数上看,这两个函数几乎是一对双胞胎。以我常用的版本来列,主要导入参数如下,具体以你在SE37里看到的为准:

参数说明MARKINGRELEASING
CO_AREA成本控制范围可选可选
COSTESTIMATE成本核算号(KALNR)可选可选
COSTINGDATE成本核算起始日期必填必填
COSTINGVERSION成本核算变式可选可选
VALUATIONAREA估价范围可选可选
SETDELETIONFLAG设置删除标志可选可选
NO_COMMIT外部提交控制可选可选

不少项目直接把标记的代码复制一份,把函数名换成BAPI_COSTESTIMATE_RELEASING就能跑通发布。但参数长得像不代表行为一样,发布对数据的改动要深远得多,这一点后面我会专门展开。

3. BAPI_COSTESTIMATE_MARKING调用全解

3.1 参数含义与必选判断

调用BAPI_COSTESTIMATE_MARKING之前,先把参数的含义搞清楚。

COSTESTIMATE是内部成本核算号KALNR,就像每个人的身份证号,是定位成本估算最精确的参数。理论上只传COSTINGDATE、COSTINGVERSION、VALUATIONAREA也能定位,但条件多了出错的概率就大。COSTINGDATE这个参数尤其容易踩坑,它不是调用当天的日期,而是成本估算的有效起始日期,要跟CK11N创建估算时用的日期一致。如果物料已经有2025年度的成本估算,你传一个2024年12月31日的日期,多半定位不到这张表。

CO_AREA是成本控制范围,VALUATIONAREA是估价范围,通常等于工厂编码。如果你从调用程序里能带出工厂,最好就把CO_AREA和VALUATIONAREA同时传进去,减少系统按默认值猜测的环节。SETDELETIONFLAG这个参数要特别留意,它的含义是把标记状态撤销,相当于“取消标记”。有人误以为它是删除成本估算,或者以为要传X才是“执行标记”,结果本来好好的标记被它搞没了,这在后面调试章节会细说。

3.2 成本核算号获取:从CKMLHD取数

调用BAPI之前,先得拿到KALNR。我常用的方式是从CKMLHD表查,按物料、估价范围、成本核算变式、日期区间去定位:

DATA: lv_kalnr TYPE ck_kalnr, lv_bwkey TYPE bwkey, lv_tvers TYPE ck_tvers, lv_date TYPE sy-datum. lv_bwkey = '1000'. lv_tvers = 'SAP1'. lv_date = sy-datum. SELECT SINGLE kalnr INTO lv_kalnr FROM ckmlhd WHERE matnr = lv_matnr AND bwkey = lv_bwkey AND tvers = lv_tvers AND ldat1 <= lv_date AND ldat2 >= lv_date.

CKMLHD是物料分类账的成本核算头表,KALNR字段就是内部成本核算号。日期区间的字段名在不同版本里可能有差异,有的环境下叫LDAT1/LDAT2,我在老项目里也见过ADATU/BDATU的写法,以你自己系统SE11看为准。如果这个SELECT查不到数据,说明该物料在对应日期内没有已创建的成本估算,得先用CK11N手工做一张,或者调用BAPI_COSTESTIMATE_CREATEMULTI来创建。

3.3 标记的ABAP实现

拿到KALNR之后,调用标记BAPI就顺理成章了:

DATA: lt_return TYPE STANDARD TABLE OF bapiret2, ls_return LIKE LINE OF lt_return. CALL FUNCTION 'BAPI_COSTESTIMATE_MARKING' EXPORTING costestimate = lv_kalnr costarea = lv_kokrs costingdate = lv_date costingversion = lv_tvers valuationarea = lv_bwkey no_commit = 'X' TABLES return = lt_return. IF lt_return[] IS INITIAL. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'. WRITE: / '标记成功:', lv_matnr. ELSE. LOOP AT lt_return INTO ls_return WHERE type CA 'EAX'. WRITE: / ls_return-message. ENDLOOP. ENDIF.

这里我用了NO_COMMIT='X',目的是让标记和后续的发布在同一个事务里统一提交,避免一步成功一步失败的状态错乱。如果整个程序只调这一个BAPI,不传NO_COMMIT让BAPI内部自己提交也可以,但多人协作的增强项目里,还是建议统一的提交控制。

关于RETURN表,有两点经验:第一,RETURN表为空不代表绝对成功,但至少说明没有E和A消息,大概率成功;第二,RETURN表里type有S、E、W、A、I,循环的时候一定要把E和A都过滤到,只处理S会漏掉关键错误信息。

3.4 标记后如何验证

标记成功后最好自己验证一遍,不要只看BAPI的返回就拍拍屁股走人。最直接的验证方法是查CKMLHD的KKZMA字段:

SELECT SINGLE kkzma INTO lv_kkzma FROM ckmlhd WHERE kalnr = lv_kalnr.

如果KKZMA等于X,说明标记动作已经生效。也可以让用户去MM03看物料主数据,成本视图2里会显示成本估算标记状态。这个验证步骤在项目上线初期特别有必要,因为BAPI最终还是调SAP内部的标准功能,万一某个版本日历、期间配置有差异,BAPI返回值没问题,但后台状态没更新,这种问题只能靠查表才发现。

4. BAPI_COSTESTIMATE_RELEASING落地:从标记到发布的一体化实现

4.1 发布与标记的差异

发布是比标记更“重”的操作。标记只是改了一个状态字段,发布要把成本估算的价格结果写入物料主数据,具体会更新MARC表的标准价格字段STPRS,物料分类账里也会生成对应记录。如果公司启用了物料分类账,发布后库存价值会按新标准价重估,期间内如果有收货、发货,差异会被记录到差异科目,直接影响月结。

所以我在项目里一直强调:标记可以放开让程序自动跑,发布最好带一个审核标识,至少要有人检查过估算结果再放量。程序里可以把“标记”和“发布”拆成两个功能,或者在同一程序里加一个参数控制只到标记为止。

4.2 发布ABAP实现与组合封装

发布和标记在代码结构上几乎一致,把函数名换成BAPI_COSTESTIMATE_RELEASING就行。但在实际项目里,更建议封装成一个通用方法来处理多个物料,顺带做状态判断。贴一段我常用的循环处理逻辑:

LOOP AT lt_materials INTO ls_material. " 按物料+工厂+变式+日期拿成本核算号 PERFORM get_kalnr USING ls_material-matnr ls_material-werks CHANGING lv_kalnr. IF lv_kalnr IS INITIAL. " 没有成本估算,先记录日志,跳过 PERFORM log_result USING ls_material-matnr '估算不存在' 'E'. CONTINUE. ENDIF. " 查当前状态,已完成发布则跳过 SELECT SINGLE kkzma kkzmp INTO (lv_kkzma, lv_kkzmp) FROM ckmlhd WHERE kalnr = lv_kalnr. IF lv_kkzma = 'X' AND lv_kkzmp = 'X'. PERFORM log_result USING ls_material-matnr '已发布' 'S'. CONTINUE. ENDIF. " 未标记先标记 IF lv_kkzma IS INITIAL. CALL FUNCTION 'BAPI_COSTESTIMATE_MARKING' EXPORTING costestimate = lv_kalnr costarea = lv_kokrs costingdate = lv_date costingversion = lv_tvers valuationarea = lv_bwkey no_commit = 'X' TABLES return = lt_return_mark. IF lt_return_mark[] IS NOT INITIAL. PERFORM log_result USING ls_material-matnr '标记失败' 'E'. CONTINUE. ENDIF. ENDIF. " 执行发布 CALL FUNCTION 'BAPI_COSTESTIMATE_RELEASING' EXPORTING costestimate = lv_kalnr costarea = lv_kokrs costingdate = lv_date costingversion = lv_tvers valuationarea = lv_bwkey no_commit = 'X' TABLES return = lt_return_rel. IF lt_return_rel[] IS INITIAL. PERFORM log_result USING ls_material-matnr '发布成功' 'S'. ELSE. PERFORM log_result USING ls_material-matnr '发布失败' 'E'. ENDIF. ENDLOOP. IF lv_error_count = 0. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'. ELSE. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. ENDIF.

这种封装的好处是:标记和发布在同一个逻辑里,先保证标记成功再发布,有错误统一回滚。日志表记录每个物料的处理前状态和处理结果,月底复盘时直接按日志查,不用回CK24翻界面。

4.3 发布后的验证

发布完成后,我一般会做三层验证。第一层查CKMLHD,确认KKZMA和KKZMP都是X,这表明状态机已经走完。第二层查物料主数据的标准价格,MARC表的STPRS字段应该等于成本估算的价格。第三层是让成本会计跑一次CKM3或者查看CK24,确认物料分类账里已经能看到新价格和对应差异。

如果只查状态不查价格,容易漏掉一种情况:BAPI发布返回成功,但物料主数据的价格没变化,这种通常是物料主数据在工厂维度没有维护完整成本视图,或者成本变式里配置的价格单位有问题。价格层面的核对才是最接近业务目标的验证。

5. 联调踩坑实录:BAPI返回成功但数据没动,问题出在哪

5.1 坑一:忘了COMMIT,BAPI显示成功但数据纹丝不动

这是我见过最多的翻车现场。程序调用BAPI_COSTESTIMATE_MARKING之后,RETURN表里没有任何错误消息,日志也打了“标记成功”,但MM03里就是看不到标记。原因是NO_COMMIT传了‘X’,程序却在末尾没调BAPI_TRANSACTION_COMMIT,整个数据库更新跟着LUW被回滚了。

这种问题在开发顾问本机测试时还不容易发现,因为SE38里单步执行时事务可能被隐式提交。放到后台作业跑就原形毕露。解决方案就是本文前面写的:确认RETURN表无错误后,显式调用COMMIT。如果同时处理多个物料,更建议做全成功才COMMIT、有失败就ROLLBACK的设计。

5.2 坑二:先发布后标记,状态机顺序错乱

有次同事写的批处理直接调BAPI_COSTESTIMATE_RELEASING,结果一堆物料报错“成本估算未标记,无法发布”。原因是他以为发布会顺带做标记,但SAP的设计里这两个步骤是独立的。发布动作只认“已标记”的成本估算,没有标记直接发布,系统根本不理你。

解决方法是调用发布前先查CKMLHD的KKZMA,没标记就先调MARKING。这种状态判断逻辑一定要写进程序,不要依赖调用者的操作顺序。人可能忘,程序不能忘。

5.3 坑三:COSTINGDATE传错日期,定位到一张不存在的成本估算

物料的标准成本估算是按有效期维护的,比如2025年度的估算有效期是2025.01.01到2025.12.31。如果你的调用日期传了2024.12.31,系统会告诉你“没有找到成本估算”,或者更隐蔽的,查出来的是2024年度老版本的KALNR。

正确做法是:日期不要从SY-DATUM硬取,而是从CKMLHD里按物料的生效区间去取,或者把调用程序做成接收成本核算日期参数的接口,让业务在发起请求时明确指定要推哪个年度的成本。

5.4 坑四:SETDELETIONFLAG被误设,标记变成取消标记

有个刚毕业的小朋友写调用代码,看到SETDELETIONFLAG这个参数,想当然觉得标记操作应该传个X表示“设置标记”,结果调用完之后,原本已经标记的物料全部回到未标记状态。这个参数的真实含义是撤销标记,按SAP的命名习惯,它更像是“Set deletion flag”而不是“Set flag for marking”。

SAP里这种反直觉的参数不少。我现在的习惯是:新项目用到不熟悉的BAPI,先SE37看参数描述,再看一两个标准调用示例,最后用测试物料试跑一遍,确认状态变化符合预期再接到正经逻辑里。

5.5 坑五:工厂和成本控制范围不匹配,查来查去一场空

SAP里一个成本控制范围可以包含多个工厂,工厂和成本控制范围的对应关系在配置里维护。如果你手动传了一个CO_AREA和VALUATIONAREA不匹配的组合,BAPI可能返回错误消息,也可能返回空结果。这类问题在代码里最难查,因为看起来参数都填了,逻辑也没问题,但系统就是找不到数据。

我的建议是:CO_AREA和VALUATIONAREA不要从界面让用户随便填,而是根据工厂主数据或配置表自动带出。如果程序是从物料维度处理的,把工厂传给一个转换函数,让它去推出对应的成本控制范围,而不是写死在代码里。

5.6 通用排查链路

如果你也遇到“BAPI怪现象”,按这个顺序查,基本能覆盖八成的坑:

现象可能原因排查方向
RETURN无错误但数据没变没COMMIT检查NO_COMMIT和BAPI_TRANSACTION_COMMIT
发布报“未标记”标记发布顺序错查CKMLHD.KKZMA
查不到成本估算COSTINGDATE不匹配核对成本估算生效日期区间
标记被取消SETDELETIONFLAG传错检查参数是否传入X
返回“工厂/成本控制范围错误”参数组合不匹配从配置表带出CO_AREA
物料主数据价格没更新但发布成功成本视图不完整查MARC.STPRS和成本视图维护状态

排查的第一步永远是看RETURN表的完整消息,包括MESSAGE_V1到MESSAGE_V4,那几个字段里才是SAP真正想告诉你的原因。只盯着TYPE看,很容易被“没有E消息”骗过去。

6. 延伸到采购价格变更场景:让标准成本跟着采购订单一起刷新

6.1 采购价格变动后成本估算为什么要重跑

SAP里标准成本估算的物料价格,默认取自采购信息记录或物料主数据的成本视图。供应商在月中调价,采购订单价格从10元改成12元,如果信息记录也同步改了,那老的成本估算还是按10元算的,不重跑估算直接发布,标准成本不会自动变成12元。

业务上的实际流程通常是:采购员改采购订单价格,同时修改信息记录,然后通知成本会计,“价格变了,麻烦重推一下标准成本”。成本会计接下里的动作就是CK11N重算、CK24标记发布。这也是搜索热词里“SAP BAPI采购订单修改价格”出现频率高的原因——大家都想把这个链路自动化。

6.2 组合调用骨架:BAPI_PO_CHANGE改价只是第一步

改采购订单行项目价格我常用BAPI_PO_CHANGE,核心是同时传POITEM和POITEMX两张表。POITEM里放新价格,POITEMX里对应字段必须传X,表示“这个字段我要改”。这是SAP BAPI的通用规则:改什么字段,就在对应的X表里把同名字段置为X。

DATA: lt_poitem TYPE TABLE OF bapimepoitem, ls_poitem LIKE LINE OF lt_poitem, lt_poitemx TYPE TABLE OF bapimepoitemx, ls_poitemx LIKE LINE OF lt_poitemx. ls_poitem-po_item = 10. ls_poitem-netpr = '12.50'. APPEND ls_poitem TO lt_poitem. ls_poitemx-po_item = 10. ls_poitemx-netpr = 'X'. ls_poitemx-price_change = 'X'. APPEND ls_poitemx TO lt_poitemx. CALL FUNCTION 'BAPI_PO_CHANGE' EXPORTING purchaseorder = lv_ebeln TABLES poitem = lt_poitem poitemx = lt_poitemx return = lt_return.

这里有个细节:PRICE_CHANGE这个字段的X标志一定不能漏。只传NETPR的X,系统往往认为你改的是其他信息,价格更新不生效。我遇到过几次采购价格改了但条件记录没变的情况,最后都是POITEMX的PRICE_CHANGE没传导致的。如果项目里还用了信息记录自动更新,改采购订单后还要调BAPI_INFORECORD_CHANGE更新信息记录价格,否则成本估算取到的还是老价格。

6.3 从信息记录价格到标准成本刷新的闭环

一套完整的“采购价变更驱动标准成本刷新”链路是这样的:

  1. 更新信息记录价格(或采购订单价格)。
  2. 重新创建成本估算。如果有老估算,可以用BAPI_COSTESTIMATE_CREATEMULTI处理,它支持创建后直接标记、发布,但参数复杂;我通常还是先用标准功能或创建BAPI把估算做出来,再统一走标记发布。
  3. 调用BAPI_COSTESTIMATE_MARKING标记新估算。
  4. 调用BAPI_COSTESTIMATE_RELEASING发布。
  5. 核对物料主数据标准价格和CKMLHD状态。

这样一套程序可以挂到后台作业里,每天晚上自动跑一遍“今天价格有变更的物料”,第二天成本会计只需要看日志确认结果。业务上再也不用等月底集中突击了。

整个链条里最容易出问题的是第二步和第三步的衔接。创建成本估算必须在新的采购价格写入信息记录之后再执行,否则BOM展开时取到的还是旧价格。所以程序里一定要在改价和创建估算之间留一个显式的同步点,或者用RFC调用让后续逻辑依赖前一步的返回结果,不要怼在一个事务里。

6.4 个人实操建议

这套标记发布流程我在项目里跑过很久,几个体会分享出来:

第一,上线初期先挑一小批测试物料跑通脚本,分别验证“未标记直接发布”“已标记重复发布”“SETDELETIONFLAG传X”这几个边界场景,再放量全物料。第二,程序里的日志表不能偷懒,至少记录物料号、工厂、成本核算号、操作类型、返回消息、处理时间、处理人。第三,发布完成后通知成本会计复核差异科目,尤其是有物料分类账的公司,标准价一更新,当月收货差异就可能被重估,这部分需要财务心里有数。

另外一个小技巧:如果公司用了物料分类账,建议发布动作放在月结对账之前、生产订单结算之前完成。发布太早,期间内产生的差异量大;发布太晚,又影响结算价格。这个时间窗口的把握,比代码本身更考验项目经验。

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

Winform基于FlaUI实现微信自动化:原理、实践与避坑指南

简介&#xff1a;以微信自动化为目标的 Winform 桌面工具源码工程&#xff0c;基于 FlaUI 完成定时发送、自动回复和群聊机器人等交互场景。适合具备 C# 与 Winform 基础、希望快速上手 Windows 客户端 UI 自动化&#xff0c;或需要参考任务调度与消息监听思路的开发者。压缩包…

作者头像 李华
网站建设 2026/10/2 5:26:42

HER实战:用事后经验回放解决强化学习稀疏奖励难题

“hindsight”第一次出现在我面前&#xff0c;是当初调试机械臂推积木实验的时候。那个智能体磨蹭了几个小时&#xff0c;reward始终纹丝不动&#xff0c;命中目标次数为零&#xff0c;训练曲线像一条死线。后来我换了HER&#xff08;Hindsight Experience Replay&#xff0c;事…

作者头像 李华
网站建设 2026/10/2 5:26:20

VSCode Remote-SSH连接树莓派:远程开发配置实战指南

做嵌入式开发或者折腾树莓派的人&#xff0c;一定都经历过这样的尴尬&#xff1a;把SD卡拔下来插到电脑上改文件&#xff0c;改完再插回派上&#xff0c;来回折腾半天&#xff0c;效率极低。如果树莓派连着显示器&#xff0c;体验还能好一点&#xff0c;但真正干活的时候&#…

作者头像 李华
网站建设 2026/10/2 5:24:44

OpenShell:模块化与跨平台兼得的 Shell 配置管理方案

第一次听说 OpenShell 的时候&#xff0c;我还以为它又是个 zsh 主题收集器。毕竟这类项目太多了&#xff0c;号称“开箱即用”&#xff0c;实际就是把各种 oh-my-zsh 插件往一起堆&#xff0c;换台机器就到处报错。后来我把 OpenShell 的整套配置仓库拉下来跑了一遍&#xff0…

作者头像 李华
网站建设 2026/10/2 5:23:54

Dify开源LLM应用开发平台:从模型接入到RAG工作流编排实战

做了快十年的AI应用开发&#xff0c;工具链换了好几轮&#xff0c;最让我感慨的是&#xff1a;大部分看似有创意的项目&#xff0c;最后都死在了重复造轮子上。尤其是LLM应用&#xff0c;表面上看就是“调接口拼Prompt”&#xff0c;真正动手做才知道&#xff0c;模型接入、上下…

作者头像 李华