核心内容摘要
驭风逐浪,海角之约:当稀有与梦想碰撞出非凡之美
初识智能体欢迎来到智能体的世界在人工智能浪潮席卷全球的今天智能体Agent已成为驱动技术变革与应用创新的核心概念之一。
无论你的志向是成为AI领域的研究者、工程师还是希望深刻理解技术前沿的观察者掌握智能体的本质都将是你知识体系中不可或缺的一环。
因此在本章让我们回到原点一起探讨几个问题智能体是什么它有哪些主要的类型它又是如何与我们所处的世界进行交互的通过这些讨论希望能为你未来的学习和探索打下坚实的基础。
图
1 智能体与环境的基本交互循环开源地址https://github.com/datawhalechina/Hello-Agents
1 什么是智能体在探索任何一个复杂概念时我们最好从一个简洁的定义开始。
在人工智能领域智能体被定义为任何能够通过传感器Sensors感知其所处环境Environment并自主地通过执行器Actuators采取行动Action以达成特定目标的实体。
这个定义包含了智能体存在的四个基本要素。
环境是智能体所处的外部世界。
对于自动驾驶汽车环境是动态变化的道路交通对于一个交易算法环境则是瞬息万变的金融市场。
智能体并非与环境隔离它通过其传感器持续地感知环境状态。
摄像头、麦克风、雷达或各类应用程序编程接口Application Programming Interface, API返回的数据流都是其感知能力的延伸。
获取信息后智能体需要采取行动来对环境施加影响它通过执行器来改变环境的状态。
执行器可以是物理设备如机械臂、方向盘或虚拟工具如执行一段代码、调用一个服务。
然而真正赋予智能体智能的是其自主性Autonomy。
智能体并非只是被动响应外部刺激或严格执行预设指令的程序它能够基于其感知和内部状态进行独立决策以达成其设计目标。
这种从感知到行动的闭环构成了所有智能体行为的基础如图
1所示。
1.
1 传统视角下的智能体在当前大语言模型Large Language Model, LLM的热潮出现之前人工智能的先驱们已经对“智能体”这一概念进行了数十年的探索与构建。
这些如今我们称之为“传统智能体”的范式并非单一的静态概念而是经历了一条从简单到复杂、从被动反应到主动学习的清晰演进路线。
这个演进的起点是那些结构最简单的反射智能体Simple Reflex Agent。
它们的决策核心由工程师明确设计的“条件-动作”规则构成如图
2所示。
经典的自动恒温器便是如此若传感器感知的室温高于设定值则启动制冷系统。
这种智能体完全依赖于当前的感知输入不具备记忆或预测能力。
它像一种数字化的本能可靠且高效但也因此无法应对需要理解上下文的复杂任务。
它的局限性引出了一个关键问题如果环境的当前状态不足以作为决策的全部依据智能体该怎么办图
2 简单反射智能体的决策逻辑示意图为了回答这个问题研究者们引入了“状态”的概念发展出基于模型的反射智能体Model-Based Reflex Agent。
这类智能体拥有一个内部的世界模型World Model用于追踪和理解环境中那些无法被直接感知的方面。
它试图回答“世界现在是什么样子的”。
例如一辆在隧道中行驶的自动驾驶汽车即便摄像头暂时无法感知到前方的车辆它的内部模型依然会维持对那辆车存在、速度和预估位置的判断。
这个内部模型让智能体拥有了初级的“记忆”使其决策不再仅仅依赖于瞬时感知而是基于一个更连贯、更完整的世界状态理解。
然而仅仅理解世界还不够智能体需要有明确的目标。
这促进了基于目标的智能体Goal-Based Agent的发展。
与前两者不同它的行为不再是被动地对环境做出反应而是主动地、有预见性地选择能够导向某个特定未来状态的行动。
这类智能体需要回答的问题是“我应该做什么才能达成目标”。
经典的例子是GPS导航系统你的目标是到达公司智能体会基于地图数据世界模型通过搜索算法如A*算法来规划Planning出一条最优路径。
这类智能体的核心能力体现在了对未来的考量与规划上。
更进一步现实世界的目标往往不是单一的。
我们不仅希望到达公司还希望时间最短、路程最省油并且避开拥堵。
当多个目标需要权衡时基于效用的智能体Utility-Based Agent便随之出现。
它为每一个可能的世界状态都赋予一个效用值这个值代表了满意度的高低。
智能体的核心目标不再是简单地达成某个特定状态而是最大化期望效用。
它需要回答一个更复杂的问题“哪种行为能为我带来最满意的结果”。
这种架构让智能体学会在相互冲突的目标之间进行权衡使其决策更接近人类的理性选择。
至此我们讨论的智能体虽然功能日益复杂但其核心决策逻辑无论是规则、模型还是效用函数依然依赖于人类设计师的先验知识。
如果智能体能不依赖预设而是通过与环境的互动自主学习呢这便是学习型智能体Learning Agent的核心思想而强化学习Reinforcement Learning, RL是实现这一思想最具代表性的路径。
一个学习型智能体包含一个性能元件即我们前面讨论的各类智能体和一个学习元件。
学习元件通过观察性能元件在环境中的行动所带来的结果来不断修正性能元件的决策策略。
想象一个学习下棋的AI。
它开始时可能只是随机落子当它最终赢下一局时系统会给予它一个正向的奖励。
通过大量的自我对弈学习元件会逐渐发现哪些棋路更有可能导向最终的胜利。
AlphaGo是这一理念的一个里程碑式的成就。
它在围棋这一复杂博弈中通过强化学习发现了许多超越人类既有知识的有效策略。
从简单的恒温器到拥有内部模型的汽车再到能够规划路线的导航、懂得权衡利弊的决策者最终到可以通过经验自我进化的学习者。
这条演进之路展示了传统人工智能在构建机器智能的道路上所经历的发展脉络。
它们为我们今天理解更前沿的智能体范式打下了坚实而必要的基础。
1.
2 大语言模型驱动的新范式以GPTGenerative Pre-trained Transformer为代表的大语言模型的出现正在显著改变智能体的构建方法与能力边界。
由大语言模型驱动的LLM智能体其核心决策机制与传统智能体存在本质区别从而赋予了其一系列全新的特性。
这种转变可以从两者在核心引擎、知识来源、交互方式等多个维度的对比中清晰地看出如表
1所示。
简而言之传统智能体的能力源于工程师的显式编程与知识构建其行为模式是确定且有边界的而LLM智能体则通过在海量数据上的预训练获得了隐式的世界模型与强大的涌现能力使其能够以更灵活、更通用的方式应对复杂任务。
表
1 传统智能体与LLM驱动智能体的核心对比这种差异使得LLM智能体可以直接处理高层级、模糊且充满上下文信息的自然语言指令。
让我们以一个“智能旅行助手”为例来说明。
在LLM智能体出现之前规划旅行通常意味着用户需要在多个专用应用如天气、地图、预订网站之间手动切换并由用户自己扮演信息整合与决策的角色。
而一个LLM智能体则能将这个流程整合起来。
当接收到“规划一次厦门之旅”这样的模糊指令时它的工作方式体现了以下几点规划与推理智能体首先会将这个高层级目标分解为一系列逻辑子任务例如[确认出行偏好] - [查询目的地信息] - [制定行程草案] - [预订票务住宿]。
这是一个内在的、由模型驱动的规划过程。
工具使用在执行规划时智能体识别到信息缺口会主动调用外部工具来补全。
例如它会调用天气查询接口获取实时天气并基于“预报有雨”这一信息在后续规划中倾向于推荐室内活动。
动态修正在交互过程中智能体会将用户的反馈如“这家酒店超出预算”视为新的约束并据此调整后续的行动重新搜索并推荐符合新要求的选项。
整个“查天气 → 调行程 → 订酒店”的流程展现了其根据上下文动态修正自身行为的能力。
总而言之我们正从开发专用自动化工具转向构建能自主解决问题的系统。
核心不再是编写代码而是引导一个通用的“大脑”去规划、行动和学习。
1.
3 智能体的类型继上文回顾智能体的演进后本节将从三个互补的维度对智能体进行分类。
1基于内部决策架构的分类第一种分类维度是依据智能体内部决策架构的复杂程度这个视角在《Artificial Intelligence: A Modern Approach》中系统性地提出[1]。
正如
1.
1 节所述传统智能体的演进路径本身就构成了最经典的分类阶梯它涵盖了从简单的反应式智能体到引入内部模型的模型式智能体再到更具前瞻性的基于目标和基于效用的智能体。
此外学习能力则是一种可赋予上述所有类型的元能力使其能通过经验自我改进。
2基于时间与反应性的分类除了内部架构的复杂性还可以从智能体处理决策的时间维度进行分类。
这个视角关注智能体是在接收到信息后立即行动还是会经过深思熟虑的规划再行动。
这揭示了智能体设计中一个核心权衡追求速度的反应性Reactivity与追求最优解的规划性Deliberation之间的平衡如图
3所示。
图
3 智能体决策时间与质量关系图反应式智能体 (Reactive Agents)这类智能体对环境刺激做出近乎即时的响应决策延迟极低。
它们通常遵循从感知到行动的直接映射不进行或只进行极少的未来规划。
上文的简单反应式和基于模型的智能体都属于此类别。
其核心优势在于速度快、计算开销低这在需要快速决策的动态环境中至关重要。
例如车辆的安全气囊系统必须在碰撞发生的毫秒内做出反应任何延迟都可能导致严重后果同样高频交易机器人也必须依赖反应式决策来捕捉稍纵即逝的市场机会。
然而这种速度的代价是“短视”由于缺乏长远规划反应式智能体容易陷入局部最优难以完成需要多步骤协调的复杂任务。
规划式智能体(Deliberative Agents)与反应式智能体相对规划式或称审议式智能体在行动前会进行复杂的思考和规划。
它们不会立即对感知做出反应而是会先利用其内部的世界模型系统地探索未来的各种可能性评估不同行动序列的后果以期找到一条能够达成目标的最佳路径 。
基于目标和基于效用的智能体是典型的规划式智能体。
可以将其决策过程类比为一位棋手。
他不会只看眼前的一步而是会预想对手可能的应对并规划出后续几步甚至十几步的棋路。
这种深思熟虑的能力使其能够处理复杂的、需要长远眼光的任务例如制定一份商业计划或规划一次长途旅行。
它们的优势在于决策的战略性和远见。
然而这种优势的另一面是高昂的时间和计算成本。
在瞬息万变的环境中当规划式智能体还在深思熟虑时采取行动的最佳时机可能早已过去。
混合式智能体(Hybrid Agents)现实世界的复杂任务往往既需要即时反应也需要长远规划。
例如我们之前提到的智能旅行助手既要能根据用户的即时反馈如“这家酒店太贵了”调整推荐反应性又要能规划出为期数天的完整旅行方案规划性。
因此混合式智能体应运而生它旨在结合两者的优点实现反应与规划的平衡。
一种经典的混合架构是分层设计底层是一个快速的反应模块处理紧急情况和基本动作高层则是一个审慎的规划模块负责制定长远目标。
而现代的LLM智能体则展现了一种更灵活的混合模式。
它们通常在一个“思考-行动-观察”的循环中运作巧妙地将两种模式融为一体规划(Reasoning) 在“思考”阶段LLM分析当前状况规划出下一步的合理行动。
这是一个审议过程。
反应(Acting Observing) 在“行动”和“观察”阶段智能体与外部工具或环境交互并立即获得反馈。
这是一个反应过程。
通过这种方式智能体将一个需要长远规划的宏大任务分解为一系列“规划-反应”的微循环。
这使其既能灵活应对环境的即时变化又能通过连贯的步骤最终完成复杂的长期目标。
3基于知识表示的分类这是一个更根本的分类维度它探究智能体用以决策的知识究竟是以何种形式存于其“思想”之中。
这个问题是人工智能领域一场持续半个多世纪的辩论核心并塑造了两种截然不同的AI文化。
符号主义AISymbolic AI符号主义常被称为传统人工智能其核心信念是智能源于对符号的逻辑操作。
这里的符号是人类可读的实体如词语、概念操作则遵循严格的逻辑规则如图
4左侧所示。
这好比一位一丝不苟的图书管理员将世界知识整理为清晰的规则库和知识图谱。
其主要优势在于透明和可解释。
由于推理步骤明确其决策过程可以被完整追溯这在金融、医疗等高风险领域至关重要。
然而其“阿喀琉斯之踵”在于脆弱性它依赖于一个完备的规则体系但在充满模糊和例外的现实世界中任何未被覆盖的新情况都可能导致系统失灵这就是所谓的“知识获取瓶颈”。
亚符号主义AISub-symbolic AI亚符号主义或称连接主义则提供了一幅截然不同的图景。
在这里知识并非显式的规则而是内隐地分布在一个由大量神经元组成的复杂网络中是从海量数据中学习到的统计模式。
神经网络和深度学习是其代表。
如图
4中间所示如果说符号主义AI是图书管理员那么亚符号主义AI就像一个牙牙学语的孩童 。
他不是通过学习“猫有四条腿、毛茸茸、会喵喵叫”这样的规则来认识猫的而是在看过成千上万张猫的图片后大脑中的神经网络能辨识出“猫”这个概念的视觉模式 。
这种方法的强大之处在于其模式识别能力和对噪声数据的鲁棒性 。
它能够轻松处理图像、声音等非结构化数据这在符号主义AI看来是极其困难的任务。
然而这种强大的直觉能力也伴随着不透明性。
亚符号主义系统通常被视为一个黑箱Black Box。
它能以惊人的准确率识别出图片中的猫但你若问它“为什么你认为这是猫”它很可能无法给出一个合乎逻辑的解释。
此外它在纯粹的逻辑推理任务上表现不佳有时会产生看似合理却事实错误的幻觉。
神经符号主义AINeuro-Symbolic AI长久以来符号主义和亚符号主义这两大阵营如同两条平行线各自发展。
为克服上述两种范式的局限一种“大和解”的思想开始兴起这就是神经符号主义AI也称神经符号混合主义。
它的目标是融合两大范式的优点创造出一个既能像神经网络一样从数据中学习又能像符号系统一样进行逻辑推理的混合智能体。
它试图弥合感知与认知、直觉与理性之间的鸿沟。
诺贝尔经济学奖得主丹尼尔·卡尼曼Daniel Kahneman在其著作《思考快与慢》Thinking, Fast and Slow中提出的双系统理论为我们理解神经符号主义提供了一个绝佳的类比[2]如图
4所示系统1是快速、凭直觉、并行的思维模式类似于亚符号主义AI强大的模式识别能力。
系统2是缓慢、有条理、基于逻辑的审慎思维恰如符号主义AI的推理过程。
图
4 符号主义、亚符号主义与神经符号混合主义的知识表示范式人类的智能正源于这两个系统的协同工作。
同样一个真正鲁棒的AI也需要兼具二者之长。
大语言模型驱动的智能体是神经符号主义的一个极佳实践范例。
其内核是一个巨大的神经网络使其具备模式识别和语言生成能力。
然而当它工作时它会生成一系列结构化的中间步骤如思想、计划或API调用这些都是明确的、可操作的符号。
通过这种方式它实现了感知与认知、直觉与理性的初步融合。
2 智能体的构成与运行原理
1.
1 任务环境定义要理解智能体的运作我们必须先理解它所处的任务环境。
在人工智能领域通常使用PEAS模型来精确描述一个任务环境即分析其性能度量(Performance)、环境(Environment)、执行器(Actuators)和传感器(Sensors) 。
以上文提到的智能旅行助手为例下表
2展示了如何运用PEAS模型对其任务环境进行规约。
表
2 智能旅行助手的PEAS描述在实践中LLM智能体所处的数字环境展现出若干复杂特性这些特性直接影响着智能体的设计。
首先环境通常是部分可观察的。
例如旅行助手在查询航班时无法一次性获取所有航空公司的全部实时座位信息。
它只能通过调用航班预订API看到该API返回的部分数据这就要求智能体必须具备记忆记住已查询过的航线和探索尝试不同的查询日期的能力。
其次行动的结果也并非总是确定的。
根据结果的可预测性环境可分为确定性和随机性。
旅行助手的任务环境就是典型的随机性环境。
当它搜索票价时两次相邻的调用返回的机票价格和余票数量都可能不同这就要求智能体必须具备处理不确定性、监控变化并及时决策的能力。
此外环境中还可能存在其他行动者从而形成多智能体(Multi-agent) 环境。
对于旅行助手而言其他用户的预订行为、其他自动化脚本甚至航司的动态调价系统都是环境中的其他“智能体”。
它们的行动例如订走最后一张特价票会直接改变旅行助手所处环境的状态这对智能体的快速响应和策略选择提出了更高要求。
最后几乎所有任务都发生在序贯且动态的环境中。
“序贯”意味着当前动作会影响未来而“动态”则意味着环境自身可能在智能体决策时发生变化。
这就要求智能体的“感知-思考-行动-观察”循环必须能够快速、灵活地适应持续变化的世界。
1.
2 智能体的运行机制在定义了智能体所处的任务环境后我们来探讨其核心的运行机制。
智能体并非一次性完成任务而是通过一个持续的循环与环境进行交互这个核心机制被称为 智能体循环 (Agent Loop)。
如图
5所示该循环描述了智能体与环境之间的动态交互过程构成了其自主行为的基础。
图
5 智能体与环境交互的基本循环这个循环主要包含以下几个相互关联的阶段**感知 (Perception)**这是循环的起点。
智能体通过其传感器例如API的监听端口、用户输入接口接收来自环境的输入信息。
这些信息即观察 (Observation)既可以是用户的初始指令也可以是上一步行动所导致的环境状态变化反馈。
**思考 (Thought)**接收到观察信息后智能体进入其核心决策阶段。
对于LLM智能体而言这通常是由大语言模型驱动的内部推理过程。
如图所示“思考”阶段可进一步细分为两个关键环节规划 (Planning)智能体基于当前的观察和其内部记忆更新对任务和环境的理解并制定或调整一个行动计划。
这可能涉及将复杂目标分解为一系列更具体的子任务。
工具选择 (Tool Selection)根据当前计划智能体从其可用的工具库中选择最适合执行下一步骤的工具并确定调用该工具所需的具体参数。
**行动 (Action)**决策完成后智能体通过其执行器Actuators执行具体的行动。
这通常表现为调用一个选定的工具如代码解释器、搜索引擎API从而对环境施加影响意图改变环境的状态。
行动并非循环的终点。
智能体的行动会引起环境 (Environment) 的状态变化 (State Change)环境随即会产生一个新的观察 (Observation) 作为结果反馈。
这个新的观察又会在下一轮循环中被智能体的感知系统捕获形成一个持续的“感知-思考-行动-观察”的闭环。
智能体正是通过不断重复这一循环逐步推进任务从初始状态向目标状态演进。
1.
3 智能体的感知与行动在工程实践中为了让LLM能够有效驱动这个循环我们需要一套明确的交互协议 (Interaction Protocol) 来规范其与环境之间的信息交换。
在许多现代智能体框架中这一协议体现在对智能体每一次输出的结构化定义上。
智能体的输出不再是单一的自然语言回复而是一段遵循特定格式的文本其中明确地展示了其内部的推理过程与最终决策。
这个结构通常包含两个核心部分Thought (思考)这是智能体内部决策的“快照”。
它以自然语言形式阐述了智能体如何分析当前情境、回顾上一步的观察结果、进行自我反思与问题分解并最终规划出下一步的具体行动。
Action (行动)这是智能体基于思考后决定对环境施加的具体操作通常以函数调用的形式表示。
例如一个正在规划旅行的智能体可能会生成如下格式化的输出
Thought: 用户想知道北京的天气。
我需要调用天气查询工具。
Action: get_weather(“北京”)这里的Action字段构成了对外部世界的指令。
一个外部的解析器 (Parser) 会捕捉到这个指令并调用相应的get_weather函数。
行动执行后环境会返回一个结果。
例如get_weather函数可能返回一个包含详细天气数据的JSON对象。
然而原始的机器可读数据如JSON通常包含LLM无需关注的冗余信息且格式不符合其自然语言处理的习惯。
因此感知系统的一个重要职责就是扮演传感器的角色将这个原始输出处理并封装成一段简洁、清晰的自然语言文本即观察。
Observation: 北京当前天气为晴气温25摄氏度微风。
这段Observation文本会被反馈给智能体作为下一轮循环的主要输入信息供其进行新一轮的Thought和Action。
综上所述通过这个由Thought、Action、Observation构成的严谨循环LLM智能体得以将内部的语言推理能力与外部环境的真实信息和工具操作能力有效地结合起来。
3 动手体验5 分钟实现第一个智能体在前面的小节我们学习了智能体的任务环境、核心运行机制以及Thought-Action-Observation交互范式。
理论知识固然重要但最好的学习方式是亲手实践。
在本节中我们将引导您使用几行简单的Python代码从零开始构建一个可以工作的智能旅行助手。
这个过程将遵循我们刚刚学到的理论循环让您直观地感受到一个智能体是如何“思考”并与外部“工具”互动的。
让我们开始吧在本案例中我们的目标是构建一个能处理分步任务的智能旅行助手。
需要解决的用户任务定义为你好请帮我查询一下今天北京的天气然后根据天气推荐一个合适的旅游景点。
要完成这个任务智能体必须展现出清晰的逻辑规划能力。
它需要先调用天气查询工具并将获得的观察结果作为下一步的依据。
在下一轮循环中它再调用景点推荐工具从而得出最终建议。
1.
1 准备工作为了能从Python程序中访问网络API我们需要一个HTTP库。
requests是Python社区中最流行、最易用的选择。
tavily-python是一个强大的AI搜索API客户端用于获取实时的网络搜索结果可以在官网注册后获取API。
openai是OpenAI官方提供的Python SDK用于调用GPT等大语言模型服务。
请先通过以下命令安装它们
pip install requests tavily-python openai1指令模板驱动真实LLM的关键在于提示工程Prompt Engineering。
我们需要设计一个“指令模板”告诉LLM它应该扮演什么角色、拥有哪些工具、以及如何格式化它的思考和行动。
这是我们智能体的“说明书”它将作为system_prompt传递给LLM。
1 AGENT_SYSTEM_PROMPT 2 “”3 4 你是一个智能旅行助手。
你的任务是分析用户的请求并使用可用工具一步步地解决问题。
5 # 可用工具:6 -get\_weather(city: str): 查询指定城市的实时天气。
7 -get\_attraction(city: str, weather: str): 根据城市和天气搜索推荐的旅游景点。
8 # 行动格式:9 你的回答必须严格遵循以下格式。
首先是你的思考过程然后是你要执行的具体行动。
10 Thought: [这里是你的思考过程和下一步计划]11 Action: [这里是你要调用的工具格式为 function_name(arg_name12 arg_value13 )]14 # 任务完成:15 当你收集到足够的信息能够回答用户的最终问题时你必须使用 finish(answer16 …17 ) 来输出最终答案。
18 请开始吧19 “”20 2工具1查询真实天气我们将使用免费的天气查询服务wttr.in它能以JSON格式返回指定城市的天气数据。
下面是实现该工具的代码1 import requests2 import json34 defget_weather(city: str) - str:5 “”6 通过调用 wttr.in API 查询真实的天气信息。
7 “”8 # API端点我们请求JSON格式的数据9 url fhttps://wttr.in/{city}?formatj11011 try:12 # 发起网络请求13 response requests.get(url)14 # 检查响应状态码是否为200 (成功)15 response.raise_for_status()16 # 解析返回的JSON数据17 data response.json()1819 # 提取当前天气状况10 current_condition data[‘current_condition’][0]21 weather_desc current_condition[‘weatherDesc’][0][‘value’]22 temp_c current_condition[‘temp_C’]2324 # 格式化成自然语言返回25 returnf{city}当前天气{weather_desc}气温{temp_c}摄氏度2627 except requests.exceptions.RequestException as e:28 # 处理网络错误29 returnf错误查询天气时遇到网络问题 - {e} 30 except (KeyError, IndexError) as e:31 # 处理数据解析错误32 returnf错误解析天气数据失败可能是城市名称无效 - {e}3工具2搜索并推荐旅游景点我们将定义一个新工具search_attraction它会根据城市和天气状况互联网上搜索合适的景点1 import os2 from tavily import TavilyClient34 defget_attraction(city: str, weather: str) - str:5 “”6 根据城市和天气使用Tavily Search API搜索并返回优化后的景点推荐。
7 “”8 #
从环境变量中读取API密钥9 api_key os.environ.get(“TAVILY_API_KEY”)10 ifnot api_key:11 return错误未配置TAVILY_API_KEY环境变量。
1213 #
初始化Tavily客户端14 tavily TavilyClient(api_keyapi_key)1516 #
构造一个精确的查询17 query f‘{city}’ 在’{weather}天气下最值得去的旅游景点推荐及理由1819 try:20 #
调用APIinclude_answerTrue会返回一个综合性的回答21 response tavily.search(queryquery, search_depth“basic”, include_answerTrue)2223 #
Tavily返回的结果已经非常干净可以直接使用24 # response[‘answer’] 是一个基于所有搜索结果的
总结性回答25 if response.get(“answer”):26 return response[“answer”]2728 # 如果没有综合性回答则格式化原始结果29 formatted_results []30 for result in response.get(“results”, []):31 formatted_results.append(f- {result[‘title’]}: {result[‘content’]})3233 ifnot formatted_results:34 return抱歉没有找到相关的旅游景点推荐。
3536 return根据搜索为您找到以下信息\n “\n”.join(formatted_results)3738 except Exception as e:39 returnf错误执行Tavily搜索时出现问题 - {e}最后我们将所有工具函数放入一个字典供主循环调用1 将所有工具函数放入一个字典方便后续调用2 available_tools {3 “get_weather”: get_weather,4 “get_attraction”: get_attraction,5 }
1.
2 接入大语言模型当前许多LLM服务提供商包括OpenAI、Azure、以及众多开源模型服务框架如Ollama、vLLM等都遵循了与OpenAI API相似的接口规范。
这种标准化为开发者带来了极大的便利。
智能体的自主决策能力来源于LLM。
我们将实现一个通用的客户端OpenAICompatibleClient它可以连接到任何兼容OpenAI接口规范的LLM服务。
1 from openai import OpenAI23 classOpenAICompatibleClient:4 “”5 一个用于调用任何兼容OpenAI接口的LLM服务的客户端。
6 “”7 def__init__(self, model: str, api_key: str, base_url: str):8 self.model model9 self.client OpenAI(api_keyapi_key, base_urlbase_url)1011 defgenerate(self, prompt: str, system_prompt: str) - str:12 “”“调用LLM API来生成回应。
”“”13 print(“正在调用大语言模型…”)14 try:15 messages [16 {‘role’: ‘system’, ‘content’: system_prompt}, 17 {‘role’: ‘user’, ‘content’: prompt}18 ]19 response self.client.chat.completions.create( 20 modelself.model,21 messagesmessages,22 streamFalse23 )24 answer response.choices[0].message.content 25 print(“大语言模型响应成功。
”)26 return answer27 except Exception as e:28 print(f调用LLM API时发生错误: {e})29。
return错误调用语言模型服务时出错。
要实例化此类您需要提供三个信息API_KEY、BASE_URL和 MODEL_ID具体值取决于您使用的服务商如OpenAI官方、Azure、或Ollama等本地模型如果暂时没有渠道获取可以参考Datawhale另一本教程的
2 API设置。
1.
3 执行行动循环下面的主循环将整合所有组件并通过格式化后的Prompt驱动LLM进行决策。
1 import re23 # —
配置LLM客户端 —4 # 请根据您使用的服务将这里替换成对应的凭证和地址5 API_KEY “YOUR_API_KEY”6 BASE_URL “YOUR_BASE_URL”7 MODEL_ID “YOUR_MODEL_ID”8 TAVILY_API_KEY“YOUR_Tavily_KEY”9 os.environ[‘TAVILY_API_KEY’] “YOUR_TAVILY_API_KEY”1011 llm OpenAICompatibleClient(12 modelMODEL_ID,13 api_keyAPI_KEY,14 base_urlBASE_URL15 )1617 # —
初始化 —18 user_prompt “你好请帮我查询一下今天北京的天气然后根据天气推荐一个合适的旅游景点。
”19 prompt_history [f用户请求: {user_prompt}]2021 print(f用户输入: {user_prompt}\n “”*
2223 # —
运行主循环 —24 for i in range(
: # 设置最大循环次数25 print(f— 循环 {i1} —\n)2627 #
3.
构建Prompt28 full_prompt “\n”.join(prompt_history)2930 #
3.
调用LLM进行思考31 llm_output llm.generate(full_prompt, system_promptAGENT_SYSTEM_PROMPT)32 print(f模型输出:\n{llm_output}\n)33 prompt_history.append(llm_output)3435 #
3.
解析并执行行动36 action_match re.search(rAction: (.*), llm_output, re.DOTALL)37 ifnot action_match:38 print(“解析错误模型输出中未找到 Action。
”)39 break40 action_str action_match.group(
.strip()4142 if action_str.startswith(“finish”):43 final_answer re.search(r’finish(answer“(.*)”), action_str).group(
44 print(f任务完成最终答案: {final_answer})45 break4647 tool_name re.search(r(\w)(“, action_str).group(
48 args_str re.search(r”((.*)), action_str).group(
49 kwargs dict(re.findall(r’(\w)“([^”]*), args_str))5051 if tool_name in available_tools:52 observation available_toolstool_name53 else:54 observation f错误未定义的工具 ‘{tool_name}’5556 #
3.
记录观察结果57 observation_str fObservation: {observation}58 print(f{observation_str}\n “”*
59 prompt_history.append(observation_str)通过以上步骤我们构建了一个完整的、由真实LLM驱动的智能体。
其核心在于“工具”和“提示工程”的结合这正是当前主流智能体框架如LangChain、LlamaIndex等的设计精髓。
1.
4 运行
案例分析以下输出完整地展示了一个成功的智能体执行流程。
通过对这个三轮循环的分析我们可以清晰地看到智能体解决问题的核心能力。
1 用户输入: 你好请帮我查询一下今天北京的天气然后根据天气推荐一个合适的旅游景点。
2 3 — 循环 1 —45 正在调用大语言模型…6 大语言模型响应成功。
7 模型输出:8 Thought: 首先需要获取北京今天的天气情况之后再根据天气情况来推荐旅游景点。
9 Action: get_weather(city“北京”)1011 Observation: 北京当前天气Sunny气温26摄氏度12 13 — 循环 2 —1415 正在调用大语言模型…16 大语言模型响应成功。
17 模型输出:18 Thought: 现在已经知道了北京今天的天气是晴朗且温度适中接下来可以基于这个信息来推荐一个适合的旅游景点了。
19 Action: get_attraction(city“北京”, weather“Sunny”)2021 Observation: 北京在晴天最值得去的旅游景点是颐和园因其美丽的湖景和古建筑。
另一个推荐是长城因其壮观的景观和历史意义。
22 23 — 循环 3 —2425 正在调用大语言模型…26 大语言模型响应成功。
27 模型输出:28 Thought: 已经获得了两个适合晴天游览的景点建议现在可以根据这些信息给用户提供满意的答复。
29 Action: finish(answer今天北京的天气是晴朗的气温26摄氏度非常适合外出游玩。
我推荐您去颐和园欣赏美丽的湖景和古建筑或者前往长城体验其壮观的景观和深厚的历史意义。
希望您有一个愉快的旅行30 )31 任务完成最终答案: 今天北京的天气是晴朗的气温26摄氏度非常适合外出游玩。
我推荐您去颐和园欣赏美丽的湖景和古建筑或者前往长城体验其壮观的景观和深厚的历史意义。
希望您有一个愉快的旅行这个简单的旅行助手案例集中演示了基于Thought-Action-Observation范式的智能体所具备的四项基本能力任务分解、工具调用、上下文理解和结果合成。
正是通过这个循环的不断迭代智能体才得以将一个模糊的用户意图转化为一系列具体、可执行的步骤并最终达成目标。
4 智能体应用的协作模式上一节我们通过亲手构建一个智能体深入理解了其内部的运作循环。
不过在更广泛的应用场景中我们的角色正越来越多地转变为使用者与协作者。
基于智能体在任务中的角色和自主性程度其协作模式主要分为两种一种是作为高效工具深度融入我们的工作流另一种则是作为自主的协作者与其他智能体协作完成复杂目标。
1.
1 作为开发者工具的智能体在这种模式下智能体被深度集成到开发者的工作流中作为一种强大的辅助工具。
它增强而非取代开发者的角色通过自动化处理繁琐、重复的任务让开发者能更专注于创造性的核心工作。
这种人机协同的方式极大地提升了软件开发的效率与质量。
目前市场上涌现了多款优秀的AI编程辅助工具它们虽然均能提升开发效率但在实现路径和功能侧重上各有千秋GitHubCopilot: 作为该领域最具影响力的产品之一Copilot 由 GitHub 与 OpenAI 联合开发。
它深度集成于 Visual Studio Code等主流编辑器中以其强大的代码自动补全能力而闻名。
开发者在编写代码时Copilot 能实时提供整行甚至整个函数块的建议。
近年来它也通过 Copilot Chat 扩展了对话式编程的能力允许开发者在编辑器内通过聊天解决编程问题。
Claude Code: Claude Code 是由 Anthropic 开发的 AI 编程助手旨在通过自然语言指令帮助开发者在终端中高效地完成编码任务。
它能够理解完整的代码库结构执行代码编辑、测试和调试等操作支持从描述功能到代码实现的全流程开发。
Claude Code 还提供了无交互headless模式适用于 CI、pre-commit hooks、构建脚本和其他自动化场景为开发者提供了强大的命令行编程体验。
Trae: 作为新兴的 AI 编程工具Trae 专注于为开发者提供智能化的代码生成和优化服务。
它通过深度学习技术分析代码模式能够为开发者提供精准的代码建议和自动化重构方案。
Trae 的特色在于其轻量级的设计和快速响应能力特别适合需要频繁迭代和快速原型开发的场景。
Cursor: 与上述主要作为插件或集成功能存在的工具不同Cursor 则选择了一条更具整合性的路径它本身就是一个AI原生的代码编辑器。
它并非在现有编辑器上增加AI功能而是在设计之初就将AI交互作为核心。
除了具备顶级的代码生成和聊天能力外它更强调让AI理解整个代码库的上下文从而实现更深层次的问答、重构和调试。
当然还有许多优秀的工具没有例举不过它们共同指向了一个明确的趋势AI 正在深度融入软件开发的全生命周期通过构建高效的人机协同工作流深刻地重塑着软件工程的效率边界与开发范式。
1.
2 作为自主协作者的智能体与作为工具辅助人类不同第二种交互模式将智能体的自动化程度提升到了一个全新的层次自主协作者。
在这种模式下我们不再是手把手地指导AI完成每一步而是将一个高层级的目标委托给它。
智能体会像一个真正的项目成员一样独立地进行规划、推理、执行和反思直到最终交付成果。
这种从助手到协作者的转变使得LLM智能体更深的进入了大众的视野。
它标志着我们与AI的关系从“命令-执行”演变为“目标-委托”。
智能体不再是被动的工具而是主动的目标追求者。
当前实现这种自主协作的思路百花齐放涌现了大量优秀的框架和产品从早期的 BabyAGI、AutoGPT到如今更为成熟的 CrewAI、AutoGen、MetaGPT、LangGraph 等优秀框架共同推动着这一领域的高速发展。
虽然具体实现千差万别但它们的架构范式大致可以归纳为几个主流方向单智能体自主循环这是早期的典型范式如 AgentGPT 所代表的模式。
其核心是一个通用智能体通过“思考-规划-执行-反思”的闭环不断进行自我提示和迭代以完成一个开放式的高层级目标。
多智能体协作这是当前最主流的探索方向旨在通过模拟人类团队的协作模式来解决复杂问题。
它又可细分为不同模式 角色扮演式对话如 CAMEL 框架通过为两个智能体例如“程序员”和“产品经理”设定明确的角色和沟通协议让它们在一个结构化的对话中协同完成任务。
组织化工作流如 MetaGPT 和 CrewAI它们模拟一个分工明确的“虚拟团队”如软件公司或咨询小组。
每个智能体都有预设的职责和工作流程SOP通过层级化或顺序化的方式协作产出高质量的复杂成果如完整的代码库或研究报告。
AutoGen 和 AgentScope 则提供了更灵活的对话模式允许开发者自定义智能体间的复杂交互网络。
高级控制流架构诸如 LangGraph 等框架则更侧重于为智能体提供更强大的底层工程基础。
它将智能体的执行过程建模为状态图State Graph从而能更灵活、更可靠地实现循环、分支、回溯以及人工介入等复杂流程。
这些不同的架构范式共同推动着自主智能体从理论构想走向更广泛的实际应用使其有能力应对日益复杂的真实世界任务。
在我们的后续章节中也会感受不同类型框架之间的差异和优势。
1.
3 Workflow和Agent的差异在理解了智能体作为“工具”和“协作者”两种模式后我们有必要对Workflow和Agent的差异展开讨论尽管它们都旨在实现任务自动化但其底层逻辑、核心特征和适用场景却截然不同。
简单来说Workflow 是让 AI 按部就班地执行指令而 Agent 则是赋予 AI 自由度去自主达成目标。
图
6 Workflow和Agent的差异如图
6所示工作流是一种传统的自动化范式其核心是对一系列任务或步骤进行预先定义的、结构化的编排。
它本质上是一个精确的、静态的流程图规定了在何种条件下、以何种顺序执行哪些操作。
一个典型的案例某企业的费用报销审批流程。
员工提交报销单触发- 如果金额小于500元直接由部门经理审批 - 如果金额大于500元先由部门经理审批再流转至财务总监审批 - 审批通过后通知财务部打款。
整个过程的每一步、每一个判断条件都被精确地预先设定。
与工作流不同基于大型语言模型的智能体是一个具备自主性的、以目标为导向的系统。
它不仅仅是执行预设指令而是能够在一定程度上理解环境、进行推理、制定计划并动态地采取行动以达成最终目标。
LLM在其中扮演着“大脑”的角色。
一个典型的例子便是我们在
3节中写的智能旅行助手。
当我们向它下达一个新指令例如“你好请帮我查询一下今天北京的天气然后根据天气推荐一个合适的旅游景点。
” 它的处理过程充分展现了其自主性规划与工具调用Agent首先会把任务拆解为两个步骤① 查询天气② 基于天气推荐景点。
随即它会自主选择并调用“天气查询API”并将“北京”作为参数传入。
推理与决策假设API返回结果为“晴朗微风”。
Agent的LLM大脑会基于这个信息进行推理“晴天适合户外活动”。
接着它会根据这个判断在它的知识库或通过搜索引擎这个工具中筛选出北京的户外景点如故宫、颐和园、天坛公园等。
生成结果最后Agent会综合信息给出一个完整的、人性化的回答“今天北京天气晴朗微风非常适合户外游玩。
为您推荐前往【颐和园】您可以在昆明湖上泛舟欣赏美丽的皇家园林景色。
”在这个过程中没有任何写死的if天气晴天 then 推荐颐和园的规则。
如果天气是“雨天”Agent会自主推理并推荐国家博物馆、首都博物馆等室内场所。
这种基于实时信息进行动态推理和决策的能力正是Agent的
核心价值所在。
5 本章小结在本章中我们共同踏上了探索智能体的初识之旅。
我们的旅程从最基本的问题开始什么是大语言模型驱动的智能体我们首先明确了其定义理解了现代智能体是具备了能力的实体。
它不再仅仅是执行预设程序的脚本而是能够自主推理和使用工具的决策者。
智能体如何工作我们深入探讨了智能体与环境交互的运行机制。
我们了解到这个持续的闭环是智能体处理信息、做出决策、影响环境并根据反馈调整自身行为的基础。
如何构建智能体这是本章的实践核心。
我们以“智能旅行助手”为例亲手构建了一个完整的、由真实LLM驱动的智能体。
智能体有哪些主流的应用范式最后我们将视野投向了更广阔的应用领域。
我们探讨了两种主流的智能体交互模式一是以GitHub Copilot和Cursor等为代表的、增强人类工作流的“开发者工具”二是以CrewAI、MetaGPT和AgentScope等框架为代表的、能够独立完成高层级目标的“自主协作者”。
同时讲解了Workflow与Agent的差异。
通过本章的学习我们建立了一个关于智能体的基础认知框架。
那么它是如何一步步从最初的构想演进至今的呢在下一章中我们将探索智能体的发展历史一段追本溯源的旅程即将开始学AI大模型的正确顺序千万不要搞错了2026年AI风口已来各行各业的AI渗透肉眼可见超多公司要么转型做AI相关产品要么高薪挖AI技术人才机遇直接摆在眼前有往AI方向发展或者本身有后端编程基础的朋友直接冲AI大模型应用开发转岗超合适就算暂时不打算转岗了解大模型、RAG、Prompt、Agent这些热门概念能上手做简单项目也绝对是求职加分王给大家整理了超全最新的AI大模型应用开发学习清单和资料手把手帮你快速入门学习路线:✅大模型基础认知—大模型核心原理、发展历程、主流模型GPT、文心一言等特点解析✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑✅开发基础能力—Python进阶、API接口调用、大模型开发框架LangChain等实操✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经以上6大模块看似清晰好上手实则每个部分都有扎实的核心内容需要吃透我把大模型的学习全流程已经整理好了抓住AI时代风口轻松解锁职业新可能希望大家都能把握机遇实现薪资/职业跃迁这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】