一文学会LangChain搭建Agent工具

Agent(智能代理)是一种能够感知环境、自主决策并执行任务的实体(可以是软件、机器人或系统)。它的核心能力在于自动化、智能化和适应性,广泛应用于多个领域。以下是Agent能做的事情,按场景分类说明:

1. 自动化任务处理

● 日常重复性工作:自动填写表格、整理数据、发送邮件。

● 流程自动化:替代人工完成订单处理、库存管理、报销审批等企业流程。

● 案例:企业中的RPA(机器人流程自动化)代理可自动处理财务对账。

2. 个性化服务

● 推荐系统:根据用户行为推荐商品(如电商)、内容(如短视频)或音乐(如Spotify)。

● 私人助理:管理日程、提醒事项(如Siri、Alexa),甚至预订餐厅。

● 案例:Netflix的推荐算法通过分析观看历史推荐影视剧。

3. 实时分析与决策

● 金融交易:高频交易Agent根据市场数据自动买卖股票。

● 风险控制:检测欺诈交易(如银行风控系统实时拦截异常刷卡)。

● 案例:天气预报Agent整合卫星数据,实时预测灾害并触发警报。

本文将从实际应用角度,带你学会Agent工具的编写。

前排提示,文末有大模型AGI-CSDN独家资料包哦!

2

环境准备

工欲善其事,必先利其器。

本文项目都是在Python环境下使用的,使用到的插件有:

● LangChain

● LangSmith

● 通义千问DashScope

其中LangChain是我们用到的大语言模型的主要Python插件。

2.1

LangChain简介

● LangChain 是一个用于开发由大型语言模型 (LLMs) 驱动的应用程序的框架。它简化了应用程序的开发流程,通过LangChain我们可以调用各个LLM大模型构建我们的应用。

● LangSmith是评估大模型能力好坏的评估工具,能够量化评估基于大模型的系统的效果。它允许您调试、测试、评估和监控基于任何 LLM 框架构建的链和智能代理,并无缝集成 LangChain(用于构建 LLM 的首选开源框架)。

2.2

搭建过程

● 安装Anaconda

自己下载安装。

● 创建Python 3.10环境

电脑开始菜单,打开Anaconda Prompt:

创建虚拟环境:

打开Anaconda Prompt窗口,输入:

conda create -n langchain python=3.10

进入langchain的Python 3.10环境:

conda activate langchain

安装依赖包:

pip install langchain-openai -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com

pip install langchain

pip install langchain-community dashscope

2.3

在线APIKEY申请

LangSmith密钥申请

1. 登录网址:https://www.langchain.com/langsmith

登录过程需要授权,使用GitHub账号授权验证:

2. 点击右上角Developer设置

3. 选择API Keys:

4. 创建一个API Key保留下来,作为LangChain的密钥:

这样就获得了LangChain的密钥

通义千问DashScope密钥申请

1. 登录网址:https://bailian.console.aliyun.com/?tab=model#/api-key

使用阿里云百炼平台,可支付宝扫码登录。

2. 进入APIKEY管理平台:https://bailian.console.aliyun.com/?tab=model#/api-key

3. 创建APIKEY,作为DashScope的密钥:

这样就获得了通义千问的密钥。

3

新建项目

打开PyCharm新建项目langchain-demo,选择刚刚创建的langchain环境:

可以核验下环境:

3.1

翻译英文功能

在langchain-demo中新建demo04.py文件,翻译英文,代码如下:

import os
from langchain_community.llms import Tongyi
from langchain_core.messages import HumanMessage, SystemMessage

os.environ["LANGCHAIN_TRACING_V2"]="true"
os.environ["LANGCHAIN_API_KEY"]="LANGCHAIN_API_KEY"# 此处为langsmith的API KEY
os.environ["DASHSCOPE_API_KEY"]="DASHSCOPE_API_KEY"# 此处为通义千问的API KEY

# 使用语言模型 通义千问
llm =Tongyi()

messages =[
SystemMessage(content="Translate the following from English into chinese."),
HumanMessage(content="hi!"),
]
print(llm.invoke(messages))

将前面APIKEY在线申请的LangSmith和阿里通义千问的APIKEY分别填入项目:

打开Anaconda Prompt进入langchain-demo项目目录:

运行demo04.py:

python demo04.py

将Hi!翻译为你好!

3.2

输出解析器功能

在langchain-demo中新建demo05.py文件,引入了LangChain的StrOutputParser解析器:

import os
from langchain_community.llms import Tongyi
from langchain_core.messages import HumanMessage, SystemMessage
from langchain_core.output_parsers import StrOutputParser

os.environ["LANGCHAIN_TRACING_V2"]="true"
os.environ["LANGCHAIN_API_KEY"]="LANGCHAIN_API_KEY"# 此处为langsmith的API KEY
os.environ["DASHSCOPE_API_KEY"]="DASHSCOPE_API_KEY"# 此处为通义千问的API KEY

# 输出解析器
llm =Tongyi()
parser =StrOutputParser()

messages =[
SystemMessage(content="Translate the following from English into chinese."),
HumanMessage(content="I am fine!"),
]

# | 运算符在 LangChain 中用于将两个元素组合在一起。
chain = llm | parser
print(chain.invoke(messages))

替换APIKEY密钥之后:

运行demo05.py文件,输出解析器功能:

3.3

设置提示词模板

设计一个LLM语言的提示词模板:

新建demo06.py文件,动态传入提示词:

import os
from langchain_community.llms import Tongyi
from langchain_core.messages import HumanMessage, SystemMessage
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate

os.environ["LANGCHAIN_TRACING_V2"]="true"
os.environ["LANGCHAIN_API_KEY"]="LANGCHAIN_API_KEY"# 此处为langsmith的API KEY
os.environ["DASHSCOPE_API_KEY"]="DASHSCOPE_API_KEY"# 此处为通义千问的API KEY

llm =Tongyi()
parser =StrOutputParser()

# 1.创建一个字符串,我们将格式化为系统消息
system_template ="Translate the following into {language}:"

# 2.创建 PromptTemplate。这将是 system_template 和一个更简单的模板的组合,用于放置要翻译的文本
prompt_template = ChatPromptTemplate.from_messages(
[("system", system_template),("user","{text}")]
)

chain = prompt_template | llm | parser

result = chain.invoke({"language":"chinese","text":"hello world"})
print(result)

替换APIKEY之后:

运行demo06.py:

python demo06.py

根据动态传入的语言:chinese,以及英文单词hello world翻译结果:

3.4

使用LangServe提供服务

使用LangServe, LangServe 帮助开发者将 LangChain 链部署为 REST WEB服务。

首先安装LangServe

打开Anaconda Prompt安装LangServe:

pip install “langserve[all]”

编写服务器serve.py文件

import os
from fastapi import FastAPI
from langchain_community.llms import Tongyi
from langchain_core.messages import HumanMessage, SystemMessage
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langserve import add_routes

os.environ["LANGCHAIN_TRACING_V2"]="true"
os.environ["LANGCHAIN_API_KEY"]="LANGCHAIN_API_KEY"# 此处为langsmith的API KEY
os.environ["DASHSCOPE_API_KEY"]="DASHSCOPE_API_KEY"# 此处为通义千问的API KEY

llm =Tongyi()
parser =StrOutputParser()

system_template ="Translate the following into {language}:"

prompt_template = ChatPromptTemplate.from_messages(
[("system", system_template),("user","{text}")]
)

chain = prompt_template | llm | parser

app =FastAPI(
    title="花宇心坊翻译机器Server",
    version="1.0",
    description="A simple API server using LangChain's Runnable interfaces",
)

add_routes(
    app,
    chain,
    path="/chain",
)

if __name__ =="__main__":
    import uvicorn

    uvicorn.run(app, host="localhost", port=8000)

将启动一个WEB服务,更新APIKEY:

运行WEB程序:

python serve.py

出现了类似SpringBoot项目启动的模板,都是WEB服务。

打开浏览器,输入:

http://localhost:8000/chain/playground/

输入我们想翻译的语言德语:

German language

以及翻译内容:

我想有个家

点击Start查看翻译结果:

具体详细步骤:

客户端client.py调用服务端

编写client.py文件调用服务器端接口获取数据:

from langserve import RemoteRunnable
 
remote_chain =RemoteRunnable("http://localhost:8000/chain/")
result = remote_chain.invoke({"language":"chinese","text":"hi"})
print(result)

从服务端进行远程调用,查看运行结果,再开一个Anaconda Prompt:

python client.py

成功将hi翻译为中文你好,以上是LangChain接入大语言模型的用法,接下来进入Agent部分。

4

AI Agent智能体搭建

4.1

环境安装

还是在Anaconda Prompt里的langchain环境下安装相关依赖:

pip install -U langchain-community langgraph langchain-anthropic tavily-python

4.2

在线APIKEY申请

使用Tavily 搜索引擎,为了使用它,您需要获取并设置一个 API 密钥:https://app.tavily.com/home

使用GitHub登录:

完成授权之后即可使用,会有一个默认的KEY可以使用:

5

Agent实际案例

5.1

查询深圳天气

编写agent01.py文件,调用Tavily使用Tool查询深圳天气:

import os
from langchain_community.tools.tavily_search import TavilySearchResults

# 使用Tavily 搜索引擎:https://app.tavily.com/home
os.environ["TAVILY_API_KEY"]="TAVILY_API_KEY"
os.environ["LANGCHAIN_API_KEY"]="LANGCHAIN_API_KEY"

search =TavilySearchResults(max_results=2)
search_results = search.invoke("深圳天气怎么样?")
print(search_results)
# If we want, we can create other tools.
# Once we have all the tools we want, we can put them in a list that we will reference later.
tools =[search]

将TAVILT KEY和LangChain KEY替换后:

执行search工具,运行agent01.py:

查询了深圳市的天气预报,返回格式是富文本,需要做处理后才可正常显示。

5.2

根据LangChain+通义千问构建Agent

根据前面申请的通义千问KEY和LangChain调用LLMChain获取Agent模型调用。

新建agent02.py文件:

import os
from langchain_community.tools.tavily_search import TavilySearchResults
from langgraph.prebuilt import create_react_agent
from langchain_community.llms import Tongyi
from langchain.chains import LLMChain
from langchain.prompts import PromptTemplate

# 使用Tavily 搜索引擎:https://app.tavily.com/home
os.environ["TAVILY_API_KEY"]="TAVILY_API_KEY"
os.environ["LANGCHAIN_API_KEY"]="LANGCHAIN_API_KEY"
os.environ["DASHSCOPE_API_KEY"]="DASHSCOPE_API_KEY"

llm=Tongyi(temperature=1)
template='''
        你的名字是小黑子,当人问问题的时候,你都会在开头加上'唱,跳,rap,篮球!',然后再回答{question}
    '''
prompt=PromptTemplate(
        template=template,
        input_variables=["question"]#这个question就是用户输入的内容,这行代码不可缺少
)
chain =LLMChain(#将llm与prompt联系起来
        llm=llm,
        prompt=prompt
)
question='你是谁'
res=chain.invoke(question)#运行
print(res['text'])#打印结果

将TAVILY和LangChain以及通义千问DashScope的APIKEY复制粘贴进来:

根据Template指令,询问模型你是谁,看看结果:

python agent02.py

成功获得模型返回结果。

5.3

构建数学运算Agent

下面是一个示例工具类 MyAgentTool,其中定义了一个用于执行基本数学计算的工具 math。

from langchain.agents import Tool
from typing import Any

class MyAgentTool:
    def __init__(self)->None:
# 初始化工具,可以在此添加更多本地工具
        pass

    def tools(self):
return[
Tool(
                name="math",
                description="用于执行基本的数学计算,比如加减乘除。",
                func=self.math_tool,
),
Tool(
                name="compare_numbers",
                description="比较两个数的大小,格式:'num1,num2'。",
                func=self.compare_numbers,
)
]

    def math_tool(self,input: str)->str:
"""
        简单的数学计算工具,解析输入的数学表达式并返回结果。
        """
try:
# 安全地计算数学表达式
# 仅允许数字和基本运算符
            allowed_chars ="0123456789+-*/(). "
ifnotall(char in allowed_chars for char in input):
return"输入包含不允许的字符。"
            result =eval(input)
returnstr(result)
        except Exception as e:
return f"计算错误: {e}"

    def compare_numbers(self,input: str)->str:
"""
        比较两个数的大小,输入格式为 'num1,num2'。
        返回比较结果:num1 > num2, num1 < num2 或 num1 = num2。
        """
try:
# 解析输入字符串为两个数字
            num1_str, num2_str = input.split(',')
            num1 =float(num1_str.strip())
            num2 =float(num2_str.strip())

# 比较两个数字的大小
if num1 >num2:
return f"{num1} > {num2}"
            elif num1 <num2:
return f"{num1} < {num2}"
else:
return f"{num1} = {num2}"
        except ValueError:
return"输入格式错误,请使用 'num1,num2' 形式。"

# 实例化工具类
tools =MyAgentTool()

# 调用 math 工具
print(tools.math_tool("3 + 5 * 2"))# 输出: 13
print(tools.math_tool("10 / 2 - 3"))# 输出: 2.0
print(tools.math_tool("import os"))# 输出: 输入包含不允许的字符。

方法说明了它是数学工具,定义了两个函数:

math:用于执行基本的数学计算,比如加减乘除。

compare_numbers:比较两个数的大小,格式:'num1,num2。

并注册为Tool工具

先运行一下:

python MyAgentTool.py

根据

返回运行工具结果:

编写一个agent03.py调用MyAgentTool工具:

import os
from langchain.agents import AgentExecutor, LLMSingleActionAgent, AgentOutputParser
from langchain.prompts import StringPromptTemplate
from langchain.chains import LLMChain
from typing import List, Union, Any
from langchain.schema import AgentAction, AgentFinish, OutputParserException
import re
from langchain_community.chat_models.tongyi import ChatTongyi
from langchain_core.tools import Tool

from MyAgentTool import MyAgentTool

# 使用Tavily 搜索引擎:https://app.tavily.com/home
os.environ["TAVILY_API_KEY"]="TAVILY_API_KEY"
os.environ["LANGCHAIN_API_KEY"]="LANGCHAIN_API_KEY"
os.environ["DASHSCOPE_API_KEY"]="DASHSCOPE_API_KEY"
class MyAgent:
    def __init__(self)->None:
# Agent 的提示词模板
        self.template ="""请尽可能详细地回答下面的问题,你将始终用中文回答。当需要时,你可以使用以下工具:
                        {tools}
                        请按照以下格式回答:
                        Question: {input}
                        Thought: 你应该思考下一步该做什么
                        Action: 选择一个操作,必须是以下工具之一 [{tool_names}]
                        Action Input: 该操作的输入
                        Observation: 该操作的结果
                        ...(此 Thought/Action/Action Input/Observation 可以重复多次)
                        Thought: 我现在知道最终的答案了
                        Final Answer: {final_answer}
                        现在开始! 记住使用中文回答,如果使用英文回答将受到惩罚。
                        Question: {input}
                        {agent_scratchpad}"""

# 定义语言模型(LLM)
        self.llm =ChatTongyi(model='qwen-plus')

# 初始化工具列表
        self.tools =MyAgentTool().tools()

# 创建 Agent 的提示词
        self.prompt = self.MyTemplate(
            template=self.template,
            tools=self.tools,
            input_variables=["input","intermediate_steps"],
)

# 定义 LLMChain
        self.llm_chain =LLMChain(
            llm=self.llm,
            prompt=self.prompt
)

# 获取工具名称列表
        self.toolnames =[tool.name for tool in self.tools]

# 定义一个 LLMSingleActionAgent
        self.agent =LLMSingleActionAgent(
            llm_chain=self.llm_chain,
            allowed_tools=self.toolnames,
            output_parser=self.MyOutputParser(),
            stop=["\nObservation:"],
)

# 运行 Agent 的方法
    def run(self,input: str)->str:
        agent_executor = AgentExecutor.from_agent_and_tools(
            agent=self.agent,
            tools=self.tools,
            handle_parsing_errors=True,
            verbose=True
)
return agent_executor.run(input=input)

# 自定义模板渲染类
class MyTemplate(StringPromptTemplate):
template: str
tools: List[Tool]

        def format(self,**kwargs: Any)->str:
# 获取中间步骤
            intermediate_steps = kwargs.pop("intermediate_steps")
            thoughts =""
for action, observation inintermediate_steps:
                thoughts += action.log
                thoughts += f"\nObservation: {observation}\nThought: "

# 将 agent_scratchpad 设置为该值
            kwargs["agent_scratchpad"]= thoughts

# 从提供的工具列表中创建一个名为 tools 的变量
            kwargs["tools"]="\n".join([f"{tool.name}: {tool.description}"for tool in self.tools])

# 创建一个提供的工具名称列表
            kwargs["tool_names"]=", ".join([tool.name for tool in self.tools])

# 确保传递 final_answer 变量
if"final_answer"notinkwargs:
                kwargs["final_answer"]="暂时没有答案"

return self.template.format(**kwargs)

# 自定义输出解析类
class MyOutputParser(AgentOutputParser):
        def parse(self,output: str)-> Union[AgentAction, AgentFinish]:
if"Final Answer:"inoutput:
return AgentFinish(
                    return_values={"output": output.split("Final Answer:")[-1].strip()},
                    log=output,
)
# 使用正则解析出动作和动作输入
            regex = r"Action\s*\d*\s*:(.*?)\nAction\s*\d*\s*Input\s*\s*:(.*)"
            match = re.search(regex, output, re.DOTALL)
ifnotmatch:
                raise OutputParserException(f"无法解析 LLM 输出: `{output}`")
            action = match.group(1).strip()
            action_input = match.group(2).strip(" ").strip('"')
# 返回操作和操作输入
return AgentAction(tool=action, tool_input=action_input, log=output)

if __name__ =="__main__":
    myagent =MyAgent()
    question ="请计算以下表达式的结果:2 + 3 * 4 - 5 / 2"
    result = myagent.run(question)
print("Agent 的回答:", result)
    question ="请比较以下两个数字的大小:10, 20"
    result = myagent.run(question)
print("Agent 的回答:", result)
 

更新Tavily、LangChain和通义DashScope里面的APIKEY:

提示词模板 (self.template)

提示词模板定义了 Agent 如何组织其思考和行动流程。这是与语言模型交互的关键部分。

占位符解释:

{tools}:列出所有可用工具及其描述。

{input}:用户输入的问题。

{tool_names}:所有工具的名称列表。

{agent_scratchpad}:中间步骤记录,包括思考、行动、观察结果。

语言模型(LLM)

使用 ChatTongyi 作为语言模型。

self.llm = ChatTongyi(model=‘qwen-plus’)

说明:

ChatTongyi 是来自 langchain_community 的自定义语言模型。请根据实际使用的模型调整。

工具集成

初始化工具列表,并获取所有工具的名称。

self.tools = MyAgentTool().tools()

self.toolnames = [tool.name for tool in self.tools]

LLMChain

将语言模型和提示词模板结合,创建一个 LLMChain 实例。

self.prompt = self.MyTemplate( template=self.template, tools=self.tools, input_variables=[“input”, “intermediate_steps”], )

self.llm_chain = LLMChain( llm=self.llm, prompt=self.prompt )

说明:

LLMChain 负责将提示词模板传递给语言模型,并获取生成的响应。

Agent 初始化

使用 LLMSingleActionAgent 定义 Agent 的行为。

self.agent = LLMSingleActionAgent( llm_chain=self.llm_chain, allowed_tools=self.toolnames, output_parser=self.MyOutputParser(), stop=[“\nObservation:”], )

参数说明:

llm_chain:与语言模型和提示词模板关联的链。

allowed_tools:Agent 允许调用的工具名称列表。

output_parser:自定义的输出解析器,用于解析语言模型的输出。

stop:停止词,指示语言模型在生成特定内容后停止。

运行 Agent

通过实例化 MyAgent 类并调用 run 方法,可以让 Agent 处理输入问题并返回回答。

if __name__ =="__main__":
    myagent =MyAgent()
    question ="请计算以下表达式的结果:2 + 3 * 4 - 5 / 2"
    result = myagent.run(question)
print("Agent 的回答:", result)
    question ="请比较以下两个数字的大小:10, 20"
    result = myagent.run(question)
print("Agent 的回答:", result)

查看结果:

python agent03.py

完整展示Agent Tool的功能,本文完成LangChain实现Agent工具的方法,完整示例代码在:https://gitee.com/javagongfu/langchain-demo

零基础如何高效学习大模型?

为了帮助大家打破壁垒,快速了解大模型核心技术原理,学习相关大模型技术。从原理出发真正入局大模型。在这里我和MoPaaS魔泊云联合梳理打造了系统大模型学习脉络,这份 LLM大模型资料 分享出来:包括LLM大模型书籍、640套大模型行业报告、LLM大模型学习视频、LLM大模型学习路线、开源大模型学习教程等, 😝有需要的小伙伴,可以 扫描下方二维码免费领取🆓**⬇️⬇️⬇️

在这里插入图片描述

【大模型全套视频教程】

教程从当下的市场现状和趋势出发,分析各个岗位人才需求,带你充分了解自身情况,get 到适合自己的 AI 大模型入门学习路线。

从基础的 prompt 工程入手,逐步深入到 Agents,其中更是详细介绍了 LLM 最重要的编程框架 LangChain。最后把微调与预训练进行了对比介绍与分析。

同时课程详细介绍了AI大模型技能图谱知识树,规划属于你自己的大模型学习路线,并且专门提前收集了大家对大模型常见的疑问,集中解答所有疑惑!

在这里插入图片描述

深耕 AI 领域技术专家带你快速入门大模型

跟着行业技术专家免费学习的机会非常难得,相信跟着学习下来能够对大模型有更加深刻的认知和理解,也能真正利用起大模型,从而“弯道超车”,实现职业跃迁!

在这里插入图片描述

【精选AI大模型权威PDF书籍/教程】

精心筛选的经典与前沿并重的电子书和教程合集,包含《深度学习》等一百多本书籍和讲义精要等材料。绝对是深入理解理论、夯实基础的不二之选。

在这里插入图片描述

【AI 大模型面试题 】

除了 AI 入门课程,我还给大家准备了非常全面的**「AI 大模型面试题」,**包括字节、腾讯等一线大厂的 AI 岗面经分享、LLMs、Transformer、RAG 面试真题等,帮你在面试大模型工作中更快一步。

【大厂 AI 岗位面经分享(92份)】

图片

【AI 大模型面试真题(102 道)】

图片

【LLMs 面试真题(97 道)】

图片

【640套 AI 大模型行业研究报告】

在这里插入图片描述

【AI大模型完整版学习路线图(2025版)】

明确学习方向,2025年 AI 要学什么,这一张图就够了!

img

👇👇点击下方卡片链接免费领取全部内容👇👇

在这里插入图片描述

抓住AI浪潮,重塑职业未来!

科技行业正处于深刻变革之中。英特尔等巨头近期进行结构性调整,缩减部分传统岗位,同时AI相关技术岗位(尤其是大模型方向)需求激增,已成为不争的事实。具备相关技能的人才在就业市场上正变得炙手可热。

行业趋势洞察:

  • 转型加速: 传统IT岗位面临转型压力,拥抱AI技术成为关键。
  • 人才争夺战: 拥有3-5年经验、扎实AI技术功底真实项目经验的工程师,在头部大厂及明星AI企业中的薪资竞争力显著提升(部分核心岗位可达较高水平)。
  • 门槛提高: “具备AI项目实操经验”正迅速成为简历筛选的重要标准,预计未来1-2年将成为普遍门槛。

与其观望,不如行动!

面对变革,主动学习、提升技能才是应对之道。掌握AI大模型核心原理、主流应用技术与项目实战经验,是抓住时代机遇、实现职业跃迁的关键一步。

在这里插入图片描述

01 为什么分享这份学习资料?

当前,我国在AI大模型领域的高质量人才供给仍显不足,行业亟需更多有志于此的专业力量加入。

因此,我们决定将这份精心整理的AI大模型学习资料,无偿分享给每一位真心渴望进入这个领域、愿意投入学习的伙伴!

我们希望能为你的学习之路提供一份助力。如果在学习过程中遇到技术问题,也欢迎交流探讨,我们乐于分享所知。

*02 这份资料的价值在哪里?*

专业背书,系统构建:

  • 本资料由我与MoPaaS魔泊云的鲁为民博士共同整理。鲁博士拥有清华大学学士美国加州理工学院博士学位,在人工智能领域造诣深厚:

    • 在IEEE Transactions等顶级学术期刊及国际会议发表论文超过50篇
    • 拥有多项中美发明专利。
    • 荣获吴文俊人工智能科学技术奖(中国人工智能领域重要奖项)。
  • 目前,我有幸与鲁博士共同进行人工智能相关研究。

在这里插入图片描述

内容实用,循序渐进:

  • 资料体系化覆盖了从基础概念入门核心技术进阶的知识点。

  • 包含丰富的视频教程实战项目案例,强调动手实践能力。

  • 无论你是初探AI领域的新手,还是已有一定技术基础希望深入大模型的学习者,这份资料都能为你提供系统性的学习路径和宝贵的实践参考助力你提升技术能力,向大模型相关岗位转型发展

    在这里插入图片描述在这里插入图片描述在这里插入图片描述

抓住机遇,开启你的AI学习之旅!

在这里插入图片描述

