← note AI Agent · 2026-04-13

AI应用开发与传统开发的异同

AI应用开发与传统开发其实本质上是一样的

3 min read

[!note] Agent不是银弹,没必要也不应该全用Agent——当任务可以用确定性的类/函数解决时,不应该用 Agent。

核心洞察

  传统软件开发:
  ┌─────────────────────────────────────┐
  │  class ResumeParser {               │
  │      fun parse(file) -> Resume      │
  │  }                                 │
  │                                      │
  │  class MatchEngine {                 │
  │      fun match(jd, resumes) -> []   │
  │  }                                 │
  │                                      │
  │  // 开发者写死的逻辑                 │
  │  // 控制流完全确定                    │
  └─────────────────────────────────────┘
  Agent 开发:
  ┌─────────────────────────────────────┐
  │  JD Worker:                         │
  │    "解析 JD,返回结构化 Schema"      │
  │                                      │
  │  Resume Worker:                      │
  │    "解析简历,返回结构化数据"        │
  │                                      │
  │  Match Worker:                       │
  │    "计算匹配度,返回评分+理由"       │
  │                                      │
  │  // 控制流由 Prompt + LLM 决定        │
  │  // 存在不确定性                     │
  └─────────────────────────────────────┘

本质相同

维度OOP 范式Agent 范式
核心抽象Class / ObjectAgent / Tool
接口定义InterfaceTool Definition
依赖注入DI ContainerContext / Memory
组合模式CompositeOrchestrator
职责分离SOLID 原则Single-purpose Agent
可测试性Mock / Stub单元测试 Prompt
组装流程依赖图Pipeline / DAG

关键区别

区别OOPAgent
控制流确定性 (if/else)LLM 参与决策 (不确定性)
逻辑表达代码Prompt + 示例
运行时编译时确定每次调用可能有差异
调试方式断点 / 日志检查 Prompt / 输出
但思维模式要转变
  OOP 思维:
  ─────────────────────────────
  "我要写一个 MatchEngine 类,
    实现 match(jd, resumes) 方法,
    算法是用加权评分"

  Agent 思维:
  ─────────────────────────────
  "我需要一个 Match Worker Agent,
    它能理解 JD 和简历的语义,
    评分要可解释,
     Prompt 应该怎么写?输出格式是什么?"

AI 开发 = 70% 软件工程 + 20% Prompt 工程 + 10% 新范式适配

  ├── 软件工程 (不变)
  │   ├── 系统设计
  │   ├── 数据存储
  │   ├── 网络通信
  │   ├── 故障恢复
  │   └── 监控告警
  │
  ├── Prompt 工程 (新技能)
  │   ├── 如何清晰表达任务
  │   ├── 如何约束输出格式
  │   ├── 如何写 Few-shot 示例
  │   └── 如何处理边界情况
  │
  └── 新范式适配 (新思维)
      ├── 接受不确定性
      ├── 设计可容错的 Pipeline
      └── 权衡:Agent vs 直接调用

Agent 不是银弹——当任务可以用确定性的类/函数解决时,不应该用 Agent。

就像招聘筛选场景:

  • 简历解析 → 可以用 Agent(格式多样,需要理解)
  • 向量索引 → 不需要 Agent(确定性的数学运算)
  • 批量匹配 → 可以用 Agent(需要推理和解释)
  • 结果排序 → 不需要 Agent(确定的比较运算)

总结:Agent 是工具,不是架构。 用对了是杠杆,用错了是负担。