Skip to content

列表输出解析器

在一些场景中,我们希望模型输出一个简单的字符串列表,例如:列出 3 个美国的互联网公司

;['Facebook', 'Google', 'Amazon']

这时我们可以使用一个更轻量、更直接的解析器 —— CommaSeparatedListOutputParser

创建解析器:

import { CommaSeparatedListOutputParser } from '@langchain/core/output_parsers'
const parser = new CommaSeparatedListOutputParser()

和 StructuredOutputParser 一样,有一个辅助方法,该辅助方法会生成一段提示词:

parser.getFormatInstructions()

生成的提示词:

Your response should be a list of comma separated values, eg: `foo, bar, baz`

告诉模型:“你要输出一个用逗号分隔的列表”。

文档地址:https://v03.api.js.langchain.com/classes/langchain.output_parsers.CommaSeparatedListOutputParser.html

快速体验

import { CommaSeparatedListOutputParser } from '@langchain/core/output_parsers'
import { ChatOllama } from '@langchain/ollama'
import { PromptTemplate } from '@langchain/core/prompts'
const pt = PromptTemplate.fromTemplate(
'{instructions} \n 列出3个 {country} 的著名的互联网公司.'
)
/**
* 完整的提示词:
* Your response should be a list of comma separated values, eg: `foo, bar, baz`
* 列出3个 中国 的著名的互联网公司.
*/
const model = new ChatOllama({
model: 'llama3',
temperature: 0.7,
})
const parser = new CommaSeparatedListOutputParser()
const chain = pt.pipe(model).pipe(parser)
const res = await chain.invoke({
country: '中国',
instructions: parser.getFormatInstructions(),
})
console.log(res)

总结一下:

流式输出

同样不支持,但是可以在流式生成了答案后,手动解析一次。