<think>我们被要求解释Langchain Chain、Langchain Agent和LangGraph之间的区别。根据引用内容,我们可以这样分析: 1. **Langchain Chain**:是LangChain中的基本构建块,用于将多个组件(如模型、提示、其他链)连接起来形成线性工作流。它按照预定义的顺序执行任务,适合确定性任务(如RAG流程)。引用[3]提到Router Chain是Chain的种,用于根据输入将任务路由到不同的子链[^3]。 2. **Langchain Agent**:代理(Agent)是更高级的抽象,能够根据输入动态决定调用哪些工具(如搜索、计算、API等)。它通过循环的“思考-行动”过程处理复杂任务,但成本不可预测(引用[2])[^2]。Agent适合需要动态决策的场景。 3. **LangGraph**:是LangChain生态系统中的新成员,专注于构建有状态的、基于图的执行流程。它允许节点之间有任意连接,支持循环、分支和并行处理。引用[1]强调LangGraph完全集成到LangChain生态中,可利用LangSmith进行观测[^1]。引用[2]指出LangGraph在处理复杂状态(如多轮对话)时更灵活[^2]。 ### 核心区别总结: | **特性** | **LangChain Chain** | **LangChain Agent** | **LangGraph** | |------------------------|----------------------------|----------------------------|----------------------------| | **架构** | 线性顺序执行 | 代理循环(思考-行动) | 有状态图(节点+边) | | **决策能力** | 固定流程 | 动态选择工具 | 支持循环、分支、并行 | | **适用场景** | 确定性任务(如RAG) | 需要动态工具调用的任务 | 复杂状态管理(如多轮对话) | | **状态管理** | 无状态(每次执行独立) | 有状态(通过记忆机制) | 内置状态管理 | | **与LangChain集成** | 核心组件 | 核心组件 | 完全集成(LangSmith等)[^1]| | **复杂度** | 低(简单链)到中(组合链) | 中到高(依赖工具调用) | 高(需设计图结构) | ### 详细说明: 1. **LangChain Chain**: - 设计思想:通过组合预定义组件(如LLM调用、数据检索)形成**线性流程**。例如,个典型的RAG链包括:检索文档 → 生成提示 → 调用LLM → 输出结果。 - 优势:执行高效、成本可控。 - 局限:缺乏灵活性,无法根据中间结果动态调整流程。 - 典型应用:引用[3]中的Router Chain,它根据输入将任务分配给不同的子链(如“数学问题”路由到数学链,“历史问题”路由到历史链)[^3]。 2. **LangChain Agent**: - 设计思想:代理通过**ReAct模式**(Reasoning and Acting)循环执行:解析输入 → 选择工具 → 执行工具 → 分析结果 → 决定下步[^2]。 - 优势:动态适应复杂场景(如多工具协作)。 - 局限:工具调用次数不可预测,可能增加延迟和成本。 - 示例:用户查询“特斯拉老板的年龄”,代理可能先搜索“特斯拉老板是谁”,再搜索“埃隆·马斯克的年龄”。 3. **LangGraph**: - 设计思想:将工作流建模为**有向图**,节点代表操作(如调用LLM、工具),边定义状态流转逻辑。支持循环(如持续对话直到满足条件)和分支(如错误重试)[^1][^2]。 - 优势:处理**长期运行、有状态的任务**(如客服机器人)。 - 关键特性:状态(State)在节点间传递,可存储中间结果。 - 集成优势:无缝使用LangChain工具和LangSmith监控。 ### 何时选择? - **用Chain**:任务流程固定且无需动态决策(如文档摘要、翻译)。 - **用Agent**:需要动态调用外部工具(如实时搜索、API集成)。 - **用LangGraph**:任务涉及复杂状态流转(如多轮审批、游戏AI)或需要并行/重试逻辑[^2]。 ### 代码示例对比 #### LangChain Chain(线性RAG流程): ```python from langchain.chains import RetrievalQA from langchain_community.vectorstores import Chroma # 固定流程:检索 → 生成 qa_chain = RetrievalQA.from_chain_type( llm=ChatOpenAI(), retriever=Chroma.from_texts(["特斯拉老板是埃隆·马斯克"]).as_retriever() ) result = qa_chain.invoke("特斯拉老板是谁?") # 输出固定答案 ``` #### LangChain Agent(动态工具调用): ```python from langchain.agents import AgentExecutor, create_openai_tools_agent # 代理决定何时调用搜索工具 agent = create_openai_tools_agent(ChatOpenAI(), [TavilySearchTools()]) agent_executor = AgentExecutor(agent=agent, tools=tools) result = agent_executor.invoke("特斯拉老板的年龄?") # 可能调用两次搜索工具 ``` #### LangGraph(有状态对话): ```python from langgraph.graph import StateGraph # 定义状态和节点 class AgentState(TypedDict): input: str history: list[str] def llm_node(state: AgentState): return {"response": ChatOpenAI().invoke(state["input"])} # 构建图 → 支持循环 graph = StateGraph(AgentState) graph.add_node("llm", llm_node) graph.add_edge("llm", END) # 可添加条件分支 app = graph.compile() ``` --- ### 总结 - **Chain**:线性管道,高效处理确定性任务。 - **Agent**:动态代理,灵活调用工具解决开放性问题。 - **LangGraph**:图引擎,管理复杂状态和流程(如循环对话)[^1][^2]。 --- §§相关问题§§ 1. 如何根据任务复杂度选择Chain、Agent或LangGraph? 2. LangGraph在哪些场景下比传统Agent更有优势? 3. 如何将现有的LangChain Chain迁移到LangGraph? [^1]: Autogen 和 LangGraph 之间的另个关键区别是 LangGraph 完全集成到 LangChain 生态系统中... [^2]: 文彻底搞懂LangChain 和 LangGraph该怎么选?何时选?... [^3]: 【AI大模型学习路线】第三阶段之RAG与LangChain——第十五章(LangChain与Chain组件)Router Chain详解...</think>### LangChain Chain、LangChain Agent 与 LangGraph 的区别详解 以下是三者的核心区别对比,基于引用内容整理: | **特性** | **LangChain Chain** | **LangChain Agent** | **LangGraph** | |-------------------------|----------------------------------------|----------------------------------------|----------------------------------------| | **架构核心** | 线性执行流程 | 动态工具调用循环 | 有状态图结构(节点+边) | | **决策机制** | 预定义顺序执行 | 基于LLM的实时工具选择 | 支持循环/分支/并行处理[^2] | | **状态管理** | 无状态(每次执行独立) | 有限状态(通过记忆机制) | 内置状态管理(跨节点传递) | | **适用场景** | 确定性任务(如RAG)[^3] | 动态工具调用(如搜索/计算) | 复杂工作流(如多轮对话/审批) | | **错误处理** | 简单异常捕获 | 有限重试逻辑 | 内置重试和错误路由[^2] | | **与LangChain集成** | 核心组件 | 核心组件 | 完全集成生态(含LangSmith)[^1] | | **典型组件** | `SequentialChain`, `RouterChain`[^3] | `ReAct Agent`, `OpenAI Functions` | 状态图(StateGraph) | --- ### 详细解析 #### 1. **LangChain Chain:线性执行引擎** - **设计思想**:通过预定义组件(LLM、工具、提示模板)构建**确定性工作流** - **核心特征**: - 固定执行顺序:`输入 → 组件A → 组件B → 输出` - 支持条件路由:如`RouterChain`根据输入选择子链[^3] - 适用场景: ```python # 示例:顺序链(文档摘要 → 翻译) chain = SequentialChain( chains=[summary_chain, translate_chain], input_variables=["document"] ) ``` - **局限**:无法动态调整流程,缺乏复杂状态管理 #### 2. **LangChain Agent:动态决策代理** - **设计思想**:基于LLM的**思考-行动循环**(ReAct模式) - **核心特征**: - 动态工具选择:根据输入实时调用工具(搜索/API/计算) - 记忆机制:维护短期对话历史 - 执行流程: ```mermaid graph LR A[用户输入] --> B{LLM决策} B -->|选择工具| C[工具执行] C --> D{是否完成?} D -->|否| B D -->|是| E[输出结果] ``` - **优势**:处理开放性问题(如“特斯拉老板的年龄?”需先查身份再查年龄) - **局限**:复杂状态处理困难,循环逻辑实现复杂[^2] #### 3. **LangGraph:图工作流引擎** - **设计思想**:**有向图结构**管理状态流转 - **核心突破**: - 节点(Node):执行单元(LLM/工具/条件判断) - 边(Edge):定义状态转移逻辑 - 状态(State):跨节点传递数据 - **关键能力**: - 循环处理:`聊天机器人`持续对话直到满足退出条件 - 并行执行:同时调用多个API - 错误重试:自动路由失败任务[^2] - **代码示例**: ```python from langgraph.graph import StateGraph class AgentState(TypedDict): user_query: str search_results: list # 构建图 graph = StateGraph(AgentState) graph.add_node("search", search_tool) graph.add_node("llm", llm_processor) graph.add_edge("search", "llm") # 搜索完成后转LLM处理 graph.set_entry_point("search") ``` --- ### 何时选择? | **场景** | **推荐方案** | **原因** | |---------------------------|---------------------|---------------------------------------| | 固定流程(如文档处理) | Chain | 高效且成本可控 | | 需动态工具调用 | Agent | 实时决策能力强大 | | 多轮对话/复杂审批流 | LangGraph | 状态管理和循环支持完善[^2] | | 需要LangSmith监控 | LangGraph | 深度集成可观测性工具[^1] | > 关键洞察:LangGraph不是替代Chain/Agent,而是**扩展**——它可封装Chain和Agent作为节点,构建更复杂的工作流[^2]。 --- ### 典型应用案例 1. **Chain**: - RAG流水线:`检索 → 生成 → 格式化输出`[^3] - 分类路由:`RouterChain`将数学问题/历史问题分发给专用链 2. **Agent**: - 实时数据分析:调用搜索引擎 + 计算工具 + 图表生成API - 客服机器人:根据问题类型选择知识库/订单系统工具 3. **LangGraph**: - 保险理赔系统: ``` 用户提交 → 文件审核 → (通过)支付 | (失败)转人工 → 通知用户 ``` - 多角色协作:销售Agent、技术Agent、审批Agent通过状态图协同[^2] ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值