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

《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 等。在下一节中,我们将了解如何将输出解析器与模型和提示组合使用。

相关文章:

《Learning Langchain》阅读笔记3-基于 Gemini 的 Langchain如何从LLMs中获取特定格式

纯文本输出是有用的,但在某些情况下,我们需要 LLM 生成结构化输出,即以机器可读格式(如 JSON、XML 或 CSV)或甚至以编程语言(如 Python 或 JavaScript)生成的输出。当我们打算将该输出传递给其他…...

AI Agents系列之构建多智能体系统

🧠 向所有学习者致敬! “学习不是装满一桶水,而是点燃一把火。” —— 叶芝 我的博客主页: https://lizheng.blog.csdn.net 🌐 欢迎点击加入AI人工智能社区! 🚀 让我们一起努力,共创…...

OJ笔试强训_1至24天

OJ笔试强训 Day01 [NOIP2010]数字统计_牛客题霸_牛客网 点击消除_牛客题霸_牛客网 两个数组的交集_牛客题霸_牛客网 Day02 牛牛的快递_牛客题霸_牛客网 最小花费爬楼梯_牛客题霸_牛客网 数组中两个字符串的最小距离__牛客网 Day03 简写单词_牛客题霸_牛客网 dd爱框框_…...

3款顶流云电脑与传统电脑性能PK战:START云游戏/无影云/ToDesk云电脑谁更流畅?

这里写目录标题 一、前言二、本地机器配置环境三、START云游戏/无影云/ToDesk云电脑配置对比3.1 START云游戏3.2 无影云个人版3.3 ToDesk云电脑 四、本地电脑与云电脑性能实战4.1 游戏场景体验4.1.1 本地电脑测试4.1.2 云电脑测试英雄联盟黑神话悟空其他游戏 4.2 主流设计场景体…...

java IO/NIO/AIO

(✪▽✪)曼波~~~~!让曼波用最可爱的赛马娘方式给你讲解吧!(⁄ ⁄•⁄ω⁄•⁄ ⁄) 🎠曼波思维导图大冲刺(先看框架再看细节哦): 📚 解释 Java 中 IO、NIO、AIO 的区别和适用场景: …...

java输出、输入语句

先创建一个用于测试的java 编写程序 #java.util使java标准库的一个包,这里拉取Scanner类 import java.util.Scanner;public class VariableTest {public static void main(String[] args) {#创建一个 Scanner 对象Scanner scanner new Scanner(System.in);System.…...

宏基因组产品升级——抗菌肽数据库APD

抗菌肽(Antimicrobial Peptides,简称AMPs)是一类存在于多种生物体中的天然分子。它们在抵御微生物感染中扮演着重要角色,发挥着先天免疫反应的作用。抗菌肽功能分类广泛,包括:抗菌,抗生物膜&…...

大数据面试问答-Spark

1. Spark 1.1 Spark定位 "Apache Spark是一个基于内存的分布式计算框架,旨在解决Hadoop MapReduce在迭代计算和实时处理上的性能瓶颈。 1.2 核心架构 Spark架构中有三个关键角色: Driver:解析代码生成DAG,协调任务调度&a…...

线程池七个参数的含义

Java中的线程池里七个参数的以及其各自的含义 面试题:说一下线程池七个参数的含义? 所谓的线程池的 7 大参数是指,在使用 ThreadPoolExecutor 创建线程池时所设置的 7 个参数,如以下源码所示: public ThreadPoolExe…...

Windows suwellofd 阅读器-v5.0.25.0320

Windows suwellofd 阅读器 链接:https://pan.xunlei.com/s/VOO7tUkTHHTTjSe39CeVkUHbA1?pwd3ibx# OFD(Open Fixed-layout Document) , 数科OFD阅读器支持国标版式、可信阅读、是电子发票、电子证照,电子病历等电子文件理想阅读工具。 多格…...

三大等待和三大切换

三大等待 1、三大等待:等待的方式有三种:强制等待,隐性等待,显性等待。 1、强制等待:time.sleep(2),秒 优点:使用简单缺点:等待时间把握不准,容易造成时间浪费或者等待时…...

告别定时任务!用Dagster监听器实现秒级数据响应自动化

在数据管道开发中,我们经常面临需要根据外部事件触发计算任务的场景。传统基于时间的调度方式存在资源浪费和时效性不足的问题。本文将通过Dagster的**传感器(Sensor)**功能,演示如何构建事件驱动的数据处理流程。 场景模拟&…...

一文读懂WPF系列之MVVM

WPF MVVM 什么是MVVMWPF为何使用MVVM机制WPFMVVM 的实现手段 INotifyPropertyChanged​数据绑定的源端通知​​原理 PropertyChanged事件双向绑定的完整条件常见疑惑问题 什么是MVVM 翻译全称就是 model-view-viewmodel 3部分内容 以wpf的概念角度来解释就是 数据库数据源模型…...

【Unity】打包TextMeshPro的字体

前言 在Unity中,TextMeshPro与常规 Text 组件相比提供了更高级的文本呈现功能,TextMesh Pro 可以处理各种语言,包括中文。我们可以轻松地在 Unity 项目中使用中文,而不必担心字体和布局问题。TextMeshPro需要的字体资源就需要我们…...

51单片机实验五:A/D和D/A转换

一、实验环境与实验器材 环境:Keli,STC-ISP烧写软件,Proteus. 器材:TX-1C单片机(STC89C52RC)、电脑。 二、 实验内容及实验步骤 1.A/D转换 概念:模数转换是将连续的模拟信号转换为离散的数字信…...

