【大模型入门系列4】使用通义千问实现Agent ReAct

本文涉及的产品
NLP自然语言处理_基础版,每接口每天50万次
视觉智能开放平台,分割抠图1万点
NLP自然语言处理_高级版,每接口累计50万次
简介: 本文介绍了LLM Agent的概念及其核心技术ReAct。ReAct框架通过协同推理和行动,使大语言模型在执行任务时能生成推理轨迹和操作计划,增强模型的自主性和可解释性。文中展示了如何使用LangChain框架结合通义千问模型实现ReAct Agent,通过具体示例演示了其在解决数学和时间问题上的应用。

一 背景

LLM Agent是最近比较火的一个概念,其实本质上是一种利用大型语言模型(LLM)作为核心计算引擎的人工智能系统。它不仅需要有文本生成的功能,还需要一定程度的自主行为。自己进行决策,去提高回复的准确性,甚至去完成一个复杂任务。常见设计框架如下,其中大模型LLM扮演了Agent的大脑,提供了推理,规划的能力。Agent中比较著名的的Agent方案是ReAct,接下来我们学习下ReAct。

ReAct

1. 技术介绍

"ReAct"一词源于 ReAct: Synergizing Reasoning and Acting in Language Models (react-lm.github.io) , 它由单词“Reason”和“Act”组合而成。ReAct框架是一种协同推理和行动的思维框架,旨在指导大语言模型(LLMs)在任务中生成推理轨迹和操作。该框架结合了推理和行动,使得模型能够系统地执行动态推理来创建、维护和调整操作计划,并支持与外部环境的交互,从而提高了模型的可解释性和可信度。通过代理的作用,模型能够自主判断、调用工具,并决定下一步行动,从而赋予了模型极大的自主性。整体流程如下图所示:

image.png

2. demo验证

根据ReAct的思想, Langchain框架提供了一系列"ReAct Agent",其中最简单的就是“Zero-shot ReAct Agent”(零样本代理),我们使用LangChain,绑定通义千问的llm模型,实现代码如下:

llm = Tongyi()
@tool
def time(text: str) -> str:
    """Returns todays date, use this for any \
    questions related to knowing todays date. \
    The input should always be an empty string, \
    and this function will always return todays \
    date - any date mathmatics should occur \
    outside this function."""
    return str(date.today())
# 定义工具
tools = load_tools(["llm-math"], llm=llm) + [time]
# 创建代理
agent = initialize_agent(
    tools,
    llm,
    agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
    handle_parsing_errors=True,
    verbose=True)
print(agent.agent.llm_chain.prompt.template)
agent("100除以200是多少?")
agent("今天日期是多少")
agent("杭州天气怎么样")

demo如上图所示,首先我们创建了一个LLM对象, 接着我们创建了一个工具集tools,该工具集包含了"llm-math"和自定义的tool,最后我们创建了一个代理(agent), 在创建代理时我们将llm 和tools作为参数传递给了代理,同时还设置了代理的类型为AgentType.ZERO_SHOT_REACT_DESCRIPTION,

打印agent的内置prompt模板如下:

image.png

在该模板中LLM被告知要使用计算器工具和自定义time工具,并说明了这两个工具的使用场景,然后对完成任务的工作流程进行了介绍。完成了创建代理的工作以后,我们就可以让代理来回答一些数学或者时间问题:

比如测试问题如下

agent("100除以200是多少?")

执行过程如下:

image.png


如果换一个不支持的方法,效果如下

agent("杭州天气怎么样")

image.png

三 总结

image.png

常见的agent架构如上图所示,在LLM赋能的自主agent系统中,LLM充当agent大脑的角色,并与若干关键组件协作:

  • 规划(planning)
  • 子目标分解:agent将大任务拆分为更小的可管理的子目标,使得可以有效处理复杂任务。
  • 反思与完善:agent对历史动作可以自我批评和自我反思,从错误中学习并在后续步骤里完善,从而改善最终结果的质量。
  • 记忆(Memory)
  • 短期记忆:上下文学习即是利用模型的短期记忆学习
  • 长期记忆:为agent提供保留和召回长期信息的能力,通常利用外部向量存储和检索实现
  • 工具使用(tool use)
  • 对模型权重丢失的信息,agent学习调用外部API获取额外信息,包括当前信息、代码执行能力、专有信息源的访问等等。
