什么是 agent?
Agent智能体(又称AI Agent)是一种具备自主感知、决策与行动能力的智能系统,其核心在于模仿人类的认知过程来处理复杂任务。以下是其关键特性和发展现状的综合分析:
一、核心定义与特征
### 自主决策能力
Agent能理解开放的自然语言指令,动态规划任务流程而非依赖预设规则,实现“感知→思考→行动”的闭环。
技术架构核心
规划(Planning):通过ReAct/CoT等提示工程技术拆解复杂任务;
记忆(Memory):短期记忆维持对话上下文,长期记忆存储用户数据(依托向量数据库);
工具(Tools):调用API/插件扩展能力(如文档解析、图像生成);
行动(Action):执行决策并影响环境。
与传统AI的差异
突破规则系统局限,融合确定性与自主性(如腾讯云支持工作流与智能体协同)。
agent 的常见类型
zeroShotReAct 零样本增强生成型
Structured Input ReAct 结构生成增强型
OpenAI Functions # openai 函数调用型,适合兼容gps
Conversational Agent # 对话生成性和memory 一起使用
Zero Shot,就是指大模型推理的一种任务,这种任务给大模型一个全新的事物让它去推理,这种事物在模型的训练数据中没有出现过。也就是“零准备”推理。
ReAct 实际上是一种框架,ReAct = Reason + Act,就是推理+行动。
React angent 是langchain 中一种聊天代理类型:它具有一下特点
(1)反思能力:react 代理在给出相应之前,会对自己的行为和预测进行反思和评估。检查自己是否遵循了预设定的规则和指令,是否达到了预期的目的。
(2)自我纠错:react 在代理反思的过程中发现自己的存在问题或疏漏他会主动尝试对自己的行为进行纠正和改正以修复错误。
(3)迭代学习:通过不断的反思和自我纠错,react 可以在与用户的交互中逐步学习和优化在自己的行为方式
(4)可解释性:React 代理在给出最终响应时,会提供自己的思考过程和决策依据
agent 与function calling
function call 是OPEN ai 推出的一种机,允许大模型根据用户提示选择调用预定义的函数 ,是轻量级智能体的核心技术。Function Call的工作流程包括:
模型根据用户问题选择需要调用的函数。
生成函数所需的参数并返回结构化输出。
开发者根据输出调用实际函数,并将结果返回给模型。
这种机制依赖于模型的微调,以确保其能够理解和生成符合函数签名的结构化数据。
MCP、Function call 、Agent 的区别
MCP:强调标准化和动态发现,适合需要实时交互的场景。
Function Call:强调结构化输出和确定性,适合轻量级工具调用。
Agent:强调任务拆解和动态规划,处理复杂任务处理。
代码示例
import os
from langchain.agents import load_tools
from langchain.agents import initialize_agent
from langchain.agents import AgentType
from langchain.llms import Tongyi
from langchain_ollama import ChatOllama
from langchain.tools import DuckDuckGoSearchRun
### 加载推理模型
llm = ChatOllama(
temperature=0,
model = "deepseek-r1:latest",
base_url = "http://localhost:11434"
)
# 构建工具 ddg-serach 为duckduck-search 在langchain 中的简称
tools = load_tools(["ddg-search", "llm-math"], llm=llm)
# agent 初始化
agent = initialize_agent(
tools,
llm,
agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
verbose=True)
agent.run("北京的面积和纽约的面积差是多少?")
自定义agent 工具
from langchain_core.tools import Tool
def query_order_status(order_id):
if order_id == "1024":
return "订单 1024 的状态是:已发货,预计送达时间是 3-5 个工作日。"
else:
return f"未找到订单 {order_id} 的信息,请检查订单号是否正确。"
tools = [Tool(
name="queryOrderStatus",
func=query_order_status,
description="根据订单ID查询订单状态",
args={"order_id": "订单的ID"}
)]
agent 添加记忆
# 传入一个空的消息列表给chat_history,因为它是聊天中的第一条消息
from langchain_core.messages import AIMessage, HumanMessage
chat_history = []
res = agent_executor.invoke({"input": "hello 我是波波老师", "chat_history": chat_history})
print("res", res)
# 添加记忆信息
chat_history.append(HumanMessage(content=res['input']))
chat_history.append(AIMessage(content=res['output']))
agent_executor.invoke(
{
"input": "我的名字是什么?",
"chat_history": chat_history
}
)