软件测试/人工智能|LangChain核心模块Agents详解

本文涉及的产品
阿里云百炼推荐规格 ADB PostgreSQL,4核16GB 100GB 1个月
日志服务 SLS,月写入数据量 50GB 1个月
简介: 软件测试/人工智能|LangChain核心模块Agents详解

image.png

简介

在之前学习 AutoGPT 的过程中,AutoGPT 的 Command 模块可以针对于 LLM 的一些局限性做补充,比如爬取网页信息,精密计算,代码执行等。Agents 设计的初衷也是同样的目的,补充大语言模型的能力。

通过用户输入的自然语言转换为对工具调用的分析、工具参数的抽取,让每个角色发挥自己最擅长的部分,规避掉大模型在细节处理上不够精准的问题,解决用户与工具之间无法精确匹配的问题。

而 Agents 主要包含以下的主要能力:

  • 内置 Tools

  • 内置组件

  • 自定义工具

前两种的内置工具与组件可以覆盖大部分的常见使用场景,如果有内置工具确实无法解决的场景,则可以通过自定义工具模块实现。

设计原理

在代理(Agents)中,语言模型被用作推理引擎,以确定应该采取哪些动作以及执行顺序。如下图所示:

image.png

实践演练

调用内置 Tools

在调用内置tools之前,首先需要学习内置 Tools,内置 Tools 是作者封装好的一些工具,可以直接进行调用。主要步骤如下:

  • 加载工具。

  • 初始化 Agent,并将工具传入。

  • 对代理输入问题。


# LangChain相关模块的导入
from langchain.chat_models import ChatOpenAI
from langchain.agents import load_tools, initialize_agent
from langchain.agents import AgentType
# 加载个人的OpenAI Token
key = 'open_ai_key'
# 创建OpenAI调用实例
# 在本示例中,大模型需要作为一个严谨的逻辑解析工具,所以temperature设置为0
llm = ChatOpenAI(temperature=0, openai_api_key=key)
# 需要安装依赖库 pip install wikipedia# 加载内置工具 llm-math 和 wikipedia
tools = load_tools(["llm-math", "wikipedia"], llm=llm)
# 创建Agent实例
agent = initialize_agent(
    # 设置可以使用的工具
    tools=tools,
    # 设置逻辑解析所使用的大模型实例
    llm=llm,
    # 设置agent类型,CHAT表示agent使用了chat大模型,REACT表示在prompt生成时使用更合乎逻辑的方式,获取更严谨的结果
    agent=AgentType.CHAT_ZERO_SHOT_REACT_DESCRIPTION,
    # 设置agent可以自动处理解析失败的情况,由于使用大模型处理逻辑,返回值并不会100%严谨,所以可能会出现返回的额数据不符合解析的格式,导致解析失败
    # agent可以自动处理解析失败的情况,再次发送请求以期望获取到能正常解析的返回数据
    handle_parsing_errors=True,
    # 打开详细模式,会将agent调用细节输出到控制台
    verbose=True)
res = agent("1000的35%是多少?")

执行结果示例如图:

image.png

从图中可以看出:

1.LangChain 通过分析,决定调用 Calculator tool 计算最终的结果,并且分析出了需要传入的数据格式,最终根据返回的结果得到了正确的答案 350.0。

2.虽然大模型本身对精确计算不是很擅长,但是通过 Agent 模块,大模型可以将需要精准计算的部分提交给更专业的工具进行计算,而大模型本身负责分析文本、决定使用的工具、抽取出相关的参数、分析和组合返回结果,这些部分正是大模型自己擅长的内容,通过与 Tools 分工合作,最终拿到了正确且精准的返回结果。

调用内置组件

所谓内置组件,可以将其理解为 Python 代码执行工具。前一个示例是计算工具,能够覆盖的场景有限。由于大模型本身也具备生成代码的能力,一个能够支持运行 Python 代码的工具,显然能够通过代码实现覆盖更大更复杂的场景,并且通用性也更强。使用内置的 Python 运行工具和大模型生成的代码结合的步骤如下:

1.加载工具。

2.初始化 Agent,并将工具传入,工具为PythonREPLTool()。

