大模型应用开发不是开发大模型本身,那是大模型开发的工作,大模型应用开发要做的事情是基于一个已经开发完毕的大模型,完成特定的业务需求,在这个过程中,大模型扮演的是一个内容理解、分析、推理的角色,在大模型应用开发中,称需要大模型进行处理的内容为上下文,这篇文章介绍为什么大模型可以作为内容理解、分析、推理角色的理论基础,后续介绍大模型应用开发常用的Langchain、LangGraph、MCP、扣子平台的使用。

首先要理解一个关键的概念“Prompt”,我们现在习惯称其为“提示词”。

图片

好的 prompt 相当于在不改变模型权重的情况下,为其“加载”了一个虚拟的“任务适配器”,Prompt 不是给模型“灌输”新知识,而是教会它“如何使用”已有的知识。

一 思维链(CoT)

原论文:《Chain-of-Thought Prompting Elicits Reasoning in Large Language Models》

思维链可以看做所有大模型应用开发的开端。

作者通过实验发现了一个有趣的现象:我们在大模型输入提示(Prompt)中加入详细的推理过程后,大模型也会做出类似的推理,这样大模型在回答问题时会更加准确,把这种方法称作思维链(Chain-of-Thought,CoT)。

图片

图片

在 CoT 提出之前,为了让大模型对于问题的回答更加准确,我们会在输入提示中举出一些例子,让大模型模仿这些例子的关系进行输出,这种方法在需要多步推理的任务上(如数学应用题、常识推理)表现很差,模型往往无法生成正确的中间步骤,导致最终答案错误。

CoT的做法如下:

图片

注意这里的Q、A是包含在大模型输入中的,是给大模型的提示信息(我们现在称作Prompt),来引导大模型的输出也产生类似的结构模式,这样大模型在面对用户的新问题Q后,也会像提示中的Q-A对儿一样,也对Q产生对应的推理,再进行回答,提高回答的准确性。CoT揭示了一个事实:大规模预训练模型具备内在的推理能力,这种能力在合适的引导后会被激活。这个事实很重要,如果不存在这个事实,现在的所有大模型应用都无从谈起。

二 大模型的零样本推理能力

原论文:《Large Language Models are Zero-Shot Reasoners》

这篇论文的核心贡献在于:它用一个极其简单的方法,揭示了大语言模型(LLM)被严重低估的零样本(Zero-Shot)推理能力,并为后续的研究设定了一个新的基线。在论文发表之前,业界普遍认为LLM在简单的、直觉性的任务上表现很好,但在需要多步、复杂推理的任务上(如数学应用题、符号逻辑等)LLM 表现很差,即使模型规模达到百亿甚至千亿级别。为了解决这个问题,当时最前沿的技术是 Chain-of-Thought (CoT)提示。CoT要求研究者为每个任务精心设计几个“思维链”示例提示,然后让模型模仿这个过程进行推理,这种方法效果显著,但依赖于人工编写的、任务特定的少样本示例。

因此核心问题就是:LLM的强大推理能力,是否真的依赖于这些人工编写的少样本示例?还是它们本身就具备零样本推理的潜力,只是我们没有找到正确的方法去激活?

作者的答案是:LLM本身就具备强大的零样本推理能力!他们提出的解决方案简单到令人难以置信:在原始问题后面,直接加上一句固定的提示语:“Let’s think step by step.” (让我们一步一步地思考),模型就会针对问题产生推理,这个方法被称为 Zero-shot Chain-of-Thought (Zero-shot-CoT)。

论文指出,为了获得最佳效果,Zero-shot-CoT过程可以分为两个阶段:

1.推理提取(Reasoning Extraction):

输入: Q:[原始问题]. A: Let's think step by step.

模型会输出: 一段自由生成的、分步的推理过程。

2.答案提取(Answer Extraction):

