LlamaIndex中使用本地LLM和Embedding

LlamaIndex默认会调用OpenAI的text-davinci-002模型对应的API,用于获得大模型输出,这种方式在很多情况下对国内用户不太方便,如果本地有大模型可以部署,可以按照以下方式在LlamaIndex中使用本地的LLM和Embedding(这里LLM使用chatglm2-6b,Embedding使用m3e-base):

import torch
from transformers import AutoModel, AutoTokenizer
from llama_index.llms import HuggingFaceLLM
from llama_index import VectorStoreIndex, ServiceContext
from llama_index import LangchainEmbedding, ServiceContext
from langchain.embeddings.huggingface import HuggingFaceEmbeddings
from llama_index import VectorStoreIndex, SimpleDirectoryReader
from llama_index import Prompt, 
### 如何在 Llama Index 中使用 Chroma #### 安装依赖库 为了能够在 Llama Index 项目中集成并使用 Chroma,首先需要确保安装了必要的 Python 库。可以通过 pip 来完成这些包的安装: ```bash pip install chromadb llama-index ``` #### 配置 Chroma Vector Store 当希望自定义 `ChromaVectorStore` 使用特定集合(collection),可以按照如下方式创建并向其中添加文档节点。这允许更灵活地管理不同类型的嵌入数据。 ```python from llama_index import SimpleDirectoryReader, GPTListIndex, LLMPredictor, ServiceContext from langchain.embeddings.huggingface import HuggingFaceEmbeddings from llama_index.vector_stores.chroma import ChromaVectorStore import chromadb # 初始化 ChromaDB 客户端以及指定 collection 名称 client = chromadb.Client() chroma_collection_name = 'my_custom_collection' try: client.create_collection(chroma_collection_name) except ValueError as e: print(f"Collection {chroma_collection_name} already exists.") vector_store = ChromaVectorStore( chroma_client=client, collection_name=chroma_collection_name ) # 加载文件夹中的所有文档作为输入源 documents = SimpleDirectoryReader('data').load_data() # 将加载好的 documents 转换成 nodes 并保存到 vector store 中 for doc in documents: node = ... # 构建 Node 对象逻辑省略 vector_store.add([node]) service_context = ServiceContext.from_defaults(llm_predictor=LLMPredictor(), embed_model="text-davinci-003") index = GPTListIndex(nodes=[], service_context=service_context, vector_store=vector_store) ``` 上述代码片段展示了如何设置一个名为 `my_custom_collection` 的新集合来存储来自本地目录的数据文件转换后的节点对象[^1]。 #### 查询优化与性能提升 考虑到索引操作可能较为耗时,在实际应用过程中建议预先计算好 embedding,并将其持久化至外部向量数据库如 Chroma 中。这样做不仅能够减少重复劳动,还能显著加快检索速度[^2]。 对于已经存在于 Chroma 数据库内的记录,可以直接利用其高效的查询接口获取所需信息而无需再次执行完整的索引流程。例如,如果想要基于某个条件筛选出符合条件的一组条目,则可通过如下命令实现: ```python results = chroma_collection.get(where={"metadata_field": "value"}) ``` 这里假设每篇文档都附带了一些元数据字段用于辅助过滤[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Elwin Wong

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

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

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

打赏作者

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

抵扣说明:

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

余额充值