米塞斯行为引擎 (Mises Behavior Engine) 产品需求文档

版本:2.0
更新日期:2026-01-19


📋 版本更新记录

版本 日期 更新内容
2.0 2026-01-19 新增:权威性评估、TITANS模型GPU训练、批量上传、专家服务重构
1.1 2026-01-15 新增:统一Token管理、任务队列、动态专家系统
1.0 2026-01-03 初始版本

目录

  1. 产品概述
  2. 功能模块设计
  3. 数据模型设计
  4. 技术实现方案
  5. TITANS+MIRAS 架构与模型训练
  6. 架构模式:纯MCP(有状态)
  7. 序列流转控制
  8. 小智MCP接入流程
  9. 质量评判标准
  10. 用户管理与计费系统
  11. 知识库与专家系统 🆕
  12. 开发里程碑
  13. 关键文件清单

1. 产品概述

1.1 产品定位

米塞斯行为引擎(MBE)是一个基于米塞斯人类行为学(Praxeology)的AI决策分析系统,将"有目的行为理论"转化为可操作的AI工具,帮助个体做出更理性的主观决策。

1.2 核心理念

  • 行为序列:不舒适 → 愿望 → 路径 → 评估 → 行动 → 循环
  • 主观价值论:无客观最佳,只提供结构化选项和模拟
  • 核心要素:机会成本、时间偏好、稀缺性、不确定性

1.3 技术架构

  • 核心架构:TITANS + MIRAS
  • 短期记忆:Transformer Attention处理当前输入
  • 长期记忆:深层神经网络存储用户历史模式
  • 惊喜机制:检测偏好变化,选择性更新记忆
graph TB
    subgraph external [外部接入层]
        XiaoZhi[小智 XIAOZHI.ME]
        OtherApps[其他MCP客户端]
    end
    
    subgraph mcp [MCP服务层]
        MCPServer[MCP Server]
        ToolRegistry[工具注册中心]
    end
    
    subgraph core [核心引擎层]
        UneaseDetector[不舒适挖掘器]
        DesireAnalyzer[愿望分析器]
        PathGenerator[路径生成器]
        FeasibilityAssessor[可行性评估器]
        ActionTracker[行动跟踪器]
    end
    
    subgraph memory [记忆系统层]
        ShortTermMem[短期记忆 Attention]
        LongTermMem[长期记忆 Neural]
        SurpriseEngine[惊喜检测引擎]
    end
    
    subgraph storage [存储层]
        PostgreSQL[(PostgreSQL)]
        VectorDB[(向量数据库)]
    end
    
    subgraph llm [LLM抽象层]
        LLMAdapter[LLM适配器]
        DeepSeek[DeepSeek]
        Qwen[Qwen]
        DoubleBao[豆包]
    end
    
    XiaoZhi --> MCPServer
    OtherApps --> MCPServer
    MCPServer --> ToolRegistry
    ToolRegistry --> UneaseDetector
    ToolRegistry --> DesireAnalyzer
    ToolRegistry --> PathGenerator
    ToolRegistry --> FeasibilityAssessor
    ToolRegistry --> ActionTracker
    
    UneaseDetector --> ShortTermMem
    DesireAnalyzer --> ShortTermMem
    PathGenerator --> LongTermMem
    FeasibilityAssessor --> LongTermMem
    ActionTracker --> SurpriseEngine
    
    ShortTermMem --> PostgreSQL
    LongTermMem --> VectorDB
    SurpriseEngine --> LongTermMem
    
    UneaseDetector --> LLMAdapter
    DesireAnalyzer --> LLMAdapter
    PathGenerator --> LLMAdapter
    FeasibilityAssessor --> LLMAdapter
    
    LLMAdapter --> DeepSeek
    LLMAdapter --> Qwen
    LLMAdapter --> DoubleBao

2. 功能模块设计

2.1 核心引擎模块

模块 功能
不舒适挖掘器 深度对话挖掘表面和隐藏不舒适
愿望分析器 生成愿望层次,分析冲突与优先级
路径生成器 变成用户生成主观可行方案
可行性评估器 用户视角评估"我能做到吗"
行动跟踪器 记录行动结果,更新认知

2.2 核心机制:"变成用户"生成主观可行方案

graph TB
    subgraph understand [理解阶段 - 懂你]
        Profile[用户画像]
        Memory[历史记忆]
        Insight[深层洞察]
    end
    
    subgraph become [变身阶段 - 变成你]
        Persona[构建用户人格模型]
        Constraints[主观约束建模]
        Perspective[视角转换]
    end
    
    subgraph generate [生成阶段 - 替你想]
        Imagine[想象可能路径]
        Filter[用你的标准筛选]
        Feasibility[你觉得能做到吗]
    end
    
    subgraph validate [验证阶段 - 让你确认]
        Present[呈现方案]
        UserFeel[你的感受]
        Adjust[调整优化]
    end
    
    understand --> become --> generate --> validate

第一步:构建用户人格模型(Persona)

def build_user_persona(user_id):
    """
    用用户的所有信息构建一个"虚拟的他"
    """
    return {
        # 我是谁
        "identity": {
            "age_group": "middle",
            "roles": ["父亲", "经理", "儿子"],
            "career": "金融行业15年"
        },
        
        # 我怎么看世界
        "worldview": {
            "time_preference": 0.3,  # 偏长期
            "risk_tolerance": 0.4,   # 中等保守
            "core_values": ["家庭稳定", "职业成就"]
        },
        
        # 我的能力边界(主观认知)
        "perceived_capabilities": {
            "strengths": ["逻辑分析", "人脉资源"],
            "weaknesses": ["表达情感", "接受不确定"],
            "fears": ["失去稳定收入", "家人失望"]
        },
        
        # 我的历史模式
        "patterns": {
            "preferred_solutions": "渐进式,小步试错",
            "avoided_solutions": "激进变革,破釜沉舟",
            "past_successes": ["内部调岗", "谈判加薪"],
            "past_failures": ["创业尝试", "激进投资"]
        }
    }

第二步:主观约束建模

graph LR
    subgraph subjective [主观约束 - 不是客观事实]
        Time[我觉得我有多少时间]
        Money[我觉得我能承受多少损失]
        Energy[我觉得我有多少精力]
        Support[我觉得谁会支持我]
        Ability[我觉得我能学会什么]
    end
    
    subgraph fears [主观恐惧]
        F1[我怕失败后...]
        F2[我怕别人说...]
        F3[我怕万一...]
    end
    
    subjective --> Filter[方案筛选器]
    fears --> Filter

第三步:用用户的眼睛生成方案

def generate_paths_as_user(user_persona, desires):
    """
    不是生成"客观最优"方案
    而是生成"用户认为可行"的方案
    """
    
    prompt = f"""
    你现在是这个人:
        - 身份:{user_persona['identity']}
        - 价值观:{user_persona['worldview']}
        - 自我认知的能力:{user_persona['perceived_capabilities']}
        - 过去成功的方式:{user_persona['patterns']['past_successes']}
        - 过去失败的教训:{user_persona['patterns']['past_failures']}
        - 害怕的事情:{user_persona['perceived_capabilities']['fears']}
    
    他的愿望是:{desires}
    
    请用他的视角思考:
        1. 他会觉得什么路径是"我能做到的"?
        2. 什么路径会让他觉得"这不像我"?
        3. 什么是他能想象自己执行的第一步?
    
    生成3个他主观认为可行的方案,不要给他客观上最优但他做不到的方案。
    """
    
    return llm.generate(prompt)

