【大语言模型】LangChain 核心模块介绍(Agents)

【大语言模型】LangChain 核心模块介绍(Agents)

一、简介

我们都知道四肢的绝大部分动作都是由大脑决定的,大脑通过中枢神经下发自己的操作指令,四肢就可以按照我们的需求进行动作。

而大语言模型其实就相当于一个大脑的角色,其本身是无法直接进行任何操作的。那么就需要一个"中枢神经",帮助它下发指令,传递反馈信息,这个中枢神经就是 Agent。

在官方文档中,有这样的一句说明,讲出了 Agents 的核心。

The core idea of agents is to use a language model to choose a sequence of actions to take.

代理的核心思想是使用语言模型来选择要采取的一系列行动。

如果在前面学习的过程中,通过 LangChain 让大模型了解的是"怎么思考"。那 Agents 的作用就是让大模型自己去决定"怎么做"。其实就是基于ReaAct理念的一种实践方式。

二、Agents 的核心概念

Agents 的核心思想是使用语言模型来选择要采取的一系列操作。语言模型所起到的作用为,被用作推理引擎来确定要采取哪些操作以及按什么顺序。在这个过程里面主要包含以下核心组件:

  • Schema
    • AgentAction
    • AgentFinish
    • Intermediate Steps
  • Agent
    • Agent Inputs
    • Agent Outputs
  • AgentExecutor
  • Tools
    • Considerations
  • Toolkits

三、实战案例

3.1、需求说明

通过 Agent 实现调用 Selenium 打开、退出浏览器、获取当前 URL 等操作。

3.2、实现思路

  • 实现工具包。
  • 初始化 Agent

3.3、完整源码

封装 Selenium 工具: 将会使用到的行为操作,提前封装起来

python 复制代码
from selenium import webdriver


class WebAutoFramework:
    def __init__(self):
        self.driver = None
        if self.driver is None:
            # self.driver = webdriver.Firefox()
            option = webdriver.FirefoxOptions()
            option.binary_location = r"C:\Program Files (x86)\Mozilla Firefox\firefox.exe"
            self.driver = webdriver.Firefox(options=option)  # 这里添加的是driver的绝对路径
            self.driver.implicitly_wait(5)

    def open(self, url):
        self.driver.get(url)

    def quit(self):
        self.driver.quit()

    def get_title(self):
        return self.driver.title

定义工具池:将所有的行为操作,按照要求的tools规范定义清楚。

python 复制代码
from langchain_core.tools import tool

from Artificial_intelligence.大语言模型应用开发框架L2.核心模块Agents.web_auto_selenium import WebAutoFramework

web = WebAutoFramework()


@tool
def open_web(url):
    """
    打开一个网页
    """
    web.open(url)


# if __name__ == '__main__':
#     print(open.name)
#     print(open.args)
#     print(open.description)


@tool
def quit_web():
    """
    退出浏览器
    """
    web.quit()


@tool
def get_title():
    """
    获取网页标题
    :return:
    """
    print(web.get_title())


tools = [open_web, quit_web, get_title]

初始化 Agent 并执行, 将封装好的 tools 传入 agent 中:

python 复制代码
from langchain import hub
from langchain.agents import create_openai_functions_agent, AgentExecutor
from langchain_openai import ChatOpenAI

from Artificial_intelligence.大语言模型应用开发框架L2.核心模块Agents.create_selenium_tools import tools
import os

os.environ["OPENAI_API_KEY"] = "xxxxxxxxxxxxxxx"  # 将个人token替换到这个位置
os.environ["OPENAI_API_BASE"] = "xxxxxxxxxxxxxxx"

prompt = hub.pull("hwchase17/openai-functions-agent")

llm = ChatOpenAI(model="gpt-3.5-turbo")

# 初始化 Agent
agent = create_openai_functions_agent(llm, tools, prompt)
# 初始化 Agent 的配置
agent_executor = AgentExecutor(agent=agent,
                               tools=tools, verbose=True,
                               return_intermediate_steps=True
                               , handle_parsing_errors=True)
if __name__ == '__main__':
    agent_executor.invoke({"input": """
                        请打开 https://www.baidu.com/ 网站
                     返回当前的网页的标题,再退出浏览器。"""})

执行结果:

python 复制代码
> Entering new AgentExecutor chain...

Invoking: `open_web` with `{'url': 'https://www.baidu.com/'}`


None
Invoking: `get_title` with `{}`


百度一下,你就知道
None
Invoking: `quit_web` with `{}`


None我已经打开了 https://www.baidu.com/ 网站,并获取了当前网页的标题为 "百度一下,你就知道"。现在已经退出了浏览器。如果您有任何其他问题或需要进一步帮助,请随时告诉我。

> Finished chain.

进程已结束,退出代码为 0
相关推荐
AIGC大时代15 分钟前
数据分析如何正确使用ChatGPT进行辅助?
大数据·人工智能·深度学习·chatgpt·数据挖掘·数据分析·aigc
懒麻蛇19 分钟前
ChatGPT Task功能初探
人工智能·chatgpt
程亦寻25 分钟前
物联网与前沿技术融合分析
人工智能·物联网·区块链·量子计算
正在走向自律1 小时前
当AI Agent遇上CRM:客户关系管理的智能化变革(29/30)
人工智能·crm系统·ai agent·ai智能体
滴滴哒哒答答1 小时前
《自动驾驶与机器人中的SLAM技术》ch8:基于预积分和图优化的紧耦合 LIO 系统
人工智能·机器人·自动驾驶
从零开始学习人工智能2 小时前
傅里叶变换在语音识别中的关键作用
人工智能·语音识别
Landy_Jay3 小时前
深度学习:大模型Decoding+MindSpore NLP分布式推理详解
人工智能·深度学习
一点一木3 小时前
从零开始:使用 Brain.js 创建你的第一个神经网络(一)
前端·javascript·人工智能
cooldream20093 小时前
数据可视化:让数据讲故事的艺术
人工智能·知识图谱
paixiaoxin3 小时前
解读CVPR2024-3DGS论文分享|DNGaussian: Optimizing Sparse-View 3D Gaussian Radiance Fields with .....
人工智能·深度学习·算法·机器学习·3d·cvpr·3dgs