零基礎langchain實戰二:大模型輸出格式化成json

零基礎langchain實戰一:模型、提示詞和解析器-CSDN博客

書接上文

大模型輸出格式化

在下面例子中:我們需要將大模型的輸出格式化成json。

import os
from dotenv import load_dotenvload_dotenv()  # 加載 .env 文件
api_key = os.getenv("DEEPSEEK_API_KEY")from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model="deepseek-chat",temperature=0.0,max_tokens=None,timeout=None,max_retries=2,base_url="https://api.deepseek.com",api_key=api_key,
)

?調用ResponseSchema定義輸出格式json:

最后生成的json格式為:

from langchain.output_parsers import ResponseSchema
from langchain.output_parsers import StructuredOutputParseraffection_schema = ResponseSchema(name="affection", description="評價這段話總體的情感是積極的還是消極的,并為其打分,輸出為-1.0 至 1.0 的一位小數")
positive_content_schema = ResponseSchema(name="positive", description="總結這段話評價了物品的哪些優點,列舉出物品的優點。如果沒有輸出 None")
negative_content_schema = ResponseSchema(name="negative", description="總結這段話評價了物品的哪些缺點,列舉出物品的缺點。如果沒有輸出 None")response_schema = [affection_schema, positive_content_schema, negative_content_schema]

因此實例化三個ResponseSchema,一個相當于json中的一個key。

并將三個實例添加到列表中。

output_parser = StructuredOutputParser.from_response_schemas(response_schema)
format_instructions = output_parser.get_format_instructions()

StructuredOutputParser:創建一個 結構化輸出解析器,用于將 LLM 的文本輸出解析為預定義的結構化格式。

format instructions:生成?格式化指令,這些指令會直接插入到提示模板中,指導 LLM 如何按結構化格式輸出結果。

按照之前的方法定義system_prompt:

from langchain.prompts import ChatPromptTemplateprompt = """下面這段話是用戶評價商品的一段話 \請你幫忙判斷這段話總體來說為“好評”還是“差評” \告訴我用戶為物品的哪些特征打“好評” \哪些特征打差評text:{comment}{format_instructions}
"""prompt_template = ChatPromptTemplate.from_template(prompt)prompt_template.messages[0].prompt
comment = """尺碼正常買就行,不用買太大。 \鞋底非常高~鞋楦較寬,高腳背胖腳也能穿。 \鞋底非常軟彈,很容易踩開,確實超出預期。 \鞋子非常輕,真的很輕哈哈哈~差不多和競訓碳板鞋一樣輕了[愛心_blue][愛心_blue]。 \因為是防潑水鞋面嘛,所以鞋面有點不透氣,室外溫度30度穿這鞋會有點熱,可以秋天再入手。 \補充一下哈,因為是全黑的鞋,所以剛開始看起來會有點怪怪的,時間長了就更耐看了 """
messages = prompt_template.format_messages(comment = comment,format_instructions = format_instructions)print(messages[0].content)

輸出如下:

調用大模型:

response = llm.invoke(messages)
print(response.content)

輸出如下:

最后調用先前的?結構化輸出解析器 將大模型輸出結果解析成json格式:

output_dict = output_parser.parse(response.content)

最后的結果為:

總結:

LangChain 中的 Output Parser(輸出解析器)Prompt Template(提示模板) 相當于在調用大模型的輸入前輸出后添加了兩個中間層,它們共同作用,確保大模型的輸出符合預定義的格式規范。這種設計的核心目標是讓大模型的輸出更結構化、可解析、可驗證,從而滿足實際應用的需求。

Q&A:

  • ????????為什么需要這兩個中間層?

1, 解決自由文本的不確定性

大模型默認輸出是自由文本,但實際應用中需要結構化數據(如 JSON、表格)。例如,智能客服需要提取訂單號、價格、物流信息等字段。

示例:如果用戶問“我的訂單什么時候到貨?”,模型需要從回答中提取字段,而不是返回一段話。


?2,提高開發效率和可維護性
通過預定義格式,開發者無需手動處理自由文本的解析邏輯,框架自動完成字段提取和類型校驗。
優勢:
????????減少代碼量(如 50% 以上的開發效率提升)。
????????錯誤隔離性強(格式校驗失敗時拋出明確異常,如 OutputParserException)。