第四步:主观可行性检验

检验维度 问题 用户视角
想象力 我能想象自己做这件事吗? 能清晰想象=可行
第一步 第一步是什么?我今天能做吗? 能说出具体第一步=可行
资源 我有/能获得需要的资源吗? 主观认为有=可行
支持 谁会支持我?谁会反对? 能应对反对=可行
风险 最坏结果我能承受吗? 主观能承受=可行
一致性 这像是我会做的事吗? 符合自我认知=可行

实现代码示例

def assess_subjective_feasibility(path, user_persona):
    """
    用用户的主观标准评估可行性
    """
    
    checks = {
        "imagination": self._can_user_imagine_doing(path, user_persona),
        "first_step": self._is_first_step_clear_and_doable(path),
        "resources": self._does_user_believe_has_resources(path, user_persona),
        "risk_tolerance": self._is_risk_within_user_tolerance(path, user_persona),
        "self_consistency": self._matches_user_self_image(path, user_persona)
    }
    
    # 综合评分(用户主观可行性)
    feasibility_score = sum(checks.values()) / len(checks)
    
    # 识别障碍
    barriers = [k for k, v in checks.items() if not v]
    
    return {
        "score": feasibility_score,
        "barriers": barriers,
        "user_might_say": self._predict_user_objection(barriers, user_persona)
    }

输出示例:个性化可行方案

{
  "user_desire": "想要更有意义的工作",
  "paths": [
    {
      "name": "内部探索",
      "description": "在现公司寻找更有意义的项目或部门",
      "why_fits_you": "你过去内部调岗成功过,这是你熟悉的方式",
      "first_step": "下周找HR聊聊内部机会",
      "feasibility": {
        "score": 0.85,
        "you_can_imagine": true,
        "matches_your_style": "渐进式,低风险"
      }
    },
    {
      "name": "副业试水",
      "description": "保持现工作,业余做有意义的事",
      "why_fits_you": "不用放弃稳定收入,符合你'家庭稳定'的核心价值",
      "first_step": "这周末花2小时想想你关心什么议题",
      "feasibility": {
        "score": 0.75,
        "you_can_imagine": true,
        "barrier": "你可能担心没时间,但可以从每周2小时开始"
      }
    },
    {
      "name": "跳槽到使命驱动公司",
      "description": "寻找有社会使命的公司",
      "why_might_hesitate": "这需要较大改变,你过去倾向渐进式",
      "first_step": "先看看市场上有哪些这类公司,不用马上行动",
      "feasibility": {
        "score": 0.5,
        "barrier": "风险较高,可能触发你'怕失去稳定收入'的担忧",
        "if_you_want_this": "可以先内部尝试,保留这个作为长期选项"
      }
    }
  ]
}

2.3 记忆系统模块

sequenceDiagram
    participant User as 用户
    participant Engine as 核心引擎
    participant STM as 短期记忆
    participant LTM as 长期记忆
    participant Surprise as 惊喜检测
    
    User->>Engine: 输入当前状态
    Engine->>STM: 处理当前输入
    Engine->>LTM: 检索历史模式
    LTM-->>Engine: 返回相关记忆
    Engine->>Surprise: 计算惊喜度
    
    alt 高惊喜度
        Surprise->>LTM: 优先更新记忆权重
    else 低惊喜度
        Surprise->>LTM: 常规衰减更新
    end
    
    Engine-->>User: 返回分析结果

2.4 MCP工具接口定义

{
  "tools": [
    {
      "name": "dig_uneasiness",
      "description": "深度挖掘用户主观不舒适,返回表面和隐藏层面",
      "parameters": {
        "user_input": "string - 用户描述的当前状态",
        "user_id": "string - 用户唯一标识"
      }
    },
    {
      "name": "analyze_desires",
      "description": "分析愿望层次、冲突和优先级排序",
      "parameters": {
        "uneasiness_result": "object - 不舒适分析结果",
        "user_id": "string"
      }
    },
    {
      "name": "generate_paths",
      "description": "生成个性化改变路径选项",
      "parameters": {
        "desires": "object - 愿望分析结果",
        "user_id": "string",
        "max_options": "integer - 最大选项数,默认5"
      }
    },
    {
      "name": "assess_feasibility",
      "description": "评估各路径的可行性、机会成本、时间偏好",
      "parameters": {
        "paths": "array - 路径选项列表",
        "user_profile": "object - 用户主观档案",
        "user_id": "string"
      }
    },
    {
      "name": "track_action",
      "description": "记录行动结果,触发记忆更新",
      "parameters": {
        "action_id": "string - 行动标识",
        "result": "string - 行动结果描述",
        "satisfaction": "integer - 满意度1-10",
        "user_id": "string"
      }
    },
    {
      "name": "update_memory",
      "description": "手动更新用户主观档案",
      "parameters": {
        "user_id": "string",
        "profile_updates": "object - 档案更新内容"
      }
    }
  ]
}

3. 数据模型设计

3.1 PostgreSQL 表结构

-- 用户画像(静态+动态)
CREATE TABLE user_profiles (
    user_id UUID PRIMARY KEY,
    
    -- 基础属性(可选填,通过对话逐步推断)
    gender VARCHAR(10),             -- 性别
    age_group VARCHAR(20),          -- 年龄段: child/teen/youth/middle/elder
    
    -- 角色标签(多角色)
    family_roles JSONB,             -- 家庭角色: ["父亲", "儿子", "丈夫"]
    career_info JSONB,              -- 职业信息: {"industry": "IT", "role": "工程师"}
    
    -- 米塞斯核心参数(通过行为推断,持续更新)
    time_preference FLOAT,          -- 时间偏好: 0=长期导向, 1=即时满足
    risk_tolerance FLOAT,           -- 风险承受: 0=保守, 1=激进
    core_values JSONB,              -- 价值排序: ["家庭", "事业", "健康", "自由"]
    
    -- 沟通偏好(影响输出风格)
    communication_style VARCHAR(20), -- direct/gentle/analytical/emotional
    
    -- 元数据
    profile_completeness FLOAT,     -- 画像完整度 0-1
    last_interaction TIMESTAMP,
    created_at TIMESTAMP,
    updated_at TIMESTAMP
);

-- 行为历史(TITANS长期记忆的结构化存储)
CREATE TABLE behavior_history (
    id SERIAL PRIMARY KEY,
    user_id UUID REFERENCES user_profiles,
    
    -- 米塞斯序列记录
    uneasiness_surface TEXT,        -- 表面不舒适
    uneasiness_hidden JSONB,        -- 深层不舒适
    desires JSONB,                  -- 愿望分析
    paths_generated JSONB,          -- 生成的路径
    chosen_path TEXT,               -- 选择的路径
    action_result TEXT,             -- 行动结果
    satisfaction INTEGER,           -- 满意度 1-10
    
    -- 上下文标签
    life_domain VARCHAR(50),        -- 领域: career/family/health/finance/relationship
    trigger_context JSONB,          -- 触发情境: {"time": "晚上", "mood": "疲惫"}
    
    -- TITANS记忆参数
    surprise_score FLOAT,           -- 惊喜度
    memory_tier VARCHAR(20),        -- short_term/long_term/archive
    
    created_at TIMESTAMP
);

-- 会话上下文
CREATE TABLE session_context (
    session_id UUID PRIMARY KEY,
    user_id UUID REFERENCES user_profiles,
    current_stage VARCHAR(50),
    context_data JSONB,
    expires_at TIMESTAMP
);

