前端的 AI 应用开发系列四:智能体Agent的发展历程

185 阅读9分钟

什么是大语言模型智能体(Agent)?

大语言模型智能体是基于先进语言模型构建的系统,能够理解指令并自主完成任务。与普通语言模型相比,Agent能够做更多事情:

  • 更好地理解你真正想要什么(不只是字面意思)
  • 把复杂问题拆解成小步骤来解决
  • 会用各种工具和资源来帮你完成任务
  • 从反馈中学习,越用越懂你
  • 在信息不完整时也能做出合理判断
  • 能记住长期目标,不会半路跑偏

Agent的发展历程

  • 早期摸索阶段(2017-2019):

    • 基本上是靠规则和简单决策树来运作的
    • 全靠写死的脚本,灵活性有限
    • 比如MIT做的那些早期对话系统
  • 开始会用工具(2020-2021):

    • 开始尝试让语言模型调用一些工具,但能力还很初级
    • GPT-3出现后,事情开始变得有趣
    • 第一次实现了简单的网络搜索和API调用
    • 代表作:OpenAI的WebGPT和Google的LaMDA
  • 突飞猛进(2022-2023):

    • GPT-3.5/4这些大模型推理能力有了质的飞跃
    • 出现了ReAct、思维链等提示技术
    • LangChain、AutoGPT等框架让开发变得更容易
    • 工具调用能力大幅提升(特别是Function Calling)
    • 第一批商业化应用开始出现
  • 多才多艺(2023至今):

    • 开始能处理文字、图像、声音等多种信息
    • 推理和工具使用能力更强
    • 不用手把手教,能自己干很多事情
    • 专门为Agent优化的模型架构出现
    • 多个Agent协作的系统开始流行
    • 记忆管理和知识检索技术变得更成熟

Agent的类型分类

类型特点应用场景例子
对话型擅长聊天,能理解上下文客服、问答、虚拟助手Claude、Pi、Character.AI
工具使用型会调用各种API和工具开发辅助、数据分析、内容创作GitHub Copilot、Anthropic Claude
自主决策型能独立规划执行任务流程自动化、问题排查AutoGPT、BabyAGI
专家型某个领域特别专业医疗诊断、法律咨询、金融分析Harvey AI(法律)、Hippocratic AI(医疗)
多模态型能处理文本、图像、声音内容分析、多媒体创作GPT-4V、Claude Sonnet
多Agent协作多个Agent一起工作复杂项目管理、研究分析CrewAI、AutoGen

核心技术

ReAct框架

ReAct是"思考+行动"的结合,让Agent能边想边做:

  • 思考:分析问题,想办法,预测结果
  • 行动:实际操作,用工具,与环境互动
  • 观察:看结果,更新认知,调整策略

这种方式的好处:

  • 减少"一本正经胡说八道",通过实际行动验证想法
  • 让解决问题的过程更透明,你能看懂它在做什么
  • 能解决需要多步骤的复杂问题
  • 可以根据情况调整策略,不死板

思维链(Chain-of-Thought)

让模型把思考过程说出来,就像人解题时的草稿纸,大大提高解决复杂问题的能力。

几种常见变体:

  • 零样本思维链:只需提示"让我们一步步思考"
  • 少样本思维链:给几个例子引导模型展示思考过程
  • 自洽思维链:生成多条思路,选最合理的一个
  • 验证增强思维链:思考过程中会自我检查

MRKL系统架构

MRKL是一种模块化架构:

  • 把专业知识模块和语言模型结合起来
  • 根据需要选择合适的模块
  • 支持多种推理方式混合使用

Agent工作流程

现代Agent通常包含这些部分:

  • 规划器:负责拆解任务和制定计划
  • 执行器:负责实际操作和调用工具
  • 记忆系统:存储对话历史和重要信息
  • 评估器:检查结果和整体表现
  • 反思机制:分析自己哪做得好哪做得不好,下次改进

工作原理

Agent的核心工作方式是"思考-行动"循环:

  • 观察:接收信息(用户指令、环境状态等)
  • 思考:分析问题,想办法
  • 行动:实际操作或输出结果
  • 反思:评估结果,调整策略

高级Agent还有这些能力:

  • 自我监控:知道自己在想什么
  • 记忆管理:有效存储和调用信息
  • 不确定性处理:即使信息不完整也能做出判断
  • 目标坚持:不会忘记最终要达成什么

与传统AI助手的区别

特性传统AI助手Agent
自主性只会听指令能自己规划和执行任务
工具使用几乎不会用会调用各种工具和API
理解深度只懂字面意思能理解潜台词和真实意图
学习能力固定不变能通过交互不断进步
任务复杂度只适合简单任务能处理多步骤复杂任务
主动性等你问才回答会主动提建议和行动
错误处理错了就错了会发现错误并尝试多种解决方法
信息更新知识库一成不变能获取最新信息
推理能力浅层思考能进行深度推理和决策

实践应用:在项目中使用Agent

Agent基本代码示例

export class Agent {
  private memory: ChatCompletionMessageParam[] = [];
  private tools: Map<string, Tool> = new Map();
  private systemPrompt: string;

  constructor(systemPrompt: string) {
    this.systemPrompt = systemPrompt;
    this.memory.push({ role: "system", content: systemPrompt });
  }

  registerTool(tool: Tool): void {
    this.tools.set(tool.name, tool);
  }

