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://www.pswp.cn/news/922031.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/922031.shtml
英文地址,請注明出處:http://en.pswp.cn/news/922031.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

LeetCode算法日記 - Day 37: 驗證棧序列、N叉樹的層序遍歷

目錄 1. 驗證棧序列 1.1 題目解析 1.2 解法 1.3 代碼實現 2. N叉樹的層序遍歷 2.1 題目解析 2.2 解法 2.3 代碼實現 1. 驗證棧序列 https://leetcode.cn/problems/validate-stack-sequences/description/ 給定 pushed 和 popped 兩個序列&#xff0c;每個序列中的 值…

金融數據庫--3Baostock

一、 Baostock 是什么&#xff1f;Baostock&#xff08;寶碩股票&#xff09;是一個免費、開源的證券數據平臺&#xff08;SDK&#xff09;&#xff0c;旨在為金融量化投資者、研究人員和學生提供穩定、準確、易用的A股歷史數據和相關金融數據。其核心是一個 Python 庫&#xf…

微信小程序-1-微信開發者工具環境搭建和初始化創建項目

文章目錄1 小程序概述1.1 什么是微信小程序1.2 大前端概念1.3 賬號注冊1.4 開發流程1.5 小程序成員2 創建項目2.1 創建項目流程2.2 創建項目2.3 本地開發支持http3 項目目錄3.1 項目目錄結構3.2 配置文件3.2.1 app.json(全局配置)3.2.2 xxx.json(頁面配置)3.2.3 project.config…

Go語言開發AI應用

為什么選擇Go語言開發AI應用在人工智能快速發展的今天&#xff0c;選擇合適的編程語言對于AI應用的成功至關重要。雖然Python長期以來被認為是AI開發的首選語言&#xff0c;但Go語言正在逐漸嶄露頭角&#xff0c;成為AI應用開發的有力競爭者。Go語言的核心優勢1. 卓越的性能表現…

10. 游戲開發中的TCP與UDP

1.TCP和UDP 2.TCP為什么慢于UDP 3.可靠UDP1.TCP和UDP 1).通過打電話的方式說明TCP和UDPa.TCP(傳輸控制協議), 就像打電話- 需要先撥號, 接通, 問候(建立連接)- 你一句, 我一句, 對方沒有聽清會要求你重復(確認與重傳)- 保證對話有條不紊, 內容準確無誤(可靠, 有序)- 如果信號不…

CMap常用函數

CMap 是 MFC 中用于存儲鍵值對&#xff08;key-value&#xff09;的關聯容器類&#xff0c;類似于 C 標準庫中的 std::map&#xff0c;但依賴 MFC 框架實現。它采用哈希表&#xff08;Hash Table&#xff09;作為底層數據結構&#xff0c;支持高效的鍵值查找、插入和刪除操作。…

Rocky9.0去堆疊雙發arp(支持“ARP 廣播雙發”)

摘要 在去堆疊/MLAG 場景下&#xff0c;默認 bonding 只會以單口回復 ARP&#xff0c;另一臺交換機收不到 ARP Reply。本文在 Linux bonding 驅動中增加參數 arp_broadcast_mode&#xff0c;當開啟時對 ARP 包臨時切換到 廣播模式&#xff0c;實現雙口同時發 ARP Reply。文內提…

網頁連接攝像頭

攝像機處理 <!-- camera_solve.html --> <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>…

FPGA雷達信號處理之:自適應門限閾值

一、原理 參考這個博主&#xff0c;講的很仔細&#xff1a;基于脈沖功率的雷達脈沖參數檢測原理詳解 二、FPGA實現 使用system generator搭建算法模型如下&#xff1a; 在這里&#xff0c;濾波器窗長度為8&#xff0c;原博主設置為50效果更好&#xff0c;門限公式如下&#xf…

Vue 中實現選中文本彈出彈窗的完整指南

在現代 Web 應用中&#xff0c;選中文本后顯示相關操作或信息是一種常見的交互模式。本文將詳細介紹如何在 Vue 中實現選中文本后彈出彈窗的功能&#xff0c;包括其工作原理、多種實現方式以及實際項目中的應用示例。 一、實現原理 1. 文本選中檢測機制 瀏覽器提供了 Select…

第4節-排序和限制-FETCH