目录
相关文章
|
2月前
|
前端开发 机器人 API
前端大模型入门(一):用 js+langchain 构建基于 LLM 的应用
本文介绍了大语言模型(LLM)的HTTP API流式调用机制及其在前端的实现方法。通过流式调用,服务器可以逐步发送生成的文本内容,前端则实时处理并展示这些数据块,从而提升用户体验和实时性。文章详细讲解了如何使用`fetch`发起流式请求、处理响应流数据、逐步更新界面、处理中断和错误,以及优化用户交互。流式调用特别适用于聊天机器人、搜索建议等应用场景,能够显著减少用户的等待时间,增强交互性。
344 2
|
7月前
|
自然语言处理 搜索推荐 API
通义千问API:用4行代码对话大模型
本章将通过一个简单的例子,让你快速进入到通义千问大模型应用开发的世界。
通义千问API:用4行代码对话大模型
|
7月前
|
机器学习/深度学习 人工智能 算法
通义千问Qwen-72B-Chat大模型在PAI平台的微调实践
本文将以Qwen-72B-Chat为例,介绍如何在PAI平台的快速开始PAI-QuickStart和交互式建模工具PAI-DSW中高效微调千问大模型。
|
7月前
|
并行计算 PyTorch 算法框架/工具
社区供稿 | 本地部署通义千问大模型做RAG验证
这篇文章中,我们通过将模搭社区开源的大模型部署到本地,并实现简单的对话和RAG。
|
7月前
大模型应用开发-LangChain入门教程
大模型应用开发-LangChain入门教程
261 0
|
2月前
|
人工智能 自然语言处理 前端开发
SpringBoot + 通义千问 + 自定义React组件:支持EventStream数据解析的技术实践
【10月更文挑战第7天】在现代Web开发中,集成多种技术栈以实现复杂的功能需求已成为常态。本文将详细介绍如何使用SpringBoot作为后端框架,结合阿里巴巴的通义千问(一个强大的自然语言处理服务),并通过自定义React组件来支持服务器发送事件(SSE, Server-Sent Events)的EventStream数据解析。这一组合不仅能够实现高效的实时通信,还能利用AI技术提升用户体验。
184 2
|
17天前
|
人工智能 自然语言处理 前端开发
用通义灵码,从 0 开始打造一个完整APP,无需编程经验就可以完成
通义灵码携手科技博主@玺哥超carry 打造全网第一个完整的、面向普通人的自然语言编程教程。完全使用 AI,再配合简单易懂的方法,只要你会打字,就能真正做出一个完整的应用。本教程完全免费,而且为大家准备了 100 个降噪蓝牙耳机,送给前 100 个完成的粉丝。获奖的方式非常简单,只要你跟着教程完成第一课的内容就能获得。
8512 12
|
1天前
|
并行计算 PyTorch 算法框架/工具
【大模型入门系列2】本地win11部署通义千问大模型做RAG验证
本文介绍了如何在本地环境中部署并使用大模型,特别是阿里巴巴云的Qwen1.5-0.5B-Chat模型。首先分析了本地化部署的重要性,包括数据安全、网络稳定性、定制化需求等方面。接着详细描述了环境准备过程,包括更新显卡驱动、安装CUDA、配置Python环境等。随后,文章展示了如何使用ModelScope Library加载模型,并通过Python脚本实现基本的对话功能。最后,探讨了私有化部署大模型的优势,如数据安全、定制化、效率提升等,为未来的探索指明方向。
25 3
|
2月前
|
网络安全 开发工具 数据安全/隐私保护
|
3月前
|
弹性计算 自然语言处理 API
如何速成RAG+Agent框架大模型应用搭建
本文侧重于能力总结和实操搭建部分,从大模型应用的多个原子能力实现出发,到最终串联搭建一个RAG+Agent架构的大模型应用。