Skip to content

JSON解析器

StructuredOutputParser 解析器,是我们指定 JSON 字段,例如:

import { StructuredOutputParser } from '@langchain/core/output_parsers'
const parser = StructuredOutputParser.fromNamesAndDescriptions({
answer: '用户问题的答案',
evidence: '你回答用户问题所依据的答案',
confidence: '问题答案的可信度评分,格式是百分数',
})

这里我们指定了 JSON 拥有 3 个键:

  1. answer
  2. evidence
  3. confidence
{
"answer": "xxxxx",
"evidence": "xxxxxx",
"confidence": "xxx"
}

有时候,我们只是想要拿到一段合法的 JSON 格式输出,而不关心它的字段是否完全符合某个 schema。

此时就可以使用 JsonOutputParser.

快速入门

import { JsonOutputParser } from '@langchain/core/output_parsers'
import { PromptTemplate } from '@langchain/core/prompts'
import { ChatOllama } from '@langchain/ollama'
const parser = new JsonOutputParser()
const pt = PromptTemplate.fromTemplate(
`请提供以下城市的信息,并以 JSON 格式输出:城市:{city}`
)
const model = new ChatOllama({
model: 'llama3',
temperature: 0.3,
})
const chain = pt.pipe(model).pipe(parser)
const res = await chain.invoke({
city: '北京',
})
console.log(res)

效果:

{
"name": "Beijing",
"country": "China",
"capital": true,
"population": 21500000,
"latitude": 39.9042,
"longitude": 116.3974
}

和 StructuredOutputParser 的区别:

可以在提示词里面指定字段:

const prompt = PromptTemplate.fromTemplate(
`请提供以下城市的信息,并以 JSON 格式输出:城市:{city}, 需要的字段有:name、country、location、population`
)