-- 用户洞察(AI推断的深层理解)
CREATE TABLE user_insights (
    id SERIAL PRIMARY KEY,
    user_id UUID REFERENCES user_profiles,
    insight_type VARCHAR(50),       -- pattern/preference/conflict/growth
    insight_content TEXT,           -- 洞察内容
    confidence FLOAT,               -- 置信度
    evidence_ids INTEGER[],         -- 支撑的behavior_history.id
    created_at TIMESTAMP
);

3.2 用户画像JSON结构

{
  "user_id": "user_001",
  "profile": {
    "gender": "male",
    "age_group": "middle",
    "family_roles": ["父亲", "丈夫", "儿子"],
    "career": {"industry": "金融", "role": "经理", "years": 15}
  },
  "mises_params": {
    "time_preference": 0.3,
    "risk_tolerance": 0.4,
    "core_values": ["家庭稳定", "职业成就", "健康"]
  },
  "insights": [
    {"type": "pattern", "content": "工作压力常在季度末爆发"},
    {"type": "conflict", "content": "事业成功 vs 陪伴家人 长期冲突"},
    {"type": "preference", "content": "倾向渐进式改变,不喜欢激进方案"}
  ],
  "communication": {
    "style": "analytical",
    "preferred_depth": "deep"
  }
}

3.3 向量数据库存储

  • 用途:存储用户历史行为的语义向量,支持相似场景检索
  • 方案:PostgreSQL + pgvector 扩展
  • 向量内容:不舒适向量、愿望向量、路径模式向量

3.4 "懂用户"核心机制

graph TB
    subgraph input [用户输入]
        CurrentInput[当前不舒适表达]
    end
    
    subgraph understand [三层理解机制]
        L1[层1: 静态画像<br/>性别/年龄/角色/职业]
        L2[层2: 动态记忆<br/>历史不舒适/愿望/行动结果]
        L3[层3: 深层洞察<br/>模式/冲突/偏好]
    end
    
    subgraph personalize [个性化处理]
        Context[情境感知]
        Retrieve[相似经历检索]
        Adapt[风格适配]
    end
    
    subgraph output [个性化输出]
        Response[懂你的回应]
    end
    
    CurrentInput --> L1 & L2 & L3
    L1 & L2 & L3 --> Context
    Context --> Retrieve --> Adapt --> Response

层1: 静态画像 - 我是谁

维度 作用 获取方式
性别 影响表达方式 对话推断/用户填写
年龄段 影响关注点 对话推断
家庭角色 理解责任压力来源 对话中识别
职业 理解工作压力类型 对话中识别

层2: 动态记忆 - 我经历过什么

# TITANS记忆检索
def understand_user(current_input, user_id):
    # 检索相似历史经历
    similar_experiences = titans.retrieve(
        query=current_input,
        user_id=user_id,
        top_k=5
    )
    
    # 例如:用户说"工作压力大"
    # 系统检索到:
    # - 3个月前也说过压力大,后来选择了休假,效果好
    # - 1年前压力大时想跳槽,但最后没跳,后悔了
    # - 每次季度末都会压力大(模式识别)
    
    return similar_experiences

层3: 深层洞察 - 我真正想要什么

{
  "insights": [
    {
      "type": "pattern",
      "content": "每次说'压力大',深层都是'缺乏掌控感'",
      "confidence": 0.85
    },
    {
      "type": "conflict",
      "content": "长期在'高薪稳定' vs '自由有意义'之间挣扎",
      "confidence": 0.9
    },
    {
      "type": "preference",
      "content": "不喜欢激进方案,偏好小步试错",
      "confidence": 0.8
    },
    {
      "type": "growth",
      "content": "比1年前更重视家庭,时间偏好在降低",
      "confidence": 0.75
    }
  ]
}

个性化响应示例

用户类型 输入 个性化响应
中年父亲+IT经理 "工作压力大" "我记得你上次季度末也提过类似感受。你之前选择的短期休假似乎效果不错。这次的压力来源一样吗,还是有新的因素?"
年轻女性+设计师 "工作压力大" "听起来最近不太轻松。你之前提到过创意工作需要灵感,压力会不会和灵感枯竭有关?"
老年退休者 "最近不太舒服" "您上次提到的是身体不适还是心情方面呢?我记得您之前说过偶尔会觉得有点孤单。"

画像渐进式构建

graph LR
    First[首次对话<br/>画像空白] --> Infer[推断基础信息<br/>性别/年龄/角色]
    Infer --> Accumulate[积累行为数据<br/>不舒适/愿望/结果]
    Accumulate --> Pattern[识别模式<br/>生成洞察]
    Pattern --> Deep[深度理解<br/>懂你的心]

关键:不强制填表,通过对话自然推断

# 对话中推断用户信息
def infer_profile_from_conversation(text):
    # "我儿子今年高考" → 推断:中年,父亲角色
    # "我们部门KPI" → 推断:企业员工
    # "我老婆说我..." → 推断:已婚,男性可能性高
    # "退休后闲着没事" → 推断:老年
    pass

4. 技术实现方案

4.1 项目结构

mises-behavior-engine/
├── docker-compose.yml
├── Dockerfile
├── requirements.txt
├── src/
│   ├── __init__.py
│   ├── main.py                    # FastAPI入口
│   ├── config.py                  # 配置管理
│   ├── core/                      # 核心引擎
│   │   ├── __init__.py
│   │   ├── uneasiness.py          # 不舒适挖掘
│   │   ├── desires.py             # 愿望分析
│   │   ├── paths.py               # 路径生成
│   │   ├── feasibility.py         # 可行性评估
│   │   ├── tracker.py             # 行动跟踪
│   │   └── predictor.py           # 循环预测
│   ├── memory/                    # 记忆系统
│   │   ├── __init__.py
│   │   ├── short_term.py          # 短期记忆
│   │   ├── long_term.py           # 长期记忆
│   │   └── surprise.py            # 惊喜检测
│   ├── llm/                       # LLM抽象层
│   │   ├── __init__.py
│   │   ├── base.py                # 基础接口
│   │   ├── deepseek.py
│   │   ├── qwen.py
│   │   └── doubao.py
│   ├── mcp/                       # MCP服务
│   │   ├── __init__.py
│   │   ├── server.py              # MCP Server
│   │   └── tools.py               # 工具注册
│   ├── storage/                   # 存储层
│   │   ├── __init__.py
│   │   ├── postgres.py
│   │   └── vector.py
│   └── schemas/                   # 数据模型
│       ├── __init__.py
│       └── models.py
├── training/                      # TITANS训练
│   ├── synthetic_data/            # 合成数据生成
│   │   ├── generator.py
│   │   └── prompts/
│   ├── titans/                    # TITANS记忆模块训练
│   │   └── train_memory.py
│   └── datasets/                  # 数据集
└── tests/
    └── ...

4.2 技术栈

层级 技术选型
Web框架 FastAPI + Uvicorn
MCP协议 JSON-RPC over SSE
数据库 PostgreSQL 16 + pgvector
缓存 Redis(会话管理)
向量化 sentence-transformers
容器化 Docker + docker-compose
TITANS MCP-TITAN / 自研

4.3 LLM部署方式(调用外部API)

