尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Codex Harness × 企业 ERP:构建智能化企业系统完整方案

Codex Harness × 企业 ERP:构建智能化企业系统完整方案 Codex Harness × 企业 ERP构建智能化企业系统完整方案背景2024年OpenAI将 Codex CLIcodex在 GitHub 开源其核心 Harness 框架将 LLM 包裹在安全的执行环境中使 AI 能够受控地操作真实系统。结合企业 ERPSAP/Oracle/用友/金蝶的特点Harness 正是构建企业智能化系统缺失的那块拼图。一、OpenAI Codex Harness 核心解析1.1 Harness 是什么Harness执行框架是 Codex 最核心的创新——它不是简单的 API 包装而是一套完整的智能体执行基础设施组件功能ERP场景映射Agent Loop多轮推理-执行循环持久化状态处理跨多天的ERP业务流程Tool Executorfile/shell/MCP 工具统一调度调用SAP BAPI、OData、RFC接口Approval Engine操作分级审批diff预览确认ERP高风险操作四眼审批Sandbox ManagerDocker隔离资源限额代码在DEV系统而非PRD执行Context EngineToken预算管理滚动压缩超长ERP流程的上下文保持1.2 三种执行模式suggest → 仅给出建议不执行任何操作只读场景 auto-edit → 自动修改文件Shell需确认开发辅助场景 full-auto → 全自动执行已授权的固定流程场景1.3 MCP连接一切的标准协议Model Context ProtocolMCP是 Harness 的扩展点任何系统都可以暴露 MCP Server 接入 HarnessHarness ←→ SAP MCP Server ←→ SAP BAPI/RFC/OData ←→ Oracle MCP Server ←→ Oracle REST API / PL-SQL ←→ DB MCP Server ←→ HANA / PostgreSQL只读 ←→ Qdrant MCP Server ←→ 企业知识库向量检索 ←→ 自定义 MCP Server ←→ 任意内部系统二、ERP 系统特点与 AI 化挑战2.1 企业ERP的核心特征为什么难以AI化① 数据结构极其复杂SAP 标准表超过 90,000 张业务对象之间存在数百个 BAPI/RFC 接口。传统 AI 无法理解 EKKO采购头表和 EKES收货记录之间的业务关联。② 操作风险极高误操作财务凭证可能导致合规问题跨期操作影响财务报表权限体系复杂授权对象 角色 用户组。③ 系统高度定制每家企业的 ERP 都经过大量客制化ABAP Enhancement / BAdi / User Exit标准文档无法覆盖企业特有逻辑。④ 变更管控严格SAP 的变更通过 ChaRMChange Request Management管理DEV→QAS→PRD 三层传输。2.2 Harness 解决的核心问题ERP挑战Harness 解决方案接口复杂MCP Server 封装标准化工具接口操作风险Approval Engine 分级审批diff预览系统定制RAG知识库 企业文档向量索引变更管控Sandbox隔离只在DEV执行代码审计合规全链路操作日志不可篡改三、六大核心应用场景3.1 场景一ERP 代码生成ABAP/PL-SQL这是 Harness 最直接的价值场景。传统 ABAP 开发需要专业顾问开发周期长成本高。# ABAP 代码生成 Agent 示例# 用户指令 → Harness → 自动生成/测试/传输 ABAP 程序asyncdefgenerate_abap_report(instruction:str,agent:ERPAgent): 用户: 生成一个报表统计过去30天各供应商的到货准时率 resultawaitagent.execute(instruction)# Harness 内部执行链# 1. 读取 SAP 数据字典EKKO采购头/EKPO行项目/EKES收货# → tool: sap_read_ddic(tables[EKKO,EKPO,EKES])## 2. 生成 ABAP 程序ALV报表# → tool: file_write(ZMM_VENDOR_OTD.abap, abap_code)## 3. 在 DEV 系统上传并激活# → tool: sap_run_abap(code..., systemDEV) # R2级需确认## 4. 执行测试并检查输出# → tool: sap_execute_report(ZMM_VENDOR_OTD, params{...})## 5. 如果测试通过生成传输请求Transport Request# → tool: sap_create_transport(objects[ZMM_VENDOR_OTD])# 注意传输到PRD需要走正式ChaRM流程Harness只创建传输请求print(result.output)# 输出示例# 已成功创建ABAP报表 ZMM_VENDOR_OTD# 在DEV系统测试通过100条数据执行时间0.3s# 已创建传输请求 DE1K900123请在ChaRM中发起PRD传输审批。returnresult3.2 场景二智能数据分析用户比较今年和去年同期的销售毛利率找出下降超过5%的产品类别 Harness执行链 1. sap_read_data(tableVBAK/VBAP/COGS, period[2025Q3,2026Q3]) 2. file_write(analysis.py, pandas_code) # 生成分析代码 3. shell_exec(python analysis.py) # 沙箱执行 4. file_read(output.html) # 读取可视化结果 → 输出完整毛利率对比报告 预警产品清单3.3 场景三ERP 配置变更管理传统痛点ERP 配置变更如修改审批阈值、价格策略、税码设置需要顾问操作缺乏变更影响分析。Harness 方案分析变更影响范围受影响的业务对象、流程、报表生成变更预览文档供审批在 DEV 系统执行并自动化回归测试通过 ChaRM 创建传输请求走正式审批流到 PRD四、Agent 工作流SAP 采购到付款P2P全流程4.1 MCP Server 实现// SAP MCP Server 实现TypeScript// 遵循 Model Context Protocol 标准供 Codex Harness 调用import{Server}frommodelcontextprotocol/sdk/server/index.js;import{SAPClient}fromsap-cloud-sdk/connectivity;constservernewServer({name:sap-erp-mcp,version:1.0.0},{capabilities:{tools:{}}});// 工具1查询SAP业务数据只读自动放行server.setRequestHandler(ListToolsRequestSchema,async()({tools:[{name:sap_read_po,description:读取采购订单明细只读操作无需审批,inputSchema:{type:object,properties:{po_number:{type:string,description:采购订单号},items:{type:boolean,description:是否包含行项目}},required:[po_number]}},{name:sap_post_goods_receipt,description:过账收货R2级操作需用户确认,inputSchema:{type:object,properties:{po_number:{type:string},delivery_note:{type:string},posting_date:{type:string,format:date}},required:[po_number,posting_date]}},{name:sap_run_abap,description:在DEV系统执行ABAP代码沙箱隔离,inputSchema:{type:object,properties:{code:{type:string,description:ABAP源代码},system:{type:string,enum:[DEV,QAS],// 生产系统禁止直接执行description:目标系统不允许PRD},max_runtime:{type:integer,default:30}},required:[code,system]}}]}));4.2 审批引擎设计// Harness 审批引擎ERP操作风险分级usestd::sync::Arc;usetokio::sync::oneshot;#[derive(Debug, Clone, PartialEq)]pubenumRiskLevel{R1ReadOnly,// 只读查询 → 自动放行R2Modification,// 数据修改 → 需用户确认R3Financial,// 财务操作 → 双人审批R4CrossPeriod,// 跨期操作 → 严格管控R5SystemAdmin,// 系统管理 → 禁止Agent执行}pubstructERPApprovalEngine{policy:ArcApprovalPolicy,notifier:ArcdynApprovalNotifier,// 钉钉/企微/邮件audit_log:ArcAuditLogger,}implERPApprovalEngine{pubasyncfnevaluate(self,op:ERPOperation)-ApprovalDecision{letriskself.classify_risk(op);matchrisk{RiskLevel::R1ReadOnlyApprovalDecision::AutoApprove,RiskLevel::R2Modification{// 展示 diff等待用户点击确认letpreviewop.generate_diff_preview();self.notifier.show_diff_and_wait(preview).await}RiskLevel::R3Financial{// 四眼原则发起人 审批人双人确认let(tx,rx)oneshot::channel();self.notifier.send_approval_request(op,vec![op.initiator.clone(),self.policy.find_approver(op)]).await;rx.await.unwrap_or(ApprovalDecision::Reject)}RiskLevel::R4CrossPeriod|RiskLevel::R5SystemAdmin{self.audit_log.record_blocked(op).await;ApprovalDecision::Reject// 硬性拒绝}}}fnclassify_risk(self,op:ERPOperation)-RiskLevel{matchop{opifop.is_read_only()RiskLevel::R1ReadOnly,opifop.involves_financial()RiskLevel::R3Financial,opifop.is_cross_period()RiskLevel::R4CrossPeriod,opifop.requires_basis_access()RiskLevel::R5SystemAdmin,_RiskLevel::R2Modification,}}}4.3 Agent 主循环# Codex Harness ERP Agent 主循环Python SDKfromopenaiimportOpenAIfromtypingimportAsyncIteratorclassERPAgent:基于 Codex Harness 的 ERP 智能体def__init__(self,erp_mcp_servers:list[str]):self.clientOpenAI()self.mcp_serverserp_mcp_servers# SAP/Oracle MCP Server 地址self.contextERPContext()# 持久化业务上下文self.approvalERPApprovalEngine()# 风险审批引擎self.auditAuditLogger()# 不可篡改审计日志asyncdefexecute(self,instruction:str,user:ERPUser)-AgentResult:执行自然语言ERP指令# 1. 构建携带业务上下文的提示system_promptself._build_erp_system_prompt(user)# 2. 启动 Harness Agent 循环asyncwithself.client.beta.realtime.connect(modelcodex-1)asharness:harness.config(toolsself.mcp_servers,# MCP工具集sandboxerp-sandbox,# 隔离环境approval_modesupervised,# 监督模式max_turns30,# 最大迭代轮数token_budget100_000,# Token预算)# 3. 每次工具调用前过审批引擎harness.on_tool_callasyncdefbefore_tool(tool_call:ToolCall):erp_opERPOperation.from_tool_call(tool_call,user)decisionawaitself.approval.evaluate(erp_op)ifdecisionApprovalDecision.Reject:raiseToolCallRejected(f操作被拒绝:{erp_op.risk_reason})awaitself.audit.record(erp_op,decision)# 审计记录resultawaitharness.run(instruction,systemsystem_prompt)returnAgentResult(outputresult.text,traceself.audit.get_session_trace(),# 完整操作链路erp_changesresult.tool_results,# ERP变更汇总)def_build_erp_system_prompt(self,user:ERPUser)-str:returnf 你是企业ERP智能助手。当前用户:{user.name}角色:{user.role}。 ERP系统:{self.context.erp_type}公司代码:{self.context.company_code}。 操作权限范围: - 只读操作: 自动执行无需确认 - 数据修改: 展示变更预览后等待用户确认 - 财务凭证: 必须触发双人审批流程 - 跨期操作: 严格禁止需走正式变更流程 始终用中文回复。每个操作后说明已变更内容和影响范围。 五、ERP 知识库 RAG 系统ERP 系统最大的壁垒是隐性知识企业特有的业务规则、客制化逻辑、历史配置原因。RAG 系统将这些知识向量化让 Harness 具备企业特有的上下文。# ERP 知识库 RAG 系统向量检索增强fromqdrant_clientimportQdrantClientfromsentence_transformersimportSentenceTransformerclassERPKnowledgeBase:企业ERP知识库操作手册 历史经验 配置文档def__init__(self):self.qdrantQdrantClient(localhost,port6333)self.encoderSentenceTransformer(BAAI/bge-m3)# 中文优化asyncdefbuild_index(self,sources:list[ERPDocument]):索引企业ERP文档fordocinsources:chunksself._chunk_document(doc)vectorsself.encoder.encode([c.textforcinchunks])self.qdrant.upsert(collection_nameerp_knowledge,points[PointStruct(idchunk.id,vectorvec.tolist(),payload{text:chunk.text,source:doc.source,# SAP操作手册v3.2module:doc.module,# MM, FI, SD...doc_type:doc.type,# procedure, config, bapi_doc})forchunk,vecinzip(chunks,vectors)])asyncdefretrieve(self,query:str,module:strNone)-list[str]:语义检索相关ERP知识vectorself.encoder.encode(query).tolist()filter_condition(Filter(must[FieldCondition(keymodule,matchMatchValue(valuemodule))])ifmoduleelseNone)resultsself.qdrant.search(collection_nameerp_knowledge,query_vectorvector,query_filterfilter_condition,limit5,score_threshold0.75,)return[r.payload[text]forrinresults]# Harness 调用示例# tool: rag_retrieve(query如何处理SAP中的负库存, moduleMM)# → 返回相关操作步骤 → 注入 Agent 上下文 → 生成精准回答知识库建设范围知识类型来源更新频率ERP操作手册官方文档 企业SOP季度更新BAPI/RFC文档SE37导出 自动解析随ERP升级历史错误案例工单系统 邮件记录实时增量配置说明文档实施顾问输出变更时更新业务规则库合规/财务部门文档按需更新六、安全管控框架与实施路线图6.1 ERP 操作分级管控矩阵操作类型风险级别Harness处理方式示例查询/报表R1 只读自动执行ME23N查看采购单主数据修改R2 低风险diff预览确认修改供应商地址财务凭证R3 中风险双人审批付款凭证过账期末结账R4 高风险严格管控月末关账操作系统配置R5 极高风险禁止Agent直接操作Basis系统参数6.2 与 ERP 原有权限体系集成Harness 权限 min(AI角色权限, ERP账号权限) 用户ASAP账号: 有MM60查看权限无MIGO过账权限 → Harness 只能读取库存数据无法创建入库单 四眼原则付款指令必须由 initiator ≠ approver → Harness 自动检测拒绝同一人发起审批6.3 审计追踪格式{trace_id:hrn-2026-0819-001,session_user:zhang.sancompany.com,instruction:处理采购订单PO-2026-0819,executed_tools:[{tool:sap_read_po,risk:R1,approval:auto,ts:14:32:01},{tool:sap_post_gr,risk:R2,approval:user_confirmed,ts:14:32:45},{tool:sap_post_fi_doc,risk:R3,approval:dual_approved,ts:14:45:12}],erp_changes:[物料凭证: 5000012345,会计凭证: 0100000234,应付账款: AP-2026-08-0891],rollback_point:snap-hrn-2026-0819-001}七、部署架构┌─────────────────────────────────────────────────────────┐ │ 企业内网On-Premise │ │ │ │ 用户终端浏览器/钉钉/VSCode │ │ ↓ HTTPS │ │ ┌──────────────────────────────┐ │ │ │ Codex Harness 服务 │ ← 私有化部署 │ │ │ K8s3副本高可用 │ 不上传数据到OpenAI │ │ │ - Agent Loop Service │ │ │ │ - Approval Engine │ │ │ │ - Audit Logger (ClickHouse) │ │ │ │ - Knowledge Base (Qdrant) │ │ │ └──────────────┬───────────────┘ │ │ ↓ MCP Protocol内网 │ │ ┌──────────────┴───────────────┐ │ │ │ MCP Server 集群 │ │ │ │ - SAP MCP ServerRFC/BAPI │ │ │ │ - Oracle MCP Server │ │ │ │ - DB MCP Server只读 │ │ │ └──────────────┬───────────────┘ │ │ ↓ │ │ ┌──────────────┴───────────────┐ │ │ │ ERP 系统层 │ │ │ │ SAPDEV/QAS/PRD │ │ │ │ Oracle EBS │ │ │ └──────────────────────────────┘ │ │ │ │ LLM 推理私有化 or API企业级部署可用国内大模型 │ │ - 私有化Qwen / DeepSeek / 百川满足数据安全要求 │ │ - OpenAI API仅传输脱敏的指令和工具调用结构不含业务数据 │ └─────────────────────────────────────────────────────────┘八、实施关键成功因素MCP Server 质量是核心ERP接口封装的完整性和稳定性决定 Agent 能力上限知识库建设先行没有高质量的企业上下文Agent 会产生幻觉。至少准备 500 文档审批流程不能省财务类操作必须保留人工审批这是合规红线也是用户信任基础从只读场景起步先上线查询/报表/分析零风险建立信任后逐步开放写操作变更管控集成代码类变更必须走 ChaRM/DevOps 正式流程Harness 负责生成不负责绕过2026-08-19 | 参考openai/codex GitHub、Model Context Protocol官方文档、SAP BAPI文档
返回列表