1.认识LangChain

LangChain是智能体开发平台,包含一套各种帮助开发、测试、评估智能体的框架。核心包括:

  • LangChain:用于快速构建智能体,可兼容任何模型提供商。
  • LangGraph:从底层一步步控制智能体的构建,包括记忆(Memory)、人机协同(HITL)等
  • Deep Agents:用于构建复杂的、处理多步骤的任务的智能体
  • LangSmith:用于测试、观察、评估、部署智能体

2.什么是Agent

在人工智能领域,Agent(通常翻译为智能体代理是指一种能够感知环境、进行推理、自主决策并采取行动以实现特定目标的智能系统。如果说大模型(LLM)是“大脑”,那么 Agent 就是“拥有手脚和思维逻辑的独立个体”。它不再只是被动地回答问题,而是能主动拆解任务并调用各种工具来完成工作。

特性

传统聊天机器人/LLM

AI Agent

交互模式

被动响应,问一句答一句

主动规划,以目标为导向

执行力

停留在文本生成层面

能操作软件、发送邮件、分析数据

自主性

需要人类给出详细步骤

只需给定最终目标,自主寻找路径

总结如下:

  • LLM = 聪明的大脑
  • Agent = 聪明的大脑 + 手脚

当然,Agent的模式也是在不断演进的:

  • 阶段一:ReAct + Tool Calling
  • 阶段二:Reflection + Long Memory
  • 阶段三:Multi Agent System,MAS

快速入门

导入对应的依赖,直接通过pycharm进行安装即可

import os
from dotenv import load_dotenv
from langchain.agents import create_agent
from langchain_openai import ChatOpenAI

from langchain.tools import tool

from langchain_core.prompts import PromptTemplate  # 这个也换了!

Langchain提供了create_agent方法用来快速创建Agent,我们只需要提供好Agent所需的模型(Models)工具(Tools)即可。

定义工具

# 用 @tool 装饰器快速定义工具,Agent 会自动识别使用
@tool
def calculator(expression: str) -> str:
    """
    计算器工具,用于计算数学表达式
    :param expression: 数学表达式字符串,例如 "2+3*5"
    :return: 计算结果
    """
    try:
        # 安全计算简单数学公式
        result = eval(expression, {"__builtins__": None}, {})
        return f"计算结果:{result}"
    except Exception as e:
        return f"计算失败:{str(e)}"


# 把工具打包成列表
tools = [calculator]

创建大模型

llm = ChatOpenAI(
    model="qwen-plus",  # 可替换为国产模型:deepseek-chat/qwen-turbo 等
    api_key=os.getenv("OPENAI_API_KEY"),
    base_url=os.getenv("OPENAI_BASE_URL", "https://dashscope.aliyuncs.com/compatible-mode/v1"),  # 国内模型需改此地址
    temperature=0  # 0 让回答更稳定、更适合做工具调用
)

创建agent并调用

# 创建 ReAct Agent
agent = create_agent(llm, tools)

# Agent 执行器(负责运行 Agent、管理工具调用、处理循环)
# agent_executor = AgentExecutor(
#     agent=agent,
#     tools=tools,
#     verbose=True,  # 打印思考过程(非常重要!能看到 Agent 怎么思考)
#     handle_parsing_errors=True  # 自动处理解析错误
# )

# ---------------------- 4. 测试你的 Agent ----------------------
if __name__ == "__main__":
    # 测试问题:需要计算的问题,Agent 会自动调用计算器
    question = "3的5次方加上100等于多少?"

    # 运行 Agent
    response = agent.invoke({
        "messages": [
            {"role": "user", "content": question}
        ]
    })

    # 输出最终答案
    print("\n===== Agent 最终回答 =====")
    print(response["messages"])

Agent的工作流程

传统的LLM应用都是一问一答的形式,模型只能根据自己的训练数据来回答,流程非常简单:

而智能体则可以调用工具与外界交互,获取实时信息,工作流程则要复杂很多,是这样的:

  • 用户提问(Input):杭州今天天气如何?
  • 模型分析(Reasoning):用户询问杭州天气,我不知道,需要调用查询天气的工具get_weather
  • 调用工具(Action):调用工具,get_weather,传入城市"杭州"
  • 分析结果(Observation):工具返回结果,模型分析结果,判断是否足以回答用户问题
  • 是:整理生成响应结果
  • 否:重复前面步骤
  • 生成结果(Output):根据工具的结果生成响应给用户

工具

在大模型提供的API接口中,有一个tools参数,描述了工具的详细信息,LangChain会帮助我们把tool的信息封装为此tool参数,与message一起发送给大模型,大模型就了解tool的详细信息,根据用户需求判断是否需要调用tool,需要调用哪个tool。

模型不能直接调用tool,只能返回字符串。但是它可以把要调用的tool信息、参数信息都以Json格式返回,LangChain就会帮我们解析响应结果中的Function信息,也就是tool信息,就知道了要调用哪个函数,以及参数是什么了。LangChain就会执行该函数,再把得到的结果再次发送给大模型。

Agent中最重要的两个部分,就是:

  • Model:负责推理分析、思考,相当于Agent的大脑
  • Tools:负责执行任务,相当于Agent与外界交互的手脚

模型

完整叫法是大语言模型(LLM)。它能够理解人类语言,使用人类语言生成内容、翻译、提取摘要、回答问题等。不仅如此,现在大多数的模型还有一些特别能力:

  •  Tool calling - 调用外部工具(例如查询数据库或调用 API),并在其回复中使用这些工具返回的结果。
  •  Structured output - 将模型的响应结果约束为遵循已定义的格式,例如:json
  •  Multimodality - 可以处理和返回文本以外的数据,如图像、音频和视频。
  •  Reasoning - 模型可以执行多步推理来得出结论。

使用Model类初始化模型

llm = ChatOpenAI(
    model="qwen-plus",  # 可替换为国产模型:deepseek-chat/qwen-turbo 等
    api_key=os.getenv("OPENAI_API_KEY"),
    base_url=os.getenv("OPENAI_BASE_URL", "https://dashscope.aliyuncs.com/compatible-mode/v1"),  # 国内模型需改此地址
    temperature=0  # 0 让回答更稳定、更适合做工具调用
)

消息

在调用模型时,发送给LLM的消息、LLM返回的消息都包含以下几部分内容:

  • role:消息所属角色,可以是system、user、assistant
  • content:消息的内容
  • metadata(可选):消息的元数据,例如:消息的ID、消耗的token等

消息类型

在LangChain中,我们并不需要自己创建BaseMessage对象,LangChain已经把常见消息根据角色(Role)创建了对应的BaseMessage的子类:

  • SystemMessage:role是system,代表系统消息,用于设定模型角色和交互背景
  • HumanMessage:role是user,代表用户输入的消息
  • AIMessage:role是assistant,代表LLM生成的响应,包含:文本、工具调用、元数据
  • ToolMessage:role是tool,代表工具调用时产生的结果

采用对象封装的方式来传递消息,框架自动解析是用户消息还是其他

from langchain.messages import HumanMessage, AIMessage
from langchain.agents import create_agent

# 创建Agent
agent = create_agent(model="deepseek-chat")

# 调用Agent,发送消息
response = agent.invoke({
    "messages": [
        HumanMessage(content="你好,我是虎哥"),
        AIMessage(content="你好,虎哥,很高兴认识你。"),
        HumanMessage(content="我的名字是什么?")
    ]
})

print(response)

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