基于米塞斯行为学的专家匹配优化 + TITANS 长期记忆

问题分析

原有方案的局限性:

  1. 硬编码权重 - 关键词权重写死在配置文件中
  2. 静态规则 - 无法适应新问题类型
  3. 需要重新部署 - 每次调整都要重启服务
  4. 没有学习能力 - 不会从用户行为中改进
  5. 无记忆能力 - 不记得用户的历史偏好

米塞斯行为学原理

核心公理:人的行为是有目的的(Human Action)

"人的行为是有目的的行动。行动意味着使用手段来达成目的。" —— 路德维希·冯·米塞斯《人的行为》

应用到专家匹配

概念 在专家匹配中的对应
目的 用户真正想要解决的问题/获得的帮助
手段 用户选择的表达方式(提问)
选择 系统为用户匹配的专家
效用 专家回答对用户的帮助程度

新架构:意图分析器 + TITANS 长期记忆

用户问题
    ↓
┌─────────────────────────────────────┐
│     TITANS 长期记忆查询              │
│  - 用户历史意图模式                  │
│  - 专家偏好记录                      │
│  - 反馈学习结果                      │
└─────────────────────────────────────┘
    ↓
┌─────────────────────────────────────┐
│        意图分析器 (IntentAnalyzer)   │
│  米塞斯行为学 + TITANS 记忆增强      │
├─────────────────────────────────────┤
│  1. 识别意图类别 (8类)               │
│     - 求知型:想要了解/学习          │
│     - 解决问题型:遇到具体问题       │
│     - 决策型:需要帮助做出选择       │
│     - 情感型:寻求情感支持           │
│     - 实践型:想要实际操作/执行      │
│     - 验证型:想要确认/验证          │
│     - 闲聊型:社交需求               │
│     - 追问型:对之前回答的追问 🆕    │
│                                      │
│  2. 识别领域                         │
│     法律/健康/心理/技术/烹饪/文化... │
│                                      │
│  3. TITANS 增强置信度                │
│     基于历史模式调整分析结果         │
│                                      │
│  4. 推断目的                         │
│     "用户真正想要什么?"              │
│                                      │
│  5. 计算紧迫性                       │
│     紧急问题需要更专业的回答         │
│                                      │
│  6. 确定需要的专业领域               │
│     基于目的+记忆推断最合适的专家    │
└─────────────────────────────────────┘
    ↓
┌─────────────────────────────────────┐
│        动态权重调整                  │
│  - 意图加分:根据分析结果加分        │
│  - 反馈学习:从用户行为中学习        │
│  - TITANS 存储:写入长期记忆         │
│  - 惊讶度学习:关注异常反馈          │
│  - 自适应:无需重新部署              │
└─────────────────────────────────────┘
    ↓
最佳匹配专家

TITANS 长期记忆增强

记忆内容

记忆类型 内容 用途
意图历史 用户的意图类别统计 预测下次意图
领域偏好 用户常问的领域 调整领域识别置信度
专家偏好 用户常用的专家 个性化专家推荐
反馈记录 正面/负面反馈 惊讶度学习

惊讶度学习

# 正常反馈:常规存储
importance = 1.0

# 负面反馈:这是"惊讶"的,需要特别记住
if not was_helpful:
    importance = 1.5  # 提高重要性

# TITANS 会对高重要性记忆进行更强的存储
titans.store(content, importance=importance)

记忆查询示例

# 查询用户历史
memory = titans.retrieve(query, context_key=f"intent:{user_id}")

# 返回结果
{
    "intent_preferences": {"求知型": 15, "解决问题型": 8},
    "domain_preferences": {"技术": 12, "法律": 3},
    "expert_preferences": {"系统设计专家": 10, "民事律师": 2}
}

核心代码

意图分析器 (src/knowledge/intent_analyzer.py)

