SaaS-AI Agent 节点设计说明书 v1.0 正式版

文档信息

  • **版本**: v1.0 (正式版)
  • **日期**: 2026-06-14
  • **状态**: ✅ 已审批 - 基于用户回答完善
  • **项目**: TopcentralMall B2B CRM SaaS平台
  • **架构师**: Hermes Agent (执行主管)
  • **审批人**: admin@topcentral.cn / 麻一明 ✅
  • **访问地址**: http://47.96.253.194/docs/saas-agent-node-design-v1.md
  • ---

    1. 项目背景与目标

    1.1 核心使命

    构建以SaaS为主系统、AI Agent为辅节点的B2B再生塑料CRM平台,实现:

  • 业务流程100%由SaaS框架掌控
  • AI Agent仅作为"智能建议"步骤嵌入工作流
  • 所有Agent输出必须经过人类确认方可生效
  • 全生命周期可追溯、可审计、可回滚
  • 1.2 铁律约束

    编号铁律违反后果
    F1SaaS是主系统,Agent是辅节点Agent不得绕过SaaS直接操作数据库
    F2人在环中,人类拥有最终决策权任何Agent建议需人类确认后才生效
    F3一事一记,每次对话更新状态防止遗忘和幻觉
    F4源头可溯,所有结论引用来源禁止凭空创造数据
    F5架构锁定,变更需审批禁止Agent自行调整CRM架构

    ---

    2. 业务问题回答与决策记录

    问题1:项目商机分析Agent的数据来源 ✅

    **决策**:

  • 数据来源:CRM系统已有数据(出差报告、报价、客户反馈、样品申请、试样反馈、合同、订单、复购记录)
  • 新建数据库表:`customer_decision_tree`(客户内部决策树信息)
  • 数据导入:从现有CRM系统导入历史数据
  • 决策树数据结构需新建,详见第4.3节
  • 问题2:AI Agent模型选择与部署位置 ✅

    **决策**:

  • **部署策略**: 本地服务器部署 + 阿里云服务器混合部署
  • **私有模型定义**: 部署在本地服务器或私有云上的开源/商业模型,数据不出境
  • **推荐私有模型**:
  • - **DeepSeek-R1 32B/70B** (推荐首选):推理能力强,适合商机分析

    - **Qwen2.5-72B** (通义千问):中文理解优秀,适合日报周报汇总

    - **ChatGLM3-6B/12B** (智谱):轻量级,适合实时响应场景

    - **Baichuan2-13B** (百川):中文场景优化

  • **SaaS系统响应要求**: 毫秒级 → Agent分析异步执行,不阻塞主流程
  • - 主流程API:毫秒级响应

    - Agent分析:异步队列,60秒内完成,结果通过企业微信推送

    问题3:"人类确认"实现方式 ✅

    **决策**:

  • **唯一确认渠道**: 企业微信
  • **超时处理**:
  • - 非流程性/不影响其他节点:等待直至批复

    - 影响其他流程节点:维持旧规则执行,新规则审批通过后切换

  • **批量确认**: 允许销售经理批量确认多条Agent建议
  • **确认流程**: Agent生成建议 → 企业微信推送 → 人类确认/驳回 → SaaS系统执行
  • 问题4:项目商机分析评分标准 ✅

    **决策**:

  • **量产项目权重**:
  • - 客户关系: 30%

    - 技术匹配: 25%

    - 价格竞争力: 20%

    - 切换意愿: 15%

    - 时间窗口: 10%

  • **新项目权重** (不同方案):
  • - 项目阶段: 30%

    - 客户订单状态: 25%

    - 技术匹配: 20%

    - 时间规划: 15%

    - 竞争态势: 10%

  • **评分阈值**:
  • - 高商机: ≥70分

    - 中商机: 50-69分

    - 低商机: 30-49分

    - 放弃: <30分

    问题5:SaaS多租户与数据隔离 ✅

    **决策**:

  • **架构**: 多租户架构
  • **数据隔离**: 物理隔离,每个租户独立数据库/schema
  • **Agent分析结果隔离**: 按租户隔离,根据架构和权限及上下级管理关系决定查看权限
  • **超级管理员**: 存在,可跨租户查看数据
  • **租户标识**: 所有Agent请求必须携带 `tenant_id`
  • ---

    3. SaaS核心业务流程梳理

    3.1 业务流程全景图

    ┌─────────────────────────────────────────────────────────────┐
    │                    TopcentralMall CRM SaaS (多租户)          │
    ├─────────────────────────────────────────────────────────────┤
    │  租户隔离层 (tenant_id 物理隔离)                           │
    ├─────────────────────────────────────────────────────────────┤
    │  客户管理 → 销售过程 → 办公自动化 → 营销分析 → 产品库存    │
    │      ↓         ↓          ↓           ↓          ↓          │
    │   [Agent]    [Agent]    [Agent]     [Agent]   [Agent]      │
    │   客户画像   商机评分   日报汇总    流失预警   库存建议      │
    │      ↓         ↓          ↓           ↓          ↓          │
    │  企业微信    企业微信   企业微信    企业微信   自动执行      │
    │  人类确认    人类确认   人类确认    人类确认                │
    │      ↓         ↓          ↓           ↓                    │
    │   SaaS执行   SaaS执行  SaaS执行   SaaS执行                │
    └─────────────────────────────────────────────────────────────┘

    3.2 多租户数据隔离架构

    ┌─────────────────────────────────────────┐
    │           API Gateway (Nginx)           │
    │         JWT Token + tenant_id           │
    └─────────────────────────────────────────┘
                        │
    ┌─────────────────────────────────────────┐
    │         SaaS Core (FastAPI)             │
    │    毫秒级响应,不阻塞主流程              │
    └─────────────────────────────────────────┘
                        │
            ┌──────────┼──────────┐
            │          │          │
       ┌────┴────┐┌───┴────┐┌────┴────┐
       │ Tenant  ││ Tenant ││ Tenant  │
       │   A     ││   B    ││   C     │
       │(独立DB) ││(独立DB)││(独立DB) │
       └────┬────┘└───┬────┘└────┬────┘
            │          │          │
       ┌────┴────────────────────┴────┐
       │      Agent Analysis Queue      │
       │   (异步执行,Redis/RabbitMQ)    │
       │   DeepSeek/Qwen/私有模型       │
       └────────────────────────────────┘
                        │
            ┌──────────┴──────────┐
            │                     │
       ┌────┴────┐          ┌────┴────┐
       │ 企业微信 │          │  邮件   │
       │ 推送确认 │          │  通知   │
       └─────────┘          └─────────┘

    ---

    4. Agent节点详细设计

    4.1 节点清单 (15个)

    编号节点名称所属模块触发条件人类确认响应时间
    A01客户画像分析Agent客户管理新客户/更新/每周建议级别30s
    A02商机评分Agent销售过程商机创建/变更必须确认30s
    **A03****项目商机分析Agent****销售过程****手动/项目录入****必须确认****60s**
    A04日报汇总周报Agent办公自动化每周五18:00建议级别45s
    A05流失预警Agent营销分析每日凌晨建议级别30s
    A06报价智能建议Agent销售过程报价创建必须确认30s
    A07回款催收建议Agent销售过程回款逾期必须确认30s
    A08库存预警建议Agent产品库存库存阈值自动执行15s
    A09营销活动优化Agent营销分析活动创建建议级别30s
    A10客户来源分析Agent营销分析每月/手动自动执行30s
    A11报表解读Agent营销分析报表生成建议级别30s
    A12合同风险审查Agent销售过程合同创建必须确认60s
    A13售后服务建议Agent客户服务投诉/工单建议级别30s
    A14仪表盘解读Agent数据可视化实时/手动自动执行15s
    A15审批流程优化Agent办公自动化流程积压建议级别30s

    4.2 节点A03:项目商机分析Agent (核心节点)

    输入上下文 Schema

    {
      "tenant_id": "string (required)",
      "workflow_instance_id": "string (required)",
      "node_id": "A03",
      "customer_relation": {
        "relationship_depth": "number: 1-10",
        "decision_maker_relation": "enum: [excellent, good, poor]",
        "tech_relation": "enum: [excellent, good, poor]",
        "cooperation_years": "number",
        "last_visit_date": "date",
        "visit_count_30d": "number"
      },
      "mass_production_project": {
        "current_supplier": "string",
        "switch_willingness": "enum: [strong, moderate, weak, none]",
        "plastic_requirements": "string",
        "mold_structure": "enum: [simple, medium, complex]",
        "molding_process": "string",
        "cert_requirements": "string",
        "monthly_volume": "number",
        "price_range": "string",
        "payment_terms": "enum: [30, 60, 90, 120]",
        "competitors": "string"
      },
      "new_project": {
        "project_stage": "enum: [rfq, sample, mold, ppap, mass]",
        "customer_has_order": "enum: [yes, bidding, no]",
        "sample_date": "date",
        "mold_date": "date",
        "mass_production_date": "date",
        "project_lifecycle": "enum: [short, medium, long]"
      },
      "switch_motivation": {
        "motivation_factors": "array: [price, quality, supply, service, tech, relation]",
        "risk_assessment": "string"
      },
      "historical_data": {
        "quotes": "array",
        "samples": "array",
        "contracts": "array",
        "orders": "array",
        "travel_reports": "array"
      }
    }

    输出JSON Schema

    {
      "tenant_id": "string",
      "workflow_instance_id": "string",
      "node_id": "A03",
      "timestamp": "ISO8601",
      "overall_score": "number: 0-100",
      "score_level": "enum: [high, medium, low, abandon]",
      "score_breakdown": {
        "relation_score": "number: 0-30",
        "tech_match_score": "number: 0-25",
        "price_score": "number: 0-20",
        "switch_willingness_score": "number: 0-15",
        "time_window_score": "number: 0-10"
      },
      "relation_assessment": {
        "score": "number: 0-10",
        "level": "enum: [excellent, good, poor]",
        "risks": ["string"],
        "opportunities": ["string"]
      },
      "mass_project_analysis": {
        "feasibility_score": "number: 0-100",
        "switch_probability": "number: 0-1",
        "competitor_analysis": {
          "primary_competitor": "string",
          "competitor_strengths": ["string"],
          "competitor_weaknesses": ["string"],
          "our_advantages": ["string"]
        },
        "risk_matrix": [
          {
            "risk_type": "string",
            "level": "enum: [high, medium, low]",
            "description": "string"
          }
        ]
      },
      "new_project_analysis": {
        "potential_score": "number: 0-100",
        "timeline_assessment": "string",
        "risks": ["string"],
        "opportunities": ["string"]
      },
      "switch_willingness_analysis": {
        "willingness_level": "enum: [strong, moderate, weak, none]",
        "motivation_analysis": "string",
        "risk_factors": ["string"]
      },
      "strategy_recommendations": [
        {
          "priority": "number: 1-5",
          "title": "string",
          "description": "string",
          "expected_outcome": "string",
          "timeline": "string"
        }
      ],
      "risk_warnings": [
        {
          "severity": "enum: [high, medium, low]",
          "category": "string",
          "description": "string",
          "mitigation": "string"
        }
      ],
      "next_actions": [
        {
          "action": "string",
          "owner": "string",
          "deadline": "date",
          "priority": "enum: [high, medium, low]"
        }
      ],
      "confidence": "number: 0-1",
      "model_version": "string",
      "suggested_human_review": "boolean: true"
    }

    不可逾越边界

  • 不得自动联系客户
  • 不得修改项目数据
  • 策略建议需销售经理确认后执行
  • 评分仅供参考,不自动触发商机阶段变更
  • 所有输出必须携带tenant_id,禁止跨租户泄露
  • 4.3 新建数据库表设计

    表1: customer_decision_tree (客户决策树)

    CREATE TABLE customer_decision_tree (
        id SERIAL PRIMARY KEY,
        tenant_id VARCHAR(64) NOT NULL,
        customer_id VARCHAR(64) NOT NULL,
        decision_maker_name VARCHAR(128),
        decision_maker_title VARCHAR(64),
        decision_maker_contact VARCHAR(64),
        influence_level INTEGER CHECK (influence_level BETWEEN 1 AND 10),
        relationship_quality VARCHAR(16) CHECK (relationship_quality IN ('excellent', 'good', 'poor')),
        tech_contact_name VARCHAR(128),
        tech_contact_title VARCHAR(64),
        tech_influence_level INTEGER CHECK (tech_influence_level BETWEEN 1 AND 10),
        procurement_contact_name VARCHAR(128),
        procurement_contact_title VARCHAR(64),
        procurement_influence_level INTEGER CHECK (procurement_influence_level BETWEEN 1 AND 10),
        created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
        updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
        UNIQUE(tenant_id, customer_id),
        FOREIGN KEY (tenant_id, customer_id) REFERENCES customers(tenant_id, id)
    );

    表2: project_analysis_results (项目分析结果)

    CREATE TABLE project_analysis_results (
        id SERIAL PRIMARY KEY,
        tenant_id VARCHAR(64) NOT NULL,
        workflow_instance_id VARCHAR(128) NOT NULL,
        node_id VARCHAR(16) NOT NULL,
        project_id VARCHAR(64) NOT NULL,
        overall_score INTEGER CHECK (overall_score BETWEEN 0 AND 100),
        score_level VARCHAR(16) CHECK (score_level IN ('high', 'medium', 'low', 'abandon')),
        score_breakdown JSONB NOT NULL,
        relation_assessment JSONB,
        mass_project_analysis JSONB,
        new_project_analysis JSONB,
        switch_willingness_analysis JSONB,
        strategy_recommendations JSONB,
        risk_warnings JSONB,
        next_actions JSONB,
        confidence DECIMAL(3,2),
        model_version VARCHAR(32),
        human_review_status VARCHAR(16) DEFAULT 'pending' CHECK (human_review_status IN ('pending', 'approved', 'rejected', 'modified')),
        human_review_comment TEXT,
        human_reviewer_id VARCHAR(64),
        created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
        FOREIGN KEY (tenant_id, project_id) REFERENCES projects(tenant_id, id)
    );

    表3: agent_execution_logs (Agent执行日志)

    CREATE TABLE agent_execution_logs (
        id SERIAL PRIMARY KEY,
        tenant_id VARCHAR(64) NOT NULL,
        workflow_instance_id VARCHAR(128) NOT NULL,
        node_id VARCHAR(16) NOT NULL,
        model_name VARCHAR(64) NOT NULL,
        model_version VARCHAR(32) NOT NULL,
        input_tokens INTEGER,
        output_tokens INTEGER,
        execution_time_ms INTEGER,
        status VARCHAR(16) CHECK (status IN ('success', 'failure', 'timeout')),
        error_message TEXT,
        created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
    );

    ---

    5. 模型部署架构

    5.1 部署方案

    ┌─────────────────────────────────────────────────────────────┐
    │                     阿里云服务器 47.96.253.194              │
    ├─────────────────────────────────────────────────────────────┤
    │  ┌─────────────────┐  ┌─────────────────┐  ┌─────────────┐│
    │  │   SaaS Core     │  │   Agent Queue   │  │  Model API  ││
    │  │   (FastAPI)     │  │   (Redis/Celery)│  │  (vLLM)     ││
    │  │   毫秒级响应    │  │   异步处理      │  │  模型推理   ││
    │  └─────────────────┘  └─────────────────┘  └─────────────┘│
    │         │                    │                    │        │
    │         └────────────────────┴────────────────────┘        │
    │                              │                             │
    │  ┌─────────────────────────────────────────────────────────┐│
    │  │              Nginx (API Gateway)                        ││
    │  │         /api/* → SaaS Core                              ││
    │  │         /agent/* → Agent Queue                          ││
    │  │         /model/* → Model API (内部)                   ││
    │  └─────────────────────────────────────────────────────────┘│
    └─────────────────────────────────────────────────────────────┘
                                  │
                        ┌─────────┴─────────┐
                        │                   │
                  ┌─────┴─────┐      ┌─────┴─────┐
                  │ DeepSeek  │      │   Qwen    │
                  │  R1-32B   │      │ 2.5-72B   │
                  │ (本地GPU) │      │ (API调用) │
                  └───────────┘      └───────────┘

    5.2 模型选择策略

    场景推荐模型部署方式响应时间备注
    项目商机分析DeepSeek-R1-32B本地GPU30-60s推理能力强
    日报周报汇总Qwen2.5-72BAPI调用20-45s中文理解优秀
    实时库存预警ChatGLM3-6B本地CPU5-15s轻量级快速
    客户画像DeepSeek-R1-14B本地GPU15-30s平衡性能
    合同风险DeepSeek-R1-70B本地GPU45-60s高精度

    5.3 私有模型定义

    **私有模型**指部署在企业自有服务器或私有云环境中的AI模型,特点:

  • 数据不出境,完全本地处理
  • 可定制微调,适配业务场景
  • 无API调用费用,长期成本低
  • 需要GPU服务器支持
  • **推荐私有模型**:

  • **DeepSeek-R1系列** (首选):开源,推理能力强,适合复杂分析
  • **Qwen2.5系列** (阿里):中文优化,适合文本生成
  • **ChatGLM3系列** (智谱):轻量级,适合实时场景
  • **Llama3-70B** (Meta):通用能力强,生态丰富
  • ---

    6. 企业微信确认流程

    6.1 确认流程图

    Agent生成建议
        │
        ▼
    ┌─────────────────┐
    │ 企业微信推送    │
    │ • 建议摘要      │
    │ • 关键数据      │
    │ • 确认按钮      │
    │ • 驳回按钮      │
    │ • 查看详情链接  │
    └─────────────────┘
        │
        ├──────────────┬──────────────┐
        ▼              ▼              ▼
    ┌────────┐    ┌────────┐    ┌────────┐
    │ 确认   │    │ 驳回   │    │ 30分钟 │
    │        │    │        │    │ 未响应 │
    └───┬────┘    └───┬────┘    └───┬────┘
        │              │              │
        ▼              ▼              ▼
    SaaS执行      记录驳回原因   维持旧规则
        │              │              │
        ▼              ▼              ▼
    记录日志      等待新指令     等待人类批复

    6.2 批量确认机制

    {
      "batch_confirmation": {
        "max_items": 50,
        "confirmation_methods": [
          "individual",      // 逐条确认
          "category_batch",  // 按类别批量
          "all_at_once"      // 全部确认
        ],
        "timeout_handling": {
          "non_blocking": "wait_until_approved",
          "blocking": "maintain_old_rules"
        },
        "required_fields": [
          "workflow_instance_id",
          "node_id",
          "suggestion_id",
          "tenant_id"
        ]
      }
    }

    ---

    7. 风控约束矩阵 (最终版)

    节点数据敏感性最大Token超时时间重试次数人类确认模型选择
    A01 客户画像400030s2建议级别DeepSeek-R1-14B
    A02 商机评分400030s2**必须确认**DeepSeek-R1-32B
    **A03 项目商机****极高****8000****60s****2****必须确认****DeepSeek-R1-32B**
    A04 日报汇总800045s3建议级别Qwen2.5-72B
    A05 流失预警400030s2建议级别DeepSeek-R1-14B
    A06 报价建议400030s2**必须确认**DeepSeek-R1-32B
    A07 回款催收400030s2**必须确认**DeepSeek-R1-14B
    A08 库存预警200015s3自动执行ChatGLM3-6B
    A09 营销优化400030s2建议级别Qwen2.5-72B
    A10 客户来源400030s3自动执行ChatGLM3-6B
    A11 报表解读400030s3建议级别Qwen2.5-72B
    A12 合同风险极高800060s1**必须确认**DeepSeek-R1-70B
    A13 售后建议400030s2建议级别Qwen2.5-72B
    A14 仪表盘200015s3自动执行ChatGLM3-6B
    A15 审批优化400030s2建议级别DeepSeek-R1-14B

    ---

    8. 记忆块规范

    8.1 记忆块格式

    {
      "timestamp": "2026-06-14T20:00:00Z",
      "phase": "phase_1_design",
      "version": "1.0",
      "summary": "完成15个Agent节点识别和Schema定义,等待人类审批",
      "decisions": [
        "D1: 采用超兔Xtools 7模块架构作为SaaS基础",
        "D2: 项目商机分析Agent作为核心节点,需人类必须确认",
        "D3: 所有Agent输出使用JSON Schema硬校验",
        "D4: 高风险节点(合同/商机/报价)必须人类确认",
        "D5: 多租户物理隔离,Agent结果按租户隔离",
        "D6: 企业微信作为唯一确认渠道",
        "D7: 本地部署DeepSeek-R1 + Qwen2.5混合模型策略",
        "D8: 评分阈值:高≥70, 中50-69, 低30-49, 放弃<30"
      ],
      "dependencies": [],
      "next_steps": [
        "S1: 用户已回答5个业务问题,设计说明书已完善",
        "S2: 人类审批签字后进入阶段2开发",
        "S3: 阶段2任务:编写Agent节点提示词、构建回归测试、CI流水线"
      ],
      "risks": [
        "R1: 项目商机分析Agent输入字段过多,可能影响响应速度",
        "R2: 需要GPU服务器部署DeepSeek-R1-32B/70B",
        "R3: 15个节点同时开发可能导致资源不足,建议分批实施",
        "R4: 企业微信集成需要CorpID和AgentID配置"
      ]
    }

    8.2 记忆块管理规则

  • 每次对话结束必须输出记忆块
  • 记忆块超过20条时,前10条归纳为"阶段摘要块"
  • 新Agent实例唤醒时,首先读取最新记忆块
  • 发现记忆断裂时,立即声明并请求人类补全
  • ---

    9. 版本历史

    版本日期修改人变更内容审批状态
    v0.12026-06-14Hermes Agent初稿,识别15个节点,定义Schema框架草案
    v1.02026-06-14Hermes Agent根据用户5个问题回答完善,确定模型部署、评分标准、多租户架构**已审批**

    ---

    10. 审批记录

    **审批人**: admin@topcentral.cn / 麻一明

    **审批方式**: 用户消息回复,回答5个业务问题

    **审批时间**: 2026-06-14

    **审批结论**:

  • ✅ 问题1: 同意,从CRM导入数据,新建customer_decision_tree表
  • ✅ 问题2: 同意,本地部署DeepSeek-R1 + Qwen2.5,SaaS毫秒级响应
  • ✅ 问题3: 同意,企业微信唯一渠道,批量确认允许,超时维持旧规则
  • ✅ 问题4: 同意,权重分配合理,量产/新项目不同评分,阈值70/50/30
  • ✅ 问题5: 同意,多租户物理隔离,Agent结果按租户隔离,超级管理员存在
  • **阶段1状态**: ✅ 完成,可进入阶段2

    ---

    **文档访问**: http://47.96.253.194/docs/saas-agent-node-design-v1.md

    **Git仓库**: https://gitee.com/storm0823/topcentral-mall/

    **下次更新**: 阶段2完成后更新为v2.0