鱼C论坛

 找回密码
 立即注册
查看: 39|回复: 1

[AI工作流] 27. LangChain——Agent智能体介绍

[复制链接]
发表于 昨天 10:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 糖逗 于 2026-3-9 11:21 编辑
1. 什么是Agent?
智能体(Agent)是一种能够自主规划、决策、执行任务的组件,核心是让大语言模型(LLM)根据任务需求,选择并调用工具,完成单靠模型自身无法解决的复杂问题。
Agent智能体=大语言模型(大脑)+工具集(手脚)决策逻辑(思维)
下载 (48).png

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


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

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

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

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

  18. # 4. 创建 Agent
  19. agent = create_tool_calling_agent(
  20.     llm=llm,
  21.     tools=[get_weather],
  22.     prompt=prompt
  23. )

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

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

  32. print("最终回答:", res["output"])
复制代码


4. 流式输出
  1. # In[1]
  2. from langchain.agents import create_tool_calling_agent, AgentExecutor
  3. from langchain_openai import ChatOpenAI
  4. from langchain_core.tools import tool
  5. from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder


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

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

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

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

  25. agent = create_tool_calling_agent(llm=llm, tools=[get_price, get_info], prompt=prompt)
  26. agent_executor = AgentExecutor(agent=agent, tools=[get_price, get_info], verbose=False)

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

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

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

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



本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 昨天 10:54 | 显示全部楼层
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就能完成许多单靠大模型做不到的事情,比如精确计算、查询实时信息等。

代码实战修复与详解

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


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

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

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

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

  26. # 将定义的工具放入列表
  27. tools = [get_weather]

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

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

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


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


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

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

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


关键点说明:

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


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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-3-10 04:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表