3,適配復雜業務場景
對于需要多步驟推理的任務(如旅行規劃、數據分析),模型需要按步驟調用工具(如天氣查詢、航班搜索),每一步的輸出都需要結構化。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/86729.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/86729.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/86729.shtml

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

相關文章

高通手機跑AI系列之——人臉變化算法

環境準備 手機 測試手機型號:Redmi K60 Pro 處理器:第二代驍龍8移動--8gen2 運行內存:8.0GB ,LPDDR5X-8400,67.0 GB/s 攝像頭:前置16MP后置50MP8MP2MP AI算力:NPU 48Tops INT8 &&…

TortoiseSVN 安裝教程

前言 TortoiseSVN 是一款流行的 免費開源 的 Subversion (SVN) 客戶端,專門為 Windows 操作系統 設計。它通過 Windows 資源管理器集成 提供直觀的圖形化界面,使用戶可以輕松管理版本控制的文件和目錄,無需使用命令行。 主要特點 資源管理器…

多張圖片生成PDF每張圖片生成pdf的一頁

需要的庫 <!-- 生成pdf--><dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.10</version></dependency><!-- https://mvnrepository.com/artifact/commons-net/commons-n…

Java基礎 Map集合框架 LinkedHashMap

LinkedHashMap LinkedHashMap類架構與繼承關系核心特性繼承自 HashMap有序性插入順序訪問順序 雙向鏈表結構非線程安全1.并發修改導致數據丟失2.并發迭代導致 ConcurrentModificationException3.并發修改導致鏈表結構破壞解決方案1. 使用 Collections.synchronizedMap&#xff…

MySQL 離線安裝MariaDB

描述 離線環境下安裝MySQL數據庫&#xff0c;也就是MariaDB 操作 1、找到自帶的mysql rpm -qa | grep -i ^mysql-rpm -qa | grep -i ^maria-2、卸載對應的包 rpm --nodeps -ev mysql-libs-5.1.73-8.el6_8.x86_64安裝 MariaDb 離線安裝包官網下載&#xff1a;地址 這個文…

JSON簡介及其應用

JSON簡介及其應用 A Brief Introduction and Applications of JSON By JacksonML 1. JSON的概念 JSON&#xff08;JavaScript Object Notation&#xff09; 是一種輕量級的數據交換格式&#xff0c;采用鍵值對&#xff08;key-value&#xff09;的方式組織數據&#xff0c;…

RNN(循環神經網絡)與LSTM(長短期記憶網絡)輸出的詳細對比分析

今天在與同事探討RNN時&#xff0c;引出了一個主題&#xff0c;RNN和LSTM的輸出有什么區別。 以下是關于傳統RNN&#xff08;循環神經網絡&#xff09;與LSTM&#xff08;長短期記憶網絡&#xff09;隱藏層內容、輸出結果及模型區別的詳細對比分析&#xff0c;結合結構原理、數…

【閑談】技術債:軟件開發的隱形殺手

編程中的“技術債”&#xff1a;隱形殺手與化解之道 在軟件開發的世界里&#xff0c;我們常談性能、安全、架構設計、用戶體驗等話題&#xff0c;但有一個常被忽視的概念卻如影隨形、悄然吞噬著項目的健康——技術債&#xff08;Technical Debt&#xff09;。 本文將帶你深入…

Elasticsearch | 索引和模板字段管理:增加新字段的詳細操作

關注CodingTechWork 背景介紹 Elasticsearch 是一款基于 Lucene 的搜索和數據分析引擎&#xff0c;廣泛應用于日志分析、全文檢索等領域。在使用 Elasticsearch 時&#xff0c;字段是存儲在索引中的數據單位&#xff0c;字段的定義決定了數據的存儲方式及其檢索效率。因此&…

HTML表格中<tfoot>標簽用法詳解

在HTML中&#xff0c;<tfoot>標簽用于定義表格的頁腳&#xff08;表腳&#xff09;&#xff0c;通常包含匯總信息&#xff08;如總計、平均值等&#xff09;。其核心特點和使用方法如下&#xff1a; 基本特性 位置靈活 <tfoot>必須位于<table>內&#xff0c…

深度學習正負樣本比例的影響及其調節方法

