Skip to content

⚠️ Important Notice

This post was last updated on: which was . Please pay attention to its timelines.

Agent

Agent 是一种能够感知环境、做出决策并执行动作的智能实体。

Agent是用更多的成本(多轮推理 + 多次工具调用 + 更高延迟/Token),换开发与维护成本的下降(分支更少、扩展更快、长尾更适配)

LLM 大语言模型

大语言模型的工作原理简单来说就是:“预测下一个token”。根据当前看到的文本,预测下一个token最可能是什么,一直循环到结束。这种方式称为自回归生成(Autoregressive Generation)

以此LLM的几个本质:

  1. 没有独立与输出的思考过程。输出的过程就是推理的过程
  2. 上下文就是全部的记忆
  3. 生成具有概率性

Attention机制

从上下文中获取关键信息。当模型生成新的token时,会扫描整个上下文,对不同内容按照权重分配Attention,权重高的分配的多,权重低的分配的少。

自回归+attention会产生一些累计效应:

  • 每一步生成都依赖对上下文的正确理解
  • 更长的上下文就会导致Attention的分散,所以上下文越长,效果越差
  • 如果过程中产生误差,误差会随着上下文增长而累积

强化学习(Reinforcement Learning, RL)

强化学习是为了让模型并不只是预测生成下一个token,而是通过循环过程尝试-反馈-调整,让模型能根据反馈,不断的调整方向和尝试,最终达到理想的效果。

以coding agent为例,通常有以下的RL训练:

  • 在模拟的编程环境中执行任务(创建文件、运行代码、修复 bug)
  • 用测试通过率、代码质量评分等作为奖励信号
  • 学习何时应该读取更多文件来获取上下文,何时应该直接动手修改
  • 学习如何从错误信息中提取有用线索,调整下一步策略

RL训练高度依赖反馈,如果过于简单,模型可能会走捷径;如果过于复杂,训练可能不稳定。

所以在日常使用时:

  • 提供清晰的成功标准:实际是给模型一个明确的奖励信号
  • 允许试错:允许多方案对比和试错,会比一个方案直接成功 要好一些
  • 观察模型的决策模式:比如他是什么去读文件、什么时候修改,可以更好的了解其背后的训练模式

Function Calling

是模型和外部工具和系统交互的核心机制。

输入问题时,AI应用会将问题以及函数列表都塞给模型,模型会根据问题来判断是否需要调用函数,如果需要调用函数,会输出一个结构化的JSON,其中包含了要调用的函数名和参数。 之后AI应用再调用函数,将返回结果再给模型,模型处理结果,将最后结果返回出来。

模型额外的能力由预定义好的函数列表来决定,另外是否调用完全由模型的识别能力来决定。

优点:拓展了模型的训练集,提高了模型的知识面,能回答的问题更多了

缺点:

  • 模型能力需要预定义,每次回答都需要携带定义的列表
  • 模型需要额外的推理时间来判断是否调用函数,增加了响应时间
  • 函数调用失败后,模型无法自动恢复,需要人工干预

MCP(Model Context Protocol)模型上下文管理协议

包裹了Function Calling的中间层,是为了解决AI应用逐渐复杂导致的难以维护的问题。

MCP引入了“客户端-服务器”架构标准化,只需要一个客户端,就能接入所有符合MCP协议的服务器; 同样的,一个MCP服务器,也能被所有标准的MCP客户端使用。AI应用的难度从N*M降到了N+M。

AI模型不再直连外部API,而是连接MCP Server

优点:解决了外部链接过多的维护问题,只要符合MCP标准的就可以

缺点:并没有解决过多链接带来的调用错误问题

Skills

Skills是对MCP和Function Calling的优化和改进,是进化版本。

Claude对Skills的定义是:一个包含了说明书、脚本和资源的包。模型在执行任务时会先扫描所有的Skills,判断哪些对当前任务有用,再将完整内容拉到上下文中使用。

不再由模型根据语义去理解判断调用哪个工具,而是直接在Skills中声明清楚,应该用什么工具、如何用。

核心价值在于“如何正确使用工具”,降低选择工具的随机性。

Skill中会有:该技能的用途,以及如何才能达到该技能的步骤。

简单的示例如下如:

markdown
用于写一份年度报告。
首先需要调用 get_date 获取时间,
再调用 report 写年度报告。
输出时需要用以下结构xxx
...

使用建议

Compounding Engineering复利工程

构建具有记忆的系统,而非一次性的。

  • 将经验沉淀到项目文档,coding agent都会读一些特定文件,该文件是指导系统的主要途径
    • 发现一个重复出现的问题或一个有效的解决方案,可以将方案加入这个文件

简单来说,发现一些重复出现的东西:比如同一类bug、常见的开发模式等,都需要记录下来,成为本地文件,而非每次都和模型对话。

上一次更新: