LlamaIndex Pydantic Tree Summarize:结构化输出的高效信息提炼
在信息处理领域,如何从海量数据中快速提炼出结构化、有价值的信息是一项关键技能。LlamaIndex 提供了一种名为 Pydantic Tree Summarize
的响应合成模式,能够帮助我们高效地从多个文本片段中提炼出结构化的响应。本文将深入探讨 Pydantic Tree Summarize
模式的工作原理、使用方法及实战示例,帮助你全面掌握这一强大的工具。
一、Pydantic Tree Summarize 模式概述
Pydantic Tree Summarize
模式是 LlamaIndex 中的一种响应合成模式,它通过构建树状结构来逐步提炼信息,并输出为 Pydantic 对象。这种模式特别适用于需要从大量文本中快速提炼关键信息,并将其结构化的场景。
二、安装与配置
首先,我们需要安装 LlamaIndex 并配置 OpenAI API 密钥:
# 安装 LlamaIndex
!pip install llama-index
# 设置 OpenAI API 密钥
import os
import openai
os.environ["OPENAI_API_KEY"] = "sk-..."
openai.api_key = os.environ["OPENAI_API_KEY"]
三、下载与加载数据
下载示例数据并使用 LlamaIndex 的 SimpleDirectoryReader
加载数据:
# 下载数据
!mkdir -p 'data/paul_graham/'
!wget 'https://raw.githubusercontent.com/run-llama/llama_index/main/docs/docs/examples/data/paul_graham/paul_graham_essay.txt' -O 'data/paul_graham/paul_graham_essay.txt'
from llama_index.core import SimpleDirectoryReader
reader = SimpleDirectoryReader(
input_files=["./data/paul_graham/paul_graham_essay.txt"]
)
docs = reader.load_data()
text = docs[0].text
四、定义自定义提示模板
定义自定义的提示模板,以便在响应合成过程中使用:
from llama_index.core import PromptTemplate
qa_prompt_tmpl = (
"Context information is below.\n"
"---------------------\n"
"{context_str}\n"
"---------------------\n"
"Given the context information and not prior knowledge, "
"answer the query.\n"
"Please also write the answer in the style of {tone_name}.\n"
"Query: {query_str}\n"
"Answer: "
)
qa_prompt = PromptTemplate(qa_prompt_tmpl)
refine_prompt_tmpl = (
"The original query is as follows: {query_str}\n"
"We have provided an existing answer: {existing_answer}\n"
"We have the opportunity to refine the existing answer "
"(only if needed) with some more context below.\n"
"------------\n"
"{context_msg}\n"
"------------\n"
"Given the new context, refine the original answer to better "
"answer the query. "
"Please also write the answer in the style of {tone_name}.\n"
"If the context isn't useful, return the original answer.\n"
"Refined Answer: "
)
refine_prompt = PromptTemplate(refine_prompt_tmpl)
五、使用自定义提示模板进行响应合成
使用 TreeSummarize
和 Refine
模式进行响应合成,并输出为字符串:
from llama_index.core.response_synthesizers import TreeSummarize, Refine
summarizer = TreeSummarize(verbose=True, summary_template=qa_prompt)
response = summarizer.get_response(
"who is Paul Graham?", [text], tone_name="a Shakespeare play"
)
print(str(response))
summarizer = Refine(
verbose=True, text_qa_template=qa_prompt, refine_template=refine_prompt
)
response = summarizer.get_response(
"who is Paul Graham?", [text], tone_name="a haiku"
)
print(str(response))
六、输出为 Pydantic 对象
定义一个 Pydantic 模型,并使用 TreeSummarize
模式输出为该模型对象:
from llama_index.core.types import BaseModel
from typing import List
class Biography(BaseModel):
"""Data model for a biography."""
name: str
best_known_for: List[str]
extra_info: str
summarizer = TreeSummarize(
verbose=True, summary_template=qa_prompt, output_cls=Biography
)
response = summarizer.get_response(
"who is Paul Graham?", [text], tone_name="a business memo"
)
print(str(response))
七、总结
LlamaIndex 的 Pydantic Tree Summarize
模式提供了一种高效、灵活的方式来处理复杂的信息提炼任务,并输出为结构化的 Pydantic 对象。通过本文的介绍和示例,希望你能快速掌握 Pydantic Tree Summarize
模式的使用方法,并在实际项目中应用。
参考文献:
扩展阅读:
希望这篇博客能为你带来启发和帮助,让我们在信息处理的世界里,更加高效地驾驭 Pydantic Tree Summarize
模式!