graph LR
    subgraph mbe [MBE服务]
        Engine[核心引擎]
        Adapter[LLM适配器]
    end
    
    subgraph api [外部LLM API]
        DeepSeek[DeepSeek API]
        Qwen[Qwen API]
        Doubao[豆包 API]
    end
    
    Engine --> Adapter
    Adapter -->|HTTP| DeepSeek
    Adapter -->|HTTP| Qwen
    Adapter -->|HTTP| Doubao
角色 LLM 说明
教师模型(训练时) DeepSeek/Qwen API 生成合成数据
运行时推理 DeepSeek/Qwen/豆包 API 理解+分析+生成响应

配置示例

llm:
  provider: deepseek  # 或 qwen / doubao
  api_key: ${LLM_API_KEY}
  model: deepseek-chat
  temperature: 0.7

4.4 渐进式扩展架构(A → B → C)

graph TB
    subgraph phaseA [阶段A: 小型 50-100并发]
        A_LB[单实例]
        A_MBE[MBE x1]
        A_PG[(PostgreSQL)]
        A_Redis[(Redis)]
        A_LB --> A_MBE --> A_PG
        A_MBE --> A_Redis
    end
    
    subgraph phaseB [阶段B: 中型 100-500并发]
        B_LB[Nginx负载均衡]
        B_MBE1[MBE x1]
        B_MBE2[MBE x2]
        B_MBE3[MBE x3]
        B_PG[(PostgreSQL<br/>主从复制)]
        B_Redis[(Redis)]
        B_LB --> B_MBE1 & B_MBE2 & B_MBE3
        B_MBE1 & B_MBE2 & B_MBE3 --> B_PG
        B_MBE1 & B_MBE2 & B_MBE3 --> B_Redis
    end
    
    subgraph phaseC [阶段C: 大型 500+并发]
        C_LB[Traefik/K8s Ingress]
        C_MBE[MBE x N<br/>自动扩缩]
        C_PG[(PostgreSQL集群)]
        C_Redis[(Redis集群)]
        C_LB --> C_MBE --> C_PG
        C_MBE --> C_Redis
    end
阶段 并发 实例 API Keys 基础设施
A 50-100 1 1 单机Docker
B 100-500 3-5 3-5 Docker Compose + Nginx
C 500+ N N Kubernetes / Docker Swarm

4.5 阶段A:单实例部署

# docker-compose.yml(阶段A)
version: '3.8'
services:
  mbe-api:
    build: .
    ports:
      - "8000:8000"
    environment:
      - DATABASE_URL=postgresql://mbe:password@postgres:5432/mbe
      - REDIS_URL=redis://redis:6379
      - LLM_PROVIDER=deepseek
      - LLM_API_KEY=${LLM_API_KEY}
    depends_on:
      - postgres
      - redis

  postgres:
    image: pgvector/pgvector:pg16
    environment:
      - POSTGRES_USER=mbe
      - POSTGRES_PASSWORD=password
      - POSTGRES_DB=mbe
    volumes:
      - pgdata:/var/lib/postgresql/data

  redis:
    image: redis:alpine
    volumes:
      - redisdata:/data

volumes:
  pgdata:
  redisdata:

4.6 阶段B:多实例扩展

# docker-compose.yml(阶段B)
version: '3.8'
services:
  nginx:
    image: nginx:alpine
    ports:
      - "80:80"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
    depends_on:
      - mbe-api-1
      - mbe-api-2
      - mbe-api-3

  mbe-api-1:
    build: .
    environment:
      - LLM_API_KEY=${LLM_API_KEY_1}
      # ... 其他配置
  
  mbe-api-2:
    build: .
    environment:
      - LLM_API_KEY=${LLM_API_KEY_2}
  
  mbe-api-3:
    build: .
    environment:
      - LLM_API_KEY=${LLM_API_KEY_3}

  postgres:
    image: pgvector/pgvector:pg16
    # 可升级为主从复制

  redis:
    image: redis:alpine
    # 会话共享,支持多实例

4.7 阶段C:Kubernetes部署

# k8s/deployment.yaml(阶段C示意)
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mbe-api
spec:
  replicas: 5  # 可自动扩缩
  selector:
    matchLabels:
      app: mbe-api
  template:
    spec:
      containers:
        - name: mbe-api
          image: mbe:latest
          resources:
            requests:
              cpu: "500m"
              memory: "512Mi"
---
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: mbe-api-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: mbe-api
  minReplicas: 3
  maxReplicas: 20
  metrics:
    - type: Resource
      resource:
        name: cpu
        target:
          averageUtilization: 70

4.8 扩展关键点

扩展要素 A→B B→C
负载均衡 添加Nginx 升级K8s Ingress
MBE实例 1→3-5 自动扩缩
LLM API Keys 1→多Key轮询 多Key + 限流
PostgreSQL 单机 主从/集群
Redis 单机 集群模式
会话管理 本地 Redis共享

5. TITANS+MIRAS 架构与模型训练

5.1 架构概述

TITANS(Training at Test Time with Attention for Neural Memory Systems)+ MIRAS(Memory, Attention, Retention, Algorithmic Selection)是 Google 在 NeurIPS 2025 发布的新一代记忆增强架构:

  • 突破传统 Transformer 限制:支持超过 200 万 Token 上下文
  • 推理时实时学习:Test-time 动态更新记忆
  • 三层记忆架构:短期 → 长期 → 归档
  • 惊喜驱动更新:只记住"重要"变化
graph TB
    subgraph titans [TITANS架构]
        Input[用户输入] --> Encoder[编码器]
        
        subgraph memory [三层记忆系统]
            STM[短期记忆<br/>Attention]
            LTM[长期记忆<br/>神经网络MLP]
            Archive[归档记忆]
        end
        
        Encoder --> STM
        STM --> SurpriseCalc[惊喜度计算]
        SurpriseCalc -->|高惊喜| LTM
        SurpriseCalc -->|低惊喜| Decay[衰减遗忘]
        LTM --> Archive
        
        subgraph miras [MIRAS框架]
            Momentum[动量更新]
            Forgetting[遗忘门]
            Retention[保留机制]
        end
        
        SurpriseCalc --> Momentum
        Momentum --> LTM
        LTM --> Forgetting
    end
    
    memory --> Output[输出]

5.2 HOPE 神经记忆模型配置

基于 MCP-TITAN 项目的 HOPE(Hierarchical Online Predictive Encoding)模型:

{
  "name": "init_model",
  "arguments": {
    "inputDim": 768,              
    "hiddenDim": 512,             
    "memoryDim": 1024,            
    "transformerLayers": 6,       
    "numHeads": 8,                
    "ffDimension": 2048,          
    "dropoutRate": 0.1,           
    "maxSequenceLength": 512,     
    "memorySlots": 10000,         
    "similarityThreshold": 0.7,   
    "surpriseDecay": 0.85,        
    "pruningInterval": 1000,      
    "gradientClip": 1.0           
  }
}

5.3 训练流程(TITANS 专属)

graph LR
    subgraph p1 [阶段1]
        TeacherLLM[教师LLM] --> SynData[合成数据]
    end
    
    subgraph p2 [阶段2]
        SynData --> MemPretrain[记忆模块预训练]
        MemPretrain --> SurpriseTrain[惊喜检测校准]
    end
    
    subgraph p3 [阶段3]
        SurpriseTrain --> E2E[LLM+TITANS联合训练]
        E2E --> Model[米塞斯模型]
    end
    
    subgraph p4 [阶段4]
        Model --> TestTime[推理时学习]
    end

5.4 合成数据格式(TITANS 训练专用)