使用VHD虚拟磁盘安装双系统,避免磁盘分区

前言 很多时候,我们对现在的操作系统不满意,就想要自己安装一个双系统 但是安装双系统又涉及到硬盘分区,非常复杂,容易造成数据问题 虚拟机的话有经常用的不爽,这里其实有一个介于虚拟机和双系统之间的解决方法,就是使用虚拟硬盘文件安装系统. 相当于系统在机上…...

Kafka消费者端重平衡流程

重平衡的完整流程需要消费者 端和协调者组件共同参与才能完成。我们先从消费者的视角来审视一下重平衡的流程。在消费者端,重平衡分为两个步骤:分别是加入组和等待领导者消费者(Leader Consumer)分配方案。这两个步骤分别对应两类…...

Django之modelform使用

Django新增修改数据功能优化 目录 1.新增数据功能优化 2.修改数据功能优化 在我们做数据优化处理之前, 我们先回顾下传统的写法, 是如何实现增加修改的。 我们需要在templates里面新建前端的页面, 需要有新增还要删除, 比如说员工数据的新增, 那需要有很多个输入框, 那html…...

云轴科技ZStack入选中国人工智能产业发展联盟《大模型应用交付供应商名录》

2025年4月8日至9日,中国人工智能产业发展联盟(以下简称AIIA)第十四次全体会议暨人工智能赋能新型工业化深度行(南京站)在南京召开。工业和信息化部科技司副司长杜广达,中国信息通信研究院院长、中国人工智能…...

写论文时降AIGC和降重的一些注意事项

‘ 写一些研究成果,英文不是很好,用有道翻译过来句子很简单,句型很单一。那么你会考虑用ai吗? 如果语句太正式,高级,会被误判成aigc ,慎重选择ai润色。 有的话就算没有用ai生成,但…...

AI 编程工具—如何在 Cursor 中集成使用 MCP工具

AI 编程工具—如何在 Cursor 中集成使用 MCP工具 这里我们给出了常用的MCP 聚合工具,也就是我们可以在这些网站找MCP服务 这是一个MCP Server共享平台,用户可以在上面发布和下载MCP Server配置。在这里可以选择你需要的MCP 服务。 如果你不知道你的mcp 对应的server 名称也不…...

基础算法篇(5)(蓝桥杯常考点)—动态规划(C/C++)

文章目录 动态规划前言线性dp路径类dp经典线性dp背包问题分类01背包问题完全背包问题多重背包分组背包问题混合背包问题多维费用的背包问题区间dp 动态规划 前言 在竞赛中,如果遇到动态规划的题目,只要不是经典题型,那么大概率就是以压轴题的…...

MLLMS_KNOW尝鲜版

背景(个人流水账,可毫不犹豫跳过) 最近项目中有涉及到小物体检测的内容,昨天晚上讨论的时候有提出是否可以将关注区域放大的idea,不过后来没有就着这个东西深入,结果好巧不巧地,今天关注到这篇…...

《软件设计师》复习笔记(12.2)——成本管理、配置管理

目录 一、项目成本管理 1. 定义 2. 主要过程 3. 成本类型 4. 其他概念 真题示例: 二、软件配置管理 1. 定义 2. 主要活动 3. 配置项 4. 基线(Baseline) 5. 配置库类型 真题示例: 一、项目成本管理 1. 定义 在批准…...

《AI赋能职场:大模型高效应用课》第8课 AI辅助职场沟通与协作

【本课目标】 掌握AI辅助邮件、沟通话术的优化技巧。学习利用AI快速生成高效的会议纪要。通过实操演练,提升职场沟通效率与协作能力。 【准备工具】 DeepSeek大模型(deepseek.com)百度文心一言(yiyan.baidu.com) 一…...

Spring 中的 @Cacheable 缓存注解

1 什么是缓存 第一个问题,首先要搞明白什么是缓存,缓存的意义是什么。 对于普通业务,如果要查询一个数据,一般直接select数据库进行查找。但是在高流量的情况下,直接查找数据库就会成为性能的瓶颈。因为数据库查找的…...

settimeout和setinterval区别

1. setTimeout:单次延迟执行 语法: const timeoutId setTimeout(callback, delay, arg1, arg2, ...); 核心功能:在指定的 delay(毫秒)后,执行一次 callback 函数。 参数: callback&#x…...

UE5编辑器静止状态下(非 Play 模式)睫毛和眼睛的渲染是正常的,而在 Play 模式下出现模糊

这通常指向以下几个 运行时(Runtime) 特有的原因: 抗锯齿 (Anti-Aliasing) 方法,特别是 Temporal Anti-Aliasing (TAA): 这是最可能的原因。 UE5 默认启用的 TAA 通过混合多帧信息来平滑边缘和减少闪烁,尤其是在运动中…...

怎样选择适合网站的服务器带宽?

合适的服务器带宽对于网站的需求起着至关重要的作用,服务器带宽会直接影响到网站的访问速度和用户体验,本文将介绍一下企业该怎样选择适合网站需求的服务器带宽! 不同类型的网站对于服务器带宽的需求也是不同的,小型博客网站的访问…...

Kaamel隐私与安全分析报告:Microsoft Recall功能评估与风险控制

本报告对Microsoft最新推出的Recall功能进行了全面隐私与安全分析。Recall是Windows 11 Copilot电脑的专属AI功能,允许用户以自然语言搜索曾在电脑上查看过的内容。该功能在初次发布时因严重隐私和安全问题而备受争议,后经微软全面重新设计。我们的分析表…...