实用提示:使用 LlamaIndex 在 Google Colab 中构建一个简单的 RAG 应用程序
《实用笔记》操作指南:使用 LlamaIndex 在 Google Colab 中构建简单 RAG 应用——专为采用该架构的团队提供的合同条款、检查清单及可直接插入的代码模板。
本指南将逐步指导您从原始材料构建出一个可运行的系统,具体内容为:使用 LlamaIndex 和开源大型语言模型在 Google Colab 中搭建一个简单的 RAG 应用。重点在于可操作的步骤、明确的检查点,以及可直接放入代码仓库的代码,无需猜测其用途。 在概览阶段,应在修改代码之前明确输入参数、各步骤的负责人以及完成标准。操作人员应能够从已知的检查点重新运行相应步骤,而无需推测隐藏的状态。 需同时记录正常流程和异常恢复流程。重试机制、人工审核环节以及错误处理都是产品不可或缺的部分,而非后续需要补充的内容。
1. 安装所需库
在执行“1 安装所需组件”这一阶段时,首先需列出相关要求:所需的输入参数、成功标志,以及部分失败时的处理方式。这样的检查清单能确保后续的代码修改始终符合预期。 建议使用小型、可测试的单元而非庞大的脚本。当某个步骤失败时,故障应能指向具体的责任模块,而非复杂的流程链。 对稳定的系统指令和工具结构进行缓存。重复发送相同的开头信息是导致资源浪费的常见原因。
!pip install -q llama-index llama-index-readers-web html2text llama-index-llms-groq llama-index-embeddings-huggingface
2. 导入所需包
在处理“导入所需数据”这一阶段时,首先需列出相关约定:所需的输入参数、成功标志,以及部分失败时的处理方式。这样的清单能确保后续的代码修改始终符合初始要求。 将这一阶段视为输入与验证后输出之间的契约。为相关产物命名,明确成功判定标准,杜绝无声的半完成状态。 缓存系统中稳定的指令及工具结构。重复发送相同的前置信息是导致资源浪费的常见原因。
from llama_index.core import VectorStoreIndex, Settings
from llama_index.readers.web
import SimpleWebPageReader
from llama_index.llms.groq import Groq
from llama_index.embeddings.huggingface import HuggingFaceEmbedding
from google.colab import userdata
3. 配置 Groq API 密钥
在完成“配置 Groq”这三个阶段时,首先需明确相关规范:所需输入、成功信号以及部分失败时的处理方式。这份清单能确保后续的代码修改始终符合预期。 在功能结果旁记录执行时间以及令牌或查询成本。提前了解成本情况,可避免在系统从演示环境切换到共享环境时出现意外费用。 缓存稳定的系统指令和工具架构。重复发送相同的开头信息是导致资源浪费的常见原因。 在完成“配置 Groq”这三个阶段时,首先需明确相关规范:所需输入、成功信号以及部分失败时的处理方式。这份清单能确保后续的代码修改始终符合预期。 同时记录正常流程和故障恢复流程。重试机制、人工审核环节以及死信处理都是产品功能的一部分,而非后续需要补充的内容。
# Groq API Key
os.environ["GROQ_API_KEY"] = userdata.get("GROQ_APIKEY")
4. 配置大语言模型和嵌入模型
将“配置LLM”这一阶段视为可度量的对象来处理效果最佳。在扩大范围之前,先记录一份理想的输出样本、一个失败案例以及回滚说明。 优先选择小型且可测试的单元,而非庞大的脚本。当某个步骤出现故障时,故障应能指向具体的责任主体,而非复杂的流程链。 为每轮对话和每次会话设定Token预算。智能代理工具往往会大量消耗上下文信息;设置上限可避免演示过程变成意外的费用账单。
# Set up the open-source LLM and embedding model
Settings.llm = Groq( model="openai/gpt-oss-120b", temperature=0.1 )
Settings.embed_model = HuggingFaceEmbedding(model_name="BAAI/bge-small-en-v1.5" )
5. 加载网页
将“5 Load a web stage”视为可度量的工作面时效果最佳。在扩大范围之前,先记录一个成功的案例、一个失败案例以及回滚说明。 把这一阶段视为输入与经过验证的输出之间的契约。为相关成果命名,明确成功标准,绝不允许出现悄无声息的半完成状态。 为每轮及每次会话设定token预算。智能工具往往会过度扩展上下文;设置上限可避免演示过程变成意外的费用账单。
# Passing a URL which we want to load to our vector store
url = "https://mlds.analyticsindiamag.com/"
# Using SimpleWebPageReader to load the URL content
# html_to_text=True converts HTML into plain text
d1 = SimpleWebPageReader( html_to_text=True ).load_data([url])
6. 创建向量索引
将“6 创建向量阶段”视为可度量的对象来处理时效果最佳。在扩大范围之前,先记录一份理想流程示例、一个故障案例以及回滚说明。 在功能结果旁同时记录处理时间以及令牌或查询成本。提前了解成本情况,可避免从演示环境过渡到共享环境时出现意外账单。 为每轮及每次会话设定令牌预算。智能工具往往会大量消耗上下文资源,设置上限能防止演示环境变成意外收费的源头。 将“6 创建向量阶段”视为可度量的对象来处理时效果最佳。在扩大范围之前,先记录一份理想流程示例、一个故障案例以及回滚说明。 需同时记录正常流程与异常恢复路径。重试机制、人工审核环节以及死信处理都是产品本身的组成部分,而非后续需要补充的功能。
# Create a searchable index from the loaded document
index = VectorStoreIndex.from_documents(d1)
7. 创建查询引擎
在“7 创建查询阶段”中,修改代码之前需先定义输入参数、该步骤的负责人以及终止条件。操作人员应能够从已知的检查点重新运行该步骤,而无需猜测隐藏状态。 相较于冗长的脚本,应优先选择小型且可测试的单元。当某个步骤失败时,故障原因应能明确指向单一责任主体,而非复杂的流程链。 如果后续步骤是代码或工具调用,应优先使用具有结构化格式且经过模式验证的输出,而非自由形式的文字描述。
# Creating query engine
query_engine = index.as_query_engine()
8. 提出问题
在“提出问题”阶段,修改代码之前需明确输入内容、该步骤的负责人以及结束标准。操作人员应能够从已知的检查点重新运行该步骤,而无需猜测隐藏状态。 将此阶段视为输入与验证后输出之间的契约。为相关成果命名,定义成功判定标准,并拒绝默许的半完成状态。 当下一步操作为编写代码或调用工具时,优先采用具有架构验证的结构化输出,而非自由形式的文字描述。
# Running a query against the loaded URL data
r1 = query_engine.query("What is MLDS?")
print(r1)
完整的RAG流程
在“完整RAG流程”阶段,修改代码之前需明确输入内容、该步骤的负责人以及结束标准。操作人员应能够从已知的检查点重新运行该步骤,而无需猜测隐藏状态。
Web Page
↓
SimpleWebPageReader
↓
Extract Text
↓
Hugging Face Embeddings
↓
VectorStoreIndex
↓
User Question
↓
Relevant Context
↓
Groq LLM
↓
Answer