LlamaIndex是一个便捷的工具,它架起了自定义数据与强大的大型语言模型(如GPT-4)之间的桥梁。这一工具使得数据更易于访问,并为开发更智能的应用程序和工作流程奠定了基础。
LlamaIndex在大型语言模型迅速发展的背景下,它如同一个多用途工具箱,在数据处理和大型语言模型应用的各个环节提供支持——从数据的摄取、结构化、检索到与应用框架的集成。
LlamaIndex是构建基于大型语言模型支持的稳健应用程序的理想平台,适用于复杂问答系统、交互式聊天机器人及智能代理等场景。其核心优势在于检索增强生成(RAG),能够为用户提供坚实的基础组件。
知识库:如同图书馆,存储了诸如FAQ、手册等信息资源,供系统在接收到问题时从中寻找答案。
触发/查询:这是用户的提问或请求,触发系统即刻行动。
任务/动作:系统理解触发器或查询后执行的操作,例如回答问题或执行特定指令。
为了实现RAG机制,LlamaIndex需要经过两个关键阶段:
1)索引阶段:创建知识库
- 数据连接器(readers):从各种源和格式中提取数据。
- 文档/节点:数据容器,包含来自不同来源的信息,并通过元数据和关系增强,便于精准检索。
- 数据索引:将获取的数据转化为可检索格式,涉及解析、嵌入及元数据推断,最终形成知识库。
2)查询阶段:应用知识
- 根据查询从知识库中提取相关上下文,并结合LLM的见解生成回应。此过程确保了LLM的回答基于最新且相关的信息,减少了错误的可能性。
LlamaIndex的设计具有模块化特点,适合应用于问答系统、聊天机器人或代理控制的应用场景。
查询引擎:负责接收自然语言查询并返回带上下文的响应。
聊天引擎:支持多轮对话,促进用户与数据的互动。
代理:自动执行任务,通过动态行动计划而非固定逻辑与环境交互。
检索器:定义如何根据查询从知识库中提取相关上下文。
节点后处理器:对节点集合进行调整、筛选或重排序。
响应合成器:指导LLM根据检索到的文本块生成响应。
在利用LlamaIndex的过程中,上述组件构成了其基本架构,为用户提供了一个灵活而强大的工具集。
下面我们用三个示例代码,来带大家体验llamainde的应用。
1、安装依赖
!pip install llama-index-core
!pip install llama-index-llms-dashscope
!pip install llama-index-embeddings-dashscope
from llama_index.core.tools import FunctionTool
from llama_index.core.agent import ReActAgent
from llama_index.embeddings.dashscope import DashScopeEmbedding, DashScopeTextEmbeddingModels, DashScopeTextEmbeddingType
from llama_index.llms.dashscope import DashScope, DashScopeGenerationModels
2、初始llm代理,这里我们使用阿里的在线大模型千问
# 初始化 llm
llm = DashScope(
model_name=DashScopeGenerationModels.QWEN_TURBO, api_key='xxxxx'
)
# 初始化 ReAct 代理程序
agent = ReActAgent.from_tools([], llm=llm, verbose=True)
3、示例1:对话
agent.chat("你好,你是谁?")
4、示例2:使用自定义工具
# 定义示例工具
def multiply(a: int, b: int) -> int:
"""将两个整数相乘并返回结果整数"""
return a * b
multiply_tool = FunctionTool.from_defaults(fn=multiply)
agent = ReActAgent.from_tools([multiply_tool], llm=llm, verbose=True)
agent.chat("11 * 22等于多少?")
5、示例2:使用llamaindex自带工具,检索问题
#!pip install llama-index llama-index-tools-tavily-research
from llama_index.tools.tavily_research.base import TavilyToolSpec
# create a react agent to use tavily tool
Tavi_spec = TavilyToolSpec(
api_key='tvly-xxxx',
)
# Get the search tavily tool
Tavi_spec_tool =Tavi_spec.to_tool_list()[0]
agent = ReActAgent.from_tools([Tavi_spec_tool], llm=llm, verbose=True)
agent.chat("京东创始人是谁?")