class IntentAnalyzer:
    """
    基于米塞斯人的行为学原理分析用户意图
    """
    
    def analyze(self, query: str, user_id: str) -> Intent:
        # 1. 识别意图类别
        intent_category = self._detect_intent_category(query)
        
        # 2. 识别领域
        domain = self._detect_domain(query)
        
        # 3. 推断目的(核心:理解用户真正想要什么)
        purpose = self._infer_purpose(intent_category, domain, query)
        
        # 4. 确定需要的专业领域
        expertise_needed = self._determine_expertise(intent_category, domain)
        
        return Intent(
            category=intent_category,
            purpose=purpose,
            expertise_needed=expertise_needed,
            confidence=confidence
        )
    
    def record_feedback(self, user_id, query, expert, was_helpful):
        """从用户反馈中学习,动态调整权重"""
        if not was_helpful:
            self._adjust_weights_from_failure(query, expert)
        else:
            self._adjust_weights_from_success(query, expert)

集成到专家路由器

def match_expert(self, query, user_id):
    # 1. 米塞斯意图分析(新增)
    intent = analyzer.analyze(query, user_id)
    
    # 2. 关键词匹配
    scores = self._keyword_match(query)
    
    # 3. 意图分析加分(动态,非硬编码)
    for expert_id, expert in experts.items():
        intent_boost = analyzer.get_expert_boost(intent, expert_id)
        scores[expert_id] += intent_boost
    
    # 4. 返回最佳匹配
    return sorted_experts

优势对比

特性 原方案(硬编码权重) 新方案(米塞斯+TITANS)
新问题适应 需要手动调整 自动推断
部署要求 需要重启服务 无需重启
学习能力 从反馈中学习
维护成本
准确性 依赖规则覆盖 基于目的理解
长期记忆 TITANS 永久存储
用户个性化 基于历史偏好
跨会话理解 记住用户模式
异常学习 惊讶度机制

反馈学习机制

# 用户切换专家或表示不满意时
analyzer.record_feedback(
    user_id=user_id,
    query=query,
    matched_expert=expert,
    was_helpful=False,  # 用户不满意
    user_switched=True  # 用户切换了专家
)

# 系统自动调整权重,下次类似问题会有更好的匹配

测试结果

优化后的匹配效果:

  • ✅ 情感问题 → 心理健康顾问
  • ✅ 营养问题 → 营养治疗师
  • ✅ 系统设计 → 系统设计专家
  • ✅ 面包烘焙 → 面包大师
  • ✅ 法律问题 → 民事律师
  • ✅ 无明确匹配 → 通用生活助手(兜底)

已实现的扩展功能

1. LLM 深度意图分析

当规则分析置信度低时,使用 LLM 进行更深层的意图理解:

# 自动触发 LLM 分析
async def analyze_with_llm(self, query: str, user_id: str) -> Intent:
    """
    LLM 分析提示词:
    - 分析意图类别
    - 识别领域
    - 推断用户真正目的
    - 计算紧迫性和置信度
    """
    prompt = f"分析用户问题的真正意图: {query}"
    response = await llm.chat(prompt)
    return parse_intent_from_llm(response)

2. HOPE 用户画像整合

结合 HOPE 记忆系统,实现个性化专家匹配:

def _get_hope_boost(self, intent: Intent, expert_id: str) -> float:
    """
    基于用户画像调整分数:
    - 用户对专家的历史满意度
    - 用户的领域兴趣偏好
    - 交互风格匹配
    """
    rating = hope_memory.get_expert_rating(expert_id)
    if rating > 0.7:
        return 2.0   # 用户喜欢这个专家
    elif rating < 0.3:
        return -1.0  # 用户不喜欢
    return 0.0

3. 多轮对话意图追踪

识别追问,保持对话上下文:

def detect_follow_up(self, user_id: str, query: str) -> (bool, expert_id):
    """
    追问检测特征:
    - 代词使用("它"、"这个")
    - 短问题(< 20字)
    - 时间间隔短(< 5分钟)
    """
    # 如果是追问,继续使用上一轮的专家
    if is_follow_up:
        return True, previous_expert_id

4. A/B 测试框架

持续优化算法的实验框架:

# 获取用户分组
variant = analyzer.get_ab_test_variant(user_id)
# A 组:仅规则分析
# B 组:规则 + LLM 深度分析

# 记录结果
analyzer.record_ab_test_result(variant, accuracy=0.85, latency=0.3)

# 获取报告
report = analyzer.get_ab_test_report()
# {
#   "A": {"sample_size": 500, "avg_accuracy": 0.72, "avg_latency": 0.1},
#   "B": {"sample_size": 480, "avg_accuracy": 0.85, "avg_latency": 0.4},
#   "recommendation": "B"  # B组准确率更高
# }

完整功能架构

┌─────────────────────────────────────────────────────────┐
│                    意图分析器                            │
│            米塞斯行为学 + TITANS + 扩展功能              │
├─────────────────────────────────────────────────────────┤
│                                                         │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐     │
│  │ TITANS 记忆 │  │ HOPE 画像  │  │ LLM 深度分析│     │
│  │ - 长期记忆  │  │ - 用户偏好  │  │ - 复杂意图  │     │
│  │ - 全局上下文│  │ - 满意度   │  │ - 模糊问题  │     │
│  │ - 惊讶度学习│  │ - 兴趣领域  │  │ - 深层理解  │     │
│  └─────────────┘  └─────────────┘  └─────────────┘     │
│         │                │                │             │
│         └────────────────┼────────────────┘             │
│                          ▼                              │
│  ┌──────────────────────────────────────────────────┐  │
│  │              米塞斯意图分析核心                    │  │
│  │  - 意图类别识别(8类)                            │  │
│  │  - 领域检测(8大领域)                            │  │
│  │  - 目的推断(核心:用户真正想要什么)             │  │
│  │  - 紧迫性计算                                     │  │
│  └──────────────────────────────────────────────────┘  │
│                          │                              │
│         ┌────────────────┼────────────────┐             │
│         ▼                ▼                ▼             │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐     │
│  │多轮对话追踪 │  │ A/B 测试    │  │ 反馈学习    │     │
│  │ - 追问检测  │  │ - 分组实验  │  │ - 权重调整  │     │
│  │ - 上下文保持│  │ - 效果对比  │  │ - 持续优化  │     │
│  └─────────────┘  └─────────────┘  └─────────────┘     │
│                                                         │
└─────────────────────────────────────────────────────────┘

动态关键词系统

问题:关键词从何而来?

原有方案的问题:

  • 手动配置,每个领域只有 10-30 个关键词
  • 缺乏系统性,容易遗漏重要词汇
  • 新专家无法自动适配

解决方案:多源关键词提取

┌─────────────────────────────────────────────────────────────┐
│                  关键词来源(三层融合)                       │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐        │
│  │ 开发者定义  │  │ 知识库提取  │  │ 用户反馈    │        │
│  │ (最高优先级) │  │ (自动TF-IDF) │  │ (持续学习)  │        │
│  │  20个核心词  │  │  100个领域词 │  │  动态调整   │        │
│  └─────────────┘  └─────────────┘  └─────────────┘        │
│         │                │                │                │
│         └────────────────┼────────────────┘                │
│                          ▼                                  │
│  ┌──────────────────────────────────────────────────────┐  │
│  │              专家关键词画像 (ExpertKeywordProfile)     │  │
│  │  - core_keywords: 核心词(权重3.0)                   │  │
│  │  - domain_keywords: 领域词(权重1.5)                 │  │
│  │  - extended_keywords: 扩展词(权重0.5)               │  │
│  └──────────────────────────────────────────────────────┘  │
│                                                             │
└─────────────────────────────────────────────────────────────┘

每个领域的关键词覆盖

领域 关键词数量 覆盖范围
法律 100+ 民事、劳动、消费、交通
健康 100+ 症状、营养、运动、疾病
心理 100+ 情绪、问题、关系、成长
技术 100+ 系统设计、数据库、编程、网络
烹饪 100+ 面包、烹饪技法、食材、菜品
文化 100+ 茶道、古建筑、历史、人物
考试 70+ 公务员、备考、认证
生活 90+ 日常、家居、技能、窍门

