
—看起来简单但却是很多AI应用的基础操作毕竟很多场景下我们只需要干净的文本输出无需多余格式。我们用一个简单的案例来演示比如让大模型扮演“笑话大王”输出一个笑话再用StrOutputParser解析结果。具体代码如下每一步都标注了核心作用大家可以直接复制实操from langchain_core.prompts import ChatPromptTemplate from langchain_core.output_parsers import StrOutputParser # 定义提示词模板指定大模型的角色和用户输入 prompt ChatPromptTemplate.from_messages( [ {role: system, content: 你是一个笑话大王}, {role: user, content: {new_input}} ] ) # 传入用户输入生成完整的提示词 prompt_value prompt.invoke( { new_input: 讲一个笑话 } ) # 调用大模型获取原始输出 res llm.invoke(prompt_value, configconfig) # 初始化解析器解析大模型输出为纯文本 parser StrOutputParser() result parser.invoke(res) # 打印解析后的结果 print(result)运行这段代码后大家会发现大模型的输出会被解析成一段干净的纯文本没有任何多余的格式刚好能满足应用程序对字符串输入的需求。除了常规的一次性输出实际开发中我们还常会用到流式输出——比如让大模型的回复像聊天一样逐字显示提升用户体验。这种情况下StrOutputParser同样适用只需要稍微调整代码就能实现流式解析。流式输出的处理代码如下重点在于用stream方法调用大模型再用解析器的transform方法逐块解析流式数据from langchain_core.prompts import ChatPromptTemplate from langchain_core.output_parsers import StrOutputParser # 提示词模板和之前一致指定大模型角色 prompt ChatPromptTemplate.from_messages( [ {role: system, content: 你是一个笑话大王}, {role: user, content: {input}} ] ) # 传入用户输入生成提示词 prompt_value prompt.invoke( { new_input: 讲一个笑话 } ) # 用stream方法调用大模型获取流式输出 res llm.stream(prompt_value, configconfig) # 初始化解析器逐块解析流式数据并打印 parser StrOutputParser() for chunk in parser.transform(res): print(chunk, end, flushTrue)这里有个小细节需要注意print语句里的end和flushTrue是为了让解析后的内容逐字连续显示不会出现换行或卡顿的情况完美还原流式输出的效果。