ARTICLE · 1252025
本体即软件:企业 AI 缺的,可能不是更强的模型,而是一套能执行的业务定义
你给 AI 配了大脑,却没告诉它这家公司怎么运转
设想一个很多企业都想做的事:让一个 AI Agent 接手一部分 CRM 工作。它要识别出快要流失的重点客户,翻一翻这些客户的合同和跟进记录,按业务规则生成下一步建议,在拿到授权后更新跟进任务,碰到重要操作再提交审批。
在演示环境里,这个 Agent 看起来聪明得不得了。可一旦把它接进真实的企业系统,问题就冒出来了:客户信息散落在 CRM、合同系统和内部文档里;不同部门对客户等级的理解并不一致;接口只告诉它怎么调用,却没说什么情况下才该调用;权限规则又分散在系统配置、代码和一些没写下来的组织约定里。于是,这个 Agent 也许能把接口调用成功,却未必知道这个操作在当前业务情境下到底合不合理。
作为一个做企业软件多年的人,我越来越觉得,企业 AI 落地卡住的地方,往往要分成三层来看:
第一层,模型能不能听懂自然语言;
第二层,系统能不能给出清晰的业务定义;
第三层,Agent 能不能在权限和业务规则的约束下,正确地把操作做完。
我们这几年几乎把全部注意力押在了第一层。但一个接口能告诉 Agent 怎么更新客户记录,却未必能表达:这个客户为什么可以被更新、更新之后有哪些业务影响、当前操作者有没有权限。现实是,许多既有系统的业务定义确实散落在不同层次,Agent 需要额外的上下文和治理机制才能可靠地用起来——这不代表所有系统都纯为人设计,也不是所有软件都缺机器可读的规则。
给 AI 一个接口,它就可能学会调用;给 AI 一套明确的业务规则,它才有机会知道什么时候该调用,以及什么时候必须停下来。
所以我想先把那个真正的问题摆出来:企业真正缺的,究竟是更强的 AI,还是一套能让 AI 理解和执行的业务定义?
软件换了三次界面,但 Agent 带来的变化不只是界面
把软件的交互演进简单地分一分:最早是终端和表单,人要去适应软件的操作方式,一个字段一个菜单地填;后来是 Web 和移动端,界面灵活了、体验变好了,但业务规则仍然主要靠人通过界面去操作系统;再到今天的对话式 AI 和 Agent,人可以直接用自然语言说出目标,而查询数据、选择工具、调用动作、完成多步任务这些事,开始由 Agent 来承担。
过去的软件,主要是围绕人类用户去组织界面的,同时用 API、数据模型和权限机制在背后支撑运行。当 Agent 开始成为软件的直接使用者,软件就必须回答一组新的问题:Agent 能理解哪些业务对象,对象之间是什么关系,它能执行哪些动作,哪些动作有前置条件,当前这个执行主体有什么权限,以及哪些操作需要审批和留痕。
这就不再是给旧系统加一个聊天框的事了。真正的问题是:能不能把企业的业务定义本身,组织成机器可以读取、运行时能够执行、权限系统可以约束的形式?
聊天框只是新的入口。真正需要重新设计的,是入口背后那套业务规则如何被表达、执行和治理。
什么是本体即软件?
我们不从哲学意义上的本体论讲起,也不堆 OWL、RDF、知识图谱这些词。先看一个最普通的 CRM。
一家公司有客户、联系人、商机、合同、回款。如果这些只是数据库里的几张表,那企业拥有的,是结构化的数据。但如果企业进一步把这些说清楚——客户有哪些业务字段,联系人和客户怎么关联,商机如何在不同销售阶段之间流转,什么条件下可以创建合同,哪些人能看或改哪些记录,合同到期后要触发什么流程,以及哪些业务动作可以暴露给 Agent——那么它描述的就不再只是数据怎么存,而是一套更完整的业务定义。
这套定义,可以分三层来理解:
第一层,它定义企业在管理什么:客户、合同、订单、工单这些业务对象,以及它们的字段和关系。
第二层,它定义企业允许做什么:转换商机、审批合同、关闭工单、创建续约任务这些业务动作,以及每个动作的适用条件。
第三层,它定义业务如何被执行和约束:流程的触发条件、审批路径、访问权限、行级和字段级的数据访问规则,还有审计要求。
在 ObjectStack 的语境里,这套业务定义是用结构化、带类型的元数据来表达的,并且由运行时去执行。这里要划一条清楚的线:ObjectStack 说的可执行业务本体,是一个特定的软件架构概念,它不等于 OWL/RDF 那种用来做知识推理的本体——它的目标是驱动系统运行,不是做语义推理。我更愿意把它叫作企业的数字骨架,或者干脆就是一套可以运行的业务定义。
数据告诉 AI 企业发生了什么;业务本体进一步告诉 AI,这些数据代表什么,以及哪些动作在规则允许的范围内可以执行。
如果规则还要在数据库、API、表单、权限里重复翻译,它就还不是一套完整的定义
先说传统开发里一个很常见的问题。
产品说,CRM 要加一个客户风险等级字段。在代码为中心的模式下,这一个字段可能牵动数据库模型、API 的请求和响应、表单和列表、校验规则、权限配置、报表、自动化流程。
不是每个系统都要全改,也不是代码架构就一定做不好一致性;真正的麻烦在于,当同一条业务定义被分别实现在好几个地方,团队就得时刻保证这些实现彼此一致,漏掉任何一处,都会变成新的维护成本。
元数据驱动换了个思路:不先写好几份代码去描述同一条规则,而是把业务对象、字段、关系、动作、权限、流程组织成结构化定义,再由一个通用的运行时去读取和执行它们。ObjectStack 的这条链路大致是这样的:
objectstack.config.ts // 结构化的业务定义 |
↓ 编译 / 校验 |
objectstack.json |
↓ |
ObjectStack Runtime // 读取并执行定义 |
↓ |
数据库· API · UI · MCP(给 Agent 的工具) |
这套机制的架构意义在于业务结构有一个明确的定义来源;数据库和相关接口可以由运行时依据定义生成;界面可以由元数据驱动渲染;流程和动作按定义来组织;符合条件的对象和动作,可以暴露成 Agent 能用的工具。
然而,代码并没有消失,通用的执行机制仍然要靠扎实的工程代码,特殊的业务动作也可能需要代码扩展。变的只是:应用不必再把每一条业务定义,都重复实现成一堆分散的代码。
元数据驱动不是把代码换成配置这么简单,而是把原本需要反复翻译的业务定义,变成软件运行时能够直接使用的结构。
CRM如何把业务定义组织起来?
第一,业务对象不是孤立的数据表。
HotCRM 覆盖了从 Lead 到 Cash 的 CRM 范围,当前版本里有 18 个业务对象,客户、联系人、线索、商机、合同、报价都在其中。关键是对象之间的关系被显式地写了出来——比如在 opportunity.object.ts 里,商机通过 crm_account 这个 lookup 关联到客户,通过 primary_contact 关联到联系人:
// hotcrm/src/sales/objects/opportunity.object.ts |
crm_account: Field.lookup('crm_account', { required: true }), |
primary_contact: Field.lookup('crm_contact', { dependsOn: ['crm_account'] }), |
这种写法让商机属于哪个客户成为一条机器能直接读到的事实,而不是埋在某段前端代码里的隐含约定。对开发工具和 Agent 来说,这意味着它们能看见应用的业务结构,而不只是看见一堆表。
第二,业务动作不只是一个按钮。
在 lead.actions.ts 里,把线索转化为客户、联系人、商机,被定义成一个有名字、有适用条件的动作 convert_lead,而不是藏在任意前端事件里。更有意思的是它对 AI 的处理:
// hotcrm/src/sales/actions/lead.actions.ts —— convert_lead |
ai: { |
exposed: true, // 显式选择:把这个动作暴露给 Agent |
requiresConfirmation: true, // 不可逆,执行前需要人工确认 |
description: 'Converts a qualified lead ... Irreversible —', |
'requires human approval before it runs.', |
}, |
值得注意的是:
暴露给 Agent 是显式选择的——同一个文件里,可逆的安排下次跟进动作也 exposed,但没有加确认门;是否对 Agent 开放、要不要人工确认,都是一条条写明的,不是默认全开。
代码注释里讲得很清楚,requiresConfirmation 这个标志是用来告知调用方的,它是被 surface 出来、而不是被强制 enforce 的——真正拦住不可逆转化的,是服务端 lead.hook.ts 里的一道校验,一个绕过页面直接调接口的请求也躲不过它。这正说明了一件事:安全不能靠模型记得遵守,得靠运行时去强制。
第三,权限和执行在运行时衔接。
ObjectStack 的安全能力放在 plugin-security 插件里:对象级权限按读/建/改/删分桶(permission-evaluator.ts),行级安全把策略编译成作用在查询上的过滤条件(rls-compiler.ts),字段级安全在服务端脱敏、对未知规则从严兜底(field-masker.ts),还专门挡住用查询条件反推不可读字段这种隐蔽泄露(predicate-guard.ts)。
官方文档也说明,运行时会对 REST、Console 和 Agent 的调用执行相应的权限与审计——人和 Agent 哪怕从不同入口进来,最终都落到同一套强制校验上。但我不会把这说成 AI 自己理解了权限就不会越权:安全来自运行时的强制执行,不是模型的主观理解。
第四,对象和动作怎么成为 Agent 可用的能力。
前面那个 ai: { exposed: true } 就是把动作物化成 Agent 可调用工具(MCP 工具)的开关。要克制的是:不是所有流程都会自动变成 Agent 工具。更准确地说,本体提供了机器可读的业务表面,MCP 把符合条件的能力以标准化接口交给 Agent,而运行时继续承担权限和执行治理。能被调用、被允许调用、调用安全,是三件事。
业务对象、动作、权限、流程一旦有了机器可读的定义,人和 Agent 的访问控制,就有机会被纳入同一套运行机制;但安全永远落在运行时的强制校验上,而不是模型的自觉。
企业得到的不是更多配置项,而是业务变化的速度和可控性
第一,是业务变更的反馈周期。
企业要调整客户评级规则,或者改某类商机的流程。当业务模型和相关行为已经由元数据表达、现有运行时也支持对应配置时,团队可以用调整定义、校验、发布的方式完成变更,而不必为每一项定义都重写一套底层实现。当然,这不代表任何需求都只改元数据——碰到新的复杂算法、外部集成或定制执行逻辑,照样要写代码。
真正拉开软件交付效率差距的,不是写代码的速度,而是业务规则变了以后,整套系统需要重新翻译多少遍。
第二,是让 AI 更清楚地知道自己能做什么。
当对象、字段、动作和权限以结构化定义表达、并通过受治理的工具接口暴露,Agent 就不必只靠自然语言提示和零散文档去猜业务操作,而可以用明确的对象与动作定义,结合用户请求和运行时返回来干活。但要强调:元数据不能保证模型永不误判,系统仍然需要参数校验、权限检查、必要的审批、人工确认和结果验证。
企业不该只教 Agent 怎么干活,还要把它能干什么、不能干什么,写进真正执行的系统规则里。
第三,是降低规则分散带来的维护与治理成本。
当业务定义有相对清晰的组织结构,企业更容易看出某项改动会影响哪些对象、动作、流程和视图;如果有类型校验、定义验证和版本控制,还能帮着发现一部分配置错误。我不会说所有规则都只有一份定义,也不会说改一个字段所有能力就自动更新——真实行为取决于运行时的生成机制、依赖关系、验证和发布方式。
企业的软件资产不该只有可运行的代码,还应该包括能够解释代码为何如此运行的业务定义。
当执行越来越便宜,企业真正要沉淀的是自己的业务定义
大模型降低了写代码、处理信息和编排自动化的成本,Agent 也开始承担更多跨系统的查询和执行。但企业特有的业务语义、操作规则、权限边界和流程定义,并不会因为模型更强就自动、完整地长在模型内部。
如果企业把它们系统化地表达成结构化定义,就更有机会让不同模型和 Agent 使用同一套企业规则——模型可以换,Agent 可以扩,而这套业务定义,始终是可以长期维护的软件资产。
我不断言代码会彻底消失,也不认为所有企业软件都会采用同一种本体架构。本体即软件在我看来,是一种有明确工程机制支撑的架构方向——业务定义不再只是开发之前的设计文档,而是能够参与软件运行的核心资产。
当模型越来越容易获得,企业真正难以复制的优势,可能越来越多地来自它对自身业务的清晰定义。
下一次引入 AI Agent 之前,先检查你有没有一套机器能读懂的业务规则
回到开头那个问题:为什么 AI 能调用接口,却仍然可能在企业业务里犯错?因为接口只是能力的入口。企业还得把对象、关系、动作、权限和流程说清楚,Agent 才知道如何在规则允许的范围内完成任务。
我想表达的其实就三句话:本体帮企业明确业务是什么、业务之间如何关联;元数据驱动的运行时,把这些定义转化成真实的软件能力;而 Agent,在受治理的工具和运行时机制下,使用这些能力。
ObjectStack 提供的,是一种把业务定义结构化、验证、再交给运行时执行的架构实践;HotCRM 则展示了这套方法在 CRM 业务里的组织方式。我不会把它们包装成对所有企业场景都验证成功的唯一方案——更合适的做法,是你拿自己系统里的真实业务去评估它。
如果你想验证本体即软件到底是不是口号,最直接的办法是去看代码:ObjectStack 和 HotCRM 的仓库都是公开的,你可以顺着具体的对象定义、动作、权限和 MCP 能力,自己判断这套机制成不成立。
也可以只做一件小事——挑一条你最熟的业务链路,比如客户到合同,或者工单到处理,检查其中的对象、关系、动作、权限和流程,有没有一份机器能读懂的明确定义。这件事不需要买任何东西,却往往比任何演示都更能说明问题。
AI 可以越来越聪明,但企业仍然需要把自己的业务定义清楚。因为只有当业务规则能够被读取、执行和约束,AI 才有机会从一个会回答问题的助手,成为真正参与业务运行的系统。
最后留个问题给你:如果让一个 Agent 明天就接管你们的一条核心业务流程,你更担心的,是它看不懂业务,还是它做了不该做的事?欢迎在评论区聊聊。
参考来源
· ObjectStack 官方本体概念文档 https://objectstack.ai/docs/concepts/ontology
· ObjectStack 官方仓库 https://github.com/objectstack-ai/objectstack
· HotCRM 参考应用仓库 https://github.com/objectstack-ai/hotcrm















































































