深入浅出聊聊大模型的Agent

接下来我准备继续学习TinyAgent项目,并将其集成到之前的项目TinyCodeRAG中,后面我计划集中精力打造一个适用于个人可以简单部署的代码知识库项目,因此将其仓库名修改为了 TinyCodeBase(https://github.com/codemilestones/TinyCodeBase)。 欢迎大家给个 star 持续关注。

在开始进行Agent能力搭建之前,我们先来聊聊什么是Agent。

什么是Agent:从传统大模型到自主智能体

AI Agent 被定义为在限定的数字环境执行目标导向任务的自主软件实体。它们通过感知结构化或非结构化的输入、对上下文信息进行推理,并采取行动以实现特定目标。与传统自动化脚本不同,AI Agent展现出反应式智能和有限的适应性,能够根据动态输入调整输出[1]。

“传统的”大模型存在一些局限性,比如:

而 AI Agent 的出现,就是为了解决这些问题。分别从记忆能力、推理能力、工具使用能力等以弥补上述缺陷。

Function Calling:Agent的行动基石

Function Calling​​(函数调用)是一种让大型语言模型(如 GPT、Claude 等)通过结构化指令(如 JSON)调用外部函数或服务的机制。其核心逻辑是:​​模型不直接执行函数,而是生成函数名称和参数​​,程序在解析后执行真实函数并返回结果,最终由模型整合生成自然语言回复[2]。

Function Calling 的关键点是需要提前和制定好提示词,告诉大模型应该通过何种方式去调用方法,下面给一个简单的例子。


尽你所能回答以下问题。您可以使用以下工具::

google_search: 调用这个工具来与 谷歌搜索 API交互。 谷歌搜索 API 的作用是什么? 谷歌搜索是一个通用搜索引擎,可用于访问互联网、查询百科知识、了解时事新闻等。 
parameters: [
    {
        'name': 'search_query',
        'description': '搜索关键词或短语',
        'required': True,
        'schema': {'type': 'string'},
    }
],
请使用格式化参数为 JSON 对象。

code_check: 调用这个工具来与 代码检查 API交互。 代码检查 API 的作用是什么? 代码检查是一个代码检查工具,可用于检查代码的错误和问题。
parameters: [
    {
        'name': 'language',
        'description': '语言类型全称',
        'required': True,
        'schema': {'type': 'string'},
    },
    {
        'name': 'source_code',
        'description': '源代码',
        'required': True,
        'schema': {'type': 'string'},
    }
]
请使用格式化参数为 JSON 对象。

开始!

可以看到,提示词首先告诉了大模型,你有两个工具可以调用,分别是 google_search 和 code_check,并说明其工具的用途

然后会告诉大模型每种工具调用需要传入的参数要求

大模型在后续推理中会自动开始调用工具——这种能力并非与生俱来。如今的主流大模型都经过function calling数据集的专门微调,对这种提示模式已经相当熟悉,正因如此才能实现如此流畅的工具调用。

如果你使用的是较旧版本的大模型,调用工具的效果可能会大打折扣。

Function Calling 是AI Agent能力的核心驱动力,它让AI能够自主触发外部工具的介入,无论是处理记忆问题还是增强工具使用能力。

这也省去了我们手动编写大模型推理流程的过程,变为了更纯粹的大模型自主驱动

在下一篇文章中,我们将继续实战TinyAgent项目,具体实现两个Function Calling工具:代码检查工具(code_check)和代码检索工具(code_search)。

CoT(思维链):Agent的推理引擎

思维链(Chain of Thought,CoT)是一种通过​​显式引导大语言模型分步推理​​来提升复杂任务处理能力的技术。它通过让模型在推理过程中生成中间步骤,从而提高模型的推理能力。CoT 的实现方式通常是让模型在推理过程中生成中间步骤,然后根据这些中间步骤生成最终答案。

CoT并非模型本身的架构改进,而是一种提示工程策略。它的典型提示词如下:

对于解决数学问题可使用如下提示词:


请按以下步骤思考:

1. 明确问题核心;
2. 分解关键变量;
3. 逐步推导逻辑;
4. 综合结论。

对于一个翻译问题,可使用下面的提示词:


请将以下英文翻译为中文,分三步进行:
1. 直译(保留原意);
2. 反思语言习惯(调整句式);
3. 优化表达(简洁优雅)。
英文:{文本}

你也可以简单的在提示词中加一句,请一步一步地进行思考,就可以提高大模型的推理长度。

同样的,现在提供的大模型也对CoT场景经过了大量的训练,对这种指令的响应可谓得心应手。

什么是ReAct

ReAct 是也一种基于大语言模型的提示词框架。这个概念最早由这篇论文[3]提出,其核心思想是将推理结果和执行结果进行结合,从而实现更复杂的任务。

ReAct框架的提示词如下:


请使用以下格式:

问题:您必须回答的问题
思考:您应该始终思考要做什么
行动: 您应该采取的行动,应该是以下之一:[{tool_names}]
行动输入: 行动的输入
观察: 行动的结果
... (这个 思考/行动/行动输入/观察 可以重复零次或多次)
思考: 我现在知道最终答案
最终答案: 原始输入问题的最终答案

开始!

这套提示词能有效引导大模型实现思考与工具调用的动态融合。模型不仅会在调用工具前进行逻辑推演,更会主动消化工具返回的结果,最终整合所有信息得出可靠结论。

传统大模型、function calling、CoT、ReAct 的输出对比

v2-31ece93936169f7cecc3d388358a5dbb-1440w.png

以上这几种的提示词工程的效果可以从图中进行对比。下篇文章,我们将按照ReAct的结构为TinyCodeBase实现AI Agent能力。

总结

今天我们从理论层面深入剖析了Agent的本质,并厘清了function calling、CoT和ReAct这几个关键概念的区别。

表面上,只需要在提示词中添加"深度思考"的要求,就能大幅提升大语言模型的能力。

但真正起决定作用的,是模型对这些提示词的**专项训练(SFT微调)**作为基础。缺少对应训练的话,模型的响应效果会直线下降。

下篇文章,我们将基于ReAct框架,为TinyCodeBase项目(https://github.com/codemilestones/TinyCodeBase)添加 AI Agent 能力。欢迎持续关注后续进展!

参考文献

[1] 再见AI Agents,你好Agentic AI! (https://mp.weixin.qq.com/s/5_pjJLo5zDCwygcgM4A6xQ)

[2] Function Calling:AI模型调用外部函数的基础知识 (https://www.toutiao.com/article/7485861716417315354/)

[3] ReAct: Synergizing Reasoning and Acting in Language Models (https://arxiv.org/abs/2210.03629)