前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >软件测试/人工智能|LangChain核心模块Agents详解

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

原创
作者头像
霍格沃兹测试开发Muller老师
发布于 2023-11-29 09:10:47
发布于 2023-11-29 09:10:47
96300
代码可运行
举报
运行总次数:0
代码可运行

简介

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

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

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

  • 内置 Tools
  • 内置组件
  • 自定义工具

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

设计原理

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

实践演练

调用内置 Tools

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

  • 加载工具。
  • 初始化 Agent,并将工具传入。
  • 对代理输入问题。
代码语言:python
代码运行次数:0
运行
AI代码解释
复制
# 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%是多少?")

执行结果示例如图:

从图中可以看出:

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

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

调用内置组件

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

1.加载工具。

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

3.对代理输入问题。

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

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
# 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 的工作如下图:

调用自定义工具

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

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

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

3.对代理输入问题。

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

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
# 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

返回结果示例截图:

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

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

总结

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
基于 LangChain 构建智能日程规划机器人
LangChain 中的 Agent 可以调用 Tool,我们定义三个 Tool:添加日程、查看日程、删除日程。
IT蜗壳-Tango
2025/04/10
2120
大语言模型的开发利器langchain
最近随着chatgpt的兴起,人工智能和大语言模型又再次进入了人们的视野,不同的是这一次像是来真的,各大公司都在拼命投入,希望能在未来的AI赛道上占有一席之地。因为AI需要大规模的算力,尤其是对于大语言模型来说。大规模的算力就意味着需要大量金钱的投入。那么对于小公司或者个人来说是不是什么都做不了呢?
程序那些事
2023/06/28
7490
软件测试/人工智能|一文告诉你LangChain核心模块chains原理
Chain是LangChain的核心模块之一,它将每个零散的逻辑串联成一整个业务流程,相当于是所有复杂逻辑的基础,由此可见chain的重要性非比寻常。本文就来给大家介绍一下Chain模块的原理。
霍格沃兹测试开发Muller老师
2023/11/29
4740
【LangChain系列6】【Agent模块详解】
总结: LangChain是一个用于开发由LLM支持的应用程序的框架,通过提供标准化且丰富的模块抽象,构建LLM的输入输出规范,主要是利用其核心概念chains,可以灵活地链接整个应用开发流程。(即,其中的每个模块抽象,都是源于对大模型的深入理解和实践经验,由许多开发者提供出来的标准化流程和解决方案的抽象,再通过灵活的模块化组合,才得到了langchain)
Alice师傅的好宝宝
2025/01/13
9630
我为什么放弃了 LangChain?
如果你关注了过去几个月中人工智能的爆炸式发展,那你大概率听说过 LangChain。
机器之心
2023/08/08
1.3K0
我为什么放弃了 LangChain?
LangChain 完整指南:使用大语言模型构建强大的应用程序
嗨,你好!让我向你介绍LangChain,这是一个非常棒的库,它能让开发者利用大型语言模型(LLMs)和其他计算资源来构建强大的应用。在这份指南中,我将快速概述LangChain的工作原理,并探讨一些很酷的使用案例,例如问答系统、聊天机器人和智能代理。我还会带你走过一个快速启动指南,帮助你开始使用。让我们开始吧!
山行AI
2023/06/14
3.5K0
LangChain 完整指南:使用大语言模型构建强大的应用程序
AI大模型全栈工程师课程笔记 - LangChain
LangChain 也是面向LLM的开发框架SDK,有 python 和 js 版的 https://python.langchain.com/docs/get_started
Michael阿明
2023/12/21
1.6K0
AI大模型全栈工程师课程笔记 - LangChain
深入解析 LangChain 的核心理念与实际应用
LangChain 是一个旨在帮助开发者更高效地构建与大语言模型(LLMs)交互的框架。它的目标是通过提供一系列工具与模块化功能,使得开发者能够更加轻松地在复杂应用场景中管理语言模型的能力。这种框架特别适合构建与 GPT 系列模型等深度学习模型紧密交互的应用。
编程小妖女
2025/01/25
2320
深入解析 LangChain 的核心理念与实际应用
当下LLM中最火的思维链、LangChain 库等,这本书里都有
ChatGPT 不仅将改变我们日常的生活、工作和思维方式,而且将引领人类以前所未有的速度逼近通用人工智能。我们普通人能通过使用提示词让ChatGPT为我们做各种事情,如高效写代码:
博文视点Broadview
2023/09/07
1.3K0
当下LLM中最火的思维链、LangChain 库等,这本书里都有
AI大模型企业应用实战(23)-Langchain中的Agents如何实现?
用于聊天模型(接收信息,输出信息)或 LLM(接收字符串,输出字符串)。这主要影响所使用的提示策略。
JavaEdge
2025/06/01
1670
AI大模型企业应用实战(23)-Langchain中的Agents如何实现?
30+视觉/多模态工具!通用Agent工具库AgentLego给大模型一双 “慧眼”
在当今大语言模型(LLM)的浪潮中,不管是由 OpenAI 领衔的一系列商业闭源模型,还是百花齐放的社区开源模型,在不断刷新技术边界的同时,也激发了大家越来越多的期待—— LLM 还能带来怎样的可能性?OpenAI 提供了插件系统,社区也涌现了一系列大模型智能体(LLM-based Agent)项目,让 LLM 学会借助外部工具,扩展自己的能力边界,向 AGI 更进一步。
OpenMMLab 官方账号
2023/12/13
1.3K0
30+视觉/多模态工具!通用Agent工具库AgentLego给大模型一双 “慧眼”
轻松上手的LangChain学习说明书
如今各类AI模型层出不穷,百花齐放,大佬们开发的速度永远遥遥领先于学习者的学习速度。。为了解放生产力,不让应用层开发人员受限于各语言模型的生产部署中..LangChain横空出世界。
腾讯技术工程官方号
2024/03/22
3.4K0
轻松上手的LangChain学习说明书
LangChain基础入门[1]
至此完成了jupyterlab的安装。安装完成后,我们便可以在VS Code上进行配置使用,VS Code 的安装自行百度、Google。
@派大星
2023/11/17
7820
LangChain基础入门[1]
LangChain基础知识入门
LangChain由 Harrison Chase 创建于2022年10月,它是围绕LLMs(大语言模型)建立的一个框架,LLMs使用机器学习算法和海量数据来分析和理解自然语言,GPT3.5、GPT4是LLMs最先进的代表,国内百度的文心一言、阿里的通义千问也属于LLMs。LangChain自身并不开发LLMs,它的核心理念是为各种LLMs实现通用的接口,把LLMs相关的组件“链接”在一起,简化LLMs应用的开发难度,方便开发者快速地开发复杂的LLMs应用。LangChain目前有两个语言的实现:Python和Node.js
@小森
2024/06/10
5620
LangChain基础知识入门
ChatGPT|LangChain介绍
(1)想像一下,如果我需要快速读一本书,想通过本书作为prompt,使用ChatGPT根据书本中来回答问题,我们需要怎么做?
用户1904552
2023/04/17
1.4K0
ChatGPT|LangChain介绍
ChatGPT|LangChain Agent原理介绍
关于LangChain的介绍,可以参考上一篇文章(ChatGPT|LangChain介绍),本文主要详细介绍Agent的原理,LangChain是如何和ChatGPT结合实现问题拆分的。
用户1904552
2023/04/17
2.4K0
ChatGPT|LangChain Agent原理介绍
LangChain 的问题所在
导读:摆脱繁琐,追求高效。是开发者永远追求的目标。LangChain,虽号称多功能,但集成过多引发问题,逼人只用其代码。LangChain 给人带来的是,令人沮丧的声音,脆弱的 Agent 工作流,技术债务增加。简而言之,做自己的 Python 包比强行改造 LangChain 更好。本文作者开发了 simpleaichat,轻松与聊天应用交互,摆脱复杂,避免锁定。别误解,本文并不是攻击 LangChain,但更实际的解决方案是重新开始。技术复杂性与流行性之争是永恒的,早年是 React,今日是 ReAct。
深度学习与Python
2023/09/08
1.2K0
LangChain 的问题所在
构建智能代理:使用Elasticsearch与Langchain实现Agentic RAG
在实际应用中,使用LLMs(大型语言模型)的下一步逻辑是引入智能代理。本文旨在介绍智能代理在RAG(检索增强生成)工作流中的概念和使用。总的来说,智能代理代表了一个非常令人兴奋的领域,具有许多雄心勃勃的应用可能性。
点火三周
2024/12/17
4580
构建智能代理:使用Elasticsearch与Langchain实现Agentic RAG
LangChain基础入门[1]
至此完成了jupyterlab的安装。安装完成后,我们便可以在VS Code上进行配置使用,VS Code 的安装自行百度、Google。
@派大星
2023/11/15
1K0
大模型应用框架-LangChain
LangChain由 Harrison Chase 创建于2022年10月,它是围绕LLMs(大语言模型)建立的一个框架,LLMs使用机器学习算法和海量数据来分析和理解自然语言,GPT3.5、GPT4是LLMs最先进的代表,国内百度的文心一言、阿里的通义千问也属于LLMs。LangChain自身并不开发LLMs,它的核心理念是为各种LLMs实现通用的接口,把LLMs相关的组件“链接”在一起,简化LLMs应用的开发难度,方便开发者快速地开发复杂的LLMs应用。 LangChain目前有两个语言的实现:python、nodejs。
@小森
2024/06/04
4270
推荐阅读
相关推荐
基于 LangChain 构建智能日程规划机器人
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验