3.对代理输入问题。

4.代理运行过程打开 Debug,方便查看运行流程。


# LangChain相关模块的导入
from langchain.chat_models import ChatOpenAI
from langchain.tools import PythonREPLTool
from langchain.agents import initialize_agent

# 加载个人的OpenAI Token
key = 'open_ai_key'

# 创建OpenAI调用实例
# 在本示例中,大模型需要作为一个严谨的逻辑解析工具,所以temperature设置为0
llm = ChatOpenAI(temperature=0, openai_api_key=key)
# 创建Agent实例
agent = initialize_agent(
    # 设置可以使用的工具
    tools=[PythonREPLTool()],
    # 设置逻辑解析所使用的大模型实例
    llm=llm,
    # 打开详细模式,会将agent调用细节输出到控制台
    verbose=True)
# 待排序的人名列表
name_list = ["Ashish Vaswani", "Noam Shazeer", "Niki Parmar", "Jakob Uszkoreit", "Llion Jones", "Aidan N. Gomez",
             "Łukasz Kaiser", "Illia Polosukhin"]
# 打开Debug模式,将会输出更详细的日志信息,方便了解整体运行逻辑
import langchain

langchain.debug = True
# 组装成最终的命令字符串,并调用agent运行解析,获取结果
command_str = f"将下列人名优先用姓氏、再使用名字进行排序,并将结果打印出来: \n{name_list}"
res = agent.run(command_str)
# 打印结果
print(res)
# 关闭Debug模式
langchain.debug = False

通过打开 Debug 开关,我们得以见到 LangChain 中 Agent 功能的详细工作流程和日志,简单梳理一下本次请求中 Agent 的工作如下图:

image.png

调用自定义工具

以上的两种方案,其实都有灵活性不足的问题,所以 LangChain 也提供了自定义 Tools 方法,方便开发者根据自己的业务生成 Tools,或者复用已有的 Tools 工具。

1.定义好自己的工具方法,并添加 @Tool 装饰器。定义工具方法的时候有以下注意事项:- 方法名作为自定义Tool的实例名称。- 方法参数是经过大模型分析之后,送入当前Tool的文本信息。- 方法中必须要存在doc,这个doc会被作为tool的描述信息,提交给大模型用于判断什么时候怎么调用当前tool。

2.初始化 Agent,并将定义好的工具传入。

3.对代理输入问题。

4.代理运行过程打开 Debug,方便查看运行流程。


# LangChain相关模块的导入
from langchain.chat_models import ChatOpenAI
from langchain.agents import initialize_agent
from langchain.agents import tool

# 加载个人的OpenAI Token
key = 'open_ai_key'

# 创建OpenAI调用实例
# 在本示例中,大模型需要作为一个严谨的逻辑解析工具,所以temperature设置为0
llm = ChatOpenAI(temperature=0, openai_api_key=key)

# 使用tool装饰器,可以直接将一个方法转为BaseTool实例,用于放到Agent的tools参数中支持调用
# 编写一个工具,用于将中文文本转换成拼音,以列表的形式返回文本中的每一个字
@tool
def chinese_to_pinyin(query: str) -> str:
    # 方法名作为自定义tool的实例名称
    # query参数是经过大模型分析之后,送入当前tool的文本信息
    # 方法中必须要存在doc,这个doc会被作为tool的描述信息,提交给大模型用于判断什么时候怎么调用当前tool
"""接收中文文本,返回对应中文的拼音列表,能够将中文转换成拼音的工具,必须要接收一个中文文本作为输入参数,并且返回的时候总是一个列表数据"""
    # 使用pypinyin库将中文文本转换成拼音
    # 需要事先安装依赖库 pip3 install pypinyin
    from pypinyin import pinyin
    res = pinyin(query)
    # 将转换结果的格式修正一下[["zhong"],["wen"]] => "['zhong','wen']"
    return str([i[0] for i in res])


agent = initialize_agent(
    # 设置可以使用的工具列表
    tools=[chinese_to_pinyin],
    # 设置逻辑解析所使用的大模型实例
    llm=llm,
    # 打开详细模式,会将agent调用细节输出到控制台
    verbose=True)
