news 2026/5/20 19:34:02

AI开发-python-langchain框架(1-11 返回枚举-格式解析器)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
AI开发-python-langchain框架(1-11 返回枚举-格式解析器)

跟上一篇内容一样,这次我们来看如何限定大模型返回的结果值是枚举类型的。

先看代码:

# 导入必要的模块 from langchain.prompts import PromptTemplate # 用于创建和管理提示模板 from langchain_openai import ChatOpenAI # 用于调用OpenAI兼容的聊天模型(如DeepSeek) from langchain.output_parsers.enum import EnumOutputParser # 用于将LLM输出解析为枚举类型 from enum import Enum # Python标准库,用于定义枚举类型 import os # 用于读取环境变量 # 定义颜色枚举类,限定LLM输出必须为以下五种颜色之一 class Colors(Enum): RED = "红色" BROWN = "棕色" BLACK = "黑色" WHITE = "白色" YELLOW = "黄色" # 创建枚举输出解析器,强制LLM输出必须匹配Colors枚举中的值 output_parser = EnumOutputParser(enum=Colors) # 获取格式化指令,告诉LLM如何正确格式化输出(例如:"输出必须是:红色、棕色...") format_instructions = output_parser.get_format_instructions() print(format_instructions) # 打印格式要求,用于调试或提示用户 print('###########') # 分隔线 # 创建提示模板:包含两个占位符 {person}(人物)和 {instructions}(输出格式要求) promptTemplate = PromptTemplate.from_template( """{person}的皮肤主要是什么颜色? {instructions}""" ) # 固定instructions部分的内容,避免每次调用时重复传入 instructions = "响应的结果请选择以下选项之一:红色、棕色、黑色、白色、黄色。" prompt = promptTemplate.partial(instructions=instructions) # partial用于预填充模板中的部分变量 # 输出完整提示词示例(以"亚洲人"为例),用于调试查看实际发送给LLM的内容 print(prompt.invoke({"person": "亚洲人"}).text) print('--------------') # 初始化聊天模型(使用DeepSeek API) llm = ChatOpenAI( api_key=os.getenv("DEEPSEEK_API_KEY"), # 从环境变量读取API密钥 base_url=os.getenv("BASE_URL"), # 从环境变量读取API基础URL(如 https://api.deepseek.com) model="deepseek-v3:671b", # 指定使用的模型版本 temperature=0.7, # 生成随机性控制:0.7 适中创造性 max_tokens=1024 # 单次响应最大token数 ) # 构建处理链:提示模板 → 大语言模型 → 枚举解析器 # 实现端到端流程:生成提示 → 调用LLM → 强制输出为枚举类型 chain = prompt | llm | output_parser # 调用链,传入"亚洲人"作为输入 result = chain.invoke({"person": "亚洲人"}) # 输出解析后的结果(Enum类型) print(result) # 打印枚举对象(如:Colors.YELLOW) print(result.name) # 打印枚举成员名称(如:"YELLOW") print(result.value) # 打印枚举成员值(如:"黄色")

返回值:

Select one of the following options: 红色, 棕色, 黑色, 白色, 黄色 ########### 亚洲人的皮肤主要是什么颜色? 响应的结果请选择以下选项之一:红色、棕色、黑色、白色、黄色。 -------------- Colors.YELLOW YELLOW 黄色

重点说明:

精准控制大模型输出范围
本方案的核心目标是强制大语言模型返回预定义的枚举类型值,彻底解决自由文本输出的不确定性问题。通过结构化约束机制,确保模型响应严格限定在业务允许的选项集合内(如仅返回“红色、棕色、黑色、白色、黄色”),从源头杜绝“浅黄”“米白”等非标准值,显著提升系统可靠性与数据一致性。
双重约束保障输出合规性
枚举输出解析器(EnumOutputParser)构建前后端双重防护:前端通过/* by 01022.hk - online tools website : 01022.hk/zh/md5.html */ get_format_instructions()自动生成格式指令并注入提示词,明确引导模型“仅可选择以下选项之一”;后端在解析阶段对返回结果进行强校验,任何超出枚举范围的值将立即抛出/* by 01022.hk - online tools website : 01022.hk/zh/md5.html */ OutputParserException异常,形成从生成到解析的全链路约束。
枚举类型定义数据契约
通过Python的Enum类预先声明合法值集合(如Colors枚举),建立系统与模型之间的标准化数据契约。该设计不仅明确业务规则边界,更使模型输出直接转换为类型安全的枚举对象,开发者可直接通过.name(如"YELLOW")和.value(如"黄色")属性获取结构化结果,彻底规避字符串清洗与匹配的繁琐处理。
典型应用场景与业务价值
该方案特别适用于需严格输出控制的场景:情感分析限定{正面/中性/负面}、审批状态约束{待审/通过/拒绝}、颜色识别规范标准色系等。相比传统依赖正则表达式或关键词匹配的后处理方案,枚举控制从设计层面根除脏数据风险,降低90%以上的数据清洗成本,为关键业务系统提供确定性保障。
增强鲁棒性的实践建议
实际部署时建议结合重试机制提升容错能力:当模型首次输出不符合枚举要求时,自动触发2-3次重试并强化格式提示,成功率可达99%以上。对于金融、医疗等关键场景,可设置异常兜底策略——连续解析失败时自动转交人工审核,形成“自动约束+人工兜底”的完整质量保障闭环。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/20 21:10:09

2026 AI红队测试工具全景指南:攻防演进、技术标杆与未来布局

在生成式AI从技术落地走向规模化商用的2026年,大语言模型、多模态代理、AI原生应用已深度渗透金融、医疗、政企、互联网等核心领域,AI系统的安全漏洞从“技术隐患”升级为“业务风险”。AI红队测试作为模拟攻击者视角、系统性挖掘AI全生命周期安全缺陷的…

作者头像 李华
网站建设 2026/5/21 11:16:42

高性能内存分配器Hakozuna发布,性能对标主流

hakozuna (hz3) - 一款新发布的内存分配器 ✅ 性能与 mimalloc/tcmalloc 相竞争 ✅ 在多线程远程释放场景下性能提升 28% ✅ 通过 PTAG32 元数据查找实现 O(1) 复杂度的释放路径 📄 论文: https://doi.org/10.5281/zenodo.18305953 💻 代码: https://git…

作者头像 李华
网站建设 2026/5/21 16:37:03

基于深度学习YOLOv12的辣椒叶片病害识别检测系统(YOLOv12+YOLO数据集+UI界面+登录注册界面+Python项目源码+模型)

一、项目介绍 辣椒叶片病害严重威胁农业生产,传统病害识别方法依赖人工经验,效率低且易出错。本文基于深度学习技术,提出一种基于YOLOv12的辣椒叶片病害智能识别系统,实现高效、准确的病害检测。系统针对5类常见辣椒叶片病害&…

作者头像 李华
网站建设 2026/5/21 16:37:03

从零开始学 RabbitMQ:编程小白也能懂的消息队列实战指南

从零开始学 RabbitMQ:编程小白也能懂的消息队列实战指南 🌟 一句话定位:RabbitMQ 是一个“智能快递中转站”——帮你把程序之间的消息安全、有序、不丢件地送达到位。 很多刚学编程的朋友听到“消息队列”“MQ”“异步解耦”就头大&#xff1…

作者头像 李华
网站建设 2026/5/20 10:24:13

Shunyu Yao 加入HY首作CL-bench:揭示大模型的关键短板

现实世界的任务远比当前评测所考虑的问题复杂得多。许多任务高度依赖上下文,需要模型从复杂的上下文中学习,利用预训练阶段未曾获得的新知识来推理和解决问题。这与人类在日常场景中的学习方式高度一致:快速理解从未见过的产品文档、参与有多…

作者头像 李华
网站建设 2026/5/21 1:30:47

大宗商品风险对冲系统闭环处置机制设计

风险预警仅是风险管理的起点,真正的价值在于预警后的快速处置与闭环跟踪。传统方式预警与处置割裂,缺乏联动机制,导致风险响应滞后。本文将详细介绍大宗商品风险对冲系统中的闭环处置机制,帮助企业构建完整的风险响应体系。 一、…

作者头像 李华