  private getAvailableTools() {
    return Array.from(this.tools.values()).map((tool) => ({
      type: "function",
      function: {
        name: tool.name,
        description: tool.description,
        parameters: {
          type: "object",
          properties: {
            // 简化示例 - 实际使用中应该为每个工具定义具体参数
            input: { type: "string", description: "工具输入" },
          },
          required: ["input"],
        },
      },
    }));
  }

  async processInput(userInput: string): Promise<string> {
    this.memory.push({ role: "user", content: userInput });

    try {
      // ReAct循环:思考-行动-观察
      let isTaskComplete = false;
      let finalResponse = "";

      while (!isTaskComplete) {
        // 思考阶段:调用LLM进行推理
        const response = await openai.chat.completions.create({
          model: "gpt-4",
          messages: this.memory,
          tools: this.getAvailableTools(),
          tool_choice: "auto",
        });

        const message = response.choices[0].message;
        this.memory.push(message);

        // 如果需要调用工具
        if (message.tool_calls && message.tool_calls.length > 0) {
          // 行动阶段:执行工具调用
          for (const toolCall of message.tool_calls) {
            const toolName = toolCall.function.name;
            const tool = this.tools.get(toolName);

            if (tool) {
              const params = JSON.parse(toolCall.function.arguments);
              // 执行工具并获取结果
              const result = await tool.execute(params);

              // 观察阶段:将工具结果添加到记忆
              this.memory.push({
                role: "tool",
                tool_call_id: toolCall.id,
                content: JSON.stringify(result),
              });
            }
          }
        } else {
          // 任务完成,返回最终回答
          finalResponse = message.content || "";
          isTaskComplete = true;
        }
      }

      return finalResponse;
    } catch (error) {
      console.error("处理出错:", error);
      return "处理您的请求时出现错误。";
    }
  }
}

Agent能力规划

能力层级功能范围技术实现适用场景
基础层代码补全、简单问答本地模型或API调用日常开发辅助
增强层组件生成、Bug修复LangChain+工具链功能实现加速
高级层架构建议、性能优化多Agent协作复杂问题解决
自主层需求到代码转换定制Agent框架全流程自动化

最佳实践

  • 循序渐进:从小功能开始,慢慢扩展
  • 划清界限:明确什么任务适合Agent做,什么需要人来做
  • 持续改进:收集使用数据,不断调整优化
  • 团队培训:教大家怎么高效使用Agent
  • 知识库建设:为项目建专属知识库,提高理解能力
  • 工具链整合:跟现有开发工具无缝对接
  • 安全审核:建立代码审核机制
  • 效果监控:追踪Agent对效率和质量的实际影响

提示设计经验

有效的Agent提示要点:

  • 角色明确:说清楚它应该扮演什么角色
  • 任务拆解:把复杂任务拆成明确步骤
  • 限制说明:指定输出格式和标准
  • 给例子:提供期望输出的示例
  • 留反馈空间:设计让用户能提供反馈的方式

实施挑战与解决方案

常见问题及对策

挑战描述解决方案具体方法
瞎编乱造有时候生成看似正确但实际错误的信息事实核查;增强工具使用建项目知识图谱;自动验证生成代码;用测试验证
上下文有限模型记忆有限,难处理大项目智能上下文管理;用向量数据库分层检索;动态压缩上下文;建代码导航
安全风险可能访问敏感信息或执行危险操作设权限边界;安全沙箱;审计日志细粒度权限控制;操作审批流程;隔离环境
成本太高高级模型API费用不低缓存机制;模型优化;混合使用不同模型本地小模型+云端大模型混用;智能缓存;优化提示
开发者抵触开发人员可能不愿使用或误用循序渐进;培训;展示价值办工作坊;写使用指南;分享成功案例
代码质量生成代码可能不符合项目标准质量门禁;自动检查集成静态分析;强制风格指南;自动测试

前沿趋势

多Agent协作系统

  • 专家团队:由不同专长的Agent组成团队
  • 角色分工:产品经理、架构师、开发者、测试等角色各司其职
  • 达成共识:通过投票或证据权重解决意见分歧
  • 协作标准:定义Agent间沟通和任务分配规则

自适应学习机制

  • 项目定制:根据项目代码和文档调整基础模型
  • 个人偏好:适应特定开发者的编码风格
  • 错误记忆:记住常犯的错误,避免重复
  • 效果优化:通过A/B测试不断改进

工具使用新玩法

  • 自动发现:能自己发现并学会用新工具
  • 创意组合:创造性地组合多个工具解决问题
  • 工具创造:为特定任务自动生成新工具
  • 持续优化:不断评估工具使用效果并改进

学习资源

实用工具

  • LangChain.js - 全能Agent开发框架
  • Fixie.ai - 专注开发者的Agent平台
  • Anthropic Claude - 适合构建可靠Agent的模型
  • LlamaIndex - 知识库连接框架
  • CrewAI - 多Agent协作框架
  • AutoGen - 微软开源的Agent框架
  • AgentGPT - 用户友好的构建平台
  • Langfuse - 性能监控工具
  • Semantic Kernel - 微软的开发SDK

社区

  • Agent黑客松 - 定期举办的开发比赛
  • LLM Agent开发者论坛 - 经验分享社区
  • 开源项目目录 - 精选项目合集
  • AgentConf - 年度技术会议

这份指南会不断更新,欢迎分享你的使用经验!