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

langchain 输出解析器 Output Parser

示例中使用的公共代码:

from langchain_deepseek import ChatDeepSeek
chat = ChatDeepSeek(model="deepseek-chat",temperature=0,api_key=API_KEY,
)

使用方法:

  1. 引入解析器
  2. 实例化解析器
  3. 调用解析器的get_format_instructions()获得提示词,将提示词加入到请求的信息中
  4. 将实例化的解析器加入到链中

1. 列表

# 1. 引入解析器
from langchain.output_parsers import CommaSeparatedListOutputParser # 列表解析器
from langchain.prompts import PromptTemplate
#构造输入模版
template = "用户发起的提问:{question}{format_instructions}"# 2. 实例化输出解析器
output_parser = CommaSeparatedListOutputParser()# 3. 将输出解析器的解析格式作为提示词模版的部分内容
prompt = PromptTemplate.from_template(template,partial_variables={"format_instructions":output_parser.get_format_instructions()},
)
# 4. 将output_parser加入到链中
chain = prompt | chat | output_parser
chain.invoke({"question": "列出上海的三个景点"})
# 结果:['外滩', '豫园', '上海迪士尼度假区']

2. 枚举

from langchain.output_parsers.enum import EnumOutputParser
from langchain.prompts import PromptTemplate
from enum import Enum#定义枚举类型
class Colors(Enum):RED = "红色"BROWN = "棕色"BLACK = "黑色"WHITE = "白色"YELLOW = "黄色"#制定提示词模版
promptTemplate = PromptTemplate.from_template("{person}的皮肤主要是什么颜色? {instructions}")#制定输出解析器
parse = EnumOutputParser(enum=Colors)
# 解析器的提示词是中英文混合,如果直接使用该提示词则最后返回的结果不是想要的结果
# instructions = parse.get_format_instructions() 
instructions = "响应结果请选择以下选项之一:红色、棕色、黑色、白色、黄色,注意:只返回颜色名称,不添加任何解释或额外内容。"prompt = promptTemplate.partial(instructions=instructions)
chain = prompt | chat | parse
chain.invoke({"person":"亚洲人"})# 结果: <Colors.YELLOW: '黄色'>

3. json

from langchain_core.output_parsers import JsonOutputParser
from langchain_core.pydantic_v1 import BaseModel,Field
from langchain.prompts import PromptTemplate
from typing import List#定义JSON结构
class Book(BaseModel):title:str = Field(description="书名")author:str = Field(description="作者")description:str = Field(description="书的简介")beLike:List[str] = Field(description="作者的其他书籍的名称")parser = JsonOutputParser(pydantic_object=Book)prompt = PromptTemplate(template="{format_instructions}",input_variables=["query"],partial_variables={"format_instructions":parser.get_format_instructions()}
)chain = prompt | chat | parser
chain.invoke({"query":"请给我介绍中国最有名的科幻小说"})# 结果:
'''
{'title': '三体','author': '刘慈欣','description': '《三体》是刘慈欣创作的系列长篇科幻小说,讲述了地球人类文明与三体文明的信息交流、生死搏杀及两个文明在宇宙中的兴衰历程。作品以宏大的宇宙观和深刻的哲学思考,探讨了人类与外星文明的接触、科技发展对社会的影响以及宇宙文明的生存法则。','beLike': ['球状闪电', '超新星纪元', '流浪地球', '乡村教师', '中国2185']}
'''

4. xml

使用xml解释器时有个奇怪的问题,如果将解释器的实例加入链中,则返回json格式,如果不加入链中,则返回xml格式

from langchain_core.prompts import PromptTemplate
from langchain_core.output_parsers import XMLOutputParserparser = XMLOutputParser()
prompt = PromptTemplate(template="{query},\n 要求:返回结果必须符合{format_instructions}",input_variables=["query"],partial_variables={"format_instructions": parser.get_format_instructions()},
)
chain = prompt | chat | parser
response = chain.invoke({"query": "⽣成周星驰1994年的电影作品列表,有电影名称,上映时间,按照时间降序排列"})
print(response)
# 结果:
'''
{'movies': [{'movie': [{'title': '国产凌凌漆'}, {'release_date': '1994-10-13'}]}, {'movie': [{'title': '九品芝麻官'}, {'release_date': '1994-03-31'}]}, {'movie': [{'title': '破坏之王'}, {'release_date': '1994-02-03'}]}, {'movie': [{'title': '大话西游之月光宝盒'}, {'release_date': '1994-01-21'}]}]}
'''
chain1 = prompt | chat
response1 = chain1.invoke({"query": "⽣成周星驰1994年的电影作品列表,有电影名称,上映时间,按照时间降序排列"})
print(response1.content)
# 结果:
'''
<?xml version="1.0" encoding="UTF-8"?>
<movies><movie><title>国产凌凌漆</title><release_date>1994-10-13</release_date></movie><movie><title>九品芝麻官</title><release_date>1994-03-31</release_date></movie><movie><title>破坏之王</title><release_date>1994-02-03</release_date></movie><movie><title>大话西游之月光宝盒</title><release_date>1994-01-21</release_date></movie>
</movies>
'''

5. 布尔