{
  "sequence": [
    {
      "stage": "uneasiness",
      "input": "我最近工作压力很大",
      "memory_update": {"type": "episodic", "surprise_expected": 0.3}
    },
    {
      "stage": "desires", 
      "input": "想要更多自由时间和意义感",
      "memory_update": {"type": "semantic", "surprise_expected": 0.6}
    },
    {
      "stage": "paths",
      "options": ["内部转岗", "跳槽", "副业"],
      "memory_retrieval": "similar_past_decisions"
    },
    {
      "stage": "action_feedback",
      "result": "副业成功",
      "surprise_actual": 0.9,
      "memory_update": "promote_to_long_term"
    }
  ]
}

5.5 训练步骤

Step 1: 记忆模块预训练

# MCP-TITAN 训练接口
{
  "name": "train_step",
  "arguments": {
    "x_t": "用户描述当前不舒适状态",
    "x_next": "期望的愿望分析输出"
  }
}

Step 2: Test-time Learning(推理时学习)

def inference_with_learning(user_input, user_id):
    memories = titans.retrieve_memory(user_input, user_id)
    response = engine.process(user_input, memories)
    surprise = titans.calculate_surprise(user_input, memories)
    
    if surprise > threshold:
        titans.store_memory(user_input, user_id=user_id)
        if surprise > high_threshold:
            titans.promote_to_long_term(user_id)
    
    return response

5.6 技术实现选择

方案 说明 推荐度
MCP-TITAN 集成 使用 henryhawke/mcp-titan 项目 ★★★★★
混合方案 MCP-TITAN 记忆 + 自定义米塞斯逻辑 ★★★★☆
自研 TITANS 从论文复现完整架构 ★★★☆☆

6. 架构模式:纯MCP(有状态)

6.1 核心原则

MBE = 有状态的 MCP 工具服务,小智零改动

  • 不是 Agent,是 MCP 工具
  • 通过 session_id 管理多轮会话状态
  • 序列流转完全在 MBE 内部控制
  • 小智只负责传递用户输入和输出响应
graph LR
    subgraph xiaozhi [小智 - 零改动]
        Voice[语音IO]
        LLM[小智LLM]
        MCP[MCP客户端]
    end
    
    subgraph mbe [MBE - 有状态MCP服务]
        Server[MCP Server]
        Session[会话管理器]
        Logic[米塞斯逻辑]
        TITANS[TITANS记忆]
        LLMAPI[LLM API调用]
    end
    
    Voice --> LLM --> MCP
    MCP -->|session_id| Server
    Server --> Session
    Session --> Logic
    Logic --> TITANS
    Logic --> LLMAPI
    Server --> MCP --> LLM --> Voice

6.2 会话状态管理

sequenceDiagram
    participant U as 用户
    participant X as 小智
    participant M as MBE
    participant S as 会话存储
    
    U->>X: "工作压力大"
    X->>M: mises_analyze(input, device_id)
    M->>S: 创建会话 session_123
    M->>M: 阶段=uneasiness,分析
    M-->>X: {speech:"...", session_id:"123", stage:"uneasiness"}
    X->>U: 语音输出
    
    U->>X: "是的,继续"
    X->>M: mises_analyze(input, device_id)
    M->>S: 查找会话 session_123
    M->>M: 阶段=desires,继续分析
    M-->>X: {speech:"...", session_id:"123", stage:"desires"}
    X->>U: 语音输出
    
    Note over M,S: 会话超时后自动清理

会话状态结构

{
  "session_id": "abc123",
  "identity": {
    "user_id": "user_001",
    "device_id": "device_001",
    "combined_id": "user_001:device_001"
  },
  "current_stage": "desires",
  "stages_completed": ["uneasiness"],
  "context": {
    "uneasiness": {"surface": "工作压力大", "hidden": ["意义感缺失"]},
    "desires": null,
    "paths": null,
    "assessment": null
  },
  "created_at": "2026-01-03T10:00:00Z",
  "expires_at": "2026-01-03T10:30:00Z"
}

6.3 用户识别:灵活适配方案

问题:小智MCP配置层级待确认(设备级/账号级/平台级)

解决方案:MBE支持多种识别模式,通过配置切换

# config.yaml
identity:
  mode: auto  # auto / device / user / combined
  # auto: 自动检测(优先user_id,fallback到device_id)
  # device: 仅用device_id(每设备独立记忆)
  # user: 仅用user_id(同账号共享记忆)
  # combined: user_id + device_id(最精确)
配置层级 推荐mode 记忆隔离效果
设备级MCP device 每设备独立记忆
账号级MCP user 同账号设备共享记忆
平台级MCP combined 精确到用户+设备

MCP工具参数设计(兼容所有层级)

{
  "name": "mises_analyze",
  "parameters": {
    "user_input": "string - 用户输入",
    "device_id": "string - 设备ID(必传)",
    "user_id": "string - 用户ID(可选,如小智能提供)"
  }
}

MBE内部处理逻辑

def get_identity(device_id, user_id=None):
    if config.identity.mode == "device":
        return device_id
    elif config.identity.mode == "user":
        return user_id or device_id  # fallback
    elif config.identity.mode == "combined":
        return f"{user_id or 'unknown'}:{device_id}"
    else:  # auto
        return user_id if user_id else device_id

待确认事项

  • 确认小智MCP配置层级(查阅xiaozhi.me文档或实测)
  • 确认小智调用MCP时是否传递user_id
  • 根据确认结果设置identity.mode

6.4 职责划分

职责 小智 MBE
语音识别/合成
判断何时调用 ✅ 根据工具描述
会话状态管理 ✅ 内部管理
用户识别 传递device_id/user_id ✅ 灵活适配
米塞斯序列逻辑 ✅ 完全内置
阶段流转控制 ✅ 自动判断
用户长期记忆 ✅ TITANS
LLM推理 ✅ 调用API

6.5 MCP工具设计(有状态+灵活识别)

{
  "tools": [
    {
      "name": "mises_analyze",
      "description": "米塞斯行为分析引擎。当用户表达不舒适、困惑、决策困难、纠结、压力、想改变等情况时调用。支持多轮对话,自动管理会话状态和序列流转。",
      "parameters": {
        "user_input": "string - 用户原始输入",
        "device_id": "string - 设备ID(必传)",
        "user_id": "string - 用户ID(可选)"
      }
    },
    {
      "name": "mises_feedback",
      "description": "记录行动结果反馈。当用户报告之前决策的执行结果时调用。",
      "parameters": {
        "device_id": "string - 设备ID",
        "user_id": "string - 用户ID(可选)",
        "action_result": "string - 结果描述",
        "satisfaction": "integer - 满意度1-10"
      }
    }
  ]
}

6.6 返回格式(有状态)

{
  "speech_output": "我注意到你说工作压力大。分析发现:表面是工作量问题,深层可能涉及对意义的追求和时间自由的渴望。你觉得准确吗?要继续探索改变路径吗?",
  "session": {
    "id": "sess_abc123",
    "stage": "uneasiness",
    "next_stage": "desires",
    "is_complete": false
  },
  "await_response": true
}

小智只需读取 speech_output 直接语音输出。

会话生命周期

  • 新对话自动创建会话
  • 同一 device_id 的后续输入自动关联到活跃会话
  • 会话超时(30分钟无活动)自动清理
  • 序列完成后会话标记为 is_complete: true

7. 序列流转控制(MBE内部)

