当前位置: 首页 > article >正文

llamaindex实战-ChatEngine-ReAct Agent模式

概述

ReAct 是一种基于Agent的聊天模式,构建在数据查询引擎之上。对于每次聊天交互,代理都会进入一个 ReAct 循环:

  • 首先决定是否使用查询引擎工具并提出适当的输入

  • (可选)使用查询引擎工具并观察其输出

  • 决定是否重复或给出最终答复

这种方法很灵活,因为它可以灵活地选择是否查询知识库,它是基于Agent来实现的。然而,表现也更依赖于LLM的质量。您可能需要进行更多强制,以确保它选择在正确的时间查询知识库,而不是产生幻觉答案。

实现逻辑

  1. 构建和使用本地大模型。这里使用的是gemma2这个模型,也可以配置其他的大模型。

  2. 从文档中构建索引

  3. 把索引转换成查询引擎:index.as_chat_engine,并设置chat_mode为react。

注意:我这里使用的是本地大模型gemm2,效果可能没有openai的好。

实现代码

from llama_index.core import VectorStoreIndex, SimpleDirectoryReader, Settings
from llama_index.embeddings.huggingface import HuggingFaceEmbedding
from llama_index.llms.ollama import Ollama

local_model = "/opt/models/BAAI/bge-base-en-v1.5"

# bge-base embedding model
Settings.embed_model = HuggingFaceEmbedding(model_name=local_model)
# ollama
Settings.llm = Ollama(model="gemma2", request_timeout=360.0)

from llama_index.core import VectorStoreIndex, SimpleDirectoryReader

data = SimpleDirectoryReader(input_dir="./data/paul_graham/").load_data()
index = VectorStoreIndex.from_documents(data)

# 设置使用react模式
chat_engine = index.as_chat_engine(chat_mode="react", llm=Settings.llm, verbose=True)

response = chat_engine.chat( "Use the tool to answer what did Paul Graham do in the summer of 1995?")

输出

从以下输出可以看到,不同大模型的输出不太相同。Agent通过查询引擎获取到了对应的索引和文本信息。

$ python chat_react.py 
> Running step 3e748b23-a1bb-4807-89f6-7bda3b418b86. Step input: Use the tool to answer what did Paul Graham do in the summer of 1995?
Thought: The current language of the user is: English. I need to use a tool to help me answer the question.
Action: query_engine_tool
Action Input: {'input': 'What did Paul Graham do in the summer of 1995?'}
Observation: He worked on his Lisp-based web server.  
​
> Running step 5f4592b6-f1d0-4fcf-8b03-a50d46641ef2. Step input: None
Thought: I can answer without using any more tools. I'll use the user's language to answer
Answer: In the summer of 1995, Paul Graham worked on his Lisp-based web server.

实现分析

从以下实现代码中可以看到,当聊天模式是REACT模式时,会创建一个AgentRunner,并把查询引擎作为工具放入Agent工具列表中。

  def as_chat_engine(
        self,
        chat_mode: ChatMode = ChatMode.BEST,
        llm: Optional[LLMType] = None,
        **kwargs: Any,
    ) -> BaseChatEngine:    
    
           if chat_mode in [ChatMode.REACT, ChatMode.OPENAI, ChatMode.BEST]:
            # use an agent with query engine tool in these chat modes
            # NOTE: lazy import
            from llama_index.core.agent import AgentRunner
            from llama_index.core.tools.query_engine import QueryEngineTool
​
            # convert query engine to tool
            query_engine_tool = QueryEngineTool.from_defaults(query_engine=query_engine)
​
            return AgentRunner.from_llm(
                tools=[query_engine_tool],
                llm=llm,
                **kwargs,
            )

小结

通过REACT模式,会创建一个Agent,并把查询引擎作为工具放到该Agent中。然后,通过查询引擎的能力来查询想要的内容。


http://www.kler.cn/a/415178.html

相关文章:

  • 代码随想录第十一天|栈与队列part02--150.逆波兰表达式求值、239.滑动窗口最大值、347.前k个高频元素、栈与队列总结篇
  • 【Java知识】Java进阶-策略模式实现
  • TDengine在debian安装
  • MySQL - 表的增删查改
  • Docker pull镜像拉取失败
  • (微信小程序)基于Spring Boot的校园失物招领平台的设计与实现(vue3+uniapp+mysql)
  • 剖析 SpringBoot 于夕阳红公寓管理系统架构搭建的核心作用
  • Excel小功能收集笔记-01
  • 如何将多个JS文件打包成一个JS文件?
  • [Go] slice切片详解
  • SQL:多字段混合去重后编号
  • [2024年3月10日]第15届蓝桥杯青少组stema选拔赛C++中高级(第二子卷、编程题(2))
  • 网安瞭望台第4期:nuclei最新poc分享
  • 算力100问☞第30问:密集计算有什么特点?
  • 电脑中的vcruntime140_1.dll文件有问题要怎么解决?一键修复vcruntime140_1.dll
  • 【力扣】541.反转字符串2
  • 银行卡OCR 识别 API 接口如何用PHP如何调用
  • 命令行使用ssh隧道连接远程mysql
  • 认识网络安全
  • 重构代码之将单向关联转换为双向关联
  • 【Npm】--legacy-peer-deps有什么用
  • CWT-CNN-SABO-LSSVM | Matlab实现基于CWT-CNN-SABO-LSSVM对滚动轴承的故障诊断
  • [241127] Mistral AI 更新 Le Chat,免费提供前沿 AI 助手!| TrendForce 预测 2025 十大科技趋势
  • 什么是第4层(TCP/UDP)和第7层(HTTP/HTTPS)
  • UDP客户端服务器通信
  • 原生微信小程序画表格