LangChain:输出封装OutputParser

05|输出解析:用OutputParser生成鲜花推荐列表 先创建了一个空的DataFrame,用于存储从模型生成的描述。接下来,通过一个名为FlowerDescription的Pydantic BaseModel类,定义了期望的数据格式(也就是数据的结构)。# 创建一个空的DataFrame用于存储结果# 数据准备flowers = ["玫瑰", "百合", "康乃馨"]# 定义我们想要接收的数据格式flower_type: str = Field(description="鲜花的种类") 阅读详情

随着理解的加深,后续会回来优化。

1 输出封装

  LLM模型的输出通常都是字符串形式,Langchain中的输出封装OutputParser可以将其转化解析成结构化对象。简单举例如下:

from langchain_openai import ChatOpenAI
from langchain_core.output_parsers import CommaSeparatedListOutputParser

prompt1='说出几种常见的水果'
prompt2="输出20以内的素数"
llm=ChatOpenAI()
comma_parser=CommaSeparatedListOutputParser()
response=llm.invoke(prompt1)
print("===模型原始输出===")
print(response.content)
print('===CommaSeparatedListOutputParser解析输出===')
print(comma_parser.parse(response.content))
response=llm.invoke(prompt2)
print("===模型原始输出===")
print(response.content)
print('===CommaSeparatedListOutputParser解析输出===')
print(comma_parser.parse(response.content))

其输出结果如下:

===模型原始输出===
苹果、香蕉、橙子、草莓、葡萄、梨、樱桃、桃子、西瓜、哈密瓜、柚子、柠檬、火龙果、李子、菠萝、榴莲等。
===CommaSeparatedListOutputParser解析输出===
['苹果、香蕉、橙子、草莓、葡萄、梨、樱桃、桃子、西瓜、哈密瓜、柚子、柠檬、火龙果、李子、菠萝、榴莲等。']
===模型原始输出===
2, 3, 5, 7, 11, 13, 17, 19
===CommaSeparatedListOutputParser解析输出===
['2', '3', '5', '7', '11', '13', '17', '19']

Tips:针对prompt1模型输出的结果中的没有,所以CommaSeparatedListOutputParser解析器没有正确解析出来。
本篇主要介绍langchain和langchain_core中的解析器。

1.1 langchain_core中的解析器

  目前langchain_core.output_parsers中的OutputParser类主要包括以下几种(虚拟类不列出):

  • json类:JsonOutputParser,将结果解析成json串。
  • list类: CommaSeparatedListOutputParser、MarkdownListOutputParser和NumberedListOutputParser,将结果解析成类似List的对象。CommaSeparatedListOutputParser其结果是对LLM模型返回的字符串使用(,)进行分割得到的List。后面两种分别采用正则表达式从LLM模型返回的字符串中提取出符合规则的部分。
  • string类。StrOutputParser,直接输出LLM模型返回的结果。
  • xml类。XMLOutputParser,将LLM模型返回的结果解析成xml。
  • pydantic类。PydanticOutputParser, 第2部分介绍。
  • openai_function和openai_tools类:这两类可以帮助提取出LLM产生的函数调用的参数。openai_function系列针对的是使用function_call字段表示函数调用的参数的情况,后者针对的使用tool_calls字段表示function call的参数的情况(GPT系列模型采用的是这种方式)。这里只介绍openai_tools类。主要包括JsonOutputKeyToolsParser、JsonOutputToolsParser和PydanticToolsParser。其用法举例如下:
from langchain_openai import ChatOpenAI
from langchain_core.outputs import ChatGeneration
#注意引用方法
from langchain_core.output_parsers.openai_tools import JsonOutputToolsParser
tools=[{ 
            "type": "function",
            "function": {
                "name": "sum",
                "description": "加法器,计算一组数的和",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "numbers": {"type": "array", "items": { "type": "number"}}
                    }
                }
            }
        }
    ]

llm=ChatOpenAI(model_kwargs={"tools":tools})
parser=JsonOutputToolsParser()
response=llm.invoke("计算一组数据的和:13,49837,3489,23423")
print(response)
response=ChatGeneration(message=response)
print("---解析后结果---")
print(parser.parse_result([response]))