在深度學習中&#xff0c;數據是模型性能的決定性因素之一。特別是在二分類問題中&#xff0c;正負樣本的比例對模型訓練的影響尤為顯著。本文將探討正負樣本比例對深度學習的影響&#xff0c;并給出相應的調節方法和代碼示例。 什么是正負樣本比例&#xff1f; 在二分類問題…

【公司經營】安全公司產品經營

一、產品經營 1.1 產品矩陣設計方法&#xff1a;風險場景驅動? ?分層產品架構? ?基礎層?&#xff1a;防火墻/WAF/EDR&#xff08;標準化硬件軟件&#xff09;?分析層?&#xff1a;SOC平臺/XDR&#xff08;年訂閱制&#xff0c;SaaS化交付&#xff09;?響應層?&#…

鴻蒙 Scroll 組件深度解析:絲滑滾動交互全場景實現

一、引言&#xff1a;Scroll—— 內容溢出場景的交互中樞 在鴻蒙應用開發中&#xff0c;當界面內容超出屏幕可視范圍時&#xff0c;Scroll 容器組件成為實現流暢滾動交互的核心方案。作為從 API 7 開始支持的基礎組件&#xff0c;它通過極簡的屬性配置與強大的滾動控制能力&am…

第十節:Vben Admin 最新 v5.0 (vben5) 快速入門 - 菜單管理(下)

Vben5 系列文章目錄 ?? 基礎篇 ? 第一節:Vben Admin 最新 v5.0 (vben5) 快速入門 ? 第二節:Vben Admin 最新 v5.0 (vben5) 快速入門 - Python Flask 后端開發詳解(附源碼) ? 第三節:Vben Admin 最新 v5.0 (vben5) 快速入門 - 對接后端登錄接口(上) ? 第四節:Vben Ad…

c#激光設備行業ERP軟件進銷存軟件庫存管理軟件財務管理軟件

# 激光設備行業ERP軟件進銷存軟件庫存管理軟件財務管理軟件 # 開發背景 本軟件是給廣東河源某客戶開發的激光設備行業ERP軟件進銷存軟件庫存管理軟件財務管理軟件 # 功能描述 軟件由基礎資料、庫存管理、 屬性管理、 用戶管理、 銷售管理、 財務管理。主要功能模塊是庫存管理…

python學習打卡day57

DAY 57 經典時序模型1 知識點回顧 序列數據的處理&#xff1a; 處理非平穩性&#xff1a;n階差分處理季節性&#xff1a;季節性差分自回歸性無需處理 模型的選擇 AR(p) 自回歸模型&#xff1a;當前值受到過去p個值的影響MA(q) 移動平均模型&#xff1a;當前值收到短期沖擊的影響…

python小記(十七):Python 使用“繼承”來管理yaml文件

Python 使用“繼承”來管理yaml文件 引言 引言 在 Python 中有時候我們會把參數都儲存在yaml文件中然后進行調用。當我們在進行一個很大的項目的時候&#xff0c;我們可能先需要一個base.yaml文件&#xff0c;然后再使用一個task1.yaml文件進行參數導入&#xff0c;并且task1.…

Windows搭建opencv cuda開發環境并驗證是否成功

編譯opencv cuda源碼 電腦安裝cuda 12.0或者11.8&#xff0c;根據你的電腦配置自行選擇 下載opencv 源碼 git clone https://github.com/opencv/opencv.git git clone https://github.com/opencv/opencv_contrib.git 在opencv目錄里新建 build 文件夾 cd build后 cmake…

【go】初學者入門環境配置,GOPATH,GOROOT,GOCACHE,以及GoLand使用配置注意

一、環境變量配置步驟 1. 打開環境變量設置 Win R 后輸入 sysdm.cpl → 點擊 確定在彈出窗口中點擊 高級 → 環境變量 2. 配置 GOROOT&#xff08;Go語言安裝根目錄&#xff09; 作用&#xff1a;告訴系統Go語言的安裝位置&#xff08;編譯器、標準庫等核心文件所在路徑&a…

gantt-task-react的改造使用

gantt-task-react的鏡像地址 例子 改造1&#xff1a;切斷父子關聯關系&#xff0c;父為project組件&#xff0c;子為task組件&#xff0c; 原來的功能是task組件拖動會影響到父組件&#xff0c;現在切斷兩者關聯關系&#xff0c;數據都用task組件&#xff0c; 給task組件重…