微信扫码
与创始人交个朋友
我要投稿
这里要说明一下,我们需要两种模型:
LLM,也就是负责生成内容的大模型。
embedding model,也就是负责生成以向量形式表示文本语义的嵌入模型。
设置 OpenAI 的 API key
默认情况下,LlamaIndex 使用的都是 OpenAI 的 LLM 和嵌入模型,所以我们首先要有一个 OpenAI 的 API key:
import os
os.environ["OPENAI_API_BASE"] = "https://example.com/v1"
os.environ["OPENAI_API_KEY"] = "sk-example-key"
加载数据和建立索引
现在,我们可以加载文档数据集,并从文档数据集中建立索引:
from llama_index.core import (
VectorStoreIndex,
SimpleDirectoryReader,
)
documents = SimpleDirectoryReader("./data").load_data()
index = VectorStoreIndex.from_documents(documents)
SimpleDirectoryReader 可以直接扫描到指定目录中所有文档。
我们的目录结构如下:
查询索引
现在可以在建立好的索引上生成一个查询引擎,然后我们就可以利用查询引擎去提问:
这个答案是对的吗?
由于 data 目录中只有《中国航天发展简史》,所以我们问的所有问题,查询引擎都会试图从《中国航天发展简史》中去寻找答案,我们看一下原文的这一段:
可以看到答案是正确的。LLM 利用我们查询的问题和检索到的信息,稍微进行了一点推理,生成了答案。
如果没有这些检索到的信息,同样是 OpenAI 的 ChatGPT 3.5 给出的回复如下:
想要看看查询过程的日志吗?
那么就得在代码文件的开头加上:
import logging
import sys
logging.basicConfig(stream=sys.stdout, level=logging.DEBUG)
logging.getLogger().addHandler(logging.StreamHandler(stream=sys.stdout))
当把日志级别设置为 logging.INFO 时,打印出的日志就会少一点。
保存索引
索引其实就是一系列表示文本语义的嵌入向量(vector embedding),这些向量现在都位于内存中。我们可以将索引保存到磁盘:
index.storage_context.persist(persist_dir="./storage")
执行完之后就可以看到生成了一个 storage 目录。
现在我们的代码可以完善一下:
如果索引不在磁盘上,那么就加载数据,建立索引,并将索引保存到磁盘。
否则,直接从磁盘上加载索引,节省了生成索引的时间和调用 OpenAI 的嵌入模型的 token 开销。
使用本地的模型
基于费用、网络环境、数据隐私等原因。我们需要使用开源的模型。现在我们将默认的嵌入模型和 LLM 分别换成 BGE 的和基于 Meta 开源的 Llama2-chat-13B 的中文版:
from llama_index.embeddings.huggingface import HuggingFaceEmbedding
from llama_index.llms.llama_cpp import LlamaCPP
from llama_index.core import Settings
embed_model = HuggingFaceEmbedding(
model_name="../models/BAAI/bge-large-zh-v1.5",
query_instruction="为这个句子生成表示以用于检索相关文章:"
)
Settings.embed_model = embed_model
llm = LlamaCPP(
model_path="../models/Llama/chinese-alpaca-2-13b-q8_0.gguf"
)
Settings.llm = llm
并通过 Settings 设置了全局的嵌入模型和 LLM。
然后重新建立索引,并询问。
虽然回复不怎么样,但是还是正确的。
注意!要在本地运行 Llama2 13B 模型,你至少要有 32GB 的内存。至于 GPU 就无所谓了,有就快,没有就慢。
53AI,企业落地应用大模型首选服务商
产品:大模型应用平台+智能体定制开发+落地咨询服务
承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2024-11-19
llamaindex实战-Workflow:工作流入门(本地部署断网运行)
2024-11-15
llamaindex实战-Agent-在Agent中使用RAG查询(本地部署)
2024-11-07
深度解析 REAcT Agent 的实现:利用 LlamaIndex 和 Gemini 提升智能代理工作流
2024-11-04
手把手教你用Coze零代码搭建一个智能搜索智能体,高时效性、保姆级!
2024-10-11
深入解析LlamaIndex Workflows【下篇】:实现ReAct模式AI智能体的新方法
2024-10-10
使用Milvus和Llama-agents构建更强大的Agent系统
2024-09-19
LlamaIndex报告:未来Agentic App,不仅是RAG
2024-08-28
对于初学者,该如何选择 LlamaIndex 与 LangChain ?
2024-07-09
2024-04-20
2024-06-05
2024-04-25
2024-04-28
2024-05-09
2024-07-20
2024-04-26
2024-04-08
2024-06-19