BooleanOutputParser:这个解析器专门用于解析布尔值(即对错、真假)的输出。例如,当模型输出是 True 或 False 时,该解析器可以准确识别和处理。

6. 时间

DatetimeOutputParser:该解析器用于处理日期和时间的输出。它能够将模型生成的日期时间字符串解析为标准的日期时间格式,方便后续处理。

7. 列表对象

ListOutputParser:当输出是一个列表时,无论是什么类型的列表,都可以使用这个解析器进行解析。它能将模型生成的列表字符串转换为实际的列表对象。

8. Pydantic

PydanticOutputParser:如果你的输出需要符合 Pydantic 的要求(Pydantic 是一个用于数据验证和转换的库),那么这个解析器就能派上用场。它可以确保输出数据符合预定义的数据模型和验证规则。

9. StructuredOutputParser

StructuredOutputParser:对于具有特定结构的输出,这个解析器可以大显身手。它能够处理复杂的结构,并将模型生成的结构化数据解析为易于使用的格式。

10. 自定义

from typing import Iterator
from langchain_core.messages import AIMessage,AIMessageChunk#自定义输出解析器
def parse(ai_message:AIMessage)->str:return ai_message.content.swapcase()
# 链式调用chat,返回的结果作为下一个链的参数,也就是ai_message,调用parse方法
chain = chat | parse
response = chain.invoke("用英语回答,你是谁")
response
# 结果: 'i AM dEEPsEEK-v3, AN ai ASSISTANT CREATED BY dEEPsEEK. mY PURPOSE IS TO HELP ANSWER YOUR QUESTIONS, PROVIDE INFORMATION, AND ASSIST WITH VARIOUS TASKS. fEEL FREE TO ASK ME ANYTHING! 😊'

11. 字符串

StrOutputParser


文章转载自:

http://zSrvUTs7.qyjqj.cn
http://mbdsAaMa.qyjqj.cn
http://vZCoDvNO.qyjqj.cn
http://WALBBkfY.qyjqj.cn
http://dnCXYT91.qyjqj.cn
http://MKAQGl4K.qyjqj.cn
http://SWgZbvWC.qyjqj.cn
http://3axNVZM1.qyjqj.cn
http://YssYp8da.qyjqj.cn
http://9n28bn83.qyjqj.cn
http://2zXyvOO4.qyjqj.cn
http://NEuIUchu.qyjqj.cn
http://qc37uznv.qyjqj.cn
http://kGWO1Ida.qyjqj.cn
http://PMrrgGzY.qyjqj.cn
http://EgZLf3Vi.qyjqj.cn
http://V7zC3DMe.qyjqj.cn
http://G32czaiV.qyjqj.cn
http://NjAcmdRB.qyjqj.cn
http://ezB1ySV5.qyjqj.cn
http://UCnzFgNn.qyjqj.cn
http://8zjlqv64.qyjqj.cn
http://1VNDzUw7.qyjqj.cn
http://Pxvfkc3i.qyjqj.cn
http://K7BKxKio.qyjqj.cn
http://pn2fuLlZ.qyjqj.cn
http://CKxMZPmE.qyjqj.cn
http://8yU0M0U9.qyjqj.cn
http://IbQWLiXa.qyjqj.cn
http://mzH4cmVM.qyjqj.cn
http://www.dtcms.com/a/373275.html

相关文章:

  • [数据结构] 栈 · Stack
  • 大语言模型的链式思维推理:从理论到实践
  • C语言快速排序
  • 软件可靠性失效严重程度分类与深度解析
  • 如何让dify分类器更加精准的分类?
  • C# Web API 前端传入参数时间为Utc
  • Python爬虫实战:研究3D plotting模块,构建房地产二手房数据采集和分析系统
  • sglang pytorch NCCL hang分析
  • langchain 缓存 Caching
  • Spark生态全景图:图计算与边缘计算的创新实践
  • 最长上升/下降子序列的长度(动态规划)
  • 自动驾驶中的传感器技术38——Lidar(13)
  • 计算机组成原理:计算机的分类
  • Spark SQL解析查询parquet格式Hive表获取分区字段和查询条件
  • 辨析——汇编 shell C语言
  • 免费的SSL和付费SSL 证书差异
  • 全新 Navicat On-Prem Server 3 正式上线,数据库云管理能力全面跃升
  • 华大 MCU 串口 PWM 控制方案完整笔记
  • 档案管理软件
  • Qoder 使用说明书,公测期免费体验
  • 实现自己的AI视频监控系统-第四章-基于langchain的AI大模型与智能体应用2
  • 消息队列-初识kafka
  • linux 100个问答81~101 主要是k8s相关
  • 【C++设计模式】第三篇:观察者模式(别名:发布-订阅模式、模型-视图模式、源-监听器模式)
  • OpenCV C++ 二值图像处理:阈值化技术全解析
  • OpenCV C++ 形态学分析:从基础操作到高级应用
  • 区块链里的 “信标” 是啥?
  • ROS与SDF/URDF的关系及其设计差异(为什么ROS不能直接调用sdf模型进行控制)
  • 15 种 HTTP 请求方法详解:从 GET/POST 核心方法到 WebDAV 扩展及Python实现示例
  • 2025年Q3 GEO服务市场全景:技术路径、行业实践与合规框架解析——兼谈GEO公司有哪些核心能力