AI Agent 重构单体应用实战:1Password 经验与避坑指南

引言

2026年5月,1Password 公开了他们使用 AI Agent 重构核心 Go 单体应用 B5 的实战经验。这篇分享在 HackerNews 上引起了广泛讨论——不因为 Agent 完美无缺,恰恰相反,因为它诚实展示了 Agent 重构的「能」与「不能」。

作为开发者,你可能已经在用 Cursor、Copilot 辅助编程。但当任务从「写一个函数」升级到「重构整个服务架构」时,Agent 的真实表现如何?让我们从 1Password 的实战中寻找答案。

背景:1Password 的 Go 单体 B5

1Password 的核心后端是一个名为 B5 的 Go 单体应用,已运行多年,在生产环境中的可靠性和扩展性表现良好。但随着功能和团队的增长,他们需要:

  • 更清晰的服务边界
  • 更独立的部署单元
  • 更灵活的团队 ownership

简单说:需要把单体拆成微服务。这就是典型的 Monolith Decomposition(单体分解)问题。

Agent 的强项:分析、规划与确定性工具

依赖分析与排序

单体分解的第一个难题是:从哪开始拆?

在涉及敏感数据(密码管理器)的系统中,提取顺序是一个正确性约束。顺序不对可能引入数据泄露或一致性问题。

1Password 团队构建了一个 Agent 工具链,结合了多个数据源:

# 简化的 Agent 工具链架构
import sqlite3, json
from datadog_api_client import ApiClient
from typing import Dict, List

class MonolithAnalyzer:
    """单体应用分析 Agent"""
    
    def __init__(self, code_path: str, db_path: str):
        self.code_path = code_path
        self.db_path = db_path
    
    def analyze_dependencies(self) -> Dict[str, List[str]]:
        """1. SSA 分析:代码结构
           2. SQL 解析:数据依赖
           3. DataDog MCP:运行时耦合度
        """
        return {
            "domain_ownership": self._ssa_analysis(),
            "data_dependencies": self._sql_dependency_analysis(),
            "runtime_coupling": self._runtime_coupling_analysis()
        }
    
    def _ssa_analysis(self) -> Dict:
        """静态单赋值分析 - 理解代码结构"""
        # Agent 帮助编写了 SSA 分析工具的部分代码
        pass
    
    def _sql_dependency_analysis(self) -> Dict:
        """解析 SQL 查询,识别数据依赖"""
        pass
    
    def _runtime_coupling_analysis(self) -> Dict:
        """通过 APM 数据理解运行时调用关系"""
        pass

这个分析产出了一张领域所有权地图、一张耦合图和一张依赖图。结果与资深工程师的手工分析基本一致——建议从 Vault(有自己的 API、数据集和安全边界)开始拆分。

确定性工具模式

1Password 发现了一个关键模式:用 Agent 构建确定性工具,而不是依赖 Agent 持续解释

# 示例:Agent 辅助生成的确定性重构工具
def generate_refactoring_manifest(codebase_path: str) -> list:
    """
    通过 SSA 分析生成每个调用点的确定性清单。
    Agent 编写了这个工具,但工具本身是确定性的。
    """
    manifest = []
    # SSA 分析所有调用点
    for call_site in analyze_all_call_sites(codebase_path):
        manifest.append({
            "file": call_site.file,
            "line": call_site.line,
            "pattern": classify_pattern(call_site),
            "suggested_action": generate_template(call_site)
        })
    return manifest

核心洞察是:让 Agent 生成确定性工件,然后强制通过这些约束执行。这大幅减少了 Agent 的非确定性风险。

Agent 的弱项:复杂序列与推测行为

痛点 1:顺序约束错误

当任务复杂度上升时,Agent 开始犯错:

例如,Agent 会在更新插入新行的代码之前,尝试回填 UUID 列。这个顺序会引入静默数据丢失,即使底层系统是容错的。

原因是:Agent 缺乏对系统级约束的理解。它在局部「看起来合理」的决策,在全局可能是灾难性的。

痛点 2:推测行为(Speculation)

1Password 团队观察到一种反复出现的模式——推测

当 Agent 缺乏足够的上下文时,它会用假设填补空白。这些假设在局部看似合理,但在全局层面是错误的。

这不是 Agent 的「bug」——这是语言模型非确定性的固有特征。解决方案也很明确:让规格说明比 Agent 更精确(Make the specification tighter than the agent)。

痛点 3:生产力增益有限

在复杂任务上,Agent 的生产力提升大约是 20-30%

# 实际生产力对比
productivity = {
    "well_specified_tasks": {"improvement": "50-80%", "agent_role": "高效执行者"},
    "complex_sequences":    {"improvement": "20-30%", "agent_role": "辅助工具"},
    "novel_architecture":   {"improvement": "<10%",  "agent_role": "无法替代人类"}
}

Agent 很有帮助,但不能替代资深工程师的领域判断

实战建议:如何正确使用 Agent 重构

建议 1:问题边界先行

Agent 在问题完全指定且边界清晰时表现最佳。开始重构前,先把规格写清楚:

# 好:Agent 能高效执行的明确规格
task_spec = """
将 UserService 中的 SendWelcomeEmail 方法提取到独立的 NotificationService。
- 输入:UserID (int)
- 输出:bool
- 依赖:EmailTemplateRepo, MailClient
- 约束:保持现有错误处理逻辑不变
- 测试:现有单元测试必须全部通过
"""

建议 2:非确定性必须严格约束

class AgentGuard:
    """Agent 执行防护层"""
    
    def verify_sequence(self, actions: list) -> list:
        """验证操作序列是否违反约束"""
        violations = []
        for i, action in enumerate(actions):
            if self._has_order_violation(action, actions[:i]):
                violations.append(action)
        return violations
    
    def _has_order_violation(self, action, preceding) -> bool:
        """检查是否违反顺序约束"""
        # 例如:先回填数据,再修改代码
        pass

建议 3:多 Agent 并行考虑冲突

同时运行多个 Agent 可能很有效,但仅在变更相互独立且冲突被结构性消除时。否则可能增加不一致性。

建议 4:覆盖率的正确理解

目标不是让 Agent 处理所有情况,而是让它在理解充分的模式上自信执行,遇到超出规格的情况时优雅地交给人类。

2026 年 AI Agent 重构的现状

从工具链角度看,目前 Agent 重构的能力光谱:

任务类型 Agent 表现 人类参与度
代码分析/依赖映射 ✅ 优秀
模式化代码生成 ✅ 良好
简单的服务提取 ⚠️ 可辅助 中高
复杂架构变更 ❌ 不可靠
安全敏感重构 ❌ 需人工审核 非常高

总结

1Password 的实战经验告诉我们,AI Agent 重构的真相是:

  1. 分析阶段:Agent 非常出色——阅读代码、分析结构、确定依赖
  2. 执行阶段:Agent 有用但有限——在边界清晰的任务上效率提升显著
  3. 关键发现:用 Agent 构建确定性工具,比依赖 Agent 直接执行更可靠
  4. 生产力:简单任务 50-80% 提升,复杂任务 20-30%,全新架构 <10%
  5. 最大风险:Agent 的推测行为可能导致静默错误,必须有防护机制

AI Agent 不会替代工程师的判断力,但它可以成为工程师手中更强大的工具。关键在于理解它的边界,用对地方。

对于正在探索 AI Agent 重构团队,不妨从分析阶段的依赖映射和模式化代码生成开始,逐步建立信任,再扩展到更复杂的执行任务。

你可以在 zidongai.com.cn 查看更多 AI 自动化实战案例。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