摘要: 在本教程中&#xff0c;你將學習如何使用 PostgreSQL 的 FETCH 子句從查詢中檢索部分行。 PostgreSQL FETCH 簡介 在 PostgreSQL 中&#xff0c;OFFSET 子句的作用類似于 LIMIT 子句。FETCH 子句允許你限制查詢返回的行數。 LIMIT 子句并非 SQL 標準的一部分。不過&#…

洛谷 P2680 [NOIP 2015 提高組] 運輸計劃(二分答案 + 樹上差分)

題目鏈接題目概括與評價 很經典&#xff0c;突破口藏的很深&#xff0c;求最小值這里&#xff0c;是問題切入點&#xff0c;想到用二分答案&#xff0c;然后思考怎么寫 f_check 函數。二分答案樹上差分。代碼 #include <iostream> #include <vector> #include <…

接力鄧承浩,姜海榮能講好深藍汽車新故事嗎?

出品 | 何璽排版 | 葉媛深藍汽車迎來新話事人。9月5日&#xff0c;新央企長安汽車旗下品牌深藍汽車傳出新的人事調整。多家業內媒體報道稱&#xff0c;榮耀前中國區CMO姜海榮已正式加入長安汽車&#xff0c;并出任旗下深藍汽車CEO一職。原CEO鄧承浩則升任深藍汽車董事長&#x…

esp32-c3寫一個收集附近 WiFi 和藍牙信號通過

下面給你一個基于 ESP-IDF(v5.x) 的完整示例&#xff1a;在 ESP32-C3 上同時掃描附近 Wi-Fi 與藍牙&#xff08;BLE&#xff09;廣播&#xff0c;把結果以 JSON 結構統一輸出到串口&#xff0c;并且可可選通過 MQTT 上報到服務器&#xff08;打開一個宏即可&#xff09;。日志默…

文心大模型 X1.1:百度交出的“新深度思考”答卷

文心大模型 X1.1&#xff1a;百度交出的“新深度思考”答卷 2025年9月9日&#xff0c;WAVE SUMMIT 2025深度學習開發者大會在北京正式召開&#xff0c;由深度學習技術及應用國家工程研究中心主辦&#xff0c;百度飛槳與文心大模型聯合承辦。大會上&#xff0c;百度正式發布了基…

開始 ComfyUI 的 AI 繪圖之旅-Flux.1圖生圖(八)

文章標題一、Flux Kontext Dev1.關于 FLUX.1 Kontext Dev1.1 版本說明1.2 工作流說明1.3 模型下載2.Flux.1 Kontext Dev 工作流2.1 工作流及輸入圖片下載2.2 按步驟完成工作流的運行3.Flux Kontext 提示詞技巧3.1 基礎修改3.2 風格轉換3.3 角色一致性3.4 文本編輯4.常見問題解決…

Java 生成微信小程序二維碼

1. java 二維碼生成工具類import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONObject; import com.pdatao.api.controller.file.FileController; import com.pdatao.api.error.CommunityException; import org.apache.commons.io.IOUtils; import org.springframe…

智慧健康觸手可及:AI健康小屋——未來健康管理的全能守護者

AI健康小屋&#xff0c;這座融合人工智能、物聯網與醫療科技的“健康堡壘”&#xff0c;正悄然重構健康管理生態。它以科技為引擎&#xff0c;將專業醫療資源下沉至社區、企業、家庭&#xff0c;通過智能檢測、精準分析、個性化干預&#xff0c;實現從疾病治療到主動預防的健康…

[工作表控件19] 驗證規則實戰:如何用正則表達式規范業務輸入?

在企業應用中,數據準確性至關重要。工作表控件通過“驗證規則”能力,支持在文本字段和附件字段中使用正則表達式(RegEx)進行格式校驗。它能幫助開發者輕松實現郵箱、身份證號、車牌號、URL 等格式的高效驗證,大幅提升數據質量與表單使用體驗。 一、官方功能介紹與基礎能力…

uniapp分包實現

關于分包優化的說明 在對應平臺的配置下添加"optimization":{"subPackages":true}開啟分包優化 目前只支持mp-weixin、mp-qq、mp-baidu、mp-toutiao、mp-kuaishou的分包優化 分包優化具體邏輯&#xff1a; 靜態文件&#xff1a;分包下支持 static 等靜態…