进阶 lmql.ai 2026-10-11 18:10:44 · 33 阅读

第31章 结合 LlamaIndex 增强 LMQL 检索能力

利用 LlamaIndex 增强 LMQL 检索

LMQL 可以与 LlamaIndex Python 库配合使用。为了演示这一特性,本笔记本展示了如何在 LMQL 查询中调用 LlamaIndex 的数据结构。这种方式让你能够利用 LlamaIndex 强大的索引数据结构,将检索到的信息(例如来自你提供的文本文档)注入到 LMQL 查询中,从而增强其推理能力。

导入库 首先,我们需要导入所需的 LlamaIndex 库。请确保已通过 `pip install llama_index` 安装 `llama_index`。然后,你可以运行以下命令来导入所需的 `lmql` 和 `llama_index` 组件。

```lmql import lmql from llama_index import GPTVectorStoreIndex, SimpleDirectoryReader, ServiceContext ```

加载文档并构建索引 在本示例中,我们希望在问答过程中查询 LMQL 研究论文的全文以获取有用信息。为此,我们首先使用 LlamaIndex 的 `SimpleDirectoryReader` 加载文档,并构建一个 `GPTVectorStoreIndex`(这是一种使用内存嵌入存储的索引)。

```lmql # 加载 ./lmql.txt,即 LMQL 论文的全文 documents = SimpleDirectoryReader('.').load_data() service_context = ServiceContext.from_defaults(chunk_size_limit=512) ```

接下来,我们在论文全文上构建一个检索索引。

```lmql index = GPTVectorStoreIndex.from_documents(documents, service_context=service_context) ```

通过 LlamaIndex 进行问答 现在,既然有了可供查询的索引,我们就可以在 LMQL 查询执行过程中使用它。由于 LMQL 与周围的 Python 程序上下文完全集成,我们只需在查询执行期间调用 `index.query(...)` 即可实现:

```lmql similarity_top_k = 2

@lmql.query(model="openai/gpt-3.5-turbo") async def index_query(question: str): '''lmql "You are a QA bot that helps users answer questions.\n" # 提出这个问题 "Question: {question}\n"

# 查找相关信息并插入上下文 response = index.query(question, response_mode="no_text", similarity_top_k=similarity_top_k) information = "\n\n".join([s.node.get_text() for s in response.source_nodes]) "\nRelevant Information: {information}\n" # 生成响应 "Your response based on relevant information:[RESPONSE]" ''' ```

在这里,我们首先使用给定的问题查询索引,然后处理检索到的文档块,通过产生对应的 `RESPONSE` 输出来生成一个简短的总结性答案。这个答案由 ChatGPT 生成,如查询定义中的 `from` 子句所指定。

```lmql result = await index_query("What is scripted prompting in LMQL?", output_writer=lmql.stream(variable="RESPONSE")) ```

输出 在 LMQL 中,脚本化提示(Scripted prompting)指的是在语言模型查询语言(LMQL)中,使用轻量级脚本和声明式 SQL 类元素来指定复杂交互、控制流和约束的能力。这使得用户无需了解语言模型内部细节,即可通过精确的约束和高效的解码来提示语言模型。LMQL 可以使用简单、简洁且与供应商无关的代码,表达多种现有的提示方法。其底层运行时与现有的语言模型兼容,支持起来也很简单,只需修改解码器逻辑即可。

评论 (0)