《Learning Langchain》閱讀筆記3-基于 Gemini 的 Langchain如何從LLMs中獲取特定格式

純文本輸出是有用的,但在某些情況下,我們需要 LLM 生成結構化輸出,即以機器可讀格式(如 JSON、XML 或 CSV)或甚至以編程語言(如 Python 或 JavaScript)生成的輸出。當我們打算將該輸出傳遞給其他代碼時,這非常有用,使 LLM 可以在更大的應用程序中發揮作用。

調試步驟

import getpass
import osif "GOOGLE_API_KEY" not in os.environ:os.environ["GOOGLE_API_KEY"] = getpass.getpass("Enter your Google AI API key: ")
import os
import requestsos.environ['HTTP_PROXY'] = 'http://127.0.0.1:7890'
os.environ['HTTPS_PROXY'] = 'http://127.0.0.1:7890'r = requests.get("https://www.google.com")
print(r.status_code)  # 能返回 200 就說明代理成功了
from langchain_google_genai import ChatGoogleGenerativeAIllm = ChatGoogleGenerativeAI(model="gemini-2.0-flash-001",  # 或其他可用模型
)print(llm.invoke("你好呀!你現在通了嗎?").content)
你好!我一直在線,隨時待命。所以,是的,我可以說是“通了”!有什么我可以幫助你的嗎?

JSON Output:JSON輸出

使用 LLM 生成的最常見格式是 JSON,然后可以將其用于,例如:

  • 將它發送到前端代碼

  • 將其保存到數據庫中

# openai API
from langchain_openai import ChatOpenAI
from langchain_core.pydantic_v1 import BaseModelclass AnswerWithJustification(BaseModel):'''An answer to the user question along with justification for the answer.'''answer: str'''The answer to the user's question'''justification: str'''Justification for the answer'''llm = ChatOpenAI(model="gpt-3.5-turbo-0125", temperature=0)
structured_llm = llm.with_structured_output(AnswerWithJustification)
structured_llm.invoke("What weighs more, a pound of bricks or a pound of feathers")

輸出為:

{answer: "They weigh the same", justification: "Both a pound of bricks and a pound of feathers weigh one pound. The weight is the same, but the volu"... 42 more characters
}

我們使用gemini API來復現

但是langchain_core.pydantic_v1 是為兼容舊版本 pydantic v1 而設的臨時模塊,但現在 LangChain 已經全面升級到了 pydantic v2,建議不要再用這個兼容模塊了。

from langchain_core.pydantic_v1 import BaseModel出現了紅色的提示報錯。所以我們改寫為from pydantic import BaseModel, 這樣就直接使用了最新版的 pydantic,不會再觸發警告。

from langchain_google_genai import ChatGoogleGenerativeAI
from pydantic import BaseModelclass AnswerWithJustification(BaseModel):'''An answer to the user question along with justification for the answer.'''answer: str'''The answer to the user's question'''justification: str'''Justification for the answer'''llm = ChatGoogleGenerativeAI(model="gemini-2.0-flash-001",  # 或其他可用模型temperature=0 # 讓輸出更確定、更穩定(不會隨機發揮)
)structured_llm = llm.with_structured_output(AnswerWithJustification)structured_llm.invoke("What weighs more, a pound of bricks or a pound of feathers")
AnswerWithJustification(answer='They weigh the same.', justification='A pound is a unit of weight, so a pound of bricks and a pound of feathers weigh the same amount..')

總體目標:
讓大語言模型(LLM)返回結構化的數據(JSON),并且符合你自定義的格式(schema)。

第一步:定義了一個“結構模板”(schema):

class AnswerWithJustification(BaseModel):answer: strjustification: str

這就是你希望模型返回的數據格式 —— 一個包含兩個字段的 JSON:

{"answer": "...","justification": "..."
}

第二步:讓 LLM “知道” 要用這個格式

structured_llm = llm.with_structured_output(AnswerWithJustification)

第三步:使用這個結構化模型去提問

structured_llm.invoke("What weighs more, a pound of bricks or a pound of feathers?")

這一步就是真正向模型提問。模型在回答前,會參考你定義的 schema,生成符合格式的 JSON 數據。

首先將 schema 轉為 JSON Schema,把你的 Python 模板類轉成 JSON 格式的規則。然后發給LLM,告訴模型“你輸出要符合這個格式”。最后驗證輸出,模型生成后再校驗是否合規,確保你收到的數據符合格式。

你就像是在說:

