from llama_index.core import SimpleDirectoryReaderfrom llama_index.core.node_parser import SentenceSplitterfrom llama_index.core import VectorStoreIndexquestion = "奥创是由哪两位复仇者联盟成员创造的?"documents = SimpleDirectoryReader("./data").load_data()node_parser = SentenceSplitter(chunk_size=1024)base_nodes = node_parser.get_nodes_from_documents(documents)print(f"base_nodes len: {len(base_nodes)}")for idx, node in enumerate(base_nodes): node.id_ = f"node-{idx}"base_index = VectorStoreIndex(nodes=base_nodes)base_retriever = base_index.as_retriever(similarity_top_k=2)retrievals = base_retriever.retrieve(question)for n in retrievals: print( f"Node ID: {n.node_id}\nSimilarity: {n.score}\nText: {n.text[:100]}...\n" )response = base_retriever.query(question)print(f"response: {response}")print(f"len: {len(response.source_nodes)}")
时间: 2025-04-07 16:08:15 浏览: 61
### 使用 `llama_index` 库进行文本检索及处理复仇者联盟相关查询
#### 文本分割与相似度检索的工作原理
`llama_index` 是一种强大的工具,用于构建基于大型语言模型 (LLM) 的应用。通过使用 `SimpleDirectoryReader` 和 `VectorStoreIndex`,可以实现高效的文本分割和相似度检索功能。具体来说,`SimpleDirectoryReader` 负责读取目录中的文档并将其转换为节点列表[^1],而 `VectorStoreIndex` 则负责将这些节点嵌入到向量空间中以便后续的相似度计算。
以下是具体的代码示例及其解析:
```python
from llama_index import SimpleDirectoryReader, VectorStoreIndex, ServiceContext
from llama_index.llms import OpenAI # 假设我们使用OpenAI作为LLM服务提供商
# 加载本地文件夹中的文档
documents = SimpleDirectoryReader(input_dir='./data').load_data() # './data' 文件夹应包含复仇者联盟相关的文档
# 配置ServiceContext以指定使用的LLM
service_context = ServiceContext.from_defaults(llm=OpenAI(model="gpt-3.5-turbo")) # 设置LLM型号[^2]
# 构建向量存储索引
index = VectorStoreIndex.from_documents(documents, service_context=service_context)
# 创建查询引擎
query_engine = index.as_query_engine()
# 执行查询操作
response = query_engine.query("谁是复仇者联盟中最强大的成员?") # 查询关于复仇者联盟的信息[^3]
print(response)
```
#### 解析上述代码片段
1. **加载文档**:
使用 `SimpleDirectoryReader` 来读取指定路径下的所有文档,并将它们转化为适合进一步处理的数据结构——即节点列表。此过程涉及对原始文档的内容提取和初步预处理。
2. **配置 LLM**:
定义了一个 `ServiceContext` 对象来封装所选的语言模型(此处选择了 OpenAI 提供的服务)。这一步骤对于定义如何生成最终响应至关重要。
3. **建立索引**:
函数调用 `VectorStoreIndex.from_documents()` 实现了从文档集合创建矢量化表示的过程。这意味着每篇文档被拆解成更小的部分并通过某种方式映射到了高维空间内的点上。
4. **执行查询**:
当前设置允许用户提交自然语言形式的问题给系统。“最强大”的概念可能需要额外训练或者特定算法支持才能准确识别出来;不过,在基本层面上,该方法能够很好地匹配已知事实型提问模式。
---
###
阅读全文
相关推荐