其输出结果为:

content=‘’ additional_kwargs={‘tool_calls’: [{‘id’: ‘call_ek805JD7PATXCZ6yjNErBgpL’, ‘function’: {‘arguments’: ‘{“numbers”:[13,49837,3489,23423]}’, ‘name’: ‘sum’}, ‘type’: ‘function’}]} response_metadata={‘token_usage’: {‘completion_tokens’: 22, ‘prompt_tokens’: 68, ‘total_tokens’: 90}, ‘model_name’: ‘gpt-3.5-turbo’, ‘system_fingerprint’: ‘fp_c2295e73ad’, ‘finish_reason’: ‘tool_calls’, ‘logprobs’: None} id=‘run-ba534c13-9a3d-4e77-a056-37465fd58549-0’ tool_calls=[{‘name’: ‘sum’, ‘args’: {‘numbers’: [13, 49837, 3489, 23423]}, ‘id’: ‘call_ek805JD7PATXCZ6yjNErBgpL’}]
—解析后结果—
[{‘args’: {‘numbers’: [13, 49837, 3489, 23423]}, ‘type’: ‘sum’}]

1.2 langchain中的输出封装

  目前langchain中的OutputParser类主要包括以下几种:

输出类型类名称备注
booleanBooleanOutputParser返回True或False
combiningCombiningOutputParser同时将多个输出解析成同一个格式
datetimeDatetimeOutputParser将日期转化成特定格式
enumEnumOutputParser将LLM模型输出解析成enum
fixOutputFixingParser可以自动修复异常并重新解析
pandas_dataframePandasDataFrameOutputParser使用pandas.dataframe的format对LLM进行解析
regexRegexParser使用正则表达式对LLM模型返回进行解析
regex_dictRegexDictParser功能同上
retryRetryOutputParser、RetryWithErrorOutputParser可以自动修复异常并重新解析
structuredStructuredOutputParser将LLM模型输出进行结构化解析
yamlYamlOutputParser提取LLM模型输出中的YAML部分

  虽然OutputParser可以对LLM的输出结果进行解析,但这种使用方式用户体验并不好,正如第一个案例中针对prompt1的输出结果,因为无法确定LLM模型输出的结果中是否使用,,所以解析结果无法掌控。可以使用OutputParser类的get_format_instructions()方法来调整LLM模型输出。举例如下:

from langchain.output_parsers import DatetimeOutputParser
from langchain_openai import ChatOpenAI
from langchain_core.prompts import PromptTemplate

parser=DatetimeOutputParser()
format_instruction=parser.get_format_instructions()
llm=ChatOpenAI()
prompt=PromptTemplate.from_template(template="计算机时间的起始时间是什么时候?{format_instruction}")
prompt=prompt.format(format_instruction=format_instruction)
response=llm.invoke(prompt)
print(response.content)

其输出结果如下:

0001-01-01T00:00:00.000000Z

2 PydanticOutputParser

PydanticOutputParser类可以利用Pydantic库自定义解析模型。

2.1 Pydantic基本用法

Pydantic 是Python 中一个流行的数据验证和设置库,允许自定义数据模型,并在运行时验证输入数据是否符合模型规范,确保应用程序在处理数据时的健壮性和可靠性。其用法举例如下(目前Langchain中可能只支持pydantic的v1版本,为保持一致,这里也仅使用v1版本):

from pydantic import BaseModel,Field,validator
import re

class Func_Json(BaseModel):
    name:str=Field(description="函数名称,只能由字母组成并且长度不超过10")
    description:str=Field(description="函数描述")

    @validator("name")
    def valid_name(cls,field):
        if re.match(r'^[a-zA-Z]+$',field) and len(field)<10:
            return field
        else:
            raise ValueError("函数名称不符合要求")

print(Func_Json(name="sum",description="求一组数据的和"))
print(Func_Json(name='sum2',description="求一组数据的和"))

其代码运行结果如下:
在这里插入图片描述

2.2 PydanticOutputParser基本用法

from pydantic import BaseModel,Field,validator
from langchain_core.output_parsers import PydanticOutputParser
from langchain_openai import ChatOpenAI
from typing import List
from langchain_core.prompts import PromptTemplate

class New_List(BaseModel):
    item:List[str]

llm=ChatOpenAI()
parser=PydanticOutputParser(pydantic_object=New_List)

prompt=PromptTemplate.from_template("请列出10种常见的水果。{format_instruction}")
prompt=prompt.format(format_instruction=parser.get_format_instructions())

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

prompt="请列出10种常见的汽车品牌"
new_parser=OutputFixingParser.from_llm(parser=parser,llm=ChatOpenAI())
response=llm.invoke(prompt)
print(response.content)
print(new_parser.parse(response.content))

其结果如下:

{
“item”: [“apple”, “banana”, “orange”, “strawberry”, “grape”, “watermelon”, “kiwi”, “pineapple”, “mango”, “pear”]
}

  1. Toyota
  2. Ford
  3. Chevrolet
  4. Honda
  5. Volkswagen
  6. BMW
  7. Mercedes-Benz
  8. Audi
  9. Nissan
  10. Hyundai
    item=[‘Toyota’, ‘Ford’, ‘Chevrolet’, ‘Honda’, ‘Volkswagen’, ‘BMW’, ‘Mercedes-Benz’, ‘Audi’, ‘Nissan’, ‘Hyundai’]

参考文献

  1. https://blog.csdn.net/codename_cys/article/details/107675748
【LangChain指南】输出解析器(Output parsers) 摘要: LangChain框架中的**Output Parsers(输出解析器)**用于将LLM生成的自由文本转换为结构化数据(如Python对象、字典等),便于程序处理。核心接口包括get_format_instructions()(提供格式化指令)、parse()(解析文本)和可选的parse_with_prompt()(结合提示词修正错误)。常用解析器有: StrOutputParser:提取纯文本,适用于工具调用后的结果简化。 PydanticOutputParser:结合Pydantic模型,生成 阅读详情

相关推荐

【可能是全网最丝滑的LangChain教程】十一、LangChain进阶之Output Parsers

输出解析器是LangChain的一个关键组件,它们的作用是将模型生成的文本输出转换成结构化的数据,以便更容易地使用和分析。模型输出------>结构化数据。如果你正在从事或者你正打算从事大模型应用相关研发,我想你都能明白结构化数据输出的重要性

Jeffray1991的博客 809

CommaSeparatedListOutputParser

(逗号分隔列表输出解析器)是一个假想的类或组件名称,用于描述一个功能,即将逗号分隔的字符串(Comma-Separated Values, CSV)解析成更易于处理的数据结构,如列表(List)、数组(Array)或集合(Set)等。虽然这不是一个标准的库或框架中的直接组件名称,但很多编程语言和环境中都有实现类似功能的库或方法。

liujianjun的专栏 603

LangChain流式输出与结构化输出实战:SSE、OutputParser与ToolCall整合

在大模型应用开发中,流式输出与结构化输出常存在矛盾,尤其涉及SSE和ToolCall时。SSE作为基于HTTP的单向推送协议,适合大模型token流式传输,但纯文本特性限制了复杂结构。LangChain的OutputParser体系(如PydanticOutputParser)通过强类型校验实现结构化输出,而ToolCall本质是模型输出结构化参数,流式下参数分片到达需累积解析。技术价值在于平衡流式体验与结构化需求,应用场景包括实时数据提取、工具调用等。本文深入探讨SSE封装、OutputParser选型及

weixin_29062255的博客 215

OpenAI 宣布将让人们无需注册账户即可免费使用 ChatGPT

自 2022 年底首次向公众推出以来,OpenAI 一直要求想要访问该聊天机器人的用户注册 OpenAI 账户。今天,该公司透露将向所有人免费开放 ChatGPT,无需创建账户。OpenAI表示,它将"逐步"推出这一新的访问权限,因此,根据您居住的地方,您可能仍需要先注册一个账户,然后才能向所有人提供这一改进。在开放之后,ChatGPT 打开就能用,看起来终于初步具备了「AI 搜索引擎」的样子。

程序员鑫港的博客 1520

LangChain输出解析与SSE流式处理:从模型输出到业务数据的实战指南

在大模型应用落地中,模型生成的自然语言往往无法直接驱动业务系统,如何将流式输出转换为结构化数据成为关键挑战。SSE(Server-Sent Events)作为主流流式传输协议,逐token推送的特性使数据边界难以判定,而LangChain提供的OutputParser与ToolCall机制,恰好构成了连接模型输出与业务数据之间的核心转换层。本文从结构化输出的必要性出发,解析PydanticOutputParser、StructuredOutputParser、JSONOutputParser三种解析器的适用

weixin_42613501的博客 247

人工智能_大模型032_LangChain002_从文件加载prompt_输出封装OutputParser_加载PDF等文档_向量数据库与向量检索---人工智能工作笔记0167

可以看到这里使用OutputFixingParser进行了检查也就是说,如果我们第一次如果解析失败了,可以看到,如果parser解析以后,返回的date对象这个时候,try的时候报错了,可以看到,这个时候,我们就用。去的,并且指定了模型gpt-3.5-turbo,然后,我们故意把之前的output,这个大模型分析后的结果故意改成错的,然后,我们把这个结果,提供给new_parser这个修复的parser,然后。可以看到,有时候,我们需要大模型输出的内容,安装我们指定的格式去输出,以方便我们使用,比如,

添柴程序猿的专栏 342

LangChain流式输出与SSE超时:OutputParser选型及FastAPI结构化封装实践

流式输出(SSE)是LLM应用实现打字机效果的基础技术,但模型长思考期带来的空闲超时常常导致前端连接中断。LangChain作为主流Agent开发框架,其OutputParser与ToolCall机制为解决结构化输出与流式传输的冲突提供了关键路径。理解PydanticOutputParser、JsonOutputParser等解析器差异,掌握增量解析、心跳保活和FastAPI的StreamingResponse封装,能显著提升AI应用的稳定性。该方法适用于Vue/Python客户端交互、LangGraph长

weixin_29085151的博客 200

ROS2多线程处理RTSP视频流避坑指南:OpenCV解码丢帧问题解决方案

本文针对ROS2中处理RTSP视频流时OpenCV解码丢帧的常见问题,提供了专业的解决方案。通过深入分析单线程模型的瓶颈,提出并详细拆解了基于生产者-消费者多线程模型的健壮实现方案,有效分离数据采集与处理,从而显著提升视频流的稳定性和流畅度。

weixin_29199873的博客 164

LangChain:模型 I/O 封装使用解析和感触

本文将继续延续Langchain专栏文章,本文将讲解Langchain的模型 I/O 封装。Langchain将不同的模型,统一封装成一个接口,方便更换模型而不用重构代码。

猫步轻移,以学求知。余于此方寸之地,如猫观鼠,细察技艺所得,思维所悟。灵思如猫之警觉,日积月累,终成智海; 1363

方案设计之亿级排行榜方案设计

该方案通过 “Redis Zset 为核心 + 分治策略为骨架 + 多级优化为细节”,在亿级用户场景下实现了:本质是将 “亿级大问题” 拆解为 “千万级小问题”,用分布式思想和精细化设计平衡性能、可用性与成本。

shine0312的专栏 1096

Win10系统下Protel 99 SE元件库导入报错?3步搞定File is not recognized问题

本文详细介绍了在Win10系统下解决Protel 99 SE元件库导入报错'File is not recognized'的3步终极方案。通过手动修改配置文件、使用专用工具和优化系统兼容性设置,帮助用户快速解决这一经典PCB设计软件的兼容性问题,提升工作效率。

m3n5b7v8c9x的博客 786

【LangChain进阶】彻底解决AI输出乱格式!OutputParser结构化输出全解

很多新手开发 AI 应用都会遇到一个致命问题:大模型是概率生成式模型,不会 100% 严格遵守你的 Prompt 要求。自带前言、后语、解释性文字JSON 少逗号、少括号、格式残缺字段错乱、类型不统一嵌套结构崩坏,代码直接解析报错人工可读的自由文本 ≠ 程序可用的结构化数据如果我们要做:智能客服、数据抽取、表单生成、工具调用、自动化业务逻辑,绝对不能靠“模型自觉”。LangChain 提供的OutputParser 输出解析器✅ 强制模型按固定格式输出✅ 自动校验字段、类型、结构。

vfuycchhbc的博客 468

Vue3 - 详细实现安装西瓜视频 xgplayer 插件详细配置及使用教程,利用西瓜视频播放器播放 mp4、flv、hls 格式视频文件及视频推流(直播或监控摄像头画面),支持移动端H5及PC网站!

vue3,nuxt3,西瓜视频,xgplayer,插件组件,xgplayer-hls,xgplayer-flv,xgplayer-mp4,播放视频点播和直播视频流,监控实时播放推流,倍速播放,在线flv在线推流地址,HLS播放,vue3西瓜播放器,vue如何使用西瓜视频插件做直播推流回流,视频点播,flv在线视频流播放,截图功能,自定义播放器样式,截屏,监控视频,vue3使用西瓜播放器播放flv、hls、mp4视频,截屏按钮,直播流,报错,黑屏,加载失败,苹果ios不兼容,重连,怎么改样式,很卡,详细教程,

🏆 前端领域优质创作者 1万+

LangChain 入门上篇:模型 I/O 封装

本文主要介绍 langchain 中模型的输入输出的封装,是关于 langchain AI 编程的入门教程

baoj2010的博客 1398

手把手教你学simulink(8.3)--实例:基于 Simulink 的自动驾驶汽车速度控制系统设计与仿真

基于 Simulink 的自动驾驶汽车速度控制系统设计与仿真。

MHD0815的博客 1203

025、空间降噪与时域降噪:噪声抑制与细节保留的平衡艺术

《降噪技术的平衡艺术:空间与时域降噪的协同优化》 本文深入探讨了图像处理中空间降噪与时域降噪的技术原理与工程实践。空间降噪通过像素级处理提升单帧质量,而时域降噪则利用帧间信息增强稳定性。文章揭示了两种方法在实际应用中的矛盾点:过度降噪会导致细节损失,影响后续算法性能。作者结合车载环视系统等实战案例,详细分享了参数调优经验,包括运动自适应策略、边缘保持技巧和嵌入式平台优化方案。特别强调降噪的最终目标应服务于下游算法需求,而非单纯追求图像美观。文章为工程人员提供了从理论到实践的完整指导,展现了降噪技术在效果与性

sundong_81的博客 185

LangChain流式输出与结构化输出冲突解决:SSE、OutputParser与ToolCall实战

在大模型应用开发中,流式输出与结构化输出的矛盾普遍存在:前者追求边生成边消费的实时体验,后者要求完整合法的数据校验。LangChain通过OutputParser将文本转为结构、ToolCall将意图转为动作、SSE将结果实时推送,三层解耦各司其职。PydanticOutputParser适合强类型生产环境,JsonOutputParser灵活但需自律,StructuredOutputParser则是快速原型的折中。流式场景下ToolCall参数分片到达,需累积拼接并处理中断;SSE接口需注意心跳保活、缓冲

weixin_29056781的博客 322

【图像超分】论文精读:Enhanced Deep Residual Networks for Single Image Super-Resolution(EDSR和MDSR)

最近对超分辨率的研究随着深度卷积神经网络 (DCNN) 的发展取得了进展。特别是,残差学习技术表现出更好的性能。在本文中,我们开发了一个增强的深度超分辨率网络(EDSR),其性能超过了当前最先进的 SR 方法。我们模型的显着性能改进是由于通过删除传统残差网络中不必要的模块进行优化。当我们稳定训练过程时,通过扩展模型大小可以进一步提高性能。我们还提出了一种新的多尺度深度超分辨率系统(MDSR)和训练方法,该方法可以在单个模型中重建不同缩放因子的高分辨率图像。所提出的方法在基准数据集上比最先进的方法表现出更好的

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 7912

