Skip to content

输出解析模块#

LlamaIndex支持与其他框架提供的输出解析模块集成。这些输出解析模块可以以以下方式使用:

  • 为任何提示/查询提供格式化指令(通过 output_parser.format
  • 为LLM输出提供“解析”(通过 output_parser.parse

Guardrails#

Guardrails是一个用于规范/验证/修正输出模式的开源Python包。以下是一个代码示例。

from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
from llama_index.output_parsers.guardrails import GuardrailsOutputParser
from llama_index.llms.openai import OpenAI


# 加载文档,构建索引
documents = SimpleDirectoryReader("../paul_graham_essay/data").load_data()
index = VectorStoreIndex(documents, chunk_size=512)

# 定义查询/输出规范
rail_spec = """
<rail version="0.1">

<output>
    <list name="points" description="关于作者生活中事件的要点。">
        <object>
            <string name="explanation" format="one-line" on-fail-one-line="noop" />
            <string name="explanation2" format="one-line" on-fail-one-line="noop" />
            <string name="explanation3" format="one-line" on-fail-one-line="noop" />
        </object>
    </list>
</output>

<prompt>

在此处输入查询字符串。

@xml_prefix_prompt

{output_schema}

@json_suffix_prompt_v2_wo_none
</prompt>
</rail>
"""

# 定义输出解析器
output_parser = GuardrailsOutputParser.from_rail_string(
    rail_spec, llm=OpenAI()
)

# 将输出解析器附加到LLM
llm = OpenAI(output_parser=output_parser)

# 获取结构化响应
query_engine = index.as_query_engine(llm=llm)
response = query_engine.query(
    "作者在成长过程中做了哪三件事?",
)
print(response)

输出:

{'points': [{'explanation': '写短篇小说', 'explanation2': '在IBM 1401上编程', 'explanation3': '使用微型计算机'}]}

Langchain#

Langchain还提供了输出解析模块,您可以在LlamaIndex中使用。

from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
from llama_index.core.output_parsers import LangchainOutputParser
from llama_index.llms.openai import OpenAI
from langchain.output_parsers import StructuredOutputParser, ResponseSchema


# 加载文档,构建索引
documents = SimpleDirectoryReader("../paul_graham_essay/data").load_data()
index = VectorStoreIndex.from_documents(documents)

# 定义输出模式
response_schemas = [
    ResponseSchema(
        name="Education",
        description="描述作者的教育经历/背景。",
    ),
    ResponseSchema(
        name="Work",
        description="描述作者的工作经历/背景。",
    ),
]

# 定义输出解析器
lc_output_parser = StructuredOutputParser.from_response_schemas(
    response_schemas
)
output_parser = LangchainOutputParser(lc_output_parser)

# 将输出解析器附加到LLM
llm = OpenAI(output_parser=output_parser)

# 获取结构化响应
query_engine = index.as_query_engine(llm=llm)
response = query_engine.query(
    "作者在成长过程中做了哪些事情?",
)
print(str(response))

输出:

{'Education': '在上大学之前,作者写了短篇小说,并尝试在IBM 1401上编程。', 'Work': '作者在学校之外从事写作和编程工作。'}

指南#

更多示例: