在一些场景中,我们希望模型输出一个简单的字符串列表,例如:列出 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`告诉模型:“你要输出一个用逗号分隔的列表”。
快速体验
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)总结一下:
- CommaSeparatedListOutputParser 更加轻量,适合简单信息提取
- 和 StructuredOutputParser 一样,具备输出引导 + 自动解析的能力
- 结合 prompt template 和 LLM,就能快速构建语义链条
流式输出
同样不支持,但是可以在流式生成了答案后,手动解析一次。