1. 研究背景

1.1 推理与Agent的分裂

当前大语言模型分为两类1

类型代表模型优势局限
推理模型o1, Claude内部推理强不能使用工具
Agent模型GPT-4 Agent工具使用深度推理弱

1.2 核心问题

问题:如何统一内部推理与外部工具使用?

2. A2FM架构

2.1 核心思想

A2FM = Adaptive Agent Foundation Model

核心洞察:推理和Agent能力来自不同的训练范式,应该统一训练

2.2 整体框架

┌─────────────────────────────────────────────────────────────────────────┐
│                            A2FM 架构                                      │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                          │
│  输入:                                                                  │
│    ┌─────────┐                                                         │
│    │  问题   │                                                         │
│    └─────────┘                                                         │
│                                                                          │
│    │                                                                     │
│    ▼                                                                     │
│  ┌─────────────────────────────────────────────────────────────────┐    │
│  │                 自适应模式选择 (Adaptive Mode Selection)              │    │
│  │                                                                 │    │
│  │   ┌─────────────┐    ┌─────────────┐                            │    │
│  │   │  内部推理   │    │  工具使用   │                            │    │
│  │   │ Internal    │    │   Tool      │                            │    │
│  │   │ Reasoning   │    │   Use       │                            │    │
│  │   └─────────────┘    └─────────────┘                            │    │
│  │          │                   │                                      │    │
│  │          └─────────┬─────────┘                                      │    │
│  │                    │                                                │    │
│  │              自适应选择                                            │    │
│  └─────────────────────────────────────────────────────────────────┘    │
│       │                                                                     │
│       ▼                                                                     │
│  输出: 答案/动作                                                        │
│                                                                          │
└─────────────────────────────────────────────────────────────────────────┘

3. 技术细节

3.1 模式选择器

class AdaptiveModeSelector(nn.Module):
    """
    自适应模式选择器
    根据问题特征决定使用推理还是工具
    """
    def __init__(self, embed_dim, num_modes=2):
        super().__init__()
        
        # 问题编码
        self.encoder = nn.TransformerEncoder(
            nn.TransformerEncoderLayer(d_model=embed_dim, nhead=8),
            num_layers=3
        )
        
        # 模式选择
        self.mode_selector = nn.Linear(embed_dim, num_modes)
        
    def forward(self, problem_embed):
        """
        返回各模式的概率
        """
        # 编码
        encoded = self.encoder(problem_embed)
        
        # 聚合
        pooled = encoded.mean(dim=1)
        
        # 模式logits
        mode_logits = self.mode_selector(pooled)
        
        return mode_logits

3.2 混合推理模块

class HybridReasoningModule(nn.Module):
    """
    混合推理模块
    整合内部推理和工具调用
    """
    def __init__(self, llm, tool_registry):
        super().__init__()
        self.llm = llm
        self.tool_registry = tool_registry
        
        # 推理状态
        self.reasoning_state = None
        
    def forward(self, problem, mode):
        """
        根据模式执行推理
        """
        if mode == 'internal':
            # 内部推理模式
            return self.internal_reasoning(problem)
        else:
            # 工具使用模式
            return self.tool_augmented_reasoning(problem)
    
    def internal_reasoning(self, problem):
        """
        内部推理(CoT风格)
        """
        reasoning_steps = []
        current = problem
        
        for step in range(max_steps):
            # LLM生成推理步骤
            response = self.llm.generate(current)
            reasoning_steps.append(response)
            
            # 检查是否完成
            if self.is_complete(response):
                break
            
            current = response
        
        return reasoning_steps
    
    def tool_augmented_reasoning(self, problem):
        """
        工具增强推理
        """
        action_history = []
        observation_history = []
        current = problem
        
        for step in range(max_steps):
            # 决定是否使用工具
            action = self.decide_action(current, action_history)
            
            if action is None:
                # 使用内部推理
                response = self.llm.generate(current)
            else:
                # 执行工具
                tool_name, tool_args = action
                result = self.tool_registry.execute(tool_name, tool_args)
                observation_history.append(result)
                response = f"Tool {tool_name} returned: {result}"
            
            action_history.append(action)
            current = response
            
            if self.is_complete(response):
                break
        
        return action_history, observation_history

3.3 统一训练

class A2FMTraining:
    """
    A2FM统一训练
    """
    def __init__(self, model, optimizer):
        self.model = model
        self.optimizer = optimizer
        
    def train_step(self, batch):
        """
        统一训练步骤
        """
        problem, mode_labels, answers = batch
        
        # 模式选择损失
        mode_logits = self.model.select_mode(problem)
        mode_loss = F.cross_entropy(mode_logits, mode_labels)
        
        # 推理损失
        if mode_labels[0] == 0:  # 内部推理
            reasoning_output = self.model.internal_reasoning(problem)
            reasoning_loss = self.compute_reasoning_loss(reasoning_output, answers)
        else:  # 工具使用
            actions, observations = self.model.tool_augmented_reasoning(problem)
            reasoning_loss = self.compute_tool_loss(actions, observations, answers)
        
        # 联合损失
        total_loss = mode_loss + reasoning_loss
        
        # 反向传播
        self.optimizer.zero_grad()
        total_loss.backward()
        self.optimizer.step()
        
        return {'mode_loss': mode_loss, 'reasoning_loss': reasoning_loss}

4. 模式自适应

4.1 自适应机制

class ModeAdapter:
    """
    模式适配器
    根据任务特征选择最优模式
    """
    def __init__(self, model):
        self.model = model
        
    def select_mode(self, problem):
        """
        基于问题特征选择模式
        """
        # 特征提取
        features = self.extract_features(problem)
        
        # 决策规则
        if features['requires_calculation']:
            return 'tool'  # 需要计算用工具
        elif features['requires_knowledge']:
            return 'internal'  # 需要知识用内部推理
        elif features['complexity'] > 0.8:
            return 'hybrid'  # 复杂问题混合
        else:
            return 'internal'  # 简单问题用内部推理
    
    def extract_features(self, problem):
        """
        提取问题特征
        """
        features = {
            'requires_calculation': any(kw in problem for kw in ['计算', '数学', '算']),
            'requires_knowledge': any(kw in problem for kw in ['什么是', '解释', '定义']),
            'complexity': self.estimate_complexity(problem),
            'requires_external_data': any(kw in problem for kw in ['搜索', '查询', '查找'])
        }
        return features

5. 实验结果

5.1 内部推理能力

数学推理基准

模型GSM8KMATHMMLU
GPT-492%86%86%
Claude88%82%78%
A2FM94%88%87%

5.2 工具使用能力

工具调用基准

模型ToolBenchAPI-BankGAIA
GPT-4 Agent75%68%52%
Claude Agent72%65%48%
A2FM82%76%65%

5.3 混合任务

需要推理+工具的任务

模型成功率效率
推理模型 + 工具65%
Agent模型 + CoT68%
A2FM85%

6. 总结

6.1 主要贡献

  1. 统一框架:整合推理和Agent能力
  2. 自适应选择:根据任务自动选择模式
  3. 联合训练:统一的训练范式

6.2 局限性

  1. 计算开销:模式选择有额外开销
  2. 训练复杂度:需要平衡两种能力

参考文献

Footnotes

  1. A2FM: “An Adaptive Agent Foundation Model for Tool-Aware Hybrid Reasoning”, arXiv:2510.12838