7.1 触发模式(小智LLM自动判断)

小智LLM通过以下方式智能判断何时调用MBE:

graph TD
    UserInput[用户输入] --> Classifier[意图分类器]
    
    Classifier --> Explicit{显式触发?}
    Explicit -->|是| TriggerMBE[调用MBE]
    
    Explicit -->|否| Keyword{关键词匹配?}
    Keyword -->|是| TriggerMBE
    
    Keyword -->|否| Implicit{隐式检测?}
    Implicit -->|决策场景| TriggerMBE
    Implicit -->|非决策场景| NormalChat[普通对话]
    
    TriggerMBE --> StageRouter[阶段路由器]
触发类型 示例 优先级
显式指令 "帮我分析"、"米塞斯模式" 最高
关键词 "纠结"、"不知道该不该"
隐式检测 "压力大"、"两难"

7.2 灵活流转(MBE内部控制)

根据场景复杂度决定是否自动继续下一阶段:

stateDiagram-v2
    [*] --> Uneasiness: 触发MBE
    
    Uneasiness --> ComplexityCheck1: 完成不舒适挖掘
    ComplexityCheck1 --> Desires: 简单场景-自动继续
    ComplexityCheck1 --> ConfirmDesires: 复杂场景-询问确认
    ConfirmDesires --> Desires: 用户确认
    ConfirmDesires --> [*]: 用户取消
    
    Desires --> ComplexityCheck2: 完成愿望分析
    ComplexityCheck2 --> Paths: 简单场景-自动继续
    ComplexityCheck2 --> ConfirmPaths: 复杂场景-询问确认
    ConfirmPaths --> Paths: 用户确认
    
    Paths --> Assessment: 完成路径生成
    Assessment --> Action: 用户选择路径
    Action --> Feedback: 行动执行
    Feedback --> [*]: 循环结束或新不舒适

复杂度判断标准

  • 简单场景:单一不舒适、明确愿望、路径少于3个
  • 复杂场景:多重不舒适、愿望冲突、涉及重大决策

7.3 内部调用规则

{
  "trigger_rules": {
    "dig_uneasiness": {
      "auto_trigger": true,
      "conditions": ["explicit_command", "keyword_match", "implicit_detection"]
    },
    "analyze_desires": {
      "auto_trigger": "conditional",
      "simple_scene": true,
      "complex_scene": "ask_confirmation"
    },
    "generate_paths": {
      "auto_trigger": "conditional",
      "requires": "desires_completed"
    },
    "assess_feasibility": {
      "auto_trigger": true,
      "requires": "paths_generated"
    },
    "track_action": {
      "auto_trigger": false,
      "requires": "user_reports_result"
    }
  }
}

8. 小智MCP接入流程

8.1 接入步骤(极简)

  1. 部署MBE Docker服务,暴露MCP端点
  2. 登录 xiaozhi.me/console
  3. 在MCP管理页面添加自定义服务URL
  4. 配置工具manifest(JSON格式)
  5. 测试语音调用

8.2 交互示例

用户语音: "我最近工作压力大"
     ↓
[隐式检测] 小智LLM识别到决策场景
     ↓
调用MCP: dig_uneasiness("工作压力大", user_id)
     ↓
MBE返回: {
  "surface": "工作压力大",
  "hidden": ["意义感缺失", "时间自由受限"],
  "urgency": 8,
  "complexity": "medium"
}
     ↓
[灵活模式] 复杂度中等,询问用户
小智: "我发现你的压力可能不只是工作量,还涉及意义感和时间自由。要继续深入分析吗?"
     ↓
用户: "好的,帮我分析"
     ↓
调用MCP: analyze_desires(uneasiness_result, user_id)
     ↓
MBE返回: {
  "primary_desire": "获得工作意义感",
  "secondary_desires": ["更多自由时间", "收入稳定"],
  "conflicts": ["意义感 vs 收入稳定"]
}
     ↓
调用MCP: generate_paths(desires, user_id)
     ↓
小智语音输出: "根据分析,你有3个可能的路径:A.内部转岗寻找更有意义的项目 B.跳槽到使命驱动的公司 C.保持现状但发展副业..."

9. 质量评判标准

9.1 三层评判体系

graph LR
    L1[层1: 技术指标<br/>能用/稳定/快] --> L2[层2: 理解准确性<br/>懂对了吗] --> L3[层3: 行为效果<br/>有用吗]

9.2 核心指标定义

指标 定义 目标 采集方式
响应时间 API响应耗时 < 3秒 系统日志
可用性 系统正常运行率 > 99.5% 监控
不舒适命中率 引擎挖掘的深层不舒适,用户确认"对" > 70% 对话中确认
愿望识别率 引擎分析的愿望,用户认同 > 75% 对话中确认
方案采纳率 用户选择了引擎建议的路径 > 50% 行为记录
第一步执行率 用户真的做了第一步 > 40% 回访询问
行动满意度 行动后满意度(1-10) > 7 回访询问
复用率 用户再次使用引擎 > 60% 系统统计

9.3 "懂你"指数计算

懂你指数 = 不舒适命中率×0.3 + 愿望识别率×0.2 + 
          方案采纳率×0.2 + 行动满意度/10×0.2 + 复用率×0.1
等级 懂你指数 含义
优秀 > 0.75 真正懂用户
良好 0.6-0.75 基本懂用户
及格 0.5-0.6 部分理解
不及格 < 0.5 没懂用户

9.4 数据采集方式

隐式采集(自动)

class DialogLog:
    session_id: str
    user_id: str
    response_time_ms: int           # 响应时间
    stages_completed: list          # 完成的阶段
    path_chosen: str                # 用户选择的方案
    user_confirmations: int         # 用户说"对"的次数
    user_corrections: int           # 用户说"不对"的次数

显式采集(对话中自然询问)

┌─────────────────────────────────────────────┐
│ 采集点1:不舒适挖掘确认                      │
├─────────────────────────────────────────────┤
│ 引擎: 我感觉你的压力不只是工作量,           │
│      更深层是对意义的追求。对吗?            │
│                                             │
│ 用户: 对 → 记录 confirmed=true              │
│ 用户: 不是 → 记录 confirmed=false, 继续挖掘 │
└─────────────────────────────────────────────┘

┌─────────────────────────────────────────────┐
│ 采集点2:方案选择                            │
├─────────────────────────────────────────────┤
│ 引擎: 有3个可能路径:A/B/C,哪个更接近你想要的?│
│                                             │
│ 用户: A吧 → 记录 path_chosen="A"            │
└─────────────────────────────────────────────┘

┌─────────────────────────────────────────────┐
│ 采集点3:下次对话回访                        │
├─────────────────────────────────────────────┤
│ 引擎: 上次你说要找HR聊聊,后来怎么样了?     │
│                                             │
│ 用户: 聊了 → 记录 first_step_done=true      │
│ 用户: 还没 → 记录 false, 探讨阻碍           │
└─────────────────────────────────────────────┘

9.5 数据存储

-- 对话质量记录
CREATE TABLE dialog_quality (
    id SERIAL PRIMARY KEY,
    session_id UUID,
    user_id UUID,
    uneasiness_confirmed BOOLEAN,
    desires_confirmed BOOLEAN,
    path_chosen VARCHAR(100),
    session_helpful BOOLEAN,
    created_at TIMESTAMP
);