新专家自动适配

问题:专家数量增加如何处理?

当自研或开发者新建专家时,系统自动:

# 1. 开发者创建专家时
def on_expert_created(expert_config):
    # 自动提取知识库关键词
    extractor = get_keyword_extractor()
    profile = extractor.build_expert_profile(
        expert_id=expert_config["id"],
        expert_name=expert_config["name"],
        kb_id=expert_config["kb_id"],
        developer_keywords=expert_config["keywords"]
    )
    
    # 自动扩展领域
    expand_domain_from_expert(expert_config)

# 2. 意图匹配时动态使用
def match_intent(query, user_id):
    # 使用动态关键词画像
    profiles = extractor.get_all_keywords_for_matching()
    
    # 匹配到具体专家,而非固定领域
    matches = extractor.match_query_to_experts(query)
    return matches

自适应流程

新专家创建
    ↓
┌─────────────────────────────────────┐
│  1. 提取知识库关键词(TF-IDF)       │
│  2. 合并开发者定义的关键词           │
│  3. 构建专家关键词画像               │
│  4. 扩展领域指示器                   │
└─────────────────────────────────────┘
    ↓
系统自动适配,无需重启
    ↓
┌─────────────────────────────────────┐
│  用户提问时:                        │
│  - 意图分析识别目的                  │
│  - 动态关键词匹配                    │
│  - 结合 TITANS 记忆优化              │
└─────────────────────────────────────┘
    ↓
最佳专家匹配

反馈驱动优化

# 用户反馈时
def on_user_feedback(expert_id, query, was_helpful):
    # 提取查询中的关键词
    keywords = tokenize(query)
    
    for kw in keywords:
        # 记录到专家画像
        extractor.add_feedback_keyword(expert_id, kw, was_helpful)
    
    # 成功的关键词会提升到核心关键词
    # 失败的关键词会被标记,避免误匹配

TITANS 关键词层级扩展

核心思想:指数级扩展

利用 TITANS 的记忆能力管理关键词层级关系:

第1层:8领域 × 100核心词 = 800
         ↓ 每词扩展100关联词
第2层:800 × 100 = 80,000
         ↓ 继续扩展
第3层:80,000 × 100 = 8,000,000
         ↓
第4层:8,000,000 × 100 = 8×10^8
         ↓
理论上可无限扩展...

层级结构

┌─────────────────────────────────────────────────────────────┐
│                    TITANS 关键词图                           │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  第1层(核心词)     第2层(关联词)     第3层(扩展词)      │
│  权重: 1.0          权重: 0.7-0.9       权重: 0.3-0.6       │
│                                                             │
│  ┌─────────┐        ┌─────────┐        ┌─────────┐        │
│  │  合同   │───────→│  违约   │───────→│ 违约金  │        │
│  │         │───────→│  解除   │───────→│ 定金罚则│        │
│  │         │───────→│  担保   │───────→│ 保证人  │        │
│  └─────────┘        └─────────┘        └─────────┘        │
│       │                  │                  │              │
│       │                  │                  │              │
│  每个100词        每个100词         每个100词              │
│  = 800词          = 80,000词        = 8,000,000词         │
│                                                             │
└─────────────────────────────────────────────────────────────┘

实现代码

class TitansKeywordManager:
    """基于 TITANS 的关键词层级管理"""
    
    def expand_keyword(self, word: str, depth: int = 3) -> List[Tuple[str, float]]:
        """
        递归扩展关键词
        
        depth=1: 返回直接关联词(~100个)
        depth=2: 返回二级关联(~10,000个)
        depth=3: 返回三级关联(~1,000,000个)
        """
        result = []
        visited = set()
        
        def _expand(current, d, weight):
            if d > depth or current in visited:
                return
            visited.add(current)
            result.append((current, weight))
            
            for related, strength in self._keyword_graph[current].relations.items():
                _expand(related, d + 1, weight * strength)
        
        _expand(word, 0, 1.0)
        return sorted(result, key=lambda x: x[1], reverse=True)
    
    def learn_from_feedback(self, query, matched_domain, was_helpful):
        """
        TITANS 惊讶度学习
        
        成功匹配:常规存储,importance=1.0
        失败匹配:惊讶反馈,importance=1.5(更强记忆)
        """
        importance = 1.0 if was_helpful else 1.5
        
        self._titans.store(
            content=f"匹配: {query} -> {matched_domain}",
            importance=importance
        )

