跳至主要内容

如何尝试修复输出解析中的错误

先决条件

本指南假设您熟悉以下概念: - 聊天模型 - 输出解析器 - 提示模板 - 将可运行对象链接在一起

LLM 并不完美,有时无法生成与所需格式完全匹配的输出。为了帮助处理错误,我们可以使用 OutputFixingParser。此输出解析器包装了另一个输出解析器,并且如果第一个解析器失败,它会调用另一个 LLM 来尝试修复任何错误。

具体来说,我们可以将格式错误的输出以及格式化说明传递给模型,并要求它进行修复。

在本例中,我们将使用 StructuredOutputParser,它可以根据 Zod 模式验证输出。以下是在将不符合模式的结果传递给它时会发生的情况

import { z } from "zod";
import { RunnableSequence } from "@langchain/core/runnables";
import { StructuredOutputParser } from "@langchain/core/output_parsers";
import { ChatPromptTemplate } from "@langchain/core/prompts";

const zodSchema = z.object({
name: z.string().describe("name of an actor"),
film_names: z
.array(z.string())
.describe("list of names of films they starred in"),
});

const parser = StructuredOutputParser.fromZodSchema(zodSchema);

const misformatted = "{'name': 'Tom Hanks', 'film_names': ['Forrest Gump']}";

await parser.parse(misformatted);
Error: Failed to parse. Text: "{'name': 'Tom Hanks', 'film_names': ['Forrest Gump']}". Error: SyntaxError: Expected property name or '}' in JSON at position 1 (line 1 column 2)

现在我们可以构造和使用 OutputFixingParser。此输出解析器将另一个输出解析器作为参数,以及用于尝试更正任何格式错误的 LLM。

import { ChatAnthropic } from "@langchain/anthropic";

import { OutputFixingParser } from "langchain/output_parsers";

const model = new ChatAnthropic({
model: "claude-3-sonnet-20240229",
maxTokens: 512,
temperature: 0.1,
});

const parserWithFix = OutputFixingParser.fromLLM(model, parser);

await parserWithFix.parse(misformatted);
{
name: "Tom Hanks",
film_names: [
"Forrest Gump",
"Saving Private Ryan",
"Cast Away",
"Catch Me If You Can"
]
}

有关不同参数和选项的更多信息,请查看我们的 API 参考文档


此页面是否有用?


您也可以留下详细的反馈 在 GitHub 上.