从0到1自研企业AI智能中台:基于本体论+Agent的实践方案
前言为什么我要写这篇文章最近在规划企业AI中台时我面临一个选择是用Dify、LangChain等开源框架快速搭建还是自研一套更贴合业务的技术方案经过深入调研和思考我选择了一条看起来更“笨”但长期更灵活的路——基于Palantir本体论思想自研一套本体驱动的Agent智能中台。本文不是广告也不是理论空谈而是一份可以直接落地的技术方案包含架构设计、目录结构、核心代码和落地路线图。希望能给同样在探索企业AI落地的同行一些参考。一、业务背景与核心诉求我们公司已有ERP、MES、PLM等成熟系统但存在一个典型问题数据分散查询困难。业务人员想查一个“本月产线3的良率为什么下降”需要在三个系统间来回切换手动导出数据、用Excel关联分析耗时半天。我们的目标是搭建一个统一的Web入口用户通过自然语言对话AI自动完成以下四件事智能检索跨系统找数据统计分析自动汇总计算根因分析找出问题原因行动建议给出可执行方案核心理念不是预设工作流写死A→B→C而是基于本体论Ontology配置业务知识让AI自主决策该查什么、怎么查、用什么API。二、为什么放弃纯工作流编排方案一开始我考虑过Dify这类工作流编排工具但很快意识到一个问题对比项工作流编排本体论驱动本文方案路径确定方式人工预设每一步AI实时推理决策遇到未覆盖问题报错或答不上来AI尝试组合现有工具解决新增业务场景新增一条工作流分支只需更新本体定义维护成本随场景增多线性增长随本体完善趋于稳定是否“写死”✅ 本质是If-Else升级版❌ 真正的智能体结论工作流编排适合流程固定、场景有限的RPA类需求而我们想要的是真正的AI智能体。三、整体架构设计3.1 四层架构┌─────────────────────────────────────────────────────────┐ │ Web 对话入口 │ │ Streamlit / FastAPI HTML │ ├─────────────────────────────────────────────────────────┤ │ Agent 自主决策层 │ │ LangChain ReAct Agent LLM │ │ 思考 → 选择工具 → 调用API → 分析 → 建议 │ ├─────────────────────────────────────────────────────────┤ │ 本体论语义层 │ │ skill.md references/*.md业务概念地图 │ │ 实体定义 | 属性 | 关联关系 | API清单 | 权限 | 规则 │ ├─────────────────────────────────────────────────────────┤ │ 数据与API层 │ │ ERP API │ MES API │ PLM API │ 其他系统 │ └─────────────────────────────────────────────────────────┘3.2 核心设计理念把业务知识从代码中剥离出来放到本体文件中。业务人员可以直接阅读和修改skill.md和references/*.md而不需要懂代码。Agent启动时自动加载这些本体文件就像给AI配备了一张完整的业务地图。用户提问后AI自己在地图上找路、决定调用哪些API、以什么顺序组合。四、目录结构与文件规范/ai-agent-platform ├── /agent_core │ ├── agent.py # 主Agent逻辑ReAct循环 │ ├── tool_retriever.py # 根据问题检索相关工具 │ └── llm_client.py # LLM客户端封装 │ ├── /web_ui │ ├── app.py # FastAPI服务 │ └── templates/ # 前端页面 │ ├── /ontology # ⭐ 核心本体定义目录 │ ├── skill.md # 系统总览给Agent的目录 │ └── /references │ ├── erp.md # ERP实体、属性、API │ ├── mes.md # MES实体、属性、API │ ├── plm.md # PLM实体、属性、API │ └── cross_system.md # 跨系统关联规则 │ └── /api_proxy # 统一API网关鉴权、路由五、核心文件内容示例5.1skill.md—— 系统总览# 企业AI智能中台 - 本体总览 ## 系统清单 | 系统 | 简称 | 核心职责 | |------|------|----------| | ERP | 企业资源计划 | 订单、库存、采购、财务 | | MES | 制造执行系统 | 工单、良率、设备状态、产线 | | PLM | 产品生命周期管理 | BOM、物料规格、设计变更 | ## 核心业务实体跨系统 - **物料Material**ERP有库存PLM有规格MES有消耗 - **工单WorkOrder**ERP下达MES执行PLM关联BOM - **设备Equipment**MES采集状态PLM记录维护 ## 典型分析场景 - 本月良率下降原因 → MES良率 ERP物料批次 PLM设备维护 - A物料够不够生产 → ERP库存 MES消耗速率 PLM BOM用量5.2references/erp.md—— 详细本体定义# ERP系统 - 本体定义 ## 实体Material物料 - **属性** - materialCodestring唯一标识 - namestring - safetyStockfloat安全库存 - **链接** - consumedBy → MES.WorkOrder - belongsToBOM → PLM.BOM - **权限**所有用户可查库存仅采购可修改 ## API列表 | API名称 | 端点 | 方法 | 参数 | 返回 | |---------|------|------|------|------| | 查询库存 | /api/erp/inventory | GET | materialCode | {quantity, warehouse} | | 查询采购单 | /api/erp/purchase | GET | supplier? status? | [PurchaseOrder] | ## 业务规则 - 安全库存预警inventory safetyStock → 建议补货5.3references/cross_system.md—— 跨系统关联# 跨系统关联规则 ## 实体映射 | 业务概念 | ERP | MES | PLM | |---------|-----|-----|-----| | 物料编码 | materialCode | materialId | partNumber | ## 关联查询规则 - 查询工单物料消耗MES.WorkOrder.materialId → ERP.Material.materialCode → 查库存 - BOM展开ERP.Material → PLM.BOM.partNumber → 子物料列表六、核心代码实现6.1 Agent核心逻辑agent.pyimportosimportjsonfromlangchain.agentsimportcreate_react_agent,AgentExecutorfromlangchain.toolsimportToolfromlangchain_openaiimportChatOpenAIfromlangchain.promptsimportPromptTemplatefromfastapiimportFastAPI,HTTPExceptionfrompydanticimportBaseModel# 1. 加载本体文件 defload_ontology():加载 skill.md 和所有 references/*.mdwithopen(ontology/skill.md,r,encodingutf-8)asf:skill_contentf.read()refs{}ref_dirontology/referencesforfileinos.listdir(ref_dir):iffile.endswith(.md):withopen(f{ref_dir}/{file},r,encodingutf-8)asf:refs[file]f.read()returnskill_content,refs# 2. 从本体动态生成工具 defbuild_tools_from_ontology():解析 references/*.md 中的 API列表自动生成 LangChain Toolstools[]# 这里简化演示实际需解析Markdown中的API表格# 真实场景遍历所有reference文件提取API定义# 然后为每个API生成一个Tool函数# 示例手动创建一个库存查询Tooldefquery_inventory(material_code:str)-str:查询物料库存参数material_code为物料编码# 实际调用ERP APIresponserequests.get(fhttp://erp.internal/api/inventory?code{material_code},headers{Authorization:os.getenv(ERP_TOKEN)})returnresponse.text tools.append(Tool(namequery_inventory,funcquery_inventory,description查询物料库存输入物料编码返回库存数量和仓库位置))# 更多工具通过解析本体文件自动生成...returntools# 3. 创建Agent defcreate_agent():skill_content,refsload_ontology()llmChatOpenAI(modeldeepseek-chat,# 或 gpt-4api_keyos.getenv(LLM_API_KEY),base_urlos.getenv(LLM_BASE_URL))toolsbuild_tools_from_ontology()# 系统提示词将skill.md作为业务上下文注入system_promptf{skill_content}你是一个企业智能助手拥有以下工具 {{tools}} 请遵循ReAct模式思考→行动→观察 1. Thought理解用户问题确定需要哪些数据 2. Action选择并调用合适的工具 3. Observation分析工具返回的结果 4. 重复1-3直到信息充足 5. 最终给出结论和行动建议 用户权限已在API调用时自动校验你无需担心。 promptPromptTemplate.from_template(system_prompt)agentcreate_react_agent(llm,tools,prompt)returnAgentExecutor(agentagent,toolstools,verboseTrue)# 4. Web接口 appFastAPI(titleAI智能中台)agentcreate_agent()classChatRequest(BaseModel):question:struser_id:strapp.post(/chat)defchat(request:ChatRequest):try:# 注入用户身份用于后续权限控制responseagent.invoke({input:request.question,user_id:request.user_id})return{code:0,data:{answer:response[output],steps:response.get(intermediate_steps,[])}}exceptExceptionase:return{code:-1,message:str(e)}# 5. 启动服务 if__name____main__:importuvicorn uvicorn.run(app,host0.0.0.0,port8080)6.2 前端页面templates/chat.html!DOCTYPEhtmlhtmlheadmetacharsetUTF-8titleAI智能中台/titlestylebody{font-family:Arial;max-width:800px;margin:0 auto;padding:20px;}#chat-box{height:500px;overflow-y:auto;border:1px solid #ddd;padding:15px;border-radius:8px;}.user{text-align:right;color:#1890ff;margin:10px 0;}.assistant{text-align:left;color:#333;margin:10px 0;background:#f5f5f5;padding:10px;border-radius:8px;}#input-area{display:flex;margin-top:15px;gap:10px;}#question{flex:1;padding:12px;border:1px solid #ddd;border-radius:8px;font-size:16px;}#send{padding:12px 30px;background:#1890ff;color:white;border:none;border-radius:8px;cursor:pointer;}.loading{color:#999;font-style:italic;}/style/headbodyh1 AI智能中台/h1pstylecolor:#666;用自然语言提问AI自动跨系统检索、分析、给出建议/pdividchat-box/divdividinput-areainputtypetextidquestionplaceholder例如本月产线3的良率为什么下降了buttonidsendonclicksendQuestion()发送/button/divscriptasyncfunctionsendQuestion(){constinputdocument.getElementById(question);constchatBoxdocument.getElementById(chat-box);constquestioninput.value.trim();if(!question)return;// 显示用户消息chatBox.innerHTMLdiv classuser${question}/div;input.value;// 显示加载状态constloadingIdDate.now();chatBox.innerHTMLdiv classassistant loading idloading-${loadingId} 思考中.../div;chatBox.scrollTopchatBox.scrollHeight;try{constrespawaitfetch(/chat,{method:POST,headers:{Content-Type:application/json},body:JSON.stringify({question,user_id:demo_user})});constresultawaitresp.json();// 移除加载状态document.getElementById(loading-${loadingId}).remove();if(result.code0){chatBox.innerHTMLdiv classassistant${result.data.answer}/div;}else{chatBox.innerHTMLdiv classassistant❌ 错误${result.message}/div;}}catch(e){document.getElementById(loading-${loadingId}).remove();chatBox.innerHTMLdiv classassistant❌ 网络错误请稍后重试/div;}chatBox.scrollTopchatBox.scrollHeight;}document.getElementById(question).addEventListener(keydown,(e){if(e.keyEnter)sendQuestion();});/script/body/html七、落地路线图5周计划阶段时间目标交付物Demo验证第1周接ERP 2-3个API跑通问库存→调API→回答可演示的对话原型本体完善第2周补全ERP/MES/PLM的references文件完整本体定义Agent优化第3周调整Prompt加入错误处理、重试机制稳定版Agent权限安全第4周接入企业SSOAPI调用注入用户身份安全合规版本上线推广第5周业务试用迭代本体定义生产可用版本八、关键注意事项8.1 本体质量决定Agent上限本体文件写得越清楚Agent越聪明。建议拉着业务人员生产主管、采购经理一起写他们用业务语言描述怎么看数据你负责转译成本体格式。8.2 API规范化是前置条件各系统API必须有清晰文档至少是Swagger/OpenAPI格式参数命名统一。否则Agent无法理解API的用途和参数含义。8.3 数据不迁移只做联邦查询ERP/MES/PLM的数据留在原系统通过API或只读视图暴露避免数据迁移风险。8.4 分阶段开放能力第一阶段只读检索统计第二阶段分析建议第三阶段自动执行需要严格审批流九、方案优势总结对比维度商业套件如Palantir开源框架如Dify本方案成本极高千万级免费免费仅LLM API费用灵活性受限于产品功能受限于框架设计完全自主控制本体驱动✅ 原生支持❌ 需二次开发✅ 自主实现业务人员可维护✅ 图形化编辑❌ 需改代码✅ 编辑Markdown即可数据主权数据上云可私有化完全本地私有十、总结本文分享的方案本质上是用AI编程工具Cursor 本体论思想 Agent模式自研一套企业级AI智能中台。核心亮点在于把业务知识从代码中剥离到本体文件业务人员可直接维护Agent自主决策而非预设工作流真正实现智能化完全开源私有化部署过程数据不出企业

相关新闻

13 Reranking(重排序)

13 Reranking(重排序)

Reranking(重排序) Reranking 是什么 Reranking(重排序)是在检索之后、送给 LLM 之前,额外加一步精排: 用户问题 → 检索 → 10个候选 → Reranker 精排 → top-3 → LLMReranker 对每个"问题-文档&qu…

2026/11/3 10:03:33 阅读更多 →
依托空间连续性原理,构建陆军多阵地摄像头拓扑图谱,实现作战单元无断档全域追踪

依托空间连续性原理,构建陆军多阵地摄像头拓扑图谱,实现作战单元无断档全域追踪

依托空间连续性原理,构建陆军多阵地摄像头拓扑图谱,实现作战单元无断档全域追踪前言陆军野外作战阵地、前沿驻防点位、合成演训场区、梯次防御阵地呈现点位分散、梯次布局、地形割裂、工事密布、纵深跨度大的典型部署特征。多阵地分布式监控体系是实现战…

2026/11/3 13:14:39 阅读更多 →
高尔夫挥杆阶段图像数据集

高尔夫挥杆阶段图像数据集

摘要:该数据集包含120张高尔夫挥杆四个关键阶段的图像样本:准备姿势(address)、上杆顶点(top)、击球瞬间(impact)和收杆结束(finish),每个阶段包含…

2026/10/29 7:11:33 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/3 1:09:25 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/3 10:57:27 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/3 11:35:49 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/3 2:27:21 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/3 10:47:27 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/3 10:57:33 阅读更多 →

日新闻

周新闻

月新闻