1. 集成思路与总体架构拆解
1.1 为什么要做SAP和DeepSeek的集成
先说个场景。你公司的财务团队每个月月底做月结,光是核对科目余额、分析异常差异、准备管理层汇报材料,就要花掉好几天。系统里有现成的数据,但数据散落在几十张表里,想要从“看到数据”变成“理解数据发生了什么”,永远缺一个能把业务逻辑讲清楚的解释层。SAP和DeepSeek的集成,本质上就是给这套承载了企业核心交易数据的系统,装上一个能理解、能推理、还能对话的“业务大脑”。
SAP在企业里是什么地位,做过几年信息化的人都清楚。财务、采购、生产、销售、库存、人力资源,几乎所有核心流程都跑在这套系统里。它强在流程严谨、数据一致性好,弱在交互方式老旧、分析能力封闭。你想查个东西,要么会事务代码,要么找IT提需求写报表。而DeepSeek这样的语言模型,强在自然语言理解、逻辑推理、文本生成,但对企业内部的数据结构和业务语义一无所知。两边一个“什么都知道但没法问”,一个“能问但什么都不知道”,集成就是搭一座桥,让两边的能力真正汇到一条线上。
这个集成的价值不是给你做一个“聊天机器人”那么简单。真正落地的时候,它能做三类事情。第一类是对话式查询,业务人员用大白话问“上个月华东区哪个产品线的毛利率降了”,系统自动翻译成SAP能执行的查询,拿到数据后再用自然语言把结论讲出来。第二类是流程诊断和分析,比如订单为什么卡在某个环节、库存周转为什么变慢,它能把相关单据、状态、时间戳串起来给出判断。第三类是操作性辅助,比如根据用户描述自动生成ABAP代码、生成测试脚本、写增强功能的技术说明。这三类事情覆盖了从“看懂数据”到“读懂流程”再到“提高开发效率”的完整链条。
1.2 两条技术路径的选择
SAP和DeepSeek集成,业界主流做法分两条路。一条走数据层,把SAP的数据定期同步出来,切片、向量化之后存到知识库,DeepSeek在这个知识库上做RAG。这条路的好处是实现快、对SAP系统零侵入、不会影响核心业务性能,适合报表解读、主数据查询、知识问答这类场景。但它有个先天限制,数据是静态的,同步周期决定了实时性,SAP里的数据今天变了,知识库里可能还是昨天的版本。
另一条走API层,通过SAP的OData服务或者RFC函数接口,让DeepSeek在需要的时候直接调用SAP的实时数据。这条路的好处是数据永远是活的,查询结果就是SAP当前的准确状态,适合做订单跟踪、库存查询、流程诊断这类必须实时的场景。代价是要处理权限校验、接口限流、错误重试这些问题,对SAP侧的稳定性要求更高。
实际项目里,不要把两条路对立起来。我见过的最稳的架构是混合式:把业务术语表、数据字典说明、历史报表分析结论这类不经常变化的“背景知识”放进向量知识库;把实时库存、订单状态、财务凭证这类需要精确和时效的数据,通过OData封装成工具函数,在Agent需要时实时调用。这样既控制了知识库的维护成本,又保证了关键数据的准确性,是大模型集成ERP系统时最不容易翻车的设计。
1.3 分层架构与核心组件
从我实际落地项目的经验看,一个能真正跑起来的集成架构至少要拆成五层。
SAP对接层是地基。这一层负责把SAP的能力暴露出来,常见做法是利用SAP Gateway发布OData服务,或者把关键的RFC函数包一层REST接口。选哪个取决于SAP版本和已有IT资产,S/4HANA环境里OData是首选,功能覆盖全、权限模型成熟;ECC等老环境里RFC更普遍,但需要自己做接口封装。
数据接入层解决的是“模型怎么理解SAP的字段”。SAP里的字段名是ZZFKATX这种风格,业务含义在数据字典和文档里。这一层要把OData返回的JSON结果、函数返回的内表结构,统一转换成有业务语义的文档格式,顺便把物料号、供应商代码这些技术主键翻译成业务人员能看懂的名称。这一步不做扎实,后面模型再聪明也没用。
检索增强层管理知识库。系统初始化时把SAP的表结构说明、字段含义、业务术语、历史分析报告切块嵌入向量库;查询进来时先做语义检索,把最相关的背景知识和大模型指令一起送给DeepSeek,让它在回答时“有据可依”。切片大小、召回数量、相似度阈值都要在项目里反复调,后面我会给具体的参数参考。
Agent编排层是整个系统的中枢。它负责理解用户的原始提问,决定是直接回答、去查知识库,还是调用OData工具拿数据,然后把多步操作串起来。LangChain的Agent机制是目前做这块比较顺手的选择,函数调用声明、工具注册、上下文管理都有现成方案。
交互层是最容易被忽视的。用户面对的是一个对话框,但企业里真正要用的不只是Web聊天页面,还有企业微信/钉钉的机器人入口、SAP Fiori界面里嵌的AI助手面板、报表系统里的“一键解读”按钮。交互层要能把大模型的回答以结构化卡片、表格、图表链接的形式呈现,同时保留追问上下文,否则用户每次问问题都要重新描述一遍,体验很糟糕。
注意:架构上最容易犯的错是一开始就想做“全智能体”,让模型自主决定操作SAP里的增删改。企业核心系统的写操作必须人工审批,前期集成只做读操作,写操作全部设计成“模型生成建议 -> 人在SAP里确认执行”的模式。这一条在我参与过的所有项目里都是铁律。
2. 高频场景设计与交互逻辑
2.1 对话式数据查询:自然语言转SAP查询
把“自然语言转SQL”的思路迁移到SAP上,就是让用户用大白话提问,系统转成OData查询参数,拉回数据后再用自然语言总结。这个场景在企业里需求最强烈,因为SAP的事务代码和报表路径实在太多,业务人员根本记不住。
举一个真实的例子。某工厂的销售经理问:“帮我看看这个月A客户回款逾期超过30天的订单有哪些,按金额排个序。”系统要做的事情分三步。第一步,识别实体和条件:“A客户”要映射成SAP里的客户编号(KUNNR),“逾期30天”要转换成基于净到期日(NETDT)的日期过滤条件,“订单”对应销售订单表VBAK,“按金额排序”对应OData查询里的orderby参数。第二步,调用封装好的OData工具,构造出合法的查询URL,加好过滤条件去SAP拉数据。第三步,把返回的订单列表、金额、逾期天数整理成自然语言摘要,并附上“这是SAP里的原始数据,统计口径如下”这样的说明,方便用户回溯。
实现上有个细节特别关键:构造OData查询参数这件事,不能完全依赖模型自己瞎猜。更稳的做法是给模型提供当前OData服务的元数据描述,包括有哪些实体集、每个实体有哪些属性、属性是什么类型、哪些可用于过滤。模型基于这些信息去生成参数,命中率会高很多。我在项目里是把OData服务的metadata.xml解析成结构化文档,存进知识库或者直接塞进提示词上下文。
2.2 报表解读与异常归因
SAP里最不缺的就是报表。标准报表、自定义报表、Fiori报表,每张都能出数据,但每张都很难解释“数据为什么会这样”。集成DeepSeek之后,报表解读可以做成自动化的三段式分析:描述变化、定位异常、给出建议。
描述变化这一步,把本期数、上期数、同比、环比这些指标喂给模型,让它生成“本月华南区库存周转天数从上月的32天下降到28天,主要原因是出货量增长12%”这类表述。定位异常这一步,模型需要在知识库里检索业务规则和历史案例,判断哪些波动属于正常范围,哪些需要重点提醒。比如库存周转天数下降到底是好事还是坏事,要结合库存结构一起看——如果是畅销品备货充足带来的,是好事;如果是滞销品被强制清理导致的,可能掩盖了更深的问题。
给建议这一步最难,也最容易出彩。它不是让模型凭空编建议,而是要把SAP里的流程规则、管理制度的文档喂给模型,或者让它基于标杆数据给出参考区间。我在项目里让模型对每个异常点给出“影响程度高/中/低”的判定,并附上支持这个判断的数据证据,管理层可以快速决定要不要介入。实测下来,这种“结论 + 证据 + 影响分级”的输出形式,比单纯一段文字描述更能让业务方接受。
2.3 流程诊断:订单怎么卡住了
订单从创建到交货要经过多个状态:CRTD(已创建)、批准、发货、开票。实际业务里订单经常卡在某个状态大半天没人处理,以前排查要靠IT顾问去查各种表,现在可以让Agent自动跑一遍流程体检。
具体实现也不复杂。Agent收到“订单号12345为什么还没发货”这类问题后,先调用OData工具按订单号查到当前状态和最近修改记录;再按预设的流程节点顺序,逐个检查每个节点是否有对应的时间戳;如果某个节点没有时间戳,就说明卡在这一步,系统再把这一步的负责人、角色和标准处理时限调出来,连同分析结果一起回复。整个逻辑用LangChain的链式工具调用就能实现,难点在于流程节点顺序的配置表要写得准确,不同订单类型(标准订单、退货订单、免费订单)流程可能不一样。
2.4 辅助研发:ABAP代码生成与测试脚本
SAP二次开发工程师对DeepSeek集成的第一反应,多半是拿它来写ABAP。这条场景的价值很直接:描述一个功能需求,让模型生成ABAP代码骨架;拿一段老代码,让它解释逻辑并补注释;或者写单元测试的ABAP Unit测试类。
但这里有一个需要认清的现实:让模型直接生成可以进生产系统的ABAP代码,风险很高。ABAP的版本差异、隐式增强、自定义函数、SAP Business Object的调用规范,模型不会天然知道。更稳的做法是“生成辅助代码 + 开发者改造”。比如让模型生成读取内表、拼接字符串、构造消息处理这类标准逻辑的代码片段,开发者自己负责调用入口和增强逻辑。我试过一个不错的用法:把一段几千行的老报表代码贴给DeepSeek,让它按“参数定义、数据获取、内表处理、ALV输出”四个模块拆解并加注释,开发效率提升非常明显。
3. 核心实现细节与代码实操
3.1 环境准备与组件清单
真正开始写代码之前,先把组件清单列清楚,避免项目做到一半发现缺这缺那。
DeepSeek侧的部署,两种方式。如果数据合规要求严格,或者企业网络不允许走公网API,就在内网部署DeepSeek的本地模型服务,常用的是通过Ollama或者vLLM起一个兼容OpenAI格式的推理服务,模型选DeepSeek-R1系列或者蒸馏版,根据显存预算决定参数量。如果合规条件允许,直接用官方API更省事,质量和稳定性都有保障。无论哪种方式,代码层统一用OpenAI SDK的接口格式去调用,后面想切换供应商也方便。
SAP侧的接出,需要确认三件事。SAP系统是否已经启用了OData服务(S/4HANA和NetWeaver Gateway通常默认支持);目标业务对象是否已有可用的OData发布,没有的话需要请SAP Basis团队发布;当前账号对相关服务的权限范围,开发阶段建议先申请只读权限,避免误操作。另外要把SAP的RFC调用记录下来,确定哪些函数需要进行REST包装。
整个集成项目的技术栈,我推荐用Python + LangChain。Python的原因不解释,做AI集成的都会。LangChain负责Agent调度、工具注册、上下文管理,写起来清晰,坑也比自己造轮子少。向量数据库用Milvus或者Chroma,小团队项目用Chroma就够了,单机跑很方便,数据量上来了再迁Milvus。
3.2 封装SAP OData调用工具
写一个SAP的OData连接器,是整个代码工作中最核心的一块。下面这段代码,把一段基础的OData查询封装成了LangChain可以调用的工具函数。
import requests import json from langchain.tools import tool class SAPODataClient: def __init__(self, base_url, username, password, client): self.base_url = base_url.rstrip("/") self.auth = (username, password) self.params = {"sap-client": client} self.headers = {"Accept": "application/json"} def query(self, entity_set, filter_expr=None, select=None, orderby=None, top=100): url = f"{self.base_url}/{entity_set}" params = {"$top": top} if filter_expr: params["$filter"] = filter_expr if select: params["$select"] = ",".join(select) if orderby: params["$orderby"] = orderby resp = requests.get(url, auth=self.auth, headers=self.headers, params={**self.params, **params}, timeout=30) if resp.status_code != 200: raise RuntimeError(f"SAP OData error: {resp.status_code} - {resp.text[:200]}") return resp.json().get("d", {}).get("results", []) client = SAPODataClient( base_url="https://sap.example.com/sap/opu/odata/sap/ZSALES_ORDER_SRV", username="svc_ai_reader", password="your_password", client="100" ) @tool def query_sales_orders(month: str, customer_name: str = "", limit: int = 50) -> str: """查询销售订单数据。month参数格式为YYYYMM,customer_name可选。""" filter_expr = f"VBELN ne '' and ERDAT ge datetime'{month}01000000'" if customer_name and customer_name != "全部": # 注意:实际项目中客户名称需要先通过客户主数据接口转换为编号,再过滤 filter_expr += f" and KUNNR eq '{customer_name}'" data = client.query( entity_set="ZSalesOrderSet", filter_expr=filter_expr, orderby="NETWR desc", top=limit ) return json.dumps(data, ensure_ascii=False)这段代码有几个点需要说明。第一,OData服务的URL和实体集名,要以SAP侧实际发布的为准,每个项目都不一样,需要提前让Basis团队导出服务列表。第二,SAP OData的日期过滤语法是datetime'20250101'这种形式,和标准SQL不太一样,初次写容易踩坑。第三,所有查询都只读,工具函数里不封装任何创建、修改、删除的调用,从机制上防止模型越权操作。
3.3 构建RAG知识库
知识库里放的内容,直接决定回答质量。我建议至少放三类材料:SAP数据字典字段说明(表名、字段名、中文描述、取值含义);业务术语表(什么叫“已发货”、什么叫“在途”、什么叫“逾期”);历史报表和分析文档(最好有结论和数据的对应关系,模型才能学会怎么解读)。
切片的时候,按“字段描述”和“业务规则”的不同粒度切。字段说明类内容,一段一个字段或一个表,不要跨字段合并;业务规则类内容,按条款切,每条规则单独一段。向量模型选bge-large-zh或者text2vec这类中文效果好的,SAP项目里大段中文描述占多数。检索时Top_K取4到6,相似度阈值建议0.55左右,低于阈值就只给模型返回“知识库无相关背景资料”的提示,模型会更谨慎地表达不确定性。
3.4 提示词与Agent编排
提示词和Agent的编排,决定了模型能不能“按规矩办事”。核心是把三条纪律写进系统提示:第一,回答SAP业务问题必须基于提供的OData返回结果或知识库资料,没有依据必须明确说“无法确认”;第二,涉及具体金额、数量、日期时,引用原始数据并标注数据来源;第三,涉及跨模块流程判断时,先说明判断假设再给结论。
LangChain的Agent创建代码大致是这样的:
from langchain.agents import initialize_agent, AgentType from langchain_openai import ChatOpenAI from langchain.memory import ConversationBufferMemory llm = ChatOpenAI( model="deepseek-chat", base_url="http://your-internal-deepseek-endpoint:8000/v1", api_key="not-needed-on-premise", temperature=0.2 ) tools = [query_sales_orders, query_stock, explain_report] memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True) agent = initialize_agent( tools=tools, llm=llm, agent=AgentType.STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION, memory=memory, verbose=True, max_iterations=5 ) # 实际问答 response = agent.run("上月华东区销售订单总额是多少,和上上月比变化了多少?")temperature设0.2,因为业务回答要严谨;max_iterations设5,防止模型在工具调用上死循环;memory打开,用户追问“那内销的呢”时能理解指的是哪个上下文。这些参数都是实测过的,效果比默认参数明显更适合SAP场景。
3.5 参数配置参考表
| 参数 | 推荐值 | 说明 |
|---|---|---|
| temperature | 0.1~0.3 | 业务数据回答建议偏低,创意类文本可以到0.7 |
| max_iterations | 5 | 超过5次工具调用说明链路有问题 |
| Top_K召回 | 4~6 | 太少漏信息,太多噪音干扰判断 |
| 相似度阈值 | 0.55左右 | 低于阈值的检索结果不采用 |
| 上下文切片大小 | 300~500字 | 中文场景这个区间效果比较稳定 |
| OData超时 | 30秒 | 超过30秒SAP侧可能有大查询 |
| 知识库更新频率 | 每天或每周 | 根据数据字典变更频率确定 |
提醒:参数表只是起步值。不同的SAP系统、不同的业务领域,最优参数会有浮动。项目里要做一轮参数对照实验,拿真实业务问题做测试集,固定测试集去比较不同参数组合下的回答准确率,用数据说话比凭感觉调参靠谱得多。
4. 权限、合规与部署运维
4.1 权限模型与数据安全
SAP是企业的核心业务系统,权限管控是所有集成的第一道生死线。集成用的服务账号,权限必须遵循最小化原则。读哪些表、调哪些函数、能访问哪些客户端和公司代码,都要在SAP角色里一条条限制。比如一个只做销售分析的AI应用,服务账号就只给销售订单、客户主数据、交货单这些对象的显示权限,不给财务凭证,不给物料账。
另一个常被忽略的问题是敏感数据。SAP里的客户信息、供应商付款条款、物料成本,很多本身就是敏感数据。大模型集成进来之后,数据从SAP流到模型服务,中间经过哪些节点、日志记录在哪、谁有权限查看日志,都要在设计阶段定清楚。如果用的是公网API,建议加数据脱敏层,把客户名、地址等个人信息替换成代号,模型回答时展示代号,需要详情时再通过工具函数实时查询带权限校验的原始数据。
4.2 私有化部署与API模式选型
部署模式的选择,直接影响合规和成本。数据敏感度高、监管要求严的企业,选私有化部署。DeepSeek模型本地跑,向量库本地存,日志本地留,符合“数据不出内网”的要求。缺点是硬件投入大,要搞定GPU服务器,模型推理速度受显存约束,并发能力要压测后再定容量。
合规要求宽松的企业,用API模式更经济。官方API的模型版本更新快、推理质量稳定,按量付费不占用硬件资源。中间加一层带鉴权的API网关,记录每次调用的用户身份、请求内容和响应摘要,审计问题有据可查。
我在项目里的经验是:别一上来就追求“深度私有化”。先明确数据边界——哪些数据必须留在内网,哪些可以出去,然后按数据边界选部署模式。混合部署是很多企业的实际选择:知识库和SAP查询链路都放内网,DeepSeek的通用对话能力走API,敏感数据只在内网被检索和加工。
4.3 稳定性与性能保障
SAP系统最怕的就是被外部系统拖垮。OData接口要给DeepSeek集成设置独立的限流阈值,比如每个应用每分钟不超过300次调用,防止测试阶段脚本死循环把SAP接口打满。容器化部署AI集成服务时,设置超时重试机制,SAP慢的时候不要无限等,快速失败并在下次重试前做指数退避。
推理性能上,本地部署的DeepSeek服务要做好并发控制。用LangChain的Agent时经常出现一个问题:一次多轮对话里,同一时刻可能有多个工具调用在跑,如果不限制并发,推理服务会被短时请求打爆。解决方式是全局信号量控制最大并发数,或者用消息队列把请求排队。
日志和审计必须做到三条。第一,每次模型调用的完整输入输出都要落库,包括用了哪些工具、返回了什么数据。第二,AI的执行轨迹(思考过程)要记录,排查问题时能复现。第三,用户提问和SAP数据的对应关系要保留,业务方对有疑问的回答溯源时能查到原始依据。
5. 常见问题排查与避坑实录
5.1 OData查询构造失败
症状:模型生成的OData过滤条件SAP不认,报400错误;或者查出来的数据明显不对,过滤条件被忽略。
排查思路分四步。第一步,打印出模型实际上构造的OData URL,肉眼检查语法。第二步,核对属性名和SAP数据字典是否一致,一个字母大小写错了都查不出数据。第三步,检查日期格式,SAP OData要求datetime格式,直接传YYYY-MM-DD很多时候不生效。第四步,在SAP Gateway上直接测试这条URL能不能跑通,排除集成代码的问题。
最有效的办法是给模型提供一份OData字段字典,让它在生成查询前先读取属性描述。我在提示词里加了一段固定指令:“你需要使用SP_SALES_ORDER_QUERY工具时,先参考SAP字段说明文档确认属性名和取值范围,生成filter表达式后再调用。”这个改动让首次查询构造成功率提升了一倍多。
5.2 SAP返回大数据量导致上下文溢出
症状:模型回答变得很奇怪,或者直接报超长上下文错误。根因是OData查询没加top限制,或者top设得过大,SAP一次性返回几千条记录全部塞进提示词。
解法是在工具函数里强制设置top参数,默认50条,最多传100条。然后让模型对返回数据做本地汇总(先求出金额合计、数量合计、前五名明细),只把汇总结果放进最终回答。还有一种情况是业务方确实需要明细,那就建议走报表系统导出,而不是让AI读几千行数据。
5.3 权限不足报403
症状:模型调用OData时报HTTP 403,但同样的URL在SAP GUI里用同一个账号能查到数据。这种情况多半是OData服务权限和后台表权限分了两层,服务账号通过了网关认证,但访问具体业务数据时缺后台授权。
解法是找SAP Basis或安全团队对比SAP GUI里能访问的角色和集成账号的角色差异,补上对应授权。这个问题的隐蔽性在于有时401是网络层认证失败,403是应用层授权不足,很多新手把精力花在改代码上,实际改的是SAP后台角色。
5.4 模型幻觉与检索不准
症状:模型一本正经地给出一个看起来合理但实际错误的数据,业务方拿着去开会差点出事。RAG项目的头号风险就是幻觉。
我的排查流程是:第一步,确认知识库是否真的检索到了相关内容,检索没有相关段落时模型会倾向于自由发挥,Scale down;第二步,检查检索到的内容是否与问题强相关,向量检索有时会返回语义相近但业务上无关的内容;第三步,在提示词里强制要求“所有具体数据必须来源于工具返回结果,不得自行推断”。就算这样做了,上线初期还是要安排业务方对重要数据进行抽查,积累一批badcase后做提示词迭代。
5.5 常问问题速查表
| 问题现象 | 可能原因 | 排查方向 |
|---|---|---|
| OData查询400错误 | 过滤语法或字段名错误 | 打印URL人工核对,对照数据字典 |
| SAP数据查不全 | 分页未处理,默认只返回前500条 | 在工具里实现$$skip/$$top分页循环 |
| 回答不准确 | 知识库检索未命中或命中错误 | 检查相似度阈值,完善业务术语表 |
| 工具调用死循环 | Agent无法从失败状态恢复 | 加大错误处理,注入退出条件 |
| 首次访问很慢 | 模型冷启动或OData首次连接慢 | 预加载模型缓存,开启连接池 |
| 同一问题重复问结果不一致 | 温度偏高或检索噪音大 | 降温度到0.2以下,固定知识库版本 |
| SAP系统高峰期集成变慢 | OData接口并发受限 | 独立线程池限流,错峰访问 |
6. 面向未来的扩展建议
SAP和DeepSeek集成做到能跑通、能回答、业务愿意用,只是第一步。我看到的更深入的方向有两个。
一个方向是流程自动化的纵深推进。现在AI能做的是“看懂数据、解释问题”,下一步要做的是“推动闭环”。比如库存预警场景,AI检测到某物料即将缺货,自动生成采购建议单草稿,推送给采购员在SAP里确认后一键过账;订单逾期场景,AI定位到卡点后自动给相关责任人发提醒消息。这要求从Server-side的Agent设计升级到有工作流引擎支撑的任务编排,复杂度上一个台阶,但价值也上一个台阶。
另一个方向是行业化的语义沉淀。SAP的行业版本差异很大,消费品、离散制造、化工、物流,同一个“库存”概念有不同的统计口径。把某个行业特有的业务规则、常用分析维度、报表解读范式沉淀成行业知识包,放到知识库里,新项目直接在知识包上叠加,就不需要每次从零调。这个思路我强烈建议做,因为它复用的是真实项目里最贵的部分——业务语义理解。
所以不要把这个项目当成一次性的“AI接入”,它应该是企业知识资产积累的开始。每一次问答、每一个被业务认可的回答、每一份被验证的报表解读,都是知识库的增量,跑的时间越长,系统越聪明。
我自己做完这个集成后最大的体会是:技术上的难度远小于预期,真正的问题永远是“SAP侧的业务语义不够结构化”和“业务方对AI回答的信任建立”。DeepSeek已经是个很聪明的引擎,但引擎再强,还需要一套结构化的“业务地图”指明方向。花大力气把SAP的数据字典、字段含义、业务规则整理清楚,这件事的投资回报率比调模型的提示词高得多。
如果你正准备上这类项目,我的建议是三步走:先挑一个高价值低风险的场景做试点(比如销售分析对话查询),把工具链、权限模型、部署链路跑通;再扩展三个左右的场景,攒够一套Prompt模板和工具封装库;最后再考虑流程自动化和行业知识包的建设。每一步都要让业务方深度参与,让他们成为最终质量的验收者,系统才会真正活起来。