使用 LlamaIndex 和 Gemini 实现 REAcT Agent

在过去的 2-3 年里,我们见证了人工智能领域的非凡发展,主要体现在大型语言模型、扩散模型、多模态模型等方面。我最喜欢的兴趣之一是代理工作流。今年早些时候,Coursera 的创始人、深度学习的先驱 Andrew Ng发了一条推文,称“代理工作流将在今年推动人工智能的巨大进步”。自这条推文发布以来,我们看到了代理领域令人难以置信的发展,许多人都在构建自主代理、多代理架构等。

在本文中,我们将深入探讨 REAcT Agent 的实现,这是代理工作流中的一种强大方法。我们将探索 REAcT 提示是什么、它为什么有用以及如何使用 LlamaIndexGemini LLM 实现它。

学习目标

  • 我们将了解 REAcT 提示及其在构建能够推理、行动和思考复杂任务的更强大的 AI 代理中的作用。 
  • 关于如何编写 REAcT 提示的示例提示。
  • 进一步在 LlamaIndex 框架内实现 REAcT Agents,为 Agent 提供反馈功能。
  • 探索 REAcT 代理的功能,特别是其分解任务、使用各种工具和提供透明推理过程的能力。

什么是 REAcT 提示?

使用 LlamaIndex 和 Gemini 实现 REAcT Agent

REAcT代表推理、行动和思考。它是一种提示技术,可使大型语言模型 (LLM) 将复杂任务分解为一系列思考过程、行动和观察。

REAcT 提示非常简单,遵循三个步骤:

  • 思考:根据用户查询,代理形成如何解决问题的想法。
  • 行动:代理根据其想法,利用可用的工具或 API 执行某些操作。例如,您可以使用 Google 搜索、文件加载等。
  • 观察:代理分析其动作的结果并决定是否继续该过程或提供最终答案。

该过程循环运行,直到获得满意的结果或达到最大迭代次数。

REAcT 提示示例

让我们看一下 REAcT 提示的典型结构:

Thought: [The agent's reasoning about the task]
Action: [The action to be taken, e.g., "Search"]
Action Input: [The input for the action, e.g., a search query]
Observation: [The result of the action]
Thought: [Further reasoning based on the observation]
...
[This process repeats until a final answer is reached]
Final Answer: [The agent's conclusion]

让我们看一个实时示例,了解 REAcT 代理如何处理有关最新技术进步的查询。此示例将展示代理的思维过程、行动和观察。

用户查询:“在最近的印度与英格兰测试系列赛中,谁是系列赛最佳球员,他们的主要表现是什么?”

输出:(使用crewAI生成)

Thought: To answer this query accurately, I need to find information about the recent India vs England Test series, identify the man of the series, and gather details about their performances. I'll start by searching for the series results.

Action: Search
Action Input: "India vs England Test series 2024 results"

Observation: The India vs England Test series concluded recently with India winning the series 4-1. The series was played in India from January to March 2024.

Thought: Now that I have confirmed the series details, I need to find out who was named the man of the series.

Action: Search
Action Input: "India vs England Test series 2024 man of the series"

Observation: Yashasvi Jaiswal was named the man of the series for his outstanding batting performances throughout the series.

Thought: I've identified the man of the series. Now, I need to gather information about Yashasvi Jaiswal's key performances in this series.

Action: Search
Action Input: "Yashasvi Jaiswal performance India vs England Test series 2024"

Observation: Yashasvi Jaiswal had an exceptional series:
- He scored a total of 712 runs in the series.
- His scores included two double centuries (209 and 214*).
- He hit the most sixes (26) in a Test series by any batter.
- Jaiswal maintained an impressive average of 89 throughout the series.

Thought: I now have all the necessary information to provide a comprehensive answer about the man of the series and his key performances.

Final Answer: The man of the series in the recent India vs England Test series (played from January to March 2024) was Yashasvi Jaiswal. India won the series 4-1, and Jaiswal's performances were crucial to this victory.

Key performances by Yashasvi Jaiswal in the series:

1. Total runs: Jaiswal amassed an impressive 712 runs across the five-match series.
2. Double centuries: He scored two double hundreds - 209 and 214* (not out).
3. Six-hitting record: Jaiswal hit 26 sixes, setting a new record for the most sixes in a Test series by any batter.
4. Batting average: He maintained an outstanding average of 89 throughout the series.

These performances demonstrate Jaiswal's consistency, ability to play long innings, and his aggressive style of play, especially evident in his six-hitting prowess. His contributions were pivotal in India's dominant performance in the series, justifying his selection as the man of the series.

Jaiswal's performance is particularly noteworthy given that this was one of his early Test series, marking him as a rising star in Indian cricket. His ability to perform at such a high level against a strong England team suggests a promising future in Test cricket for the young batsman.

为什么 REAcT 提示对建筑代理有用?

获得 LLM 成绩的典型方法是编写结构良好的提示。但是,重要的是要记住 LLM 缺乏固有的推理能力。人们尝试了各种方法使 LLM 能够推理和规划,但其中许多方法都失败了。思维链、思维树和自洽性 COT 等技术已显示出前景,但在实现稳健推理方面并不完全成功。后来出现了 ReAct,它在某种程度上成功地设计了比以前的方法更合理的逻辑研究计划。

REAcT 将复杂的任务分解为一系列想法、行动和观察,REAcT 代理可以以以前难以实现的透明度和适应性水平解决复杂问题。这种方法可以更细致地了解代理的决策过程,使开发人员更容易调试、改进和优化 LLM 响应。

此外,REAcT 提示的迭代特性使代理能够处理不确定性。随着代理经历多个思考、行动和观察周期,它可以根据新信息调整其方法,就像人类面对复杂任务时一样。通过将决策建立在具体行动和观察的基础上,REAcT 代理可以提供更可靠、更符合情境的响应,从而显著降低出现幻觉的风险。 

REAcT 药剂的主要应用和用例

我们将探索 REAcT 代理的多样化应用和实际用例,强调它们通过增强推理、决策和在各种情况下的适应性来改变行业的潜力。

实时体育分析与预测

基于互联网上大量信息的 ReAcT 代理可以为体育行业提供分析和预测。它可以处理实时比赛数据、球员统计数据和历史表现,以提供深入的分析和预测。例如,在 IPL 比赛期间,代理可以:

  • 分析球员表现趋势
  • 预测最佳击球顺序或投球变化
  • 根据击球手的击球区域建议场地位置

自动化客户支持

客户支持始终需要技能来提供有价值的反馈。当需要向 LLM 或代理提供智能反馈时,ReAcT 代理是一个不错的选择。这可以帮助:

  • 理解复杂的客户查询
  • 访问相关产品信息和故障排除指南
  • 引导客户逐步了解解决方案

学生个性化学习

教育是 ReAcT Agents 能够产生巨大影响的另一个领域。想象一下,个性化的 AI 导师可以:

  • 评估学生当前的知识水平
  • 将复杂的主题分解成易于管理的部分
  • 根据学生的反应调整教学风格
  • 提供实时反馈并建议额外资源

在我们的代码实现中,我们将研究实时体育数据查询和分析。 

使用 LlamaIndex 实现 REAcT 代理

现在,让我们进入激动人心的部分——使用 LlamaIndex 实现 REAcT 代理。实现非常简单,只需几行代码即可完成。

安装和设置

在继续代码实现之前,让我们安装一些必要的库,包括 LlamaIndex。LlamaIndex 是一个可以有效地将大型语言模型连接到您的数据的框架。对于我们的操作工具,我们将使用 DuckDuckGo Search,而 Gemini 将是我们集成到代码中的 LLM。

!pip install llama-index
!pip install duckduckgo-search
!pip install llama-index-llms-gemini

首先,我们需要导入必要的组件。由于 ReAct 代理需要与外部工具交互以获取数据,我们可以使用在 LlamaIndex 核心工具中定义的函数工具来实现这一点。逻辑很简单:每当代理需要访问真实世界的数据时,它都会触发一个 Python 函数来检索所需的信息。这就是 DuckDuckGo 发挥作用的地方,它有助于为代理获取相关上下文。

from llama_index.core.tools import FunctionTool
from duckduckgo_search import DDGS

from llama_index.llms.gemini import Gemini

定义双子座法学硕士 (LLM)

在 LlamaIndex 中,OpenAI 是默认的 LLM,要覆盖 Gemini,我们需要在设置中初始化它。要使用 Gemini LLM,您需要从此处获取 API 密钥:https:  //aistudio.google.com/ 

from llama_index.core import Settings
import os

GOOGLE_API_KEY = "" # add your API key here
os.environ["GOOGLE_API_KEY"] = GOOGLE_API_KEY

llm = Gemini()
Settings.llm = llm

为 REAcT 代理创建行动工具

接下来,我们定义搜索工具 DuckDuckGo Search。需要记住的一个重要细节是,在定义用于执行操作的 FunctionTool 时,需要指定输入参数的数据类型。例如,search(query: str) -> str 确保查询参数是字符串。由于 DuckDuckGo 返回带有附加元数据的搜索结果,因此我们将仅从结果中提取正文内容以简化响应。

def search(query:str) -> str:
  """
  Args:
      query: user prompt
  return:
  context (str): search results to the user query
  """
  # def search(query:str)
  req = DDGS()
  response = req.text(query,max_results=4)
  context = ""
  for result in response:
    context += result['body']
  return context
  
search_tool = FunctionTool.from_defaults(fn=search)

使用 LlamaIndex 编写 REAcT 代理

在设置了代理的主要组件后,我们现在可以定义 ReAct 代理。我们可以直接使用 LlamaIndex 核心中的 ReAct 代理。此外,我们设置 verbose=True 以了解幕后发生的事情。将 allow_parallel_tool_calls 设置为 True 可使代理无需始终依赖外部操作即可做出决策,从而允许它在适当的时候使用自己的推理。

from llama_index.core.agent import ReActAgent

agent = ReActAgent.from_tools([search_tool], 
                               llm=llm, 
                               verbose=True,
                               allow_parallel_tool_calls=True
                             )
                             

就这样!我们已经创建了 REAcT Agent。现在我们可以通过运行 agent.chat 方法使用它来回答查询。 

template = """
You are an expert Sport analysis reporter. 
Understand the trends of Virat Kohli performance in IPL 2024 and provide what was his strengths and weakness
Also provide total score of Virat Kohli in the IPL 2024
I also need highest score as Virat Kohli in the same season
"""

response = agent.chat(template) 
print(response)
Screenshot_2024-10-18_at_04.18.20-thumbnail_webp-600x300-1

结论

REAcT 代理代表了人工智能和代理工作流领域的重大进步。通过使用 LlamaIndex 实现 REAcT 代理,我们创建了一个强大的工具,它可以通过实时用户查询进行推理、行动和思考。 

关键要点

  • REAcT 提示代表了代理工作流程的重大进步,为大型语言模型的复杂推理提供了一种结构化方法。
  • 使用 LlamaIndex 实现 REAcT Agents 非常简单,只需几行代码即可创建强大的自适应 AI 系统。 
  • REAcT 提示的迭代特性允许动态解决问题,使代理能够根据中间结果和新信息调整其方法。
  • REAcT 代理显著降低了幻觉的风险,这是语言模型中常见的挑战。

原创文章,作者:王 浩然,如若转载,请注明出处:https://www.dian8dian.com/shi-yong-llamaindex-he-gemini-shi-xian-react-agent

Like (0)
王 浩然的头像王 浩然作者
Previous 2024年10月20日
Next 2024年10月20日

相关推荐

发表回复

Please Login to Comment