糖逗 发表于 10 小时前

27. LangChain——Agent智能体介绍

本帖最后由 糖逗 于 2026-3-9 11:21 编辑

1. 什么是Agent?
智能体(Agent)是一种能够自主规划、决策、执行任务的组件,核心是让大语言模型(LLM)根据任务需求,选择并调用工具,完成单靠模型自身无法解决的复杂问题。
Agent智能体=大语言模型(大脑)+工具集(手脚)决策逻辑(思维)


核心特点:
目标驱动:围绕用户的具体任务目标展开工作。
工具调用能力:能连接外部工具,弥补 LLM 的局限性。
自主决策与迭代:不需要人工干预,能根据工具返回的结果,判断是否需要继续调用工具,或直接生成最终答案。



2. 代码实战体验
from langchain.agents import create_tool_calling_agent, AgentExecutor
from langchain_community.chat_models.tongyi import ChatTongyi
from langchain_core.tools import tool
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder

# 1. 定义工具
@tool(description="查询天气")
def get_weather() -> str:
    return "晴天"

# 2. 初始化大模型
llm = ChatTongyi(model="qwen-max")

# 3. 定义 Prompt (必须包含 agent_scratchpad)
prompt = ChatPromptTemplate.from_messages([
    ("system", "你是一个聊天助手,可以回答用户问题。"),
    ("human", "{input}"),
    # 注意:这里是占位符,用于存储 Agent 的思考过程和工具调用历史
    MessagesPlaceholder(variable_name="agent_scratchpad"),
])

# 4. 创建 Agent
agent = create_tool_calling_agent(
    llm=llm,
    tools=,
    prompt=prompt
)

# 5. 创建执行器 (AgentExecutor 才是真正运行的入口)
agent_executor = AgentExecutor(
    agent=agent,
    tools=,
    verbose=True# 打开详细日志,方便看思考过程
)

# 6. 执行调用
res = agent_executor.invoke({"input": "明天深圳的天气如何?"})

print("最终回答:", res["output"])

4. 流式输出
# In
from langchain.agents import create_tool_calling_agent, AgentExecutor
from langchain_openai import ChatOpenAI
from langchain_core.tools import tool
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder


# ================= 1. 定义工具 =================
@tool(description="获取股价,传入股票名称,返回字符串信息")
def get_price(name: str) -> str:
    return f"股票{name}的价格是20元"

@tool(description="获取股票信息,传入股票名称,返回字符串信息")
def get_info(name: str) -> str:
    return f"股票{name},是一家A股上市公司,专注于IT职业教育。"

# ================= 2. 初始化模型 =================
llm = ChatOpenAI(
    model="qwen3-max",
    temperature=0,
    openai_api_base="https://dashscope.aliyuncs.com/compatible-mode/v1"
)

# ================= 3. 标准 Agent 流程 =================
prompt = ChatPromptTemplate.from_messages([
    ("system", "你是一个智能助手,可以回答股票相关问题,请告知我思考过程。"),
    ("human", "{input}"),
    MessagesPlaceholder(variable_name="agent_scratchpad"),
])

agent = create_tool_calling_agent(llm=llm, tools=, prompt=prompt)
agent_executor = AgentExecutor(agent=agent, tools=, verbose=False)

# ================= 4. 【核心修改】流式输出 =================
print("--- 开始流式对话 ---\n")

for chunk in agent_executor.stream({"input": "传智教育股价多少,并介绍一下"}):
    # 1. 当 Agent 决定要调用工具时
    if "actions" in chunk:
      for action in chunk["actions"]:
            print(f"🤔 我需要查询信息,正在调用工具:【{action.tool}】")
            print(f"   📥 传入参数:{action.tool_input}\n")

    # 2. 当工具返回结果时
    elif "steps" in chunk:
      for step in chunk["steps"]:
            print(f"   📤 工具查询完毕,得到结果:{step.observation}\n")

    # 3. 当 Agent 输出最终回答时
    elif "output" in chunk:
      print(f"✅ 最终回答:{chunk['output']}")


FishC 发表于 10 小时前

27. LangChain——Agent智能体介绍

1. 什么是Agent?
智能体(Agent)是一种能够自主规划、决策、执行任务的组件,核心是让大语言模型(LLM)根据任务需求,选择并调用工具,完成单靠模型自身无法解决的复杂问题。
Agent智能体=大语言模型(大脑)+工具集(手脚)决策逻辑(思维)

核心特点:
目标驱动:围绕用户的具体任务目标展开工作。
工具调用能力:能连接外部工具,弥补 LLM 的局限性。
自主决策与迭代:不需要人工干预,能根据工具返回的结果,判断是否需要继续调用工具,或直接生成最终答案。

2. 代码实战体验
from langchain.agents import create_tool_calling_agent, AgentExecutor
from langchain_community.chat_models.tongyi import ChatTongyi
from langchain_core.tools import tool
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder

# 1. 定义工具
@tool(description="查询天气")
def get_weather() -> str:
    return "晴天"

