【大语言模型】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
相关推荐
我的世界洛天依1 分钟前
胡桃讲编程:麻宫雅典娜 97 RVCv2 第一代(R1)开源发布文档 | 经典复古分支
人工智能
zhangfeng11332 分钟前
JupyterLab 里,JSON文件纯文本格式编辑 / 查看
人工智能·json
Bode_20023 分钟前
智能协同与绿色数字孪生舱主要功能与关键技术
大数据·人工智能·制造·碳中和
daly5203 分钟前
人工智能专业有哪些?2026高考报考指南(专业分类 + 课程 + 就业全解析)
人工智能·分类·高考
暗夜猎手-大魔王9 分钟前
转载--AgentScope 生产最佳实践
人工智能
garmin Chen14 分钟前
从 Transformer 到 Agent:大模型技术全景解析
java·人工智能·python·深度学习·transformer
愚公移码19 分钟前
蓝凌EKP18产品:流程引擎技术篇之流程核心概念模型
java·人工智能·流程引擎·蓝凌
没有钱的钱仔20 分钟前
pytorch_cuda安装
人工智能·pytorch·python
大模型最新论文速读21 分钟前
06-11 · LLM 最新论文速览
论文阅读·人工智能·深度学习·机器学习·自然语言处理
xianghongtao011625 分钟前
在你思考之前:System 0 与“认知殖民”——三种 AI 认知框架之争
人工智能·认知框架·认知殖民