
Agent 工具调用(Function Call / MCP)入门:连接 ERP、CRM 的正确姿势
企业 Agent 一旦要「查 CRM 商机」「读 ERP 库存」「创建工单」,就必须走出纯对话:模型提出调用意图,网关按白名单执行工具,再把结构化结果喂回模型生成答复。Function Call(各家模型的 tools / function calling)解决「模型如何声明要调什么」;MCP(Model Context Protocol)解决「工具如何被发现、鉴权与跨运行时复用」。两者都不等于「把 ERP 账号密码写进 Prompt」。GeonAI 按场景设计工具面与人工确认点;/agents 仅为能力参考(363+ 预设非公众全量试用)。评估请邮件 [email protected]。多 Agent 编排见 /blog/multi-agent-vs-single-assistant;交付节奏见 /blog/enterprise-ai-agent-delivery-4-steps。
先对齐名词:Function Call、MCP、自建网关
| 概念 | 解决什么 | 不解决什么 |
|---|---|---|
| Function Call / Tools | 模型输出结构化「调工具」意图与参数 | ERP 鉴权、幂等、审计、写操作审批 |
| MCP | 标准化暴露工具/资源,便于宿主与客户端对接 | 自动获得企业级 ACL 与变更管理 |
| 自建工具网关 | 白名单、配额、签名校验、人工确认、审计日志 | 替代业务系统本身的权限模型 |
| 仅 RAG | 检索制度与 FAQ 生成答案 | 真实订单状态、可写业务动作 |
落地时常见组合是:模型 Function Call → 贵司工具网关 →(可选)MCP Server 或直连 ERP/CRM API。MCP 是可选的标准化层,不是上生产的唯一门票。
什么时候必须上工具,而不是加长知识库?
- 答案依赖实时状态(库存、物流、商机阶段、工单状态)
- 需要写操作(建线索、改地址草稿、提交退款申请)
- 必须可审计到「谁在何时调了哪个 API、参数与结果码」
- 同一问题在不同账号下结果不同(强依赖登录身份与数据权限)
若只是解释制度、报价口径、SOP,优先 RAG + 引用(见 /blog/enterprise-rag-knowledge-base-agent)。把订单 API 当知识库灌进向量库,会同时制造过期数据与合规风险。
连接 ERP / CRM 的正确姿势(硬规则)
- 工具白名单:只暴露试点所需的 3–8 个动作;禁止「通用 SQL / 任意 REST」
- 读多写少:默认只读查询;写操作必须另开工具,且默认「草稿 + 人工确认」
- 身份透传:用企业 SSO / 服务账号 + 用户上下文做数据范围过滤,禁止共用超级密钥给模型自由发挥
- 参数校验:枚举、金额上限、客户 ID 格式在网关校验;模型输出不可信
- 幂等与重试:写工具带 idempotency key;超时只查状态不盲目重放
- 审计字段:sessionId、toolName、argsHash、resultCode、latency、operatorConfirm 进日志
- 失败话术:工具失败时拒答或转人工,禁止模型编造「已下单成功」
两条路径怎么选:原生 Function Call vs 引入 MCP
| 路径 | 更适合 | 代价 |
|---|---|---|
| A · 模型 Tools + 自建网关 | 工具少、系统固定(1–2 个 ERP/CRM)、要快速试点 | 每个运行时自己维护 tools schema |
| B · MCP Server + 宿主 | 多宿主/多 Agent 复用同一工具面;工具集会扩张 | 多一层协议与运维;仍要自建鉴权与审批 |
| C · 只接「万能插件」无网关 | 几乎永不 | 权限失控、无法审计、写操作事故面巨大 |
多数企业试点从 A 开始:把 CRM 查商机、ERP 查库存做成两个只读工具,验收通过后再评估是否用 MCP 统一暴露。把 MCP 当成「免审万能插座」是常见误解。
算例:售前助手要同时碰 CRM 与 ERP
| 用户意图 | 工具 | 确认策略 | 验收看什么 |
|---|---|---|---|
| 查某客户最近商机 | crm.get_opportunities(customerId) | 只读;按销售 ACL 过滤 | 越权率=0;缺参转澄清 |
| 查 SKU 可售库存 | erp.get_atp(sku, warehouse) | 只读;缓存 ≤5 分钟可接受则标注时效 | 与 ERP 抽样一致率 |
| 创建跟进任务 | crm.create_task(...) | 草稿预览 → 人工点确认再提交 | 误创建率;确认前可取消 |
| 「帮我改成交价」 | 无工具 / 拒答 | 转人工或工单 | 禁止模型直接调改价 API |
售前对话设计可参考 /blog/presales-consultation-agent-design;若还要拆路由与专家,见多 Agent 一文。POC 指标见 /blog/poc-to-production-agent-checklist。
反模式(看到就停)
- 把 ERP/CRM 的管理员 Token 放进系统提示或前端
- 给模型一个「execute_any_api(url, body)」类万能工具
- 写操作成功只靠模型自然语言确认,没有网关回执码
- 工具报错时让模型「合理猜测」业务状态并回复客户
- 上了 MCP 就跳过白名单、配额与人工确认
- 用 363+ 预设页演示当成已接通你们的生产 ERP
试点清单(可直接贴进 SOW)
- 列出必须实时/可写的意图;其余仍走 RAG
- 画出工具白名单(名称、参数、读/写、确认策略)
- 选定路径 A 或 B;明确鉴权与环境(测试租户优先)
- 定义幂等、超时、重试与失败话术
- 审计字段与抽检表(越权、幻觉回执、漏确认)
- 灰度一个入口;达标后再扩工具,禁止一次接满所有 API
找 GeonAI 时怎么描述
说明:要接的系统(CRM/ERP/工单)、只读还是含写、是否已有 API/中间件、可接受的人工确认点、试点意图清单。邮件 [email protected]、服务方案 或 Live chat。我们优先「最小可审计工具面」,不推销无边界插件。
常见问题
Function Call 和 MCP 是不是一回事?
不是。Function Call 描述模型如何发起调用;MCP 描述工具如何被标准化暴露与连接。生产上通常还要自建网关做鉴权、白名单与审计。
没有 MCP 能不能接 ERP?
能。用模型 Tools + 自建网关直连 API 是常见试点路径。MCP 更适合工具要跨多个宿主复用、或工具集会持续扩张时再引入。
写操作一定要人工确认吗?
高风险写(改价、退款、改权限)试点阶段建议必须确认。低风险写(建内部跟进任务)可在抽样质检达标后谈半自动,并保留审计与回滚。
工具失败时 Agent 该怎么说?
明确「系统暂不可用/未查到」,转人工或给出工单入口;禁止编造成功状态。验收要抽检失败话术,不只看成功路径。
和多 Agent 有什么关系?
工具权限冲突时,常拆成只读查询 Agent 与写操作草稿 Agent(见多 Agent 一文)。工具白名单按专家隔离,比塞进一个全能助手更安全。
官网预设员工已经会调工具了吗?
展示站预设是能力类型参考,不包含贵司 ERP/CRM 凭证与白名单。生产接通需要定制网关与验收。