“AI,你回答我的時候,不能隨便寫一段文字,必須照著我這張表格來寫,字段名和格式都要對上!”

Other Machine-Readable Formats with Output Parsers:其他帶有輸出解析器的機器可讀格式

輸出解析器是干嘛的?

輸出解析器是幫助大語言模型(LLM)把結果以特定格式輸出的一種工具。它有兩個主要功能:

  1. 提供格式說明(Providing format instructions)

你可以用解析器給提示(prompt)加上一些額外的說明,比如告訴模型:

“請把結果輸出成 XML 格式” 或
“請生成一個 JSON 對象,字段有 name 和 age”

這樣模型就知道你想要的輸出長什么樣。

  1. 驗證和解析輸出(Validating and parsing output)

LLM 返回結果后,輸出解析器還可以:

把普通文本轉換成結構化格式(如列表、XML、JSON等);

校驗格式是否正確;

修復模型輸出中不完整或多余的內容。

這是一個輸出解析器的工作示例

from langchain_core.output_parsers import CommaSeparatedListOutputParserparser = CommaSeparatedListOutputParser()items = parser.invoke("apple, banana, cherry")print(items)
['apple', 'banana', 'cherry']

LangChain 為各種用例提供了多種輸出解析器,包括 CSV、XML 等。在下一節中,我們將了解如何將輸出解析器與模型和提示組合使用。

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

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

相關文章

中間件--ClickHouse-12--案例-1-日志分析和監控

1、案例背景 一家互聯網公司需要實時分析其服務器日志、應用日志和用戶行為日志,以快速發現潛在問題并優化系統性能。 2、需求分析 目標:實時分析日志數據,快速發現問題并優化系統性能。數據來源: 服務器日志:如 Ng…

多道程序和多任務操作系統區別