# 待翻译文本
chinese_str = "打开Debug模式,将会输出更详细的日志信息,方便了解整体运行逻辑"
# 打开Debug模式,将会输出更详细的日志信息,方便了解整体运行逻辑
import langchain

langchain.debug = True
# 组装成最终的命令字符串,并调用agent运行解析,获取结果
command_str = f"将以下文本转换成拼音: \n{chinese_str}"
res = agent.run(command_str)
# 打印结果
print(res)
# 关闭Debug模式
langchain.debug = False

返回结果示例截图:

image.png

根据运行中的步骤可以看到,通过大模型的分析,确实调用了预先设置好的 Tool 实例对字符串做了处理,将它转换成拼音形式,达成了最终目的。

需要注意的是,如果存在很多工具时,选用哪一款工具,将请求数据格式化成什么样的字符串发送给工具,是由大模型来决定的。这就要求我们对工具的使用描述尽可能的做到准确和简洁,并且在工具内部对异常情况多做考虑。

总结

本文主要介绍了langchain的agents模块的原理以及基本的使用,希望本文可以帮到大家!

image.png

相关实践学习
AnalyticDB PostgreSQL 企业智能数据中台:一站式管理数据服务资产
企业在数据仓库之上可构建丰富的数据服务用以支持数据应用及业务场景;ADB PG推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
相关文章
|
6月前
|
数据采集 算法 测试技术
【硬件测试】基于FPGA的1024QAM基带通信系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文介绍了基于FPGA的1024QAM基带通信系统的硬件测试版本,包含testbench、高斯信道模块和误码率统计模块。系统新增ila在线数据采集和vio在线SNR设置模块,支持不同SNR条件下的性能测试。1024QAM调制将10比特映射到复平面上的1024个星座点之一,实现高效数据传输。硬件测试结果表明,在SNR=32dB和40dB时,系统表现出良好的性能。Verilog核心程序展示了各模块的连接与功能实现。
136 7
|
5月前
|
数据采集 移动开发 算法
【硬件测试】基于FPGA的QPSK调制+软解调系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文基于FPGA实现QPSK调制与软解调系统,包含Testbench、高斯信道、误码率统计模块,并支持不同SNR设置。硬件版本新增ILA在线数据采集和VIO在线SNR设置功能,提供无水印完整代码及测试结果。通过VIO分别设置SNR为6dB和12dB,验证系统性能。配套操作视频便于用户快速上手。 理论部分详细解析QPSK调制原理及其软解调实现过程,涵盖信号采样、相位估计、判决与解调等关键步骤。软解调通过概率估计(如最大似然法)提高抗噪能力,核心公式为*d = d_hat / P(d_hat|r[n])*,需考虑噪声对信号点分布的影响。 附Verilog核心程序代码及注释,助力理解与开发。
141 5
|
6月前
|
数据采集 算法 数据安全/隐私保护
【硬件测试】基于FPGA的MSK调制解调系统系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文基于FPGA实现MSK调制解调系统,采用Verilog开发,包含同步模块、高斯信道模拟、误码率统计等功能。相比仿真版本,新增ILA数据采集与VIO在线SNR设置模块。通过硬件测试验证,展示不同SNR(如10dB和16dB)下的性能表现。研究聚焦软件无线电领域,优化算法复杂度以适应硬件限制,利用MSK恒定包络、相位连续等特性提升频谱效率。核心代码实现信号生成、调制解调、滤波及误码统计,提供完整的硬件设计与分析方案。
194 19
|
5月前
|
人工智能 安全 测试技术
Burp Suite Professional 2025.3 发布,引入 Burp AI 通过人工智能增强安全测试工作流程
Burp Suite Professional 2025.3 发布,引入 Burp AI 通过人工智能增强安全测试工作流程
351 0
Burp Suite Professional 2025.3 发布,引入 Burp AI 通过人工智能增强安全测试工作流程
|
6月前
|
数据采集 算法 数据安全/隐私保护
【硬件测试】基于FPGA的4ASK调制解调通信系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文介绍了基于FPGA的4ASK调制解调系统的硬件测试版本,该系统包括testbench、高斯信道模块和误码率统计模块,并新增了ILA在线数据采集和VIO在线SNR设置功能。通过VIO设置不同SNR(如15dB和25dB),实现了对系统性能的实时监测与调整。4ASK是一种通过改变载波幅度表示数据的数字调制方式,适用于多种通信场景。FPGA平台的高效性和灵活性使其成为构建高性能通信系统的理想选择。
144 17
|
6月前
|
数据采集 算法 数据安全/隐私保护
【硬件测试】基于FPGA的16QAM调制+软解调系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文基于之前开发的16QAM调制与软解调系统,增加了硬件测试功能。该系统包含FPGA实现的16QAM调制、软解调、高斯信道、误码率统计模块,并新增了ILA在线数据采集和VIO在线SNR设置模块。通过硬件测试,验证了不同SNR条件下的系统性能。16QAM软解调通过比较接收信号采样值与16个调制点的距离,选择最近的调制点来恢复原始数据。核心Verilog代码实现了整个系统的功能,包括SNR设置、信号处理及误码率统计。硬件测试结果表明系统在不同SNR下表现良好,详细操作步骤可参考配套视频。
148 13
|
6月前
|
数据采集 算法 数据安全/隐私保护
【硬件测试】基于FPGA的4FSK调制解调通信系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文基于之前的文章《基于FPGA的4FSK调制解调系统》,增加了ILA在线数据采集模块和VIO在线SNR设置模块,实现了硬件测试版本。通过VIO设置不同SNR(如10dB和20dB),并展示了ILA采集的数据结果。四频移键控(4FSK)是一种数字调制方法,利用四个不同频率传输二进制数据,具有较高的频带利用率和抗干扰性能。输入的二进制数据分为两组,每组两个比特,对应四个频率f1、f2、f3、f4,分别代表二进制组合00、01、10、11。调制过程中选择相应频率输出,并进行幅度调制以增强抗干扰能力。接收端通过带通滤波器提取信号并还原为原始二进制数据。
124 7
|
6月前
|
数据采集 算法 数据处理
【硬件测试】基于FPGA的256QAM基带通信系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文介绍了基于FPGA的256QAM基带通信系统的硬件测试版本,包含testbench、高斯信道模块和误码率统计模块。系统新增ila在线数据采集和vio在线SNR设置模块,支持不同信噪比(如30dB和40dB)的仿真测试,并提供配套操作视频。256QAM调制方案每个符号携带8比特信息,通过复数值星座图映射实现高效传输。Verilog代码展示了核心模块设计,包括SNR设置、数据处理和ILA测试分析,确保系统在实际硬件环境中的稳定性和性能。
117 2
|
7月前
|
数据采集 算法 数据安全/隐私保护
【硬件测试】基于FPGA的16QAM基带通信系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文介绍了基于FPGA的16QAM基带通信系统硬件测试版本。该系统在仿真基础上增加了ILA在线数据采集和VIO在线SNR设置模块,支持不同信噪比(如15dB、25dB)的测试。16QAM是一种正交幅度调制方式,通过两路4ASK信号叠加实现,每个符号包含4比特信息。系统采用正交调幅法生成16QAM信号,并通过DAC转换为模拟信号。解调时使用正交相干解调,经低通滤波器恢复电平信号。开发板内完成发射与接收,无需定时同步模块。代码可移植至其他开发板,具体步骤见配套文档。
119 2
|
7月前
|
数据采集 算法 测试技术
【硬件测试】基于FPGA的2ASK调制解调系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文介绍基于FPGA的2ASK调制解调系统,涵盖仿真效果、理论知识、Verilog核心程序及开发板使用说明。系统包含testbench、高斯信道模块和误码率统计模块,支持不同SNR设置。硬件测试版本增加了ILA在线数据采集和VIO在线SNR设置功能。2ASK调制通过改变载波振幅传输二进制信号,FPGA实现包括系统设计、Verilog编码、仿真测试和硬件部署。详细操作步骤见配套视频,代码适用于多种开发板,提供移植方法。
121 1