Multi-Agent实践第4期:智能体的“想”与“做”-ReAct Agent

本文涉及的产品
交互式建模 PAI-DSW,每月250计算时 3个月
模型训练 PAI-DLC,100CU*H 3个月
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
简介: 本期文章,我们将向大家展示如何使用AgentScope内置的ReAct智能体解决更为复杂的问题。

前言

在前几期的文章中,我们了解了如何利用AgentScope构建一个带有@功能的对话,以及如何搭建一个简单的五子棋游戏。在这些应用中,一个共性是大模型会直接根据提示产生回复,对于简单任务,或许大模型还能够处理。但当我们面对更加复杂的任务时,我们期待大模型变得更加“聪明”,能够应对更多样的场景,解决更加复杂的问题。本期文章,我们将向大家展示如何使用AgentScope内置的ReAct智能体解决更为复杂的问题。完整的代码和运行结果可以在链接(https://github.com/modelscope/agentscope/tree/main/examples/conversation_with_react_agent)中找到

欢迎关注AgentScope,在github上(https://github.com/modelscope/agentscope) 为我们star 🌟。在接下来几天,我们会继续推出一系列教程,让大家通过简单的代码搭建出有趣的多智能体应用!

背景:ReAct算法

ReAct算法来源于论文“ReAct:Synergizing Reasoning and Acting in Language Models”,发表在2023年的ICLR会议上。ReAct算法的核心是通过交替进行reasoning和acting的方式帮助智能体更好地应对和解决复杂问题。相较于一般的reasoning方法,能够根据当前的场景进行分析,做出更具有针对性的行动,并且提供了更好的可解释性和更高的容错度。

image.png

ReAct与其它reasoning算法的对比

准备工作

// model_configs.json
[
    {
    "model_type": "dashscope_chat",
    "config_name": "tongyi_qwen_config",
    "model_name": "qwen-max",
    "api_key": "************"  // 在这里填写你DashScope中的API-KEY
    }
]

调用ReActAgent

ReAct算法中,Acting一般通过调用工具的方式进行,因此我们首先需要为智能体准备工具函数,然后再使用这些工具函数解决我们的具体问题。

第一步:准备工具函数

为了让大模型能够使用工具函数,我们需要首先对工具函数进行处理,这里的处理包括两个层面:

  1. 处理需要开发者填入的参数,例如API key,账户,密码等信息,使大模型可以直接调用该函数
  2. 生成大模型能够理解的函数说明,例如目前许多模型API要求的JSON schema格式

为了降低用户的开发难度,AgentScope提供了ServiceFactory模块,可以轻松地处理工具函数。以bing_search函数为例,这个函数需要输入以下参数

  • query:查询的问题
  • api_key:bing搜索的API key
  • num_results:搜索结果的返回数目

开发者可以在ServiceFactory.get中为bing_search指定api_key和num_results两个参数,从而生成一个只要求使用者输入query的函数,以及JSON schema格式的函数说明。

from agentscope.service import bing_search
func_for_llm, func_desc = ServiceFactory.get(
  bing_search, 
  api_key=BING_API_KEY, 
  num_results=3
)

其中JSON schema格式的变量func_desc值如下:

{
    "type": "function",
    "function": {
        "name": "bing_search",
        "description": "Search question in Bing Search API and return the searching results",
        "parameters": {
            "type": "object",
            "properties": {
                "question": {
                    "type": "string",
                    "description": "The search query string."
                }
            },
            "required": [
                "question"
            ]
        }
    }
}

使用类似的方法,我们就可以将不同的工具函数转换成大模型可调用的模式。那么这里我们准备以下的工具函数

from agentscope.service import (
    bing_search, # or google_search,
    read_text_file,
    write_text_file, 
    ServiceFactory
)
# Deal with arguments that need to be input by developers
tools = [
    ServiceFactory.get(bing_search, api_key=BING_API_KEY, num_results=3),
    ServiceFactory.get(execute_python_code),
    ServiceFactory.get(read_text_file),
    ServiceFactory.get(write_text_file),
]

第二步:创建智能体

在准备好了工具函数之后,我们可以创建ReAct智能体了,创建的过程非常简单,初始化agentscope,然后创建ReActAgent并输入对应的参数。

from agentscope.agents import ReActAgent
import agentscope
agentscope.init(model_configs=YOUR_MODEL_CONFIGURATION)
agent = ReActAgent(
    name="assistant",
    model_config_name=YOUR_MODEL_CONFIGURATION_NAME,
    tools=tools,
    sys_prompt="You are a helpful assistant.",
    verbose=True, # set verbose to True to show the reasoning process
)

为了让大家更加清楚ReActAgent的运行原理,我们这里首先展示一下这个智能体的系统提示(system prompt),包含了身份的说明,工具函数说明和提示三个部分。

You are a helpful assistant.
The following tool functions are available in the format of
```
{index}. {function name}: {function description}
    {argument name} ({argument type}): {argument description}
    ...
```
Tool Functions:
1. bing_search: Search question in Bing Search API and return the searching results
  question (string): The search query string.
2. execute_python_code: Execute Python code and capture the output. Note you must `print` the output to get the result.
  code (string): The Python code to be executed.
3. read_text_file: Read the content of the text file.
  file_path (string): The path to the text file to be read.
4. write_text_file: Write content to a text file.
  overwrite (boolean): Whether to overwrite the file if it already exists.
  file_path (string): The path to the file where content will be written.
  content (string): Content to write into the file.
Notice:
1. Fully understand the tool function and its arguments before using it.
2. Only use the tool function when it's necessary.
3. Check if the arguments you provided to the tool function is correct in type and value.
4. You can't take some problems for granted. For example, where you are, what's the time now, etc. But you can try to use the tool function to solve the problem.
5. If the function execution fails, you should analyze the error and try to solve it.

第三步:测试ReAct智能体能力

此时我们用一个ReAct论文中经典的样例问题“Aside from the Apple Remote, what other device can control the program Apple Remote was originally designed to interact with?”来测试它的表现。

from agentscope.message import Msg
msg_question = Msg(
    name="user", 
    content="Aside from the Apple Remote, what other device can control the program Apple Remote was originally designed to interact with?", 
    role="user"
)
    
res = agent(msg_question)

下面我们将智能体打印出来的思考过程按照轮次拆分开进行分析

  • 第一轮
  • reasoning: 我们首先看到智能体分析了用户输入的问题,并且决定采用bing_search的工具函数进行调用
  • acting: bing_search返回了搜索结果,但是这里我们注意到,返回的信息和问题答案并不相关。由于ReAct算法受到广泛的关注,因此我们在这里使用的样例问题搜索到的结果是与ReAct算法本身相关的介绍!这是一个非常有趣的搜索结果,出乎了我们的意料,下面我们看看智能体将会如何处理这个问题。
##################### ITER 1, STEP 1: REASONING ######################
assistant: {
    "thought": "I need to search for information about what other devices can control the program that the Apple Remote was originally designed to interact with.",
    "speak": "Let me find that information for you.",
    "function": [
        {
            "name": "bing_search",
            "arguments": {
                "question": "What devices can control the program Apple Remote was designed for?"
            }
        }
    ]
}
####################### ITER 1, STEP 2: ACTION #######################
>>> Executing function bing_search ...
>>> END 
system: Execution Results:
1. bing_search:
    [EXECUTE STATUS]: SUCCESS
    [EXECUTE RESULT]: [{'title': '《ReAct: SYNERGIZING REASONING AND ACTING IN ...', 'link': 'https://www.cnblogs.com/LittleHann/p/17541295.html', 'snippet': 'Aside from the Apple Remote, what other devices can control the program Apple Remote was originally designed to interact with? 我们可以看到该模型生成了任务解决轨迹(思考、行动)。'}, {'title': 'REACT:在大模型中协同推理与行动,使其能够解决推理和 ...', 'link': 'https://baijiahao.baidu.com/s?id=1775590643651365661', 'snippet': 'Q:Aside from the Apple Remote, what other device can control the program Apple Remote was originally designed to intect with? 除了苹果遥控器之外,还有哪些设备可以控制最初设计用于连接的苹果遥控器所配合的程序?'}, {'title': 'ReAct Prompting | Prompt Engineering Guide', 'link': 'https://www.promptingguide.ai/techniques/react', 'snippet': 'Aside from the Apple Remote, what other devices can control the program Apple Remote was originally designed to interact with? Note that in-context examples are also added to the prompt but we exclude that here for simplicity.'}]

  • 第二轮
##################### ITER 2, STEP 1: REASONING ######################
assistant: {
    "thought": "The search results did not provide a clear answer to the question. I need to refine the search query to get more specific results.",
    "speak": "I'm sorry, I couldn't find a clear answer. Let me try a different search.",
    "function": [
        {
            "name": "bing_search",
            "arguments": {
                "question": "What devices can control Apple TV other than Apple Remote?"
            }
        }
    ]
}
####################### ITER 2, STEP 2: ACTION #######################
>>> Executing function bing_search ...
>>> END 
system: Execution Results:
1. bing_search:
    [EXECUTE STATUS]: SUCCESS
    [EXECUTE RESULT]: [{'title': 'Use other remotes to control Apple TV - Apple Support', 'link': 'https://support.apple.com/guide/tv/use-other-remotes-atvb0410f604/tvos', 'snippet': 'Table of Contents. Use other remotes to control Apple TV. You can use a supported TV or receiver remote, a network-based remote for home-control systems, or an infrared remote (commonly known as a universal remote) to control Apple TV.'}, {'title': '4 Siri Remote Alternatives You Can Use to Control Your Apple TV - MUO', 'link': 'https://www.makeuseof.com/alternative-apple-tv-remotes/', 'snippet': "Fortunately, if you find yourself looking for alternatives to control your Apple TV, there are several good options for you. You can use other Apple devices to operate the Apple TV, or even affordable Bluetooth accessories. We'll highlight the best alternatives to the Apple TV remote. 1. Use Your iPhone or iPad to Control the Apple TV"}, {'title': 'Apple TV Siri Remote: How to control TVs and receivers - 9to5Mac', 'link': 'https://9to5mac.com/2021/05/27/apple-tv-siri-remote-control-tv-receiver/', 'snippet': 'The old Siri Remote and Apple TV Remote also feature this functionality, but without a dedicated power button, it’s less convenient and intuitive to use. Another benefit of HDMI-CEC is that...'}]

  • 第三轮
  • reasoning:在这一轮中,智能体总结了上一轮bing_search搜索出来的结果,并在“speak”字段形成了最终的回复。
##################### ITER 3, STEP 1: REASONING ######################
assistant: {
    "thought": "The search results provided a clear answer to the question. Other than the Apple Remote, you can use a supported TV or receiver remote, a network-based remote for home-control systems, an infrared remote (commonly known as a universal remote), or other Apple devices like an iPhone or iPad to control the Apple TV.",
    "speak": "Other than the Apple Remote, you can use a supported TV or receiver remote, a network-based remote for home-control systems, an infrared remote (commonly known as a universal remote), or other Apple devices like an iPhone or iPad to control the Apple TV."
}

这个例子十分的有趣,我们看到了ReAct算法本身是如何处理错误信息,并且产生正确的回复,以及如何在AgentScope中方便地使用ReActAgent来解决我们的问题。

总结

到这里,我们已经完成了利用AgentScope创建ReAct智能体的任务,并进行了初步的尝试。该次尝试的完整的代码和运行结果可以在链接(https://github.com/modelscope/agentscope/tree/main/examples/conversation_with_react_agent)中找到。未来AgentScope也会持续添加新的算法以及样例,欢迎大家持续关注~

延伸阅读和资源

比赛

看到这里,如果你有好玩的想法,不如实践起来,还可以顺便参加下面的比赛~

image.png


点击即可跳转~

Create @ AI 创客松第四季 (aliyun.com)

相关文章
|
4月前
|
人工智能 自然语言处理 前端开发
SpringBoot + 通义千问 + 自定义React组件:支持EventStream数据解析的技术实践
【10月更文挑战第7天】在现代Web开发中,集成多种技术栈以实现复杂的功能需求已成为常态。本文将详细介绍如何使用SpringBoot作为后端框架,结合阿里巴巴的通义千问(一个强大的自然语言处理服务),并通过自定义React组件来支持服务器发送事件(SSE, Server-Sent Events)的EventStream数据解析。这一组合不仅能够实现高效的实时通信,还能利用AI技术提升用户体验。
313 2
|
3月前
|
Arthas 监控 Java
拥抱 OpenTelemetry:阿里云 Java Agent 演进实践
本文介绍了阿里云 Java Agent 4.x 版本在基于 OTel Java Agent 二次开发过程中的实践与思考,并重点从功能、性能、稳定性、兼容性四个方面介绍了所做的工作。同时也介绍了阿里云可观测团队积极参与开源建设取得的丰厚成果。
338 7
拥抱 OpenTelemetry:阿里云 Java Agent 演进实践
|
2月前
|
人工智能 API 数据库
Qwen-Agent功能调用实践探索
本文详细解析了Qwen-Agent的核心功能——功能调用,涵盖其定义、工作流程、重要性和实际应用,通过实例展示了如何在Qwen-Agent中利用此功能与外部工具和API互动,扩展AI应用范围。
|
2月前
|
人工智能 自然语言处理 数据挖掘
田渊栋团队新作祭出Agent-as-a-Judge!AI智能体自我审判,成本暴跌97%
田渊栋团队提出Agent-as-a-Judge框架,利用智能体自身评估其他智能体的性能,不仅关注最终结果,还能提供中间反馈,更全面准确地反映智能体的真实能力。该框架在DevAI基准测试中表现出色,成本效益显著,为智能体的自我改进提供了有力支持。
60 7
|
3月前
|
存储 人工智能 算法
卷起来!让智能体评估智能体,Meta发布Agent-as-a-Judge
Meta(原Facebook)提出了一种名为Agent-as-a-Judge的框架,用于评估智能体的性能。该框架包含八个模块,通过构建项目结构图、定位相关文件、读取多格式数据、搜索和检索信息、询问要求满足情况、存储历史判断、以及规划下一步行动,有效提升了评估的准确性和稳定性。实验结果显示,Agent-as-a-Judge在处理复杂任务依赖关系方面优于大型语言模型,但在资源消耗和潜在偏见方面仍面临挑战。
63 1
|
3月前
|
传感器 机器学习/深度学习 自然语言处理
智能代理(Agent)在工具调用与协作中的应用实践
随着人工智能技术的飞速发展,智能代理(Agent)技术已成为解决复杂任务的关键手段。本文深入探讨了如何设计灵活的工具调用机制和构建高效的单/多Agent系统以提升任务执行效率。文章不仅涵盖了相关的理论知识,还提供了丰富的实践案例和代码实现,旨在帮助读者深入理解和应用智能代理技术。
308 2
|
3月前
|
Prometheus 监控 Java
深入探索:自制Agent监控API接口耗时实践
在微服务架构中,监控API接口的调用耗时对于性能优化至关重要。通过监控接口耗时,我们可以识别性能瓶颈,优化服务响应速度。本文将分享如何自己动手实现一个Agent来统计API接口的调用耗时,提供一种实用的技术解决方案。
84 3
|
3月前
|
前端开发 JavaScript
手敲Webpack 5:React + TypeScript项目脚手架搭建实践
手敲Webpack 5:React + TypeScript项目脚手架搭建实践
|
4月前
|
人工智能 API 决策智能
swarm Agent框架入门指南:构建与编排多智能体系统的利器 | AI应用开发
Swarm是OpenAI在2024年10月12日宣布开源的一个实验性质的多智能体编排框架。其核心目标是让智能体之间的协调和执行变得更轻量级、更容易控制和测试。Swarm框架的主要特性包括轻量化、易于使用和高度可定制性,非常适合处理大量独立的功能和指令。【10月更文挑战第15天】
644 6
|
4月前
|
机器学习/深度学习 人工智能 算法
打造你的超级Agent智能体——在虚拟迷宫中智斗未知,解锁AI进化之谜的惊心动魄之旅!
【10月更文挑战第5天】本文介绍了一个基于强化学习的Agent智能体项目实战,通过控制Agent在迷宫环境中找到出口来完成特定任务。文章详细描述了环境定义、Agent行为及Q-learning算法的实现。使用Python和OpenAI Gym框架搭建迷宫环境,并通过训练得到的Q-table测试Agent表现。此项目展示了构建智能体的基本要素,适合初学者理解Agent概念及其实现方法。
130 9

热门文章

最新文章