多道程序 vs. 多道任務:對比分析 ? 共同點 方面共同特征核心機制都依賴于進程/任務切換執行需求實現多個程序或任務"并發"執行系統支持都需要操作系統的支持(如調度算法、內存管理)本質目標提高資源利用率(CPU不空轉…

齊次坐標變換+Unity矩陣變換

矩陣變換 變換(transform):指的是我們把一些數據,如點,方向向量甚至是顏色,通過某種方式(矩陣運算),進行轉換的過程。 變換類型 線性變換:保留矢量加和標量乘的計算 f(x)…

閑來無事,用HTML+CSS+JS打造一個84鍵機械鍵盤模擬器

今天閑來無聊,突發奇想要用前端技術模擬一個機械鍵盤。說干就干,花了點時間搞出來了這么一個有模有樣的84鍵機械鍵盤模擬器。來看看效果吧! 升級版的模擬器 屏幕錄制 2025-04-18 155308 是不是挺像那么回事的?哈哈! 它…

智慧城市:如同為城市裝上智能大腦,開啟智慧生活

智慧城市的概念隨著信息技術的飛速發展而逐漸興起,它通過集成物聯網、大數據、人工智能和數字孿生等先進技術,為城市管理和居民生活帶來了前所未有的智能化變革。本文將深入探討這些核心技術及其在智慧城市的典型應用場景,展示智慧城市如何提…

科技快訊 | 智譜開源最新GLM模型系列;“AI 洗頭店”現身廣州;ChatGPT上線圖庫功能

智譜開源最新GLM模型系列,啟用全球域名“Z.ai” 4月15日,智譜開源最新GLM模型系列,包括32B和9B尺寸,涵蓋基座、推理、沉思三類模型,全部遵循MIT開源許可協議。推理模型GLM-Z1-32B-0414實測推理速度達200 tokens/秒&…

第32講:衛星遙感與深度學習融合 —— 讓地球“讀懂”算法的語言

目錄 ?? 一、講講“遙感+深度學習”到底是干啥的? ? 能解決什么問題? ?? 二、基礎原理串講:深度學習如何“看懂”遙感圖? ?? 遙感圖像數據類型: ?? CNN的基本思路: ?? 三、實戰案例:用CNN對遙感圖像做地類分類 ?? 所需R包: ??? 步驟一:構建訓…

【多線程5】面試常考鎖知識點

文章目錄 悲觀/樂觀鎖掛起等待鎖/自旋鎖偏向鎖輕量級/重量級鎖鎖升級CASCAS引發的ABA問題解決方案 原子類 公平/不公平鎖可重入鎖ReentrantLock讀寫鎖 Callable接口 這里的“悲觀”“樂觀”“掛起等待”“自旋”“輕量級”“重量級”“公平”“非公平”“可重入”僅代表某個鎖的…

第三屆世界科學智能大賽新能源賽道:新能源發電功率預測-數據處理心得體會1

看懂數據 比賽數據說明: 文檔(報名之后可以下載)大小操作初賽測試集.zip94MB下載初賽訓練集.zip632MB下載output.zip145KB下載 任務和主題 AI新能源功率預報:根據歷史發電功率數據和對應時段多類別氣象預測數據,實…

【云馨AI-大模型】2025年4月第三周AI領域全景觀察:硬件革命、生態博弈與國產化突圍

一、硬件算力突破點燃多智能體時代 谷歌在4月12日Cloud Next大會發布第七代TPU Ironwood,單芯片算力達4614 TFLOPs,較前代內存提升6倍,專為AI推理場景優化。配合發布的Gemini 2.5 Flash模型通過"思考"功能實現成本優化&#xff0c…

第3章 垃圾收集器與內存分配策略《深入理解Java虛擬機:JVM高級特性與最佳實踐(第3版)》

第3章 垃圾收集器與內存分配策略 3.2 對象已死 Java世界中的所有對象實例,垃圾收集器進行回收前就是確定對象哪些是活著的,哪些已經死去。 3.2.1 引用計數算法 常見的回答是:給對象中添加一個引用計數器,有地方引用&#xff0…

超詳細VMware虛擬機擴容磁盤容量-無坑版

1.環境: 虛擬機:VMware Workstation 17 Pro-17.5.2 Linux系統:Ubuntu 22.04 LTS 2.硬盤容量 虛擬機當前硬盤容量180G -> 擴展至 300G 3.操作步驟 (1)在虛擬機關機的狀態下,虛擬機硬盤擴容之前必…

HarmonyOS:1.4 - HarmonyOS應用程序框架基礎

判斷題 1.在基于Stage模型開發的應用項目中都存在一個app.json5配置文件、以及一個或多個module.json5配置文件。 正確(True) 2.一個應用只可以包含一個UIAbility組件。 錯誤(False) 3.Background狀態在UIAbility實例銷毀時觸發。可以在onDestroy()回調中進行系統資源的釋…

HTTP HTTPS RSA

推薦閱讀 小林coding HTTP篇 文章目錄 HTTP 80HTTP 響應碼1xx:信息性狀態碼(Informational)2xx:成功狀態碼(Success)3xx:重定向狀態碼(Redirection)4xx:客戶端…

ORACLE數據庫轉國產阿里OceanBase數據庫

1.BLOB類型修改 將接口內oracle.sql.BLOB改為java.sql.Blob 2.REGEXP_LIKE 判斷函數正則表達式中字符轉義問題 OB的正則表達式使用的是標準的Linux模式,oracle是黑盒子,在處理部分轉義符([])的時候, Oracle無需使用轉義符,OB務必使用轉義符,加/轉義處理,例如在regexp_like(t…

STM32的三種啟動方式

目錄 一、從主閃存存儲器啟動(Main Flash Memory) 二、從系統存儲器啟動(System Memory) 三、從內置SRAM啟動(Embedded SRAM) 一、從主閃存存儲器啟動(Main Flash Memory) >&g…

Flutter使用flutter_driver進行自動化測試

Flutter自動化測試實踐指南 作為一名iOS開發者,我最近對Flutter的自動化測試產生了濃厚興趣。在開發過程中,我發現自動化測試對于保證應用質量至關重要,特別是像我們這樣的創業團隊,測試資源有限的情況下。 搭建Flutter自動化測…

Halcon應用:九點標定-手眼標定

提示:若沒有查找的算子,可以評論區留言,會盡快更新 Halcon應用:九點標定-手眼標定 前言一、Halcon應用?二、應用實戰1、圖形理解[eye-to-hand]:1.1、開始應用2、 圖形理解[eye-in-hand]2.1、 開始應用 前言…

【C++11】列表初始化、右值引用、完美轉發、lambda表達式

📚 博主的專欄 🐧 Linux | 🖥? C | 📊 數據結構 | 💡C 算法 | 🌐 C 語言 上篇文章:unordered_map、unordered_set底層編寫 下篇文章:C11:新的類功能、模板的可…

Pandas取代Excel?

有人在知乎上提問:為什么大公司不用pandas取代excel? 而且列出了幾個理由:Pandas功能比Excel強大,運行速度更快,Excel除了簡單和可視化界面外,沒有其他更多的優勢。 有個可怕的現實是,對比Exce…