入口、身份和统一登录
三个业务入口共用一套商事代理会话和租户边界。智能体不得为不同端创建另一套用户 ID、租户 ID 或角色。
| 入口 | 地址 | 主要使用者 | 能力 |
|---|---|---|---|
| PC 用户端 | /pc/ | 项目运营人员 | 项目、主体、账户、收付款、通信、税务台账和操作状态 |
| PC 管理后台 | /admin/ | 合规、财务和管理员 | 集成状态、Outbox、冻结/释放、审计查询和导出 |
| 移动 H5 | /uniapp/ | 审批人和移动值守 | 待审批、批准/驳回和关键异常查看 |
微信/IAM 认证流程
- 入口调用
POST /api/v1/commercial/auth/wechat/h5/start,带surface=pc|admin|mobile。 - 服务端生成一次性
session_token、client_state和场景值,跳转 AI-OPC 社区/IAM 与授权中心shouquan_new。 - 授权回调后,前端只提交
code、client_state、scene和本次session_token到POST /api/v1/commercial/auth/platform-login。 - 服务端校验场景、会话、有效期和签名,交换统一身份并签发商事代理 JWT;前端再调用
/auth/me。
PC 和管理后台在配置允许时可使用微信桌面扫码:/auth/wechat/qr/start、/auth/wechat/qr/poll、/auth/wechat/qr/cancel。二维码轮询和取消绑定发起端指纹,过期或确认后不能重放。生产环境禁止用户名/密码直登,也不要记录 token、授权 code 或密钥。
统一身份与角色
服务端以 IAM 返回的 subject_id 作为跨项目主体,以 tenant_ref(或规范化 OPC profile)确定租户。tenant_id、roles 和 scopes 均为服务端计算值,客户端不能追加或覆盖。
| 角色 | 权限 | 使用边界 |
|---|---|---|
commercial_operator | commercial:read、commercial:write | 建档、发起操作和读取本租户事实 |
commercial_approver | commercial:read、commercial:approve | 查看审批并批准/驳回 |
commercial_admin | 以上全部及 commercial:admin | 冻结/释放、Outbox、集成状态、审计查询/导出 |
管理后台不会因为 surface=admin 自动授予管理员权限,IAM 回调必须明确携带管理员角色/权限;审批人不能审批自己发起的高风险操作。
智能体的标准运行链路
每一次商事意图都必须经过完整责任链,不允许智能体绕过策略校验、人工审批或回执对账。
“已提交”“处理中”“结果未知”“已完成”是不同状态。没有可核验回执时,智能体必须保留 processing/unknown 语义,不能把不确定结果说成成功。
能力与风险等级
登录后可通过 GET /api/v1/commercial/mcp/tools 获取当前能力清单。风险等级和副作用决定是否需要人工审批。
| 工具 | 风险 | 副作用 | 智能体正确用法 |
|---|---|---|---|
commercial.project.upsert | L1 | local | 建立项目引用;同租户内 project_ref 幂等更新 |
commercial.legal_entity.create | L4 | legal | 只提交申请并等待独立审批,不声称已完成登记 |
commercial.account.open | L4 | legal | 校验主体和币种后申请开户,等待审批与回执 |
commercial.transaction.collect | L2/L3 | local/payment | 小额可本地入账;超过阈值或涉及外部支付需审批 |
commercial.transaction.payment | L4 | payment | 授权自然人批准;金额、收款方、用途变化须重新审批 |
commercial.communication.send | L3 | communication | 固定内容、接收方和模板后申请审批,默认不直发 |
commercial.tax_ledger.upsert | L2 | local | 归集事实和凭证,不等同于自动报税或税务意见 |
高风险工具申请会创建 operation 和 approval。审批绑定操作类型和 parameter_hash;字段变化必须生成新的幂等键并重新审批。
提案与审批方法
操作前检查
- 当前 JWT 有效、未撤销,且
tenant_id与项目一致。 project_id、entity_id、account_id均属于当前租户。- 高风险请求写明业务目的、金额/币种、对象、期限和责任人。
- 可重试写请求使用稳定
idempotency_key;同一键只允许同参数重放。 - 不把身份证、完整银行卡号、微信 token、授权 code 或密钥放入 prompt、日志或正文。
- 先读取当前状态和事实源,再决定是否重试;遇到
unknown不重复扣款或发信。
推荐提案结构
{
"name": "commercial.transaction.payment",
"tenant_id": "从当前会话读取,不由用户输入覆盖",
"project_id": "project-id",
"entity_id": "entity-id",
"account_id": "account-id",
"arguments": {
"amount": "12800.00",
"currency": "CNY",
"destination": "供应商账户引用",
"purpose": "2026-09 园区运维服务费"
},
"idempotency_key": "payment-project-id-202609-001",
"expected_risk_level": "L4",
"requires_human_approval": true
}
提案返回 accepted 只代表接收和初步校验,不代表已付款。智能体要向用户说明 operation 编号、风险等级、待审批原因、参数摘要、有效期和下一步。
审批人的复核顺序
- 核对项目、法律主体、账户和租户。
- 核对金额、币种、收款方、用途、接收方和税务期间。
- 确认发起人与审批人分离,审批仍在有效期内。
- 核对
parameter_hash;参数变化时驳回原单并重新发起。 - 明确批准或驳回,驳回写清原因;不要代替其他人操作。
服务端以 JWT 主体写入 approver_id,忽略客户端冒名字段。审批只能决定一次,过期或重复决定会返回冲突。
状态、幂等和异常处置
| 状态 | 含义 | Agent 应答 |
|---|---|---|
pending_approval | 已建单,等待独立审批 | 告知审批编号和待办,不执行重试 |
approved | 审批通过,等待执行或回执 | 展示批准时间和参数摘要 |
processing | 已交给执行层,尚无最终结果 | 等待回执,不能宣称完成 |
succeeded | 有可核验成功回执 | 引用 operation、receipt、trace_id |
rejected | 人工驳回 | 展示原因,修改意图后生成新键 |
expired | 审批或会话超时 | 重新发起,不复用旧 code/token |
frozen | 管理员冻结写能力或操作 | 停止重试,联系管理员 |
unknown | 上游结果不确定 | 转异常对账,禁止重复副作用 |
微信授权异常
WECHAT_CONTEXT_REQUIRED、WECHAT_EXCHANGE_EXPIRED:清理本次授权状态,从入口重新登录。
权限与审批异常
ADMIN_AUTHORIZATION_REQUIRED 使用正确管理员身份;SELF_APPROVAL_FORBIDDEN 更换独立审批人。
幂等冲突
OPERATION_IDEMPOTENCY_CONFLICT 表示参数变化;检查业务字段并生成新幂等键。
回调与会话异常
AUTH_REVOKED 或 *_SIGNATURE_INVALID 时停止重试,清理会话或检查原始请求体、密钥和时钟。
协同项目边界
五个项目通过统一身份、租户引用、操作编号和事件证据协同。商事代理是现实商业适配层,不是绕过其他系统的后门。
| 系统 | 职责 | 交接重点 |
|---|---|---|
OPC 大模型(opcdamoxing) | Hermes Agent、多智能体和 FastGPT 智识库 | 只生成结构化提案,通过受控 Harness/MCP 能力调用 |
AI-OPC 社区(aiopcshequ) | 统一 IAM、用户、租户和项目上下文 | 提供 subject_id、角色、租户引用和微信授权上下文 |
OPC Office(bangong) | 任务、文档、会议、审批和通知 | Office 审批事件必须签名并带幂等键 |
| Naive/持牌服务商 | 工商、银行、支付、财税和通信执行 | 签名请求、Webhook 验签、防重放、轮询对账 |
智能体不得绕过商事代理直接写 Naive 或数据库。跨项目调用必须保留 trace_id、operation_id、租户引用和来源系统,便于回放和审计。
安全红线与学习验收
不可自治
禁止 AI 完全自治设立企业、开户、付款、报税、开票或发送正式商务承诺。
身份不可伪造
禁止客户端覆盖 tenant_id、approver_id、actor_id;角色只能来自 IAM 和服务端会话。
数据不可越界
禁止跨租户读取或猜测资源 ID;不得公开 token、签名密钥、完整账户和个人信息。
事实不可改写
禁止把 mock、未签合同、未完成 UAT 或未知回执展示为生产成功。
学习与验收路径
- 理解“提案—校验—审批—执行—沉淀”的责任链。
- 在三个入口用微信/IAM 登录,确认同一
subject_id和租户。 - 只读查看能力和状态,练习区分
pending_approval、processing、unknown、succeeded。 - 隔离租户中用固定幂等键重复提交,确认不重复建单。
- 用两个账号演练审批分离、过期、驳回、冻结和释放。
- 沙箱验证签名回调、Webhook 重放、Outbox redrive 和审计导出。
- 通过生产预检、恢复演练、合同和 UAT 后再申请开放真实写能力。
带走一份离线手册
Markdown 适合二次编辑,TXT 适合终端和知识库导入。