-- 行动跟踪
CREATE TABLE action_tracking (
    id SERIAL PRIMARY KEY,
    user_id UUID,
    original_session_id UUID,
    first_step_done BOOLEAN,
    satisfaction INTEGER,
    tracked_at TIMESTAMP
);

9.6 质量看板

┌─────────────────────────────────────┐
│      米塞斯引擎质量看板              │
├─────────────────────────────────────┤
│  懂你指数: 0.72 (良好)              │
├─────────────────────────────────────┤
│  不舒适命中率: 73% ████████░░       │
│  愿望识别率:   78% ████████░░       │
│  方案采纳率:   55% ██████░░░░       │
│  行动满意度:   7.2 ████████░░       │
│  复用率:       65% ███████░░░       │
├─────────────────────────────────────┤
│  本周对话: 1,234  活跃用户: 456     │
└─────────────────────────────────────┘

10. 用户管理与计费系统

10.1 用户注册渠道

graph TB
    subgraph channels [注册渠道]
        Direct[直接注册<br/>Web/App]
        XiaoZhi[小智平台<br/>设备绑定]
        ThirdParty[第三方平台<br/>OAuth]
    end
    
    subgraph mbe [MBE用户系统]
        UserDB[(用户数据库)]
        Auth[认证服务]
        Bindng[账号绑定]
    end
    
    Direct --> Auth
    XiaoZhi --> Bindng
    ThirdParty --> Auth
    Auth --> UserDB
    Bindng --> UserDB
渠道 注册方式 用户标识
直接注册 手机号/邮箱 + 密码 user_id
小智平台 设备首次调用自动创建 device_id → user_id
第三方 OAuth(微信/支付宝等) openid → user_id

10.2 用户数据模型

-- 用户账号
CREATE TABLE users (
    user_id UUID PRIMARY KEY,
    phone VARCHAR(20),
    email VARCHAR(100),
    password_hash VARCHAR(255),
    
    -- 注册来源
    register_channel VARCHAR(50),   -- direct/xiaozhi/wechat/...
    register_device_id VARCHAR(100),
    
    -- 账号状态
    status VARCHAR(20),             -- active/suspended/deleted
    created_at TIMESTAMP,
    updated_at TIMESTAMP
);

-- 第三方账号绑定
CREATE TABLE user_bindings (
    id SERIAL PRIMARY KEY,
    user_id UUID REFERENCES users,
    platform VARCHAR(50),           -- xiaozhi/wechat/alipay
    platform_user_id VARCHAR(100),  -- 第三方平台用户ID
    bindng_data JSONB,              -- 额外绑定信息
    created_at TIMESTAMP,
    UNIQUE(platform, platform_user_id)
);

-- 设备绑定
CREATE TABLE user_devices (
    id SERIAL PRIMARY KEY,
    user_id UUID REFERENCES users,
    device_id VARCHAR(100),
    device_type VARCHAR(50),        -- xiaozhi/app/web
    last_active TIMESTAMP,
    created_at TIMESTAMP
);

10.3 小智自动注册流程

sequenceDiagram
    participant X as 小智设备
    participant M as MBE
    participant DB as 用户数据库
    
    X->>M: mises_analyze(input, device_id)
    M->>DB: 查询 device_id 是否已绑定用户
    
    alt 新设备
        M->>DB: 创建匿名用户 + 绑定设备
        DB-->>M: 返回 user_id
    else 已绑定
        DB-->>M: 返回已有 user_id
    end
    
    M->>M: 使用 user_id 处理请求
    M-->>X: 返回结果

10.4 计费模式

graph LR
    subgraph models [计费模式]
        Free[免费版<br/>基础功能]
        Sub[订阅版<br/>按月/年]
        PayAsGo[按量付费<br/>按对话次数]
        Enterprise[企业版<br/>定制]
    end
版本 价格 功能限制
免费版 ¥0 每天5次对话,基础分析
个人版 ¥29/月 无限对话,完整序列,历史记忆
专业版 ¥99/月 + 深度洞察,优先响应
企业版 定制 私有部署,API无限调用

10.5 计费数据模型

-- 用户套餐
CREATE TABLE user_subscriptions (
    id SERIAL PRIMARY KEY,
    user_id UUID REFERENCES users,
    plan_type VARCHAR(50),          -- free/personal/pro/enterprise
    
    -- 订阅周期
    start_date DATE,
    end_date DATE,
    auto_renew BOOLEAN,
    
    -- 支付信息
    payment_method VARCHAR(50),
    last_payment_at TIMESTAMP,
    
    status VARCHAR(20),             -- active/expired/cancelled
    created_at TIMESTAMP
);

-- 使用量统计
CREATE TABLE usage_records (
    id SERIAL PRIMARY KEY,
    user_id UUID REFERENCES users,
    
    -- 使用详情
    date DATE,
    dialog_count INTEGER,           -- 对话次数
    llm_tokens_used INTEGER,        -- LLM token消耗
    
    -- 计费
    cost_usd DECIMAL(10,4),         -- 成本
    
    created_at TIMESTAMP
);

-- 充值/支付记录
CREATE TABLE payment_records (
    id SERIAL PRIMARY KEY,
    user_id UUID REFERENCES users,
    
    amount DECIMAL(10,2),
    currency VARCHAR(10),
    payment_method VARCHAR(50),     -- wechat/alipay/card
    
    -- 第三方支付
    transaction_id VARCHAR(100),
    
    status VARCHAR(20),             -- pending/success/failed
    created_at TIMESTAMP
);

10.6 配额控制

class QuotaManager:
    def check_quota(self, user_id: str) -> bool:
        """检查用户是否还有配额"""
        user = get_user(user_id)
        plan = user.subscription.plan_type
        
        if plan == "free":
            today_usage = get_today_usage(user_id)
            return today_usage.dialog_count < 5
        
        elif plan in ["personal", "pro"]:
            return user.subscription.status == "active"
        
        elif plan == "enterprise":
            return True  # 无限制
    
    def record_usage(self, user_id: str, tokens: int):
        """记录使用量"""
        update_usage(user_id, dialog_count=1, tokens=tokens)

10.7 API认证

# MCP调用认证流程
def authenticate_request(device_id: str, api_key: str = None):
    """
    支持两种认证方式:
    1. device_id 自动关联用户(小智场景)
    2. api_key 直接认证(开发者场景)
    """
    
    if api_key:
        # API Key认证
        user = get_user_by_api_key(api_key)
    else:
        # 设备自动认证
        user = get_or_create_user_by_device(device_id)
    
    # 检查配额
    if not quota_manager.check_quota(user.user_id):
        raise QuotaExceededError("配额已用完")
    
    return user

10.8 管理后台功能

功能 说明
用户列表 查看所有用户,筛选搜索
用户详情 画像、使用记录、付费记录
订阅管理 升级/降级/取消订阅
使用统计 日/周/月使用量图表
收入报表 订阅收入、按量收入
配额调整 手动调整用户配额

11. 知识库与专家系统 🆕

11.1 系统架构

graph TB
    subgraph upload [文档上传层]
        PDF[PDF上传]
        Batch[批量上传]
        Chunk[断点续传]
    end
    
    subgraph process [处理层]
        Extract[文本提取]
        Authority[权威性评估]
        Chunking[智能分块]
        Embed[向量嵌入]
        TITANS[TITANS增强]
    end
    
    subgraph storage [存储层]
        KB[(知识库)]
        Vector[(向量索引)]
        Expert[(专家配置)]
    end
    
    subgraph query [查询层]
        Router[专家路由]
        RAG[TITANS RAG]
        LLM[LLM生成]
    end
    
    PDF --> Extract
    Batch --> Extract
    Chunk --> Extract
    Extract --> Authority
    Authority --> Chunking
    Chunking --> Embed
    Embed --> TITANS
    TITANS --> KB
    TITANS --> Vector
    KB --> Expert
    
    Expert --> Router
    Router --> RAG
    RAG --> Vector
    RAG --> LLM

