当前位置: 首页 > news >正文

LangChain输出解析器实战:从大模型输出到结构化数据的转化

—看起来简单,但却是很多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, config=config) # 初始化解析器,解析大模型输出为纯文本 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, config=config) # 初始化解析器,逐块解析流式数据并打印 parser = StrOutputParser() for chunk in parser.transform(res): print(chunk, end="", flush=True)

这里有个小细节需要注意:print语句里的end=""和flush=True,是为了让解析后的内容逐字连续显示,不会出现换行或卡顿的情况,完美还原流式输出的效果。

http://www.jsqmd.com/news/1153431/

相关文章:

  • Deb to IPA终极指南:如何3步将Linux应用移植到iOS设备
  • 5步实现高效小说下载:开源工具fanqienovel-downloader的实用解决方案
  • 从 Prompt 注入到防御:大模型输入安全的工程化检测链路
  • 如何快速搭建企业级AI数据标注平台:LabelLLM完整指南
  • TensorFlow 2.x 实现 Bi-LSTM/Bi-GRU:5 个关键超参数调优与避坑指南
  • Fable AI技术重塑公共领域电影:AI视频生成与版权合规实践
  • 访问共享文件夹时提示无法访问,请检查名称的拼写。否则,网络可能有问题。要尝试识别并解决网络问题,请单击“诊断“
  • CubeSandbox:腾讯云开源 AI Agent 安全沙箱60ms 冷启动 · 硬件级隔离 · 5MB 内存开销 兼容 E2B SDK |SSP Github Daily
  • m4s-converter:拯救B站缓存视频的终极转换工具
  • 核密度估计KDE Python实现:3种核函数与5种带宽选择策略对比
  • Deb to IPA终极指南:免费自动化将Linux应用转换为iOS可执行文件
  • 可信AI落地实践:移动云托举千行百业“智变”
  • React 18并发模式下的数据获取:useDeferredValue与useTransition实战
  • WASM 线性内存管理:为什么 wasm 只有一块内存,rust 怎么安全读写
  • 如何5分钟搭建i茅台自动预约系统:告别手动抢购的终极指南
  • 彻底告别Windows“此电脑“顽固图标:MyComputerManager终极清理指南
  • HarmonyOS 3D 拆解分析:AI 分析接入
  • 如何快速上手EulerLauncher:10分钟搭建openEuler开发环境的完整教程
  • 一篇看懂多糖:可成药、当佐剂、药物递送_ MedChemExpress (MCE)
  • Prisma ORM 快速入门:组件、原理、使用方法及社区支持全解析!
  • 3类机器学习模型效果对比:LR、XGBoost、MLP在5个数据集上的泛化能力分析
  • 基于中文医疗对话数据集的AI诊疗系统架构设计与性能优化实践
  • 从零开始学SpringBoot:一个完整项目开发实战
  • 突破性游戏增强方案:HS2-HF Patch如何彻底改变Honey Select 2体验
  • 一份可信来源,终结 Skill 管理混乱:Skill 治理最佳实践
  • 音频自动分割神器:5分钟学会用Audio Slicer智能剪辑音频
  • 多模型协同审查:用不同 LLM 交叉验证代码质量的工程方案
  • 计算机毕业设计之基于ssm框架外卖订餐系统的设计与实现
  • FanControl V270终极指南:Windows系统智能风扇控制完全解决方案
  • 回溯算法剪枝策略:对称性利用与排序剪枝的正确性证明