LlamaIndex:轻松构建索引查询本地文档的神器( 三 )


总的来说,这两个有用的库都很新,还在发展阶段,每周或每月都会有比较大的更新 。也许在不久的将来吞并了,提供了一个完整统一的解决方案 。
五、如何使用构建和查询本地文档索引
接下来我们就用来实现构建外部文档索引进行检索,不过,我们不需要从零开始编写代码 。因为这种模式非常常见,有人已经为它编写了一个开源包,名为 llama-index 。因此,在此例中我们可以直接使用这个软件包,并通过几行代码来测试它是否能够回答与鲁迅先生所写《藤野先生》相关的问题 。
首先通过pip来安装llama-index:
pip install llama-indexpip install langchain
我把从网上找到的《藤野先生》这篇文章变成了一个 txt 文件,放在了 data/ 这个目录下 。
import openai, osfrom llama_index import GPTVectorStoreIndex, SimpleDirectoryReaderos.environ["OPENAI_API_KEY"] = "your-openai-api-key"openai.api_key = os.environ.get("OPENAI_API_KEY")documents = SimpleDirectoryReader('/content/data/luxun').load_data()index = GPTVectorStoreIndex.from_documents(documents)index.set_index_id("index_luxun")index.storage_context.persist('./storage')
输出结果:
INFO:llama_index.token_counter.token_counter:> [build_index_from_nodes] Total LLM token usage: 0 tokensINFO:llama_index.token_counter.token_counter:> [build_index_from_nodes] Total embedding token usage: 6763 tokens
注:日志中会打印出来我们通过消耗了多少个 Token 。
1)、首先,我们通过一个叫做 r 的数据加载器,将整个./data/ 的目录给加载进来 。这里面的每一个文件,都会被当成是一篇文档 。
2)、然后,我们将所有的文档交给了构建索引 。顾名思义,它会把文档分段转换成一个个向量,然后存储成一个索引 。
3)、最后,我们会把对应的索引存下来,存储的结果就是一个 json 文件 。后面,我们就可以用这个索引来进行相应的问答 。
from llama_index import StorageContext, load_index_from_storage# rebuild storage contextstorage_context = StorageContext.from_defaults(persist_dir='./storage')# load indexindex = load_index_from_storage(storage_context, index_id="index_luxun")query_engine = index.as_query_engine(response_mode="tree_summarize")response = query_engine.query("根据上下文内容,告诉我鲁迅先生在日本学医的老师是谁?")print(response)
进行问答也只需几行代码 。我们可以使用的函数,将之前生成的索引加载到内存中 。然后,通过对 Index 实例调用 query 函数,就能够获取问题的答案 。通过外部索引,我们可以准确地获得问题的答案 。
INFO:llama_index.token_counter.token_counter:> [query] Total LLM token usage: 2984 tokensINFO:llama_index.token_counter.token_counter:> [query] Total embedding token usage: 34 tokens鲁迅先生在日本学习医学的老师是藤野严九郎先生 。
确实,通过使用外部索引,我们可以轻松地获得问题的答案 。让我们再试一下其他的问题,看看它是否能够回答正确 。
response = query_engine.query("根据上下文内容,鲁迅先生是去哪里学的医学?")print(response)
输出结果:
> Got node text: 藤野先生东京也无非是这样 。上野的樱花烂熳的时节,望去确也像绯红的轻云,但花下也缺不了成群结队的“清国留学生”的速成班,头顶上盘着大辫子,顶得学生制帽的顶上高高耸起,形成一座富士山 。也有解散辫子,盘得平的,除下帽来,油光可鉴,宛如小姑娘的发髻一般,还要将脖子扭几扭 。实在标致极了 。中国留学生会馆的门房里有几本书买,有时还值得去一转;倘在上午,里面的几间洋房里倒也还可以坐坐的 。但到傍晚,有...INFO:llama_index.token_counter.token_counter:> [query] Total LLM token usage: 2969 tokensINFO:llama_index.token_counter.token_counter:> [query] Total embedding token usage: 26 tokens鲁迅先生去仙台的医学专门学校学习医学 。