04 LlamaIndex入门教程:使用本地模型的五步指南

LlamaIndex入门教程:使用本地模型的五步指南

在本教程中,我们将展示如何使用本地LLM和嵌入模型来构建一个简单的LlamaIndex应用。我们将使用BAAI/bge-base-en-v1.5作为嵌入模型,并通过Ollama服务Llama3模型。

提示

确保你已经按照自定义安装步骤进行了操作。

下载数据

本示例使用Paul Graham的散文《What I Worked On》的文本。你可以在我们的仓库的示例文件夹中找到许多其他示例。

获取它的最简单方法是点击此链接下载,并将其保存在名为data的文件夹中。

设置

Ollama是一个帮助你在本地设置LLM的工具(目前支持OSX和Linux。你可以通过WSL 2在Windows上安装Ollama)。

按照README学习如何安装它。

要下载Llama3模型,只需执行ollama pull llama3

注意:你需要一台至少有32GB RAM的机器。

要导入llama_index.llms.ollama,你应该运行pip install llama-index-llms-ollama

要导入llama_index.embeddings.huggingface,你应该运行pip install llama-index-embeddings-huggingface

更多集成都可以在https://llamahub.ai 上找到。

加载数据并构建索引

在你创建了data文件夹的同一文件夹中,创建一个名为starter.py的文件,内容如下:

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

documents = SimpleDirectoryReader("data").load_data()

# bge-base embedding model
Settings.embed_model = HuggingFaceEmbedding(model_name="BAAI/bge-base-en-v1.5")

# ollama
Settings.llm = Ollama(model="llama3", request_timeout=360.0)

index = VectorStoreIndex.from_documents(
    documents,
)

这将在data文件夹中的文档上构建一个索引(在本例中仅包含散文文本,但可以包含许多文档)。

你的目录结构应该如下所示:

├── starter.py
└── data
    └── paul_graham_essay.txt

我们通过HuggingFaceEmbedding类使用BAAI/bge-base-en-v1.5模型,并通过Ollama LLM包装器加载Llama3模型。更多信息请参见本地嵌入模型页面。

查询你的数据

将以下行添加到starter.py中:

query_engine = index.as_query_engine()
response = query_engine.query("What did the author do growing up?")
print(response)

这将为你的索引创建一个问答引擎,并提出一个简单的问题。你应该得到一个类似于以下的响应:作者写了短篇故事,并试图在IBM 1401上编程。

你可以查看日志,类似我们的入门示例,持久化/加载索引。

提示

  • 了解更多高级概念。
  • 告诉我如何自定义事物。
  • 对特定模块感到好奇?查看组件指南。

通过LlamaIndex,我们不仅提供了一个强大的工具集,还构建了一个充满活力的社区,致力于推动LLMs在各种应用中的潜力。无论你是初学者还是经验丰富的开发者,LlamaIndex都为你提供了探索和实现上下文增强LLM应用的途径。加入我们,一起解锁LLMs的无限可能!

### 集成和使用本地模型于 Llama Index #### 准备工作 为了在 Llama Index 中集成并使用本地机器学习或 AI 模型,需先确保已安装必要的依赖库。这通常包括但不限于 `transformers` 和 `torch` 或者其他适合所选模型的库。 ```bash pip install transformers torch ``` #### 加载本地模型 通过 Hugging Face 的 Transformers 库加载本地预训练模型是一个常见做法。假设有一个名为 `my_local_model` 的文件夹存储着下载好的权重和其他配置文件,则可以通过如下方式加载: ```python from transformers import AutoModelForSequenceClassification, AutoTokenizer model_path = "path/to/my_local_model" tokenizer = AutoTokenizer.from_pretrained(model_path) model = AutoModelForSequenceClassification.from_pretrained(model_path) ``` 此过程允许直接访问硬盘上的自定义版本而非远程仓库中的公开资源[^4]。 #### 整合至 Llama Index 流程 一旦成功导入了所需的组件之后,下一步就是将其嵌入到现有的索引结构里去。具体实现取决于实际应用场景的需求;然而,在大多数情况下,这意味着要创建一个新的节点处理器(Node Processor),该处理器能够接收查询请求并将它们传递给指定的任务执行器(Task Executor)——即之前提到过的本地化实例。 下面给出了一种可能的设计模式来完成这项任务: 1. **定义接口**: 创建一个继承自 `BaseNodeParser` 类的新类,并覆盖其中的方法以适应特定业务逻辑的要求。 2. **初始化参数**: 设置路径指向目标位置以及其他任何必需项(比如批量大小、最大序列长度等超参设置)作为构造函数的一部分传入对象内部状态变量之中保存起来供后续调用时读取。 3. **处理输入数据流**: 实现 `_parse_node()` 方法负责解析来自上游模块的数据包成为适配下游消费端预期格式的有效负载形式。这里的关键在于如何有效地桥接两者的差异之处而不会造成性能瓶颈或者信息丢失等问题发生。 4. **返回预测结果**: 经过上述转换操作后的最终产物应该被封装在一个标准的结果容器内并通过适当的方式反馈回去给发起方等待进一步指示。 以下是简化版代码片段展示这一概念的实际编码实践: ```python class LocalModelNodeProcessor(BaseNodeParser): def __init__(self, model_dir: str): super().__init__() self.tokenizer = AutoTokenizer.from_pretrained(model_dir) self.model = AutoModelForSequenceClassification.from_pretrained(model_dir) def _parse_node(self, node: NodeWithScore) -> List[Document]: text_input_ids = self.tokenizer(node.node.text, return_tensors="pt")["input_ids"] with torch.no_grad(): outputs = self.model(text_input_ids).logits prediction = int(torch.argmax(outputs)) doc = Document( id_=str(uuid.uuid4()), text=f"Predicted class is {prediction}", extra_info={"node": node} ) return [doc] ``` 这段脚本展示了怎样基于现有 API 设计原则快速搭建起一套完整的解决方案框架用于支持个性化定制需求的同时也保持良好的可扩展性和维护性特点[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

需要重新演唱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值