11.2 PDF权威性评估 🆕

上传PDF时自动评估内容可信度:

评估维度

维度 权重 评估内容
元数据权威性 40分 出版社、作者、ISBN、版次
内容专业性 40分 学术结构、参考文献、术语密度
来源类型 20分 论文>书籍>教材>手册>普通文档

权威性等级

等级 评分 含义 显示
A ≥80 权威级:来自权威出版社/知名专家 🏆
B 60-79 可信级:正规出版物,内容规范
C 40-59 一般级:来源一般,建议交叉验证 ⚠️
D <40 待验证:来源不明确,请谨慎使用

代码实现src/knowledge/authority_evaluator.py

11.3 批量上传与断点续传 🆕

支持大规模知识库建设:

批量上传

  • 支持一次选择多个文件
  • 支持整个文件夹上传
  • 支持拖拽上传
  • 后台异步处理

断点续传

  • 适用于100MB以上大文件
  • 分块大小:5MB
  • 支持上传中断后恢复
  • 上传进度实时显示

11.4 动态专家系统

支持基于知识库动态创建专家:

# 发布专家流程
1. 上传PDF → 自动提取文本
2. 权威性评估 → 显示评分
3. 智能分块 → 向量化
4. AI分析 → 自动生成专家建议
5. 填写专家信息 → 发布

专家匹配算法

def match_expert(question):
    # 1. 关键词匹配 (40%)
    keyword_score = match_keywords(question, expert.keywords)
    
    # 2. 语义相似度 (40%)
    semantic_score = cosine_similarity(
        embed(question), 
        embed(expert.description)
    )
    
    # 3. 领域权重 (20%)
    domain_score = match_domain(question, expert.domains)
    
    return 0.4 * keyword_score + 0.4 * semantic_score + 0.2 * domain_score

11.5 TITANS RAG增强检索 🆕

相比传统RAG的优势:

特性 传统RAG TITANS RAG
检索尺度 单一 多尺度(局部+上下文+全局)
检索方式 一次性 迭代精化
记忆能力 学习成功检索模式
用户个性化 基于用户历史调整

代码实现src/knowledge/titans_rag.py

11.6 专家服务架构 🆕

所有专家服务统一使用基类:

# BaseExpertService 提供:
- 知识库加载
- 向量检索
- TITANS记忆增强
- 提示词构建
- 置信度评估
- 来源引用

# BaseExpertServiceWithRisk 额外提供:
- 健康风险检测
- 免责声明

已迁移专家模块(V2版本)

  • 手工面包大师
  • 美国饮食文化专家
  • 日本饮食文化专家
  • 现代主义烹饪大师
  • 美食鉴赏家
  • 体能训练教练
  • 逻辑学导师
  • 英语口语教练
  • 体检诊断顾问

11.7 模型架构

模型类型 用途 训练方式
核心TITANS+MIRAS 记忆编码、惊喜检测、多尺度检索 全量训练
专家特定模型 特定领域深度优化 基于核心模型微调
动态专家 用户自建知识库 轻量级向量索引
内置专家 系统预置功能 LLM+RAG

详见:docs/MODEL_ARCHITECTURE.md


12. 开发里程碑

阶段 内容 预计周期
Phase 1 核心引擎框架 + MCP服务 2周
Phase 2 TITANS记忆系统 + PostgreSQL存储 1.5周
Phase 3 LLM抽象层(DeepSeek/Qwen/豆包) 1周
Phase 4 合成数据生成 + TITANS记忆模块训练 2周
Phase 5 Docker化 + 小智接入测试 1周
Phase 6 用户管理 + 计费系统 1.5周
Phase 7 质量监控 + 管理后台 1周

总计:约10-11周


13. 关键文件清单

13.1 核心引擎

文件 用途
src/core/uneasiness.py 不舒适挖掘器
src/core/desires.py 愿望分析器
src/core/paths.py 路径生成器
src/core/feasibility.py 可行性评估器
src/core/tracker.py 行动跟踪器
src/core/memory.py TITANS+MIRAS记忆核心

13.2 知识库系统 🆕

文件 用途
src/knowledge/knowledge_manager.py 知识库管理
src/knowledge/authority_evaluator.py PDF权威性评估 🆕
src/knowledge/expert_router.py 专家路由
src/knowledge/dynamic_expert.py 动态专家管理
src/knowledge/titans_rag.py TITANS增强RAG 🆕
src/knowledge/base_expert_service.py 专家服务基类 🆕

13.3 专家模块(V2版本)🆕

文件 用途
src/knowledge/bread_master_v2.py 面包大师
src/knowledge/american_food_culture_v2.py 美国饮食文化
src/knowledge/japanese_food_culture_v2.py 日本饮食文化
src/knowledge/modernist_cuisine_v2.py 现代主义烹饪
src/knowledge/taste_connoisseur_v2.py 美食鉴赏家
src/knowledge/fitness_coach_v2.py 体能训练教练
src/knowledge/logic_tutor_v2.py 逻辑学导师
src/knowledge/english_coach_v2.py 英语口语教练
src/knowledge/physical_exam_advisor_v2.py 体检诊断顾问

13.4 MCP与API

文件 用途
src/mcp/server.py MCP服务端
src/mcp/tools.py 工具注册
src/api/knowledge.py 知识库管理API
src/api/tokens.py Token管理API

13.5 存储与部署

文件 用途
src/storage/database.py PostgreSQL存储
src/storage/redis.py Redis缓存
src/llm/base.py LLM抽象接口
docker-compose.yml 开发环境部署
docker-compose.tunnel.yml 生产环境部署

13.6 训练脚本

文件 用途
scripts/retrain_titans_model.py TITANS模型重训练 🆕
scripts/check_and_train_experts.py 专家模型训练 🆕
training/synthetic_data/generator.py 合成数据生成
training/titans/train_memory.py 记忆模块训练

附录

A. 参考资料

B. 术语表

术语 说明
MBE Mises Behavior Engine,米塞斯行为引擎
TITANS Training at Test Time with Attention for Neural Memory Systems
MIRAS Memory, Attention, Retention, Algorithmic Selection
MCP Model Context Protocol
RAG Retrieval-Augmented Generation,检索增强生成
不舒适 Uneasiness,人类行动的起点,想要改变现状的动机
时间偏好 Time Preference,对即时满足vs长期收益的倾向
惊喜度 Surprise Score,记忆更新的触发阈值
权威性评估 Authority Evaluation,PDF内容可信度评分 🆕
动态专家 Dynamic Expert,用户自建的知识库专家 🆕
专家路由 Expert Router,智能匹配最佳专家 🆕

C. 相关文档

文档 路径 说明
使用手册 docs/USER-GUIDE.md 用户和管理员操作指南
部署指南 docs/DEPLOYMENT-GUIDE.md 安装和配置
模型架构 docs/MODEL_ARCHITECTURE.md TITANS+MIRAS模型详解
小智集成 docs/XIAOZHI-BRIDGE-SETUP.md 小智设备接入

文档版本:2.0 | 最后更新:2026-01-19