LangChain速成避坑指南:从环境搭建到PromptTemplate与OutputParser实战

LLM应用开发正成为Python开发者必须掌握的新技能,而LangChain作为最流行的编排框架,常被误认为只是“套壳”。实际上,它通过统一抽象层把PromptTemplate、模型调用与输出解析串联成可维护的链式管道。本文从大模型工程化落地的角度出发,结合真实踩坑经验,讲解如何用Python快速搭建LangChain开发环境,并手把手实现第一个可运行Demo,再深入理解LCEL管道语法和Pydantic结构化输出。无论是刚接触OpenAI API的初级工程师,还是想提升LLM应用可维护性的团队,都能从中获

weixin_30899023的博客 177

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

LangChain SSE流式输出到结构化数据:OutputParser与ToolCall实战

在AI Agent工程化中,大模型输出往往是流式文本,如何将其稳定地转换为可直接对接业务系统的结构化数据,是开发者绕不开的核心问题。Server-Sent Events(SSE)作为轻量的服务端推送协议,为实时渲染提供了基础;而LangChain的OutputParser体系则解决了模型输出格式不稳定、JSON分片到达等解析难题。从PydanticOutputParser的强约束,到JsonOutputParser的流式宽容解析,再到ToolCall机制实现动态函数调用,三者共同构成了从文本生成到工具执行的

weixin_32238157的博客 205

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

LangChain之解析器核心组件.2026年新版讲解,超详细

本文深入解析LangChain中的核心组件OutputParser,主要介绍三种解析器及其应用场景: JsonOutputParser - 将模型输出转为Python字典,适合提取结构化数据,配合Pydantic可定义严格的数据结构。 PydanticOutputParser - 提供更严格的数据校验,适用于金融、医疗等对格式要求高的场景。 CommaSeparatedListOutputParser - 简单处理列表输出,如生成关键词列表。 文章还介绍了RunnableLambda组件,可将自定义Pyth

2301_79503034的博客 902

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

LangChain 学习二:工作流

这个链包含输入提示词->大模型直接输出,不包含StrOutputParser(),可以发现除了回复,还包含而外的元数据metadata,metaData中包含toolcall等信息,如果有toolcall则调用工具(后面会进一步说明)。提示词包括系统提示词(System prompt)、用户提示词(Human prompt)、模型回复的上下文结果(AI Message),在多轮对话中,这些提示词构成了对话的上下文context。用户输入提示词给大模型,大模型判断是否需要调用工具。

2501_90216642的博客 246

LangChain 的 Chain 不是“链”?我踩了 10 个坑才搞懂 LCEL 的设计哲学

本文深入解析 LangChain 的核心概念 Chain 和 LCEL 设计哲学。Chain 本质是"数据流水线",采用声明式编程方式,通过 LCEL 的管道符 | 连接组件,实现数据自动流转。文章详细拆解了 PromptTemplate 的多角色模板设计、Output Parser 的结构化转换功能,以及 Runnable 接口的统一调用方式。同时探讨了如何通过 LCEL 构建顺序与并行工作流,并指出 AgentExecutor 是 Chain 和 Agent 的关键交汇点。整体呈现了 LangChain

恋恋风尘的博客 332

[Nodejs+LangChain+Ollama] 1.第一个案例

上一世,在中国Ai人工智能的市场被Java和Python垄断,这一世我Nodejs要夺回我失去的一切!

梅山老妖的博客 1052

LangChain Model I/O

LangChain Model I/O 通过标准化接口实现多厂商大模型统一接入,支持同步、流式、批量调用。核心组件包括PromptTemplate格式化输入、ChatModel处理多轮对话与工具调用、OutputParser结构化解析输出。推荐使用init_chat_model统一工厂函数,结合.env环境变量管理密钥,遵循企业级编码规范,提升可维护性与稳定性。

weixin_61074074的博客 580
上一篇: LangChain:模型I/O组件
下一篇: 创建React项目(新手小白篇)
Sun_Sherry
博客等级 码龄10年 0粉丝 287原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值