基本信息
- LangGraph上下文配置config、状态state、跨对话记忆
- 模型调用通义千问(阿里Tongyi大模型)
上下文管理
LangGraph 作为一款强大的框架,为开发者提供了构建智能体的丰富工具和灵活的上下文管理机制。本文将通过实际代码示例,深入探讨如何利用 LangGraph 构建智能体,并管理其上下文,以实现高效、智能的交互。
LangGraph 提供了三种主要方式来提供上下文:
类型 | 描述 | 易变性 | 时长 |
---|---|---|---|
配置(静态上下文) | 运行开始时传递的数据 | ❌ | 每次运行 |
状态(可变上下文) | 执行期间可以改变的动态数据 | ✅ | 每次运行或对话 |
记忆(存储跨对话上下文) | 可以在对话之间共享的数据 | ✅ | 跨对话 |
在 LangGraph 中,构建一个智能体的基本步骤如下:
- 选择或定义模型:选择一个合适的语言模型作为智能体的核心,例如阿里云的 Tongyi 大模型。
- 定义工具函数:根据需要完成的任务,定义一系列工具函数,这些函数可以被智能体调用来获取外部信息或执行特定操作。
- 构建智能体:使用 LangGraph 提供的 create_react_agent 函数,将模型和工具函数组合成一个智能体。
- 调用智能体:通过调用智能体的 invoke 方法,传入用户的消息和配置信息,获取智能体的响应。
以下是一个简单的示例,展示如何构建一个能够回答关于中国工商银行保险问题的智能体:
# -*- coding: utf-8 -*-
from langgraph.prebuilt import create_react_agent
from langchain_community.chat_models.tongyi import ChatTongyi
from langchain_core.messages import AnyMessage
from langchain_core.runnables import RunnableConfig
from langgraph.prebuilt.chat_agent_executor import AgentState
# 模型初始化
llm = ChatTongyi(
model="qwen-turbo",
temperature=0,
verbose=True,
)
# 定义一个工具函数
def get_ICBC(anyStr: str) -> str:
"""获得中国工商银行的保险."""
return "工银安盛人寿保险有限公司 简称工银安盛人寿!"
# 构建一个智能体
agent = create_react_agent(
model=llm,
tools=[get_ICBC],
)
# 智能体的调用
answer = agent.invoke(
{
"messages": [{
"role": "user", "content": "你能告诉我中国工商银行的保险名称?"}]},
)
# for i in answer["messages"]:
# print(i)
print(answer["messages"][-1].content)
运行结果截图
在这个示例中,我们定义了一个工具函数 get_ICBC,返回关于中国工商银行保险的信息。然后,使用 create_react_agent 函数创建了一个智能体,并通过 invoke 方法调用它,传入用户的问题。智能体会调用 get_ICBC 工具函数,并返回结果。
上下文管理
智能体的强大之处不仅在于其能够执行任务,还在于其能够根据上下文信息做出更智能的决策。
上下文信息可以包括用户的身份信息、历史对话记录、内部状态等。
LangGraph 提供了多种方式来管理上下文,使得智能体能够更好地理解和响应用户的需求。
配置(静态上下文)
配置是运行开始时传递给智能体的数据,在每次运行中保持不变。例如,我们可以为智能体设置一个用户名称,使其在对话中使用这个名称来称呼用户
1.使用上下文自定义提示词 配置(静态上下文)
# -*- coding: utf-8 -*-
from langgraph.prebuilt import create_react_agent
from langchain_community.chat_models.tongyi import ChatTongyi
from langchain_core.messages import AnyMessage
from langchain_core.runnables import RunnableConfig
from langgraph.prebuilt.chat_agent_executor import AgentState
# 模型初始化
llm = ChatTongyi(
model="qwen-turbo",
temperature=0,
verbose=True,
)
# 定义一个工具函数
def get_ICBC(anyStr: str) -> str:
"""获得中国工商银行的保险."""
return "工银安盛人寿保险有限公司 简称工银安盛人寿!"
#提示词方法
def prompt(
state: AgentState,
config: RunnableConfig