本文介绍langchain如何快速搭建ReAct范式的智能体,目前只是简单介绍基本使用,后续会不断完善。

LangChain Agents 是基于 LangGraph 构建的,以提供持久执行、流式处理、人机交互、持久化存储等功能。但对于基本的 LangChain Agent 使用是无需了解 LangGraph。

一、如何创建Agent

创建Agent超级简单!!使用 create_agent 搞定!

# 从 dotenv 模块导入 load_dotenv 函数
# 用于从项目根目录下的 .env 文件中加载环境变量(如 API 密钥)
from dotenv import load_dotenv

# 加载 .env 文件中的环境变量,并覆盖系统中已存在的同名变量
# 这样可以安全地管理敏感信息(例如 ZHIPUAI_API_KEY),避免硬编码在代码中
load_dotenv(override=True)


# 从 langchain.agents 模块导入 create_agent 工具函数
# 该函数用于快速创建一个具备特定行为的智能体(Agent)
from langchain.agents import create_agent

# 从 langchain_community.chat_models 导入 ChatZhipuAI
# 这是 LangChain 对智谱 AI(ZhipuAI)大模型的官方封装,支持 GLM 系列模型
from langchain_community.chat_models import ChatZhipuAI


# ========================
# 1. 初始化大语言模型(LLM)
# ========================
# 创建一个 ChatZhipuAI 模型实例,指定使用 "glm-4.5-flash" 模型
# 该模型是智谱推出的高性能、低延迟轻量级大模型,适合快速响应场景
# 注意:API Key 会自动从环境变量 ZHIPUAI_API_KEY 中读取,无需手动传入
model = ChatZhipuAI(
    model="glm-4.5-flash"
)


# ========================
# 2. 创建智能体(Agent)
# ========================
# 使用 create_agent 函数构建一个具备特定角色和行为的智能体
agent = create_agent(
    model=model,  # 指定智能体所依赖的大语言模型(此处为 GLM-4.5-Flash)
    
    tools=[],     # 指定智能体可用的工具列表(如搜索、计算器、数据库等)
                  # 注意:tools 参数是必填项,即使不使用任何工具,也必须传入一个空列表 []
                  # 若后续需要扩展功能(如联网查询),可在此添加 Tool 实例
    
    system_prompt="你是一个答案之书,人们向你倾述最近困扰的事情,你给予简短的答案。"
                  # 设置系统级提示词(System Prompt),用于定义智能体的角色、语气和行为规范
                  # 此处设定其为“答案之书”——提供简洁、有哲理的回应,类似人生指南
)

① env 文件应包含

ZHIPUAI_API_KEY=your_zhipu_api_key_here

LangChain 会自动读取该变量,无需在代码中显式传递。

② 关于 tools=[]

  • 当前智能体不具备外部工具调用能力,仅能基于自身知识回答。
  • 若未来想让 Agent 调用函数(如查天气、算数学),需在此传入 Tool 对象列表。

二、如何使用Agent

(1)invoke方法调用智能体

input必须是下面这个样子:

{
    "messages": [
        {"role": "user", "content": "翻译:春眠不觉晓"}
    ]
}
# 智能体只接受这种方式的输入。
inputs = {"messages": [{"role": "user", "content": "我不知道怎么才能考上大学"}]}

# 调用智能体
response = agent.invoke(inputs)

# 让我们来看看智能体返回的内容是什么?
print(response)

# 是一个字典
print(type(response))

# 里面只有一个消息列表
print(response.keys())

response["messages"][-1].pretty_print()

(2)记忆模块简介

需要两个东西:

1.会话维持 config

2.记忆体 checkpointer 

# 导入 LangGraph 提供的内存检查点保存器(用于在内存中保存对话状态)
from langgraph.checkpoint.memory import InMemorySaver

# 创建一个内存中的检查点保存器实例,用于记录和恢复对话历史
checkpointer = InMemorySaver()

# 使用 create_agent 函数创建一个智能体(agent)
# - model: 指定使用的语言模型(此处未定义,需提前配置好)
# - tools: 当前没有绑定任何工具(空列表)
# - checkpointer: 传入上面创建的检查点保存器,用于支持会话记忆
# - system_prompt: 设置系统提示词,定义智能体的角色(这里是中英互译翻译官)
agent = create_agent(
    model=model,
    tools=[],
    checkpointer=checkpointer,
    system_prompt="你是一个中英互译的翻译官。"
)

# 通过 thread_id 指定会话线程 ID
# LangGraph 使用 configurable 中的 thread_id 来区分不同用户的对话历史
# 所有使用相同 thread_id 的 invoke 调用将共享同一个对话状态(即支持多轮记忆)
config = {
    "configurable": {"thread_id": "111"}
}

# 第一轮用户输入:发送一条消息“你好我叫小呆”
inputs_1 = {
    "messages": [
        {"role": "user", "content": "你好我叫小呆"}
    ]
}

# 调用智能体处理输入
response = agent.invoke(
    input=inputs_1,
    config=config
)

# 第二轮用户输入:询问“请问我叫什么”,测试智能体是否记住上下文
inputs_2 = {
    "messages": [
        {"role": "user", "content": "请问我叫什么"}
    ]
}

# 再次调用智能体
response = agent.invoke(
    input=inputs_2,
    config=config
)

# config:通过 thread_id 指定会话线程 ID
# LangGraph 使用 configurable 中的 thread_id 来区分不同用户的对话历史
# 使用不同的config就不会记住对话历史信息
config = {
    "configurable": {"thread_id": "222"}
}

# 使用更换后的 config 重新调用智能体
response = agent.invoke(
    input=inputs_2,
    config=config
)

更多推荐