LangChain输出解析器实战:从大模型输出到结构化数据的转化
在实际开发AI应用时我们常会遇到一个很实际的问题大模型的输出大多是自然语言文本但我们搭建的应用程序往往只能处理字符串、JSON、列表这类结构化数据。两者格式不匹配就会导致大模型的输出无法直接被应用调用而LangChain内置的输出解析器正是为了解决这个痛点而生的。视频看这里《18. 动画讲解 LangChain 解析器一看就懂》。最基础也最常用的就是StrOutputParser。它的作用很简单就是把大模型的输出直接转换成纯文本字符串——看起来简单但却是很多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)