从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/10/13 16:47:41 阅读更多 →
依托空间连续性原理,构建陆军多阵地摄像头拓扑图谱,实现作战单元无断档全域追踪

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

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

2026/9/28 2:24:42 阅读更多 →
高尔夫挥杆阶段图像数据集

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

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

2026/10/8 20:38:27 阅读更多 →

最新新闻

考研数据结构复试高频考点、手写代码与面试应对策略

考研数据结构复试高频考点、手写代码与面试应对策略

初试成绩出来之后,很多同学会陷入一种“不知道该干什么”的状态。刷题吧,好像复试不考这么细;看论文吧,又不知道从哪看起;真要准备机试,又发现手生的厉害。我自己当年备考“考研数据结构复试题目整理”的时…

2026/10/14 4:25:51 阅读更多 →
考虑主从配电网分布式优化的ADMM算法Matlab实现与串并行对比

考虑主从配电网分布式优化的ADMM算法Matlab实现与串并行对比

最近在推进一个关于主从配电网分布式优化控制的课题时,核心目标是用交替方向乘子法(ADMM)把主网和多个配电子网之间的协同优化拆开做,整个算法在Matlab里落地,并对比了串行和并行两种执行机制下的收敛行为。从模型搭建…

2026/10/14 4:25:51 阅读更多 →
2026 AI 论文工具排行榜|按「国内毕业论文适配度」打分,适合盲审抽检环境

2026 AI 论文工具排行榜|按「国内毕业论文适配度」打分,适合盲审抽检环境

前言 很多海外 AI 工具在国外学术写作里表现亮眼,但拿到国内本科、硕士毕业论文场景,就会水土不服。国内高校论文有一套独立规则:GB/T7714 参考文献格式、固定 Word 排版规范、AI 痕迹检测、参考文献溯源抽查、逻辑盲审。 本次排行榜不再看通…

2026/10/14 4:25:51 阅读更多 →
一次GC频繁问题排查:从JFR到代码优化的完整实践

一次GC频繁问题排查:从JFR到代码优化的完整实践

大概一个多月前,我接到一条让我头疼不已的告警:某个订单查询接口的 P99 延迟从平时的 80ms 一路飙到 800ms 以上,CPU 使用率每隔几分钟就像过山车一样冲到接近 100%。一开始我照例查了流量、数据库慢查询、第三方依赖,全都没有异常…

2026/10/14 4:25:51 阅读更多 →
pdf.js在线查看PDF工具:渲染原理、避坑指南与性能优化实践

pdf.js在线查看PDF工具:渲染原理、避坑指南与性能优化实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 4:25:51 阅读更多 →
Dropout 正则化原理与实战:从过拟合到泛化能力提升

Dropout 正则化原理与实战:从过拟合到泛化能力提升

1. 为什么一个"随手关掉神经元"的操作能成为深度学习的基石第一次在代码里写下nn.Dropout(p0.5)的时候,我其实没太当回事——不就是训练时随机扔掉一半神经元嘛,听起来像个正则化的小把戏。直到有一次复现一篇图像分类论文,模型在训…

2026/10/14 4:24:51 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →