第02章:架构设计——从需求表到技术方案

第02章:架构设计——从需求表到技术方案


2.1 需求表驱动:避免"技术炫技,业务冷场"

大多数AI项目的失败,不是技术不行,而是技术解决的是不存在的问题

需求表驱动的核心思想很简单:业务方必须用结构化表格的方式输入他们的真实需求,技术方才生成对应的技术方案。这个环节做扎实,后面少走三个月弯路。

标准需求表模板

每个项目启动前,业务方必须填写这张表:

【项目基本信息】
项目名称:________________
核心目标(一个,不要超过三个):________________
KPI指标(如何衡量成功):________________

【数据来源】
现有数据:□ Excel  □ 已有系统  □ 无,需从零建
数据类型:□ 顾客档案  □ 知识文档  □ 订单记录  □ 客服记录  □ 其他
数据量级:□ <1000条  □ 1000~10万  □ 10万~100万  □ >100万

【长期记忆对象】(哪些实体需要被AI记住)
□ 客户(字段:姓名/肤质/消费记录/回访偏好...)
□ 产品/项目(字段:名称/分类/禁忌症/价格区间...)
□ 员工(字段:岗位/权限/所属门店...)
□ 其他:________________

【权限范围】
谁可以看:________________
谁可以改:________________
谁可以删:________________

【模型层要求】
是否需要本地模型:□ 是  □ 否
对话风格:□ 正式专业  □ 亲切随和  □ 幽默活泼
是否有敏感词过滤需求:□ 是  □ 否

【交付期望】
预算范围:________________
可接受的学习曲线:□ 低(开箱即用)  □ 中(需配置)  □ 高(需开发)

这张表的价值在于:强制业务方把模糊的需求精确化。“我想要一个智能客服"和"我想让员工在飞书里用自然语言查询顾客档案,店长能看到所有数据,员工只能看自己的客户”,技术方案完全不同。


2.2 架构分层设计

拿到需求表之后,技术架构分四层设计:

第一层:入口层(客户端)

决定用户/员工怎么和系统对话:

入口方式 适用场景 接入难度
飞书机器人 连锁门店员工内部协作 ⭐⭐(官方Skill支持)
Web界面 内部管理后台 ⭐⭐⭐(FastAPI+Streamlit)
API 第三方系统集成 ⭐⭐(REST API)
微信/企微 客户服务 ⭐⭐⭐⭐(需企业资质)

推荐起点:飞书机器人 + Web管理后台组合,覆盖内部员工协作和客户触达两个场景。

第二层:网关/大脑层(OpenClaw)

这是系统的核心枢纽,负责:

  • Agent调度:根据用户输入,决定调用哪个Skill/工具
  • Text-to-SQL:把自然语言翻译成SQL查询
  • RAG检索:从向量数据库中检索相关知识
  • 权限校验:判断当前用户是否有权执行这个操作
  • 回复生成:结合知识库+上下文生成最终回复
用户消息
  ↓
OpenClaw 鉴权(是谁,什么权限)
  ↓
意图识别(查客户?查知识?新增记录?)
  ↓
工具调用(PG查库 / ChromaDB检索 / Ollama生成)
  ↓
结果整合 + 回复生成
  ↓
返回结果并持久化(写回数据库)

第三层:数据存储层

PostgreSQL + pgvector(推荐)或 ChromaDB

数据类型 存储方案 说明
顾客档案 PostgreSQL 结构化,强类型查询
订单/咨询记录 PostgreSQL 带时间戳的时序数据
美业知识 PostgreSQL + pgvector/ChromaDB 结构化内容+向量embedding
客户会话历史 PostgreSQL + 向量 对话历史也需要语义检索
定时任务配置 PostgreSQL remind_tasks 表

第四层:模型层(本地推理)

模型类型 推荐方案 用途
主对话模型 Qwen-7B/14B (Int4) via Ollama 生成自然语言回复
Embedding bge-small-zh 生成文本向量
Rerank(可选) bge-reranker-base 提升检索排序准确率

2.3 核心数据模型

顾客档案(customers)

CREATE TABLE customers (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100) NOT NULL,        -- 客户姓名
    age INTEGER,                        -- 年龄
    gender VARCHAR(10),                 -- 性别
    skin_type VARCHAR(50),              -- 肤质:干性/油性/混合/敏感肌/中性
    allergy TEXT,                       -- 过敏史(重要!高风险字段)
    risk_level VARCHAR(20),             -- 风险等级:高/中/低
    phone VARCHAR(30),                  -- 联系电话
    create_user VARCHAR(100),           -- 接待员工(权限归属)
    store_id INTEGER,                  -- 所属门店
    created_at TIMESTAMP DEFAULT NOW(),
    updated_at TIMESTAMP DEFAULT NOW()
);

对话记录(dialogue_records)

CREATE TABLE dialogue_records (
    id SERIAL PRIMARY KEY,
    customer_id INTEGER REFERENCES customers(id),  -- 关联客户
    user_input TEXT NOT NULL,             -- 客户原始输入
    ai_reply TEXT,                        -- AI回复
    intent VARCHAR(50),                   -- 意图:咨询/预约/询价/风险/闲聊
    store_id INTEGER,                     -- 所属门店
    created_at TIMESTAMP DEFAULT NOW()
);

美业知识库(medical_knowledge)

CREATE TABLE medical_knowledge (
    id SERIAL PRIMARY KEY,
    title VARCHAR(200) NOT NULL,         -- 知识标题
    content TEXT NOT NULL,               -- 知识内容
    category VARCHAR(50),                 -- 分类:眼鼻/抗衰/祛斑/轮廓
    tags TEXT,                           -- 标签:光子/敏感肌/术后护理
    forbidden BOOLEAN DEFAULT FALSE,      -- 是否有禁忌提示
    embedding vector(1536),              -- pgvector模式:向量存储
    created_at TIMESTAMP DEFAULT NOW()
);

定时回访任务(remind_tasks)

CREATE TABLE remind_tasks (
    id SERIAL PRIMARY KEY,
    customer_id INTEGER REFERENCES customers(id),
    content TEXT,                        -- 回访内容
    remind_time TIMESTAMP,               -- 计划回访时间
    is_sent BOOLEAN DEFAULT FALSE,       -- 是否已发送
    target_chat_id VARCHAR(100),         -- 飞书Chat ID
    created_at TIMESTAMP DEFAULT NOW()
);

2.4 权限体系设计

多门店场景下的权限体系,核心是三层角色

角色 权限范围
总部管理员 所有门店、所有客户、所有数据、配置权限
店长 本门店所有数据,可新增员工,可看本店统计
员工 仅自己的顾客档案,仅新增和查询,不可删除

飞书身份映射:飞书用户在首次对话时,自动根据飞书部门/角色映射到系统内部角色,无需单独维护一套账号体系。

飞书用户 → 飞书部门/角色 → 系统角色(店长/员工/只读)
                    ↓
         权限规则引擎判断操作是否合法

2.5 需求到技术方案的转换流程

业务方填写需求表
    ↓
技术负责人拆解每个需求单元
    ↓
每个单元映射到具体技术实现
    ↓
输出:表结构SQL + API列表 + 提示词模板 + 交付里程碑
    ↓
业务方确认
    ↓
进入开发阶段

落地动作

  1. 下载或自制需求表模板,让业务方填写一个真实场景的需求
  2. 根据需求表,手绘一个简单的四层架构图(入口/大脑/存储/模型)
  3. 编写核心表结构的CREATE TABLE语句
  4. 确定飞书机器人的接入方式(官方Skill vs 自行开发)