公司里装了 AI 聊天机器人之后,大家的新鲜感大概只维持了两周。刚开始所有人都在问它“帮我写个周报”“解释一下什么叫现金流量折现”,后来就没人理它了——因为聊完天,活还是得自己干。我这次的目标很明确:用 GPT-6 做出来的东西,必须是一个能自己动手处理企业事务的“工作伙伴”,而不是一个只能陪聊的对话框。我把这个项目在内部跑通了,也把核心框架开源出去了,今天把整个过程的思路、架构、踩坑和结论一次说清楚。
这个项目解决的是一个很务实的痛点:企业里有大量重复、跨系统、需要“看资料再干活”的事务,过去只能靠人手工操作。我做的工作伙伴,本质上是一个具备工具调用能力、知识库记忆和任务编排能力的 AI 助手,它可以帮你查数据、填流程、生成报表,甚至在多个系统之间完成一个完整业务动作。它不是论文里的概念 DEMO,而是已经在公司真实业务里跑起来的系统。这篇文章适合两类人看:一类是想在企业里落地 AI 但被“只会聊天”卡住的产品和技术负责人,另一类是自己折腾 Agent 开发,想知道底层怎么设计、上线要防哪些坑的开发者。
事不宜迟,我从头拆解。
1. 项目整体设计与思路拆解
1.1 为什么企业 AI 不能停留在“聊天”层面
聊天式 AI 的核心交互是“一问一答”。这种模式对个人用户很好用,但放进企业环境里,价值密度会迅速下降。原因很简单:企业里绝大多数工作不是“获取信息”,而是“基于信息做动作”。比如财务要“把本月报销单里的异常项整理成报告”,运营要“从后台导出昨天的转化数据并比对前天的趋势”,这类任务至少包含三个动作:找数据、做判断、输出结果。传统聊天机器人只能完成第一个动作的一半,后面的动作还是由人来完成。
我把公司现有 AI 的使用数据拉了一遍,发现上线三个月后,人均每天调用不到 0.3 次,而且高频问题集中在制度查询、系统操作指引这类“静态知识问答”上。这说明员工不是不喜欢 AI,而是 AI 没有真正接入工作流,帮不了他们省时间。所以这个项目的第一个设计原则就是:AI 必须能“调用工具”和“读写业务系统”,而不仅仅是在对话框里生成文字。
1.2 从“通用助手”转向“专属工作伙伴”的定位差异
通用助手追求大而全,工作伙伴追求“懂你的业务”。一开始我试过直接用大模型加提示词,让它扮演“企业助手”,效果很差。原因在于大模型并不了解公司内部的系统结构、数据字典、审批流程,这些知识光靠提示词塞不进去,硬塞进去也会让上下文迅速膨胀,影响回答准确率。
因此定位上,把 AI 拆成两层:一层是通用的认知能力,由 GPT-6 提供;另一层是贴着公司业务构建的“知识层与动作层”。知识层包含制度文档、数据字典、历史工单、常见业务逻辑,动作层包含对内部系统的 API 封装、操作权限、任务执行模板。这样设计之后,AI 的每一次回答和操作,其实都是“通用模型+私有知识+私有工具”协作的结果。开源的价值也在这里——企业拿到的是一套框架,而不是一个绑死业务的黑盒,每个公司都可以往里灌自己的知识和工具。
1.3 为什么要把工作伙伴做成开源项目
这可能是整个项目里争议最大的一个决定。内部讨论时,有人担心开源会把核心能力暴露出去,还有人觉得应该把代码捂在手里形成壁垒。我的看法是:企业 AI 真正难的部分从来不是模型权重,而是业务场景里的数据打通、权限治理、流程适配和效果调优。这部分能力在代码里只有一半,另一半在长期运营里。
开源的价值有三层。第一,降低信任成本,企业私有化部署开源代码,安全审计人员可以一行行检查数据流向,这样才敢把核心业务数据交给 AI。第二,吸引社区共建,模型更新很快,单靠一个团队维护所有工具插件不现实,开源之后大家各接各的系统,整个生态会越来越厚。第三,反向倒逼工程规范,代码要给人看的时候,才会老老实实把日志、配置、异常处理做好。这个项目开源后,已经有不少同行基于它对接了自己公司的 OA 和 CRM,反馈里提到最多的就是“原来那些想不清楚的权限边界,看到代码里怎么处理之后就明白多了”。
2. 核心架构与关键技术选型
2.1 四层架构:模型层、认知层、动作层、权限层
整个系统被我拆成四层,这四层各司其职,也是后续所有功能设计的基础。
模型层是底座,接的是 GPT-6 的接口能力,包括对话生成、工具调用、长上下文理解。这里不做私有化部署大模型,因为企业内部对生成质量要求高,自训模型性价比很低,直接用外部 API 配合数据脱敏和控制策略更现实。
认知层负责让模型懂公司的事物。核心组件是一个企业内部知识库,通过检索增强生成技术把制度文档、产品手册、历史问答接进来;另外还有一个“业务语义层”,把数据库里的字段名、枚举值、指标口径翻译成大白话,模型在生成 SQL 或者调用 API 之前,先通过这一层理解业务含义。
动作层是让 AI 能干活的关键。公司内部有十几个系统,不可能让模型直接连数据库或者裸调接口,我统一封装成标准化的工具接口,模型只需要选择工具、填入参数,剩下的请求转发、鉴权、重试、错误处理全部由工具网关处理。
权限层是整个架构里最容易被忽略、但实际最重要的部分。AI 能调用工具,不等于 AI 可以不受限制地调用工具。每一个工具调用都必须附带用户身份和权限上下文,系统在转发请求前会做一次权限校验,确保 AI 只是在替用户执行用户本身有权限做的事。
2.2 为什么选用工具调用而不是让模型直接写代码执行
在设计过程中,最关键的选型是“让模型通过 API 工具执行任务”而不是“让模型写一段代码然后执行”。前者把模型的自由空间限制在参数范里里,后者给了模型无限可能的自由度,但同时也给了它搞出大事故的空间。
直接执行代码的问题很典型:模型对运行环境的理解不完整,依赖库冲突、权限越界、死循环、读取了不该读的文件,这些在开发环境偶尔出现还能接受,在生产环境一次就能让所有业务部门对 AI 失去信任。使用工具调用之后,模型能做的不再是写程序,而是“按约定格式发起动作请求”。比如模型决定“给采购单 12345 发起审批”,它调的只是 native 审批接口,参数是单号,而不是直接操作数据库改状态。
另外,工具调用天然适合做权限控制审计。每一次调用都有一行结构化日志:谁调用的、用了什么工具、传了什么参数、返回了什么结果,出了问题瞬间就能回溯。这一点对金融、医疗这些强合规行业特别重要,也是为什么我会强烈建议所有做企业 AI 的人,一定要走这种带轨迹的动作执行路线,而不是让模型自由发挥。
2.3 开源框架的模块划分和可扩展设计
开源版本里,项目按模块化思路组织,核心流程在 core,工具实现用 plugin 机制,知识库接入用 provider 接口。程序员拿到代码之后,加入一个新的业务系统大致只需要三步:写一个实现工具接口的类,在配置里注册工具列表,然后让模型通过语义描述了解这个工具什么时候用、参数是什么。
这种设计的直接好处是,业务系统和 AI 主框架之间解耦。主框架更新不影响已接入工具,新增工具也不需要改动核心逻辑。我专门加了一个模型可执行的 JSON Schema 作为工具定义格式,把参数类型、必填项、描述信息都结构化,模型看到的工具说明就是这些 JSON Schema 渲染出来的文本,效果比自然语言描述好得多,参数幻觉的比例明显下降。
3. 核心环节的工程实现细节
3.1 企业知识库接入:从文档到可检索向量的完整链路
知识库是整个工作伙伴的“业务大脑”,如果这里做不好,后面所有能力都是空中楼阁。我最开始让 AI 直接读所有文档,结果上下文很快被撑爆,回答质量直线下降。后来改成检索增强生成,也就是先根据用户问题找相关文档片段,再把片段和用户问题一起交给模型。
处理流程分五步:文档解析、清洗切分、向量化、索引存储、检索增强。文档解析要考虑格式兼容,包括 PDF、Word、Excel 和网页;清洗切分是难点,不是按固定字符数单纯切段,而是按标题和语义边界切,否则一个完整知识点会被劈成两半,检索时漏召回。我实践下来,切分块大小设在 500 到 1000 字之间,配合标题结构进行分层索引,召回准确率能比固定切分提升不少。
检索阶段不是只做一次向量相似度搜索。我的实现里是“混合检索+重排序”:先用向量召回找出候选段落,再用关键词做一轮 BM25 召回,最后把两组结果交给一个重排序模型统一打分。这一步很关键,因为向量检索擅长语义匹配,但在专有名词、编号、缩写上经常失手,比如“CAR-T 流程”,关键词精确匹配能精准命中,而向量检索可能给你返回一大堆泛泛的细胞治疗内容。
3.2 业务工具封装:把内部系统变成 AI 可调用的“手”
知识库让 AI 变得“懂行”,业务工具让 AI 变得“能干”。公司内部需要接进来的系统包括 OA 审批、数据报表平台、工单系统、客户管理系统,每个系统对接方式都不一样。统一策略是:绝不直连数据库,一律通过业务系统自身 API 集成。
开发一个“查询订单物流状态”的工具,封装里要做的不止是调接口,还包括参数校验、语义映射、结果裁剪。企业系统里同一件事说法经常不一样,比如销售说“交付单”,仓库说“发货单”,如果模型不知道它们是同一个东西,就会在工具选择阶段犯糊涂。解决办法是在工具描述里明确列出别名,并在业务语义层放一份术语对照表,让模型在进入工具选择之前先做一次“术语归一化”。这块工作没有人能靠大模型自动完成,必须拉业务人员一起梳理,也是最值得投入的部分。
工具输出结果也不是直接原样返回给用户。很多内部 API 返回的是原始表结构字段,用户看不懂,模型需要先把结果转换成口语化的业务解释。比如 API 返回“status_code=4”,转换后的输出是“当前订单处于异常拦截状态,原因:收件地址超出配送范围”。生成解释的过程,其实是一次小规模的总结任务,但是我会严格控制上下文长度,防止大段原始数据挤占对话窗口。
3.3 任务编排:让 AI 能自己拆解并完成多步任务
单次工具调用解决单个动作,企业里大量需求是多步任务。比如“统计本季度各区域回款率,给低于目标值的区域负责人生成一封催办提醒邮件”,这里至少涉及查数据、算指标、分析差异、写邮件、找审批人五个动作。
多步任务的实现机制是核心中的核心。我在开源框架里实现了一个 Agent 循环:模型根据用户目标,先生成一份执行计划,然后逐步执行、观察结果、修正计划,直到目标完成或者主动向用户请求补充信息。这里有几个工程细节:循环最大步数必须设置上限,比如 12 步,否则模型会在复杂任务里反复打转;每执行一步,历史关键信息要保留,但原始响应要裁剪,避免上下文膨胀;每次执行计划变更时都要重新做一次权限校验,防止模型在前一步执行后获得了新状态就做了越权动作。
任务编排还配套了一套“任务状态机”,包括排队、运行中、等待用户确认、失败、完成。凡是涉及“对外发送消息、提交审批、删除数据”这类高风险动作,执行到关键节点时,系统会暂停并要求用户明确确认。这不是繁琐,而是必需的护栏。我见过太多 DEMO 里 AI 一行代码直接把生产环境数据删了的例子,那类事故只要发生一次,项目基本就被叫停了。
4. 实际部署、落地与效果评估
4.1 部署环境和配置建议:小步快跑还是一步到位
这个项目在企业内部落地的过程中,环境规划我建议分三层:开发环境、预发布环境、生产环境。开发环境随便折腾,用 Mock 工具和数据就能跑通主流程;预发布环境接测试库,跑回归用例;生产环境接正式数据,启用完整的权限控制和审计日志。三层隔离听起来简单,但很多团队为了省事跳过预发布,直接在开发环境连生产数据库调试,这是很大的隐患。
具体配置方面,模型调用走 GPT-6 接口,需要关注的是并发配额和延迟。知识库的向量库我用的是轻量级开源方案,支持横向扩展,生产环境建议至少三个节点保证高可用。重排序模型单独部署,量级不大,CPU 环境也能跑,但延迟会偏高,最好放到 GPU 实例。整体算下来,支撑一个五百人公司的日常使用,服务器成本并没有想象中高,大头反而在模型 API 的费用和知识的日常维护人力上。
上线方式我也建议分阶段:先选一个业务部门试点,比如行政或财务这类流程性强的部门;跑通之后再逐步扩大到其他部门。千万别一上来就向全员开放。试点阶段的问题反馈密度最高,团队能有节奏地迭代;开放式上线后问题会散在大量对话里,很难系统排优先级。
4.2 权限模型和数据隔离:AI 越权是最大风险
权限控制是我反复强调的点,因为企业 AI 的破坏力上限在这儿。一个普通员工如果能让 AI 调用他本没有权限的接口,那等于系统给所有人开了一个后门。为了避免这种情况,权限模型设计遵循两个原则:第一,永远基于用户的角色和资源范围做鉴权,AI 只是代理执行者,不拥有独立的权限;第二,工具注册时的权限声明必须精确到字段级,宁可多收一点,不可漏放。
具体实现是:每个工具在注册时声明需要的权限标签,比如“读取销售明细”“创建审批单”。用户发起对话时,系统把用户身份信息加入会话上下文。每次工具调用前,中间件先去权限中心校验,判断“该用户+该工具+该资源”这个元组是否合法。任何校验失败都会被拦截,同时生成一条审计事件。
数据隔离也不能忽视。同一套系统里,不同部门之间可能互不可见。我开源框架里保留了“数据域”的概念,同一工具在不同数据域下返回的数据集是经过过滤的。例如销售总监可以跨区域查数据,区域经理只能看到本区域的团队数据,这在工具层强制过滤,而不是靠模型自觉。
4.3 效果评估:不看模型面经,只看业务指标
AI 写得好不好,不能只看生成文本美不美,得看任务完成率。我建立了一套面向业务的效果评估指标来持续监控:
| 指标 | 说明 | 目标值 |
|---|---|---|
| 任务完成率 | 用户发起的完整任务中,成功执行到最终步骤的比例 | 大于 85% |
| 平均解决时长 | 从用户提问到拿到最终结果的时间 | 小于 4 分钟 |
| 工具调用成功率 | 工具调用中不出现参数错误、鉴权失败的占比 | 大于 95% |
| 人工修正率 | 用户主动修改 AI 产出结果的比例 | 小于 20% |
| 用户自主使用率 | 每周主动发起任务的知识型员工占比 | 大于 60% |
评估方式也不能只靠自动化。我每周会抽看 30 条对话日志,重点看那些任务失败或者用户反复修改的地方。发现有相当的案例模型“一顿操作猛如虎,最后给出了错误答案”,原因往往出在前置信息不足。比如用户问“帮我查下上个月的退款情况”,这里“退款情况”太模糊,需要先明确退款类型、时间范围、统计维度,模型应该反问而不是瞎猜。
针对这种情况,我在系统里加入了意图澄清机制:当用户目标和可执行动作之间缺少必要参数时,模型不再强行生成动作,而是向用户提出 2 到 3 个可选项。这么做一开始会显得 AI 变“笨”了,但实测下来最终任务完成率大幅上升,用户满意度更高。强撑着瞎做才是真的笨。
5. 常见问题与排查技巧实录
5.1 检索召回质量差,AI 答非所问
这是落地初期最多的问题。表现是用户问一个制度问题,AI 的回答内容看着很通顺,但哪个制度都没说对。排查下来通常是两个原因:切分策略不合理或者重排序环节缺失。切分太碎会让检索到的片段缺失上下文,切分太大又让片段里混入过多无关信息。
我的排查顺序是:先看数据源清洗是否干净,再看检索结果里到底召回了哪些片段,对比用户问题与片段的实际匹配度。这里强烈建议做一套“黄金测试集”——准备五十个典型业务问题,每个问题标注出正确出处段落,每次修改检索逻辑后都跑一遍,看召回率变化。这招比任何在线调试都有效。
5.2 Agent 循环跑偏,任务越做越复杂
多步任务执行中,模型经常出现一个状态:原本是“查数据并汇总”,执行到第三步时突然开始“分析原因并提出改进建议”,擅自扩大了任务范围。这是大模型 Agent 的经典问题,本质上是模型在执行过程中丢失了对原目标的控制。
我针对性做了两个调整。一是给 Agent 循环加一个“目标锚定”机制,每一步执行前,模型都要把当前动作与原始目标做一次匹配,不匹配就拉回;二是强化“完成即停”的奖励信号,如果模型在目标已经达成后还继续调用工具,就算任务失败。这个反馈信号可以通过模型输出 logprob 和人工标注来微调,也可以通过对提示词的精细约束来实现。我在开源版中用了提示词约束加步数上限的方案,成本低,已足够稳妥。
5.3 工具调用参数幻觉,参数填错还理直气壮
参数幻觉是指模型选择了正确工具,但填参数时张冠李戴。比如查询“上月华东区销售额”,模型把时间范围填成了“本月”,或者把区域填成“华东大区”而系统里实际叫“华东区域”。这类问题多数出在参数枚举值和业务术语的表述不一致上。
解决思路不是期望模型变聪明,而是把参数定义做到极致规范。工具参数定义里要写清楚枚举值列表、格式要求、示例值、别名。更进一步,在模型调用前加一层“参数校验器”,对所有枚举值和格式做硬校验,校验失败立即返回错误信息,要求模型重新提供参数。这个机制让工具调用的失败率下降了近一半,属于投入极小回报极高的改进。
5.4 用户问的问题超出系统能力范围
企业 AI 最忌讳撒谎硬答。比如员工问“帮我申请某个项目的额外预算”,预算申请流程根本不在系统流程里,模型却可能编出一个审批编号返回给用户。我在系统里加了“能力边界声明”模块,让模型在判断任务无法通过现有工具完成时,明确告知用户“当前不支持该操作”,并提供替代路径。
为了达到这个效果,工具列表的语义设计很关键。如果模型的系统提示里工具描述含糊不清,它就会幻想出能力。我要求工具描述里不仅写“能做什么”,还要写“不能做什么”,以及超出范围的典型请求示例。这是让模型学会“说不会”的最有效方式。
6. 开源之后的结构与扩展空间
6.1 开源项目里沉淀了什么
这次开源的核心并不只是一个 AI 助手 Demo,而是一套可以直接嵌入业务的企业 AI 工作套件,仓库里包括四部分内容:核心 Agent 调度框架、标准工具插件示例、知识库处理流水线和一套完整的部署与权限参考实现。任何团队拿到代码,按照文档接入自己的两个业务系统,大概一到两周就能跑起一个有真实生产力的原型。
开源代码里把测试也做了开源,这件事我觉得比代码本身更重要。企业开发者拿到项目后,可以跑通端到端测试验证效果,再往自己的业务上改。我在仓库里放了一套模拟业务数据,包含订单、客户、流程单等实体,工程师可以直接用它理解整个数据流。这样降低了二次开发门槛,也让框架层面的能力边界更加清晰。
6.2 这个工作伙伴还能往哪些方向扩展
现在的版本已经解决了“会聊天”到“能干活”的核心问题,但距离理想工作伙伴还有不小距离。后续我计划做两个方向的扩展。第一是更复杂的跨部门流程协同,比如一个任务涉及采购、财务、仓储三个部门的系统操作,当前框架虽能串联工具,但跨部门审批链路的治理还需要进一步做深。第二是主动性提醒,现在的系统是用户发起任务后才行动,接下来希望它能在数据达到某些阈值或者流程停滞过久时,主动向责任人发起提醒和预案建议。
另外一个值得探索的方向是企业内部多智能体协作。让不同的 Agent 分别负责数据处理、文书撰写、流程推进,一个复杂任务由多个 Agent 分角色完成,再由一个协调者统一质检。这个方向的复杂度是指数级上升的,但也是企业 AI 未来最有想象空间的部分。开源版本的框架已经预留了多 Agent 调度的接口,有兴趣的同行可以直接在这个基础上做实验。
抛砖引玉,我把这段时间做得比较顺的经验和踩过的坑都写在代码库和这篇文章里了。做企业 AI 最大的感受是,模型能力永远在快速迭代,但真正拉开差距的是谁能把模型、业务数据和系统动作以安全可审计的方式缝合在一起。希望这篇文章能给正在做类似事情的人一些参考。后面我自己遇到新的有意思的问题,再来接着聊。