自动扩展能力

# 使用 LLM 自动扩展每个关键词到 100 个关联词
def auto_expand_with_llm(word: str, domain: str) -> List[str]:
    prompt = f"列出与'{word}'相关的100个{domain}领域专业术语"
    response = llm.chat(prompt)
    return parse_keywords(response)

# 示例:扩展"合同"
expanded = auto_expand_with_llm("合同", "法律")
# 返回:违约、解除、担保、抵押、质押、转让、变更、终止...(100个)

# 继续扩展"违约"
expanded_2 = auto_expand_with_llm("违约", "法律")
# 返回:违约金、违约责任、根本违约、预期违约...(100个)

扩展规模统计

层级 关键词数量 覆盖能力
第1层 800 核心概念覆盖
第2层 80,000 专业术语覆盖
第3层 8,000,000 细分领域覆盖
第4层 800,000,000 几乎任何表述

TITANS 存储优化

# 关键词存储
titans.store(
    content=f"关键词: {word}, 领域: {domain}",
    context_key=f"keyword_graph:{domain}:{word}",
    importance=1.0 / layer  # 层级越高,重要性越低
)

# 层级关系存储
titans.store(
    content=f"关系: {word1} -> {word2}, 强度: {strength}",
    context_key=f"keyword_relation:{word1}:{word2}",
    importance=strength
)

可扩展性设计

设计原则

  1. 专家自描述:每个专家通过知识库和配置自动生成匹配特征
  2. 动态更新:关键词库可热更新,无需重启服务
  3. 反馈学习:从用户行为持续优化匹配准确率
  4. 多层权重:核心词 > 领域词 > 扩展词,确保精准匹配
  5. TITANS 层级:利用 TITANS 管理无限层级的关键词关系

支持的专家规模

指标 当前 设计上限
专家数量 24+ 1000+
关键词总数 ~2000 理论无限(TITANS)
层级深度 3 可配置
领域数量 8+ 自动扩展
响应时间 <100ms <200ms

与推荐系统集成 (2026-01-27)

意图分析已与专家推荐系统深度集成:

集成架构

用户查询
    ↓
┌─────────────────────────────────────┐
│       意图分析器 (IntentAnalyzer)    │
│  米塞斯行为学 + TITANS 记忆增强      │
└─────────────────────────────────────┘
    ↓
┌─────────────────────────────────────┐
│       推荐引擎 (RecommendationEngine)│
│  意图匹配 + 协同过滤 + 信任度评分    │
└─────────────────────────────────────┘
    ↓
最佳专家推荐

相关模块

模块 文件 功能
意图分析 src/knowledge/intent_analyzer.py 米塞斯行为学分析
推荐引擎 src/market/recommendation_engine.py 多维度推荐
信任评分 src/market/expert_trust_score.py 专家质量评估
协同过滤 src/market/collaborative_filter.py 相似用户/专家推荐
探索策略 src/market/exploration_strategy.py 新专家曝光

推荐权重配置

RECOMMENDATION_WEIGHTS = {
    "intent_match": 0.35,      # 意图匹配(米塞斯)
    "trust_score": 0.25,       # 专家信任度
    "cf_score": 0.20,          # 协同过滤
    "user_preference": 0.15,   # 用户偏好(TITANS/HOPE)
    "freshness": 0.05          # 新鲜度
}

参考

  • 路德维希·冯·米塞斯《人的行为》(Human Action)
  • TITANS: Learning to Memorize at Test Time (Google DeepMind)
  • TF-IDF: Term Frequency-Inverse Document Frequency
  • MBE 系统架构文档

最后更新: 2026-01-27