Skip to content

指导#

Guidance 是微软开发的用于控制大型语言模型的指导语言。

指导程序允许您将生成、提示和逻辑控制交织在一起,形成一个连续的流程,与语言模型实际处理文本的方式相匹配。

结构化输出#

指导的一个特别令人兴奋的方面是能够输出结构化对象(比如遵循特定模式的 JSON,或者 pydantic 对象)。与其仅仅“建议”期望的输出结构给语言模型,指导实际上可以“强制”语言模型的输出遵循期望的模式。这使得语言模型可以专注于内容而非语法,并且完全消除了输出解析问题的可能性。

这对于参数较少、未经充分源代码数据训练的较弱语言模型尤为强大,这些模型可能无法可靠地生成格式良好、层次结构清晰的结构化输出。

创建一个用于生成 pydantic 对象的指导程序#

在 LlamaIndex 中,我们提供了与指导的初始集成,以便轻松生成结构化输出(更具体地说是 pydantic 对象)。

例如,如果我们想要生成一张包含以下模式的歌曲专辑:

class Song(BaseModel):
    title: str
    length_seconds: int


class Album(BaseModel):
    name: str
    artist: str
    songs: List[Song]

只需创建一个 GuidancePydanticProgram,指定我们期望的 pydantic 类 Album,并提供一个合适的提示模板。

注意:指导使用句柄样式模板,使用双大括号进行变量替换,使用单大括号表示文字大括号。这与 Python 格式化字符串的约定相反。

从 LlamaIndex 的核心提示指导工具中导入 convert_to_handlebars,它可以将 Python 格式化字符串样式模板转换为指导句柄样式模板。

program = GuidancePydanticProgram(
    output_cls=Album,
    prompt_template_str="生成一个示例专辑,包括一位艺术家和一组歌曲。以电影 {{movie_name}} 作为灵感",
    guidance_llm=OpenAI("text-davinci-003"),
    verbose=True,
)

现在,我们可以通过向其提供额外的用户输入来运行该程序。 让我们来做点令人毛骨悚然的事情,创建一张以《闪灵》为灵感的专辑。

output = program(movie_name="The Shining")

我们得到了我们的 pydantic 对象:

Album(
    name="The Shining",
    artist="Jack Torrance",
    songs=[
        Song(title="All Work and No Play", length_seconds=180),
        Song(title="The Overlook Hotel", length_seconds=240),
        Song(title="The Shining", length_seconds=210),
    ],
)

您可以在此笔记本中了解更多详情。

使用指导改进我们的子问题查询引擎的鲁棒性#

LlamaIndex 提供了一套高级查询引擎工具包,用于解决不同的用例。其中一些依赖于中间步骤的结构化输出。 我们可以使用指导来提高这些查询引擎的鲁棒性,确保中间响应具有预期的结构(以便可以正确解析为结构化对象)。

例如,我们实现了一个 GuidanceQuestionGenerator,可以插入到 SubQuestionQueryEngine 中,使其比使用默认设置更加鲁棒。

from llama_index.question_gen.guidance import GuidanceQuestionGenerator
from guidance.llms import OpenAI as GuidanceOpenAI

# 定义基于指导的问题生成器
question_gen = GuidanceQuestionGenerator.from_defaults(
    guidance_llm=GuidanceOpenAI("text-davinci-003"), verbose=False
)

# 定义查询引擎工具
query_engine_tools = ...

# 构建子问题查询引擎
s_engine = SubQuestionQueryEngine.from_defaults(
    question_gen=question_gen,  # 使用上述基于指导的 question_gen
    query_engine_tools=query_engine_tools,
)

请参阅此笔记本以了解更多详情。