输入: 将步骤1的完整输出(人工输入的问题+推理提示语Let's think step by step+模型被引导,生成的推理过程),再加上一个答案提取提示(如 Therefore, the answer (arabic numerals) is),再输入到大模型中。

模型输出: 关于问题的最终答案。

这种方法完全不需要任何任务特定的示例,仅靠一个通用的触发词,就能让模型展现出复杂的推理能力。Zero-shot-CoT 的效果随着模型规模的增大而显著增强。小模型使用这个提示效果不佳,但像 GPT-3这样的超大规模模型则能从中获益,这说明这种零样本推理能力是大模型涌现的特性。

这篇论文的意义远不止于提出一个新技巧,它带来了几个深刻的洞见:

1)简单提示的巨大威力: 复杂的推理能力可以通过极其简单的语言指令来激发。这暗示了LLM的内部表征可能已经编码了丰富的、结构化的知识和推理模式,只需要一个正确的“钥匙”(提示)来解锁。

2)迈向通用认知能力: 一个单一的、通用的提示能在如此多样的任务上生效,这强烈暗示了LLM可能具备某种通用的、高层次的认知能力(如通用逻辑推理),而不仅仅是针对特定任务的狭窄技能。这为研究 AI 的通用智能提供了新的思路。

三 树状思维链(ToT)

原论文:《Tree of Thoughts: Deliberate Problem Solving with Large Language Models》

图片

图片

ToC让大模型(LLM)不再只是答案生成器,而是变成:问题解决规划者+评估者

图片

图片

图片

论文中的示意图如下

图片

基于人工智能先驱们的工作,ToT将“求解问题”看做是在问题解空间中进行搜索的过程

图片

ToT必须要解决4个问题:

1)思维分解:针对输入问题的每个思维是什么

2)思维生成:已经解决了思维分解中的一个子问题,产生了一个状态,如何根据这个状态产生下一阶段的思维(扩展思维树结构)

3)状态评估:如何评估一个部分解的好坏

4)搜搜策略:使用什么方法在生成这棵思维树中搜索最终可行解

思维分解:

图片

思维生成:

图片

状态评估:

图片

图片

搜索算法:

图片

图片

ToT已经具备了智能体的视角

图片

四 Toolfromer

原论文:《Toolformer: Language Models Can Teach Themselves to Use Tools》

这篇论文的核心思想极具颠覆性:它通过一种新颖的、自监督的数据生成和过滤方法,让 LLM 学会了在何时、以何种方式主动调用外部工具,并将结果无缝整合到自己的文本生成中。

LLM 的固有缺陷:尽管 LLM 能力强大,但它们存在一些根本性局限:

1)知识过时:无法获取训练数据截止日期之后的信息。

2)事实幻觉:容易编造看似合理但错误的事实。

3)数学能力弱:难以进行精确的算术计算。

4)缺乏实时感知:不知道当前日期、时间等。    

现有解决方案的不足:

1)依赖大量人工标注:有些方法需要人类为每个任务-工具对编写大量示例,成本高昂且难以扩展。

2)任务特定:很多工具集成方案被绑定在特定任务上,缺乏通用性。

因此核心问题是:能否设计一种通用、自监督的方法,让 LLM 自主学会使用多种外部工具,从而克服其固有缺陷,同时不损害其原有的语言建模能力?

Toolformer 分为四个主要步骤:

(1) 采样潜在的API调用(Sampling):给定一个预训练好的 LLM(如 GPT-J)和一个纯文本语料库(如 CCNet)。对于每种工具(如计算器、问答系统),研究人员只提供极少数的人工编写的API 使用示例。利用 LLM 强大的 In-Context Learning (上下文学习) 能力,让它“模仿”这些示例,在语料库的任意位置“猜测”可能有用的 API 调用。例如,在句子 “400 out of 1400...” 中,模型可能会插入 [计算器(400/1400)]。

(2) 执行API调用(Executing):将上一步采样出的所有潜在 API 调用真实地执行,并获取结果。

(3) 过滤有用的 API 调用 (Filtering) :这是最关键的一步!核心思想: 不是所有采样的 API 调用都有用。 Toolformer 提出了一个完全自监督的、基于语言建模损失(perplexity)。

具体做法:对于一个在位置 i 插入的 API 调用及其结果 r,计算两种情况下的损失:

  L+: 将完整的 API 调用(包括结果)作为前缀,计算模型预测后续 token 的损失。

  L-: 计算a) 完全不插入任何东西;b) 只插入 API 调用,但不包含结果两种基线损失的最小值:。

过滤标准: 如果 L- - L+ >= τf(一个阈值),说明提供这个 API 调用及其结果,显著降低了模型预测后续文本的难度(即降低了困惑度)。那么这个 API 调用就被认为是“有用的”,会被保留下来。

(4)模型微调 (Finetuning):将所有被过滤后保留下来的、带有真实 API 调用和结果的文本,组成一个新的增强数据集 C。在这个新数据集 C上对原始 LLM 进行微调。推理时:当模型生成到时,系统会暂停解码,调用相应的API获取结果,然后将结果和结束标记插回,继续生成。

图片

Toolformer和MCP都是赋予大模型调用外部工具的能力,MCP和Toolformer的比较如下:

图片

大模型如何知道自己应该调用外部函数?这是个极其深刻的问题,也是当前AI研究的前沿难点。答案是:大模型其实并不真正“知道”自己不知道,它只是在模仿人类在类似情境下的行为模式。

具体来说,有以下几种机制在起作用:

1. 基于训练数据的模式匹配 (Pattern Matching)

    在训练数据中,存在大量这样的模式:

        “今天的日期是? → [查询日历 API]”

        “计算 123×456 = ? → [使用计算器]”

        “巴黎的天气如何? → [调用天气服务]”

当模型看到一个高度结构化、明确指向外部信息的问题时(如包含“今天”、“计算”、“最新股价”等关键词),它会激活这些记忆中的模式,从而生成工具调用。

本质: 不是“我知道我不知道”,而是“当问题长成这样时,人类通常会去查一下,所以我也会”。

2. 基于不确定性信号(Uncertainty Heuristics)

虽然 LLM 没有显式的置信度输出,但它的token 概率分布可以反映不确定性。如果模型对某个事实的答案概率很低(如多个候选实体概率接近),它可能会倾向于生成一个模糊回答,或者生成一个查询动作。在 Toolformer 的过滤机制中,这一点被巧妙利用:只有当 API 调用能显著降低后续 token 的预测损失(即让答案更确定)时,该调用才会被保留。这相当于在训练阶段就教会了模型:“当你卡住时,查一下会让后面更好写”。

3. 通过 Prompt / 微调进行行为塑造(Behavior Shaping)

     Function Calling 的设定中,训练数据会明确展示:

        用户: “现在几点?”

        助手: {"function": "get_current_time"}

        系统: "2025-12-10 14:00"

        助手: “现在是下午两点。”

    模型通过学习这种三段式交互,内化了一种策略:对于某些类型的问题,不直接回答,而是先请求工具。这不是“自知之明”,而是一种习得的响应策略。

4. 当前局限:模型无法真正评估自身知识边界

① 幻觉问题依然存在:如果一个问题看起来很普通(如“爱因斯坦哪年出生?”),但模型记错了(比如记成1880年而非1879年),它不会主动去查,因为它“自信”地认为自己知道。

② 过度调用 or 调用不足:模型可能在不需要时调用工具(浪费资源),也可能在需要时没调用(给出错误答案)。

③ 真正的“元认知”缺失:人类会说“我不确定,让我查一下”。LLM 只会说“让我查一下”——但它并不真的“不确定”,它只是在复现一个成功的对话模板。

大模型并非通过自我反思来决定调用工具,而是通过统计学习,识别出“哪些问题在历史上常被人类外包给工具”,并模仿这一行为。未来的研究方向(如 Self-Refine, Reflexion, Active Tool Retrieval)正试图赋予模型更强的元认知能力,让它能基于内部状态(如预测熵、一致性检查)主动判断是否需要外部帮助。但在当前阶段,这一切仍是高级的模式模仿,而非真正的“意识”或“自知”。

五 Plan and Solve

原论文:《Plan-and-Solve Prompting: Improving Zero-Shot Chain-of-Thought Reasoning by Large Language Models》旨在解决当时主流零样本推理方法(Zero-shot-CoT)的三大核心缺陷。

论文首先指出,尽管“Let's think step by step”这种 Zero-shot-CoT 提示非常简单有效,但它在实践中存在三个主要错误类型:

1)计算错误(Calculation Errors, 7%):LLM 在执行算术运算时出错。

2)步骤缺失错误(Missing-Step Errors, 12%):在复杂的多步推理中,模型跳过了关键的中间步骤。

3)语义误解错误(Semantic Misunderstanding Errors, 27%):模型未能正确理解问题的含义或上下文。

为了解决上述问题,特别是“步骤缺失”,作者提出了 Plan-and-Solve(PS) 提示法。其核心思想非常直观,模仿人类解决问题的过程:先制定计划,再执行计划。

PS 提示包含两个明确的阶段:

1)规划 (Plan):让 LLM 首先理解问题,并制定一个解决该问题的分步计划。

2)求解(Solve):让 LLM 严格按照这个计划,一步步执行并得出最终答案。

示例:

Zero-shot-CoT: "Let's think step by step."

Plan-and-Solve(PS): "Let’s first understand the problem and devise a plan to solve the problem. Then, let’s carry out the plan and solve the problem step by step."

这个简单的替换,会引导模型从“边想边做”转变为“先想好再做”,从而生成更完整、更有条理的推理链。

六 ReAct

原论文:《REACT: SYNERGIZING REASONING AND ACTING INLANGUAGE MODELS》

这篇论文的核心思想是将人类解决问题的两种基本能力:“思考”(Reasoning)和“行动”(Acting,融合到大语言模型(LLM)解决问题的过程中。它超越了之前仅关注内部推理(如 Chain-of-Thought)或仅关注外部行动(如Toolformer)的方法,提出了一种交替进行思考-行动,思考-行动相互促进的新智能体范式。

图片

图片

图片

图片

图片

图片

图片

理论上智能体的上下文越长,信息越丰富,智能体采取正确行动的概率越大,但是过长的上下文会使推理关键线索困难,这也是为什么ReAct要采取思考->行动->观察流程的原因,及时的总结更正自己,好过于错误已经累积无法挽回再行动。

图片

七 AgentVerse

原论文:《AGENTVERSE: FACILITATING MULTI-AGENT COLLABORATION AND EXPLORING EMERGENT BEHAVIORS》

这篇论文的核心目标是构建一个通用、可扩展的多智能体(Multi-Agent)框架,以解决那些开放性、复杂且需要跨领域知识的任务。它超越了单个LLM单智能体的局限,通过模拟人类团队协作的方式,让多个专业化智能体共同工作。

单智能体的局限性: 单个 LLM 虽然强大,但在处理开放域、多步骤、需要专业领域知识或多方协商的任务时,容易出现幻觉、逻辑不一致或能力不足的问题。

现有 Agent 系统的不足:

1)大多专注于单智能体或固定角色的协作,缺乏灵活性。

2)难以处理动态、开放式的任务,这些任务没有预定义的解决路径或明确的角色分工。

AgentVerse 的设计灵感来源于人类团队的组织结构,其核心是一个分层、模块化的架构,主要包含以下关键组件:

(1) Role Assigner (角色分配器)

    功能:作为整个团队的“领导者”或“项目经理”。

    工作流程:

  • 接收用户的开放性任务描述(例如,“为一家新咖啡店制定开业计划”)。

  • 分析任务需求,识别出完成该任务所需的专业知识领域。

  • 动态招募(recruit)一组最合适的专家智能体,并为每个智能体分配清晰的角色和职责(例如,“市场营销专家”、“财务分析师”、“室内设计师”)。

关键点: 角色分配是按需、动态的,而非预设的。

(2) Solvers (求解器/专家智能体)

    功能: 执行具体工作的“专家”。

    特点:

  • 每个 Solver 是一个 LLM 实例,被赋予了特定的角色描述(role description),这引导其从该领域的视角思考问题。

  • 它们可以独立工作(解决分配给自己的子任务),也可以相互交流(通过共享的对话历史)。

  • 在 AgentVerse 中,Solver 的工作通常遵循 ReAct 或类似的范式,即生成 Thought -> Action -> Observation 的轨迹。

(3) Reviewers (评审员)

    功能: 负责质量控制和迭代改进。

    工作流程:

  • 审查由 Solvers 生成的初步解决方案。

  • 基于其专业知识,提供具体的、建设性的批评意见(critic opinions)。

  • 这些意见会被反馈给 Solvers,用于生成改进后的新方案。

    关键点: 引入了多轮、闭环的反馈机制,确保最终输出的质量。

(4) Evaluator (评估员)

    功能: 对最终的解决方案进行全面、多维度的评估。

    评估维度: 通常包括 Completeness(完整性)、Functionality(功能性)、Readability(可读性)、Robustness(鲁棒性)等,并给出 0-9 的分数。

    作用: 不仅用于衡量性能,其详细的评估报告也可以作为未来改进的指导。

图片

图片

AgentVerse不仅是一个多智能体框架,它更是一种新的问题解决范式。它认识到,对于现实世界中最棘手的开放性问题,答案往往不是来自一个无所不知的“神谕”,而是来自一个多元化、专业化且善于沟通协作的团队。通过巧妙地结合动态角色分配、专业化智能体、以及基于评审的迭代改进,AgentVerse 成功地将 LLM 的能力从单点突破扩展到了系统集成,为处理复杂、真实世界的任务提供了一个强大而灵活的基础设施。

八 AutoGen

AutoGen 提供了一个功能强大、灵活且易于使用的开源框架,它的目标是极大地简化下一代基于 LLM 的复杂应用的开发过程。

LLM 应用开发的复杂性: 虽然 LLM 能力强大,但构建一个能可靠解决复杂任务(如代码生成、研究分析、自动化工作流)的应用,需要处理大量工程细节:

1.如何管理多个 LLM 实例之间的对话?

2.如何将 LLM 与外部工具、人类用户、自定义逻辑集成?

3.如何调试和优化多轮、多参与者的交互流程?

AutoGen 的核心是一个围绕 ConversableAgent 类构建的面向对象框架。其关键设计理念是 “一切皆为代理”(Everything is an Agent)。

(1) 核心抽象:ConversableAgent

    定义: 任何可以参与对话的实体都是一个 ConversableAgent。这包括:

1.LLM-based Agents:由 LLM 驱动的智能体(如 AssistantAgent)。

2.Tool-based Agents:封装了特定工具或 API 的代理(如 UserProxyAgent 可以执行代码、调用函数)。

3.Human User:人类用户本身也被视为一个特殊的代理(UserProxyAgent 在需要时会将控制权交还给人类)。

    关键属性:

        System Message: 定义代理的角色、能力和行为准则(这是引导 LLM 行为的核心)。

        Ability to Send/Receive Messages: 所有代理通过统一的消息传递接口进行通信。

(2) 灵活的对话模式

    无预设模式: AutoGen 不强制任何特定的对话流程(如 ReAct 的 Thought->Action)。相反,它提供了强大的底层原语,让用户可以自由定义任意复杂的对话拓扑和逻辑。

    内置常用模式: 框架也预置了一些高效的模式,例如:

1.Two-Agent Chat: 最简单的 Assistant (提供建议/代码) + UserProxy (执行/验证) 模式。

2. Group Chat: 一个 GroupChatManager 协调多个专家代理进行讨论,直到达成共识或完成任务。

3.Teachable Agent: 一个可以向人类学习并记住反馈的代理。

(3) 强大的可扩展性与集成能力

1.Code Execution: UserProxyAgent 可以内置一个代码执行器,自动运行 LLM 生成的代码,并将结果(包括错误信息)作为消息反馈回去,形成一个强大的代码生成-执行-调试闭环。

2.Function/Tool Calling: 可以轻松地将任意 Python 函数注册为代理可以调用的工具。

3.Human-in-the-Loop: 可以在对话流程中的任何一点无缝地引入人类输入,实现人机协同。

4.Multi-Modal & Custom LLMs: 支持多种模型后端(OpenAI, Azure, Hugging Face, Llama.cpp 等)和多模态模型。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