为了账号安全,请及时绑定邮箱和手机立即绑定

使用LangChain构建基本的问答AI代理:获取当前时间的例子

在 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)

以下是一些参考文献:

  1. https://python.langchain.com/v0.1/docs/modules/agents/ 该链接提供了有关如何使用Python进行LangChain的模块和代理的详细文档。

2. https://brandonhancock.io/langchain-master-class

3. https://python.langchain.com/v0.1/docs/modules/tools/

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消