【大语言模型】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
相关推荐
轻竹办公PPT9 小时前
轻竹论文:毕业论文AI写作教程
人工智能·ai·ai写作
呵呵哒( ̄▽ ̄)"10 小时前
专项智能练习(课程类型)
人工智能
2501_9181269110 小时前
如何用ai把特定领域的生活成本归零
人工智能·生活·个人开发
Brianna Home10 小时前
[鸿蒙2025领航者闯关] 鸿蒙 6.0 星盾安全架构 + AI 防窥:金融级支付安全实战与深度踩坑实录
人工智能·安全·harmonyos·安全架构
飞哥数智坊11 小时前
V4/R4 没来,但 DeepSeek-V3.2 好像又便宜又好用?
人工智能·deepseek
CareyWYR11 小时前
AI:比我更懂我的旁观者
人工智能
搞科研的小刘选手12 小时前
【高录用|快检索】第二届图像处理、多媒体技术与机器学习国际学术会议(IPMML 2025)
人工智能·机器学习·多媒体·学术会议
秋邱12 小时前
AI + 社区服务:智慧老年康养助手(轻量化落地方案)
人工智能·python·重构·ar·推荐算法·agi
leijiwen12 小时前
Bsin X BDCM:从流量驱动到价值激励驱动的智能增长引擎
大数据·人工智能·web3
人工智能训练12 小时前
Linux 系统核心快捷键表(可打印版)
linux·运维·服务器·人工智能·ubuntu·容器·openeuler