在 LangChain 中,“Agent” 是一个与各种“工具”互动来执行任务或回答查询的智能代理人。工具本质上是扩展代理人功能的函数,允许代理人执行特定的操作,例如查看当前时间或访问外部数据库中的数据。创建 LangChain 中代理人 的基本代码涉及定义工具、加载模板以及初始化语言处理模型。然后使用 AgentExecutor 执行代理人,管理代理人与工具之间的交互。这种设置允许生成动态且上下文感知的回应,使 AI 能够以结构化的方式进行推理并采取行动。我还写了一篇关于 AI 代理概述 的文章,介绍了不同类型的应用架构,这让我们更好地理解了代理应用。
一个实用的代码例子: from dotenv import load_dotenv
from langchain import hub
from langchain.agents import (
AgentExecutor,
create_react_agent,
)
from langchain_core.tools import Tool
from langchain_openai import ChatOpenAI
# 加载 .env 文件中的环境变量(load_dotenv),这是用来获取配置信息的.
load_dotenv()
导入语句部分: 这部分导入所需的库及模块:
- _loaddotenv: 此函数从
.env
文件加载环境变量到系统环境。它有助于将敏感信息,如 API 密钥,从代码中隔离。 - hub: 允许与 LangChain 中心互动,拉取模板及其他资源。
- _AgentExecutor 和 create_reactagent: 用于创建和管理 LangChain 代理的类和函数。
- Tool: LangChain 中的一个类,代表代理可以使用的工具。在此情况下,它封装了获取当前时间的函数。
- ChatOpenAI: 用于与 OpenAI 的 GPT 模型交互的类。
# 定义一个简单的函数,返回现在时间
def get_current_time(*args, **kwargs):
"""返回现在时间,格式为H:MM AM或PM。"""
import datetime # 导入datetime模块以获取现在时间
now = datetime.datetime.now() # 获取现在时间
return now.strftime("%I:%M %p") # 格式化时间为H:MM AM或PM
**定义一个工具函数:名为 _get_currenttime 的函数返回当前时间,并按照 H:MM AM/PM 格式显示。这个函数会从 datetime 模块中导入所需内容,并将获取到的时间格式化。
# 以下是一些可用的工具
tools = [
Tool(
name="时间", # 名称
func=get_current_time, # 执行的函数
# 描述
description="当你想知道当前时间时非常有用",
),
]
定义工具项: 这会创建一个可供代理使用的工具列表。在这个例子中,有一个工具名为“时间”,它使用_get_current_time_函数来获取并返回当前时间。
# 从hub拉取提示模板:
# ReAct = 理由与行动:链接指向原文: https://smith.langchain.com/hub/hwchase17/react
prompt = hub.pull("hwchase17/react") # prompt = 提示语句
拉取名为‘react’的提示模板: 这是从LangChain平台获取的提示模板,旨在帮助代理程序进行推理并采取行动。
# 下面初始化一个ChatOpenAI模型
语言模型(llm) = ChatOpenAI(
model="gpt-4o-mini", # 这里"gpt-4o-mini"指代具体的模型名称
temperature=0
)
初始化OpenAI模型步骤: 初始化ChatOpenAI模型,具体使用的模型是“gpt-4o-mini”,并将温度设为0,这使得模型更确定,减少随机性。
# 使用 create_react_agent 函数来创建 ReAct 代理,如下
agent = create_react_agent(
llm=llm,
tools=tools,
prompt=提示,
stop_sequence=True,
)
创建ReAct代理: 这将使用指定的模型(llm)、工具(tools)和提示模板(prompt)来创建ReAct代理。设置 _stopsequence=True 可以确保代理在对话中达到预设的停止点时停止处理。
# 使用代理和工具创建代理执行器.
agent_executor = AgentExecutor.from_agent_and_tools(agent=agent, tools=tools, verbose=True)
创建AgentExecutor: 这会创建一个管理代理与工具交互的AgentExecutor。将verbose 参数设置为True,可以详细记录代理的行为。
# 基于测试查询运行代理
response = agent_executor.invoke({"input": "现在几点?"})
运行代理时:这里我们将测试一下代理,使用一个简单的查询:“现在几点?”代理会使用时间工具来告诉现在几点。
# 打印代理的回应
print("回应:", response)
打印回复: 最后,打印代理的回复,其中应该包括工具显示的当前时间。
这里是完整的代码,
from dotenv import load_dotenv
from langchain import hub
from langchain.agents import (
AgentExecutor,
create_react_agent,
)
from langchain_core.tools import Tool
from langchain_openai import ChatOpenAI
# 从.env文件中加载环境变量
load_dotenv()
# 定义一个非常简单的工具函数,返回当前时间
def get_current_time(*args, **kwargs):
"""返回当前时间,格式为H:MM AM/PM."""
import datetime # 导入datetime模块以获取当前时间
now = datetime.datetime.now() # 获取当前时间
return now.strftime("%I:%M %p") # 将时间格式化为H:MM AM/PM格式
# 可用的工具列表
tools = [
Tool(
name="时间", # 工具名称
func=get_current_time, # 工具将执行的函数
# 工具描述
description="当你需要知道当前时间时,这个工具很有用",
),
]
# 从hub拉取提示模板
# ReAct = 理由和行动
# https://smith.langchain.com/hub/hwchase17/react
prompt = hub.pull("hwchase17/react")
# 初始化ChatOpenAI模型
llm = ChatOpenAI(
model="gpt-4-mini", temperature=0
)
# 使用create_react_agent函数创建ReAct代理
agent = create_react_agent(
llm=llm,
tools=tools,
prompt=prompt,
stop_sequence=True,
)
# 从代理和工具创建代理执行器
agent_executor = AgentExecutor.from_agent_and_tools(
agent=agent,
tools=tools,
verbose=True,
)
# 使用测试查询运行代理
response = agent_executor.invoke({"input": "What time is it?"})
# 打印代理的响应
print("response:", response)
以下是一些参考文献:
- https://python.langchain.com/v0.1/docs/modules/agents/ 该链接提供了有关如何使用Python进行LangChain的模块和代理的详细文档。
共同学习,写下你的评论
评论加载中...
作者其他优质文章