StructuredOutputParser 解析器,是我们指定 JSON 字段,例如:
import { StructuredOutputParser } from '@langchain/core/output_parsers'
const parser = StructuredOutputParser.fromNamesAndDescriptions({ answer: '用户问题的答案', evidence: '你回答用户问题所依据的答案', confidence: '问题答案的可信度评分,格式是百分数',})这里我们指定了 JSON 拥有 3 个键:
- answer
- evidence
- 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 的区别:
- StructuredOutputParser:有明确的字段结构,我们告诉大模型有哪些字段、大模型必须按照格式来!
- JsonOutputParser:只想提取 JSON 内容或做快速原型,大模型只要给我一段能 parse 的 JSON 就行。
可以在提示词里面指定字段:
const prompt = PromptTemplate.fromTemplate( `请提供以下城市的信息,并以 JSON 格式输出:城市:{city}, 需要的字段有:name、country、location、population`)