# 2. 初始化大模型
llm = ChatTongyi(model="qwen-max")

# 3. 定义 Prompt (必须包含 agent_scratchpad)
prompt = ChatPromptTemplate.from_messages()

# 4. 创建 Agent
agent = create_tool_calling_agent(
    llm=llm,
    tools=,
    prompt=prompt
)

# 5. 创建执行器 (AgentExecutor 才是真正运行的入口)
agent_executor = AgentExecutor(
    agent=agent,
    tools=,
    verbose=True# 打开详细日志,方便看思考过程
)

# 6. 执行调用
res = agent_executor.invoke({"input": "明天深圳的天气如何?"})

print("最终回答:", res)


你好!Agent(智能体)是LangChain中非常强大的一个概念,它让大模型具备了使用“工具”的能力。我来为你详细解释并完善这个代码示例。

核心概念解读

你可以把Agent想象成一个聪明的“机器人”:

[*]大语言模型(如文心一言、通义千问)是它的大脑,负责理解和规划。
[*]各种工具(如计算器、搜索引擎、数据库接口)是它的手脚,负责执行具体操作。
[*]Agent框架提供的决策逻辑,则像它的思维链条,指导大脑何时、如何使用手脚。

这样组合起来,Agent就能完成许多单靠大模型做不到的事情,比如精确计算、查询实时信息等。

代码实战修复与详解

你提供的代码框架是正确的,但缺少几个关键部分。下面是一个完整、可运行的示例:


from langchain.agents import create_tool_calling_agent, AgentExecutor
from langchain_community.chat_models.tongyi import ChatTongyi
from langchain_core.tools import tool
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder

# 1. 定义一个简单的“天气查询”工具
@tool(description="查询指定城市的天气情况")
def get_weather(city_name: str) -> str:
    """根据城市名返回模拟的天气信息。在实际应用中,这里会调用真实的天气API。"""
    # 这里为了演示,直接返回一个模拟结果
    weather_data = {
      "北京": "晴,气温 5-15°C",
      "上海": "多云,气温 10-18°C",
      "深圳": "晴转多云,气温 20-28°C",
      "杭州": "小雨,气温 8-12°C"
    }
    return weather_data.get(city_name, f"未找到{city_name}的天气信息。")

# 2. 初始化大模型(请确保已设置通义千问的API_KEY环境变量)
llm = ChatTongyi(model="qwen-max")

# 3. 构建提示词模板。这是关键!它告诉Agent如何思考和工作。
# `agent_scratchpad` 是一个占位符,Agent会把它的思考步骤记录在这里。
prompt = ChatPromptTemplate.from_messages([
    ("system", "你是一个有用的助手,可以调用工具来回答问题。"),
    ("user", "{input}"),
    MessagesPlaceholder(variable_name="agent_scratchpad"),
])

# 将定义的工具放入列表
tools =

# 4. 创建Agent(大脑+思维逻辑)
agent = create_tool_calling_agent(
    llm=llm,
    tools=tools,      # 传入工具列表
    prompt=prompt
)

# 5. 创建执行器(真正驱动整个流程的“引擎”)
agent_executor = AgentExecutor(
    agent=agent,
    tools=tools,      # 这里同样需要传入工具
    verbose=True,       # 打开详细日志,可以看到Agent“思考”和“调用工具”的过程
    handle_parsing_errors=True # 优雅地处理解析错误
)

# 6. 执行调用!
print("开始提问...")
res = agent_executor.invoke({"input": "明天深圳的天气如何?"})
print("\n最终回答:", res['output'])


运行这个程序,你将看到类似以下输出(verbose模式):


开始提问...
> 进入新的AgentExecutor链...
我需要查询深圳的天气。
调用: `get_weather` 参数 `{'city_name': '深圳'}`

晴天,气温 20-28°C明天深圳的天气是晴天,气温在20到28摄氏度之间。

> 链结束。
最终回答: 明天深圳的天气是晴天,气温在20到28摄氏度之间。


关键点说明:


[*]工具(Tool):我们定义了一个 get_weather 函数。使用 @tool 装饰器后,它就变成了Agent可以识别和调用的“工具”。description 参数非常重要,大模型会根据它来决定是否以及如何调用这个工具。
[*]提示模板(PromptTemplate):必须包含 agent_scratchpad 这个占位符。这是Agent的“草稿纸”,它会把“我该用哪个工具?”、“工具返回了什么?”这些中间思考步骤记录在这里,并反馈给大模型进行下一步决策。
[*]执行器(AgentExecutor):它是实际运行的“驱动程序”。verbose=True 能让你清晰地看到Agent的完整思考链条,这对于调试和理解其工作原理非常有帮助。


希望这个详细的解释和完整的代码能帮助你理解LangChain Agent!你可以尝试修改工具函数(比如做一个计算器工具)或者提问不同的问题,看看Agent是如何工作的。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 27. LangChain——Agent智能体介绍