AI Agent从无到有34: 用 LangSmith Hub 实现团队级提示词管理

构建AI Agent可观测性实验平台:从黑盒调试到白盒工程化 在AI应用开发中,可观测性是实现系统可靠性和可维护性的核心工程概念。它通过日志、指标和追踪三大支柱,让开发者能够洞察软件内部状态与行为逻辑。对于日益复杂的AI Agent系统,可观测性技术价值尤为突出,它能够将Agent的决策过程、工具调用链和状态演变从黑盒变为白盒,从而支持高效的调试、性能优化与成本控制。这一理念在AI Agent开发领域的具体应用,便是构建一个专注于可观测性和可组装性的实验平台,即Agent Harness。该平台通过非侵入式的数据采集,为基于LangChain等框架构建的Agent提供 阅读详情

纲要

  • LangSmith 平台核心能力
    • 可观测性(Observability):实时监控 LLM 应用性能与异常
    • 评估(Evaluation):提供数据集与测试工具,量化模型效果
    • 提示工程(Prompt Engineering):通过 Hub 管理提示词版本、共享与协作
  • 传统提示词管理的痛点
  • Hub 工作流:创建、推送、拉取、迭代
  • 关键组件:langsmith SDK、hub.pull、Client.push_prompt、Client.pull_prompt
  • 代码演示:完整可运行的 Python 脚本(需配置 API Key)

引言

在团队开发 AI Agent 或 LLM 应用时,提示词(Prompt)往往分散在各个开发者的代码、配置文件甚至聊天记录中。版本混乱、难以复用、缺乏审计,这些问题随着项目规模的扩大而日益严重。

LangChain 生态中的 LangSmith Hub 正是为解决这一痛点而设计。它提供了一个类似 GitHub 的提示词托管平台,支持版本化、分享、评审和远程加载,让提示词真正成为可管理的资产。

LangSmith Hub 快速上手

中心化提示词管理的必要性

假设一个三人团队共同维护一个客服机器人,每个人的本地都有一份 system_prompt.txt。当需要调整话术时,必须手动同步文件,极易出现覆盖和冲突。使用 Hub 后,所有提示词都存储于云端,团队成员只需通过一个简单的标识符即可拉取最新版本,同时保留历史版本,随时可回滚。

三大核心操作:拉取、推送、迭代

LangSmith Hub 的基本使用流程如下:

大模型 开发者 B LangSmith Hub 开发者 A 大模型 开发者 B LangSmith Hub 开发者 A push_prompt("my-prompt", prompt) URL + 版本号 pull_prompt("my-prompt") 最新版本的 ChatPromptTemplate 格式化后的提示词 + 用户问题 模型响应

下面通过代码逐步实现这个流程。

前置准备

  1. 注册 LangSmith 账号,在 Settings > API Keys 页面创建 API Key。
  2. 安装必要的 Python 包(推荐使用 langsmith SDK,langchainhub 包已废弃):
pip install -U langsmith langchain-core langchain-openai
  1. 设置环境变量:
export LANGSMITH_API_KEY="你的API密钥"
export OPENAI_API_KEY="你的OpenAI密钥"  # 如果使用 OpenAI 模型

拉取公共提示词

Hub 上有很多社区分享的优质提示词,例如一个将自然语言转 SQL 的模板。可以通过 hub.pull 加载到本地使用。注意,拉取公共提示词时需要指定作者的 handle。

from langchain import hub

# 从 Hub 拉取公共提示词
prompt = hub.pull("langchain-ai/text-to-sql")
print("模板结构:")
print(prompt)
print()

# 格式化提示词
formatted = prompt.format(question="查询所有年龄大于30的用户")
print("格式化后的提示词:")
print(formatted)

创建并推送自有提示词

使用 langsmith 客户端将本地创建好的 ChatPromptTemplate 推送到 Hub,方便团队共享。根据官方文档,push_prompt 方法使用 object 参数传递提示词对象。

import os
from langsmith import Client
from langchain_core.prompts import ChatPromptTemplate

# 初始化客户端(自动读取环境变量 LANGSMITH_API_KEY)
client = Client()

# 创建一个提示词模板
my_prompt = ChatPromptTemplate.from_messages([
    ("system", "你是一个友好的客服助手,用中文回答。"),
    ("human", "{question}")
])

# 推送到 Hub,指定一个唯一名称
try:
    url = client.push_prompt(
        "my-customer-service-prompt",   # 提示词名称,建议加上命名空间,如 "my-org/my-prompt"
        object=my_prompt                # 注意:使用 object 参数传递提示词
    )
    print(f"提示词已上传,Hub 地址:{url}")
except Exception as e:
    print(f"上传失败: {e}")
    print("请确认已设置 LANGSMITH_API_KEY 且名称未被占用。")

团队协作:拉取并使用提示词

其他团队成员配置好 API Key 后,只需执行一行代码即可获取最新提示词,并接入模型调用。

from langsmith import Client
from langchain_openai import ChatOpenAI

client = Client()

# 拉取指定版本的提示词(不指定版本则拉取最新)
prompt = client.pull_prompt("my-customer-service-prompt")
print("拉取到的提示词:")
print(prompt)
print()

# 连接模型(以 OpenAI 为例)
model = ChatOpenAI(model="gpt-3.5-turbo", temperature=0)
chain = prompt | model

# 调用
response = chain.invoke({"question": "我的订单什么时候发货?"})
print("模型回答:")
print(response.content)

提示词迭代与版本管理

当需要修改提示词时,开发者可以更新本地模板后再次推送,系统会自动生成新版本,每个版本都有一个唯一的 commit hash。在生产环境中,建议通过 commit hash 固定版本,而非默认拉取 latest。

# 创建一个改进版提示词
improved_prompt = ChatPromptTemplate.from_messages([
    ("system", "你是一个风趣幽默的客服助手,回答尽量简短。"),
    ("human", "{question}")
])

# 推送时增加标签(commit_tags),便于标记版本
client.push_prompt(
    "my-customer-service-prompt",
    object=improved_prompt,
    commit_tags=["v2", "humorous"]      # 使用 commit_tags 参数标记版本
)

# 拉取指定版本(通过 commit hash 或标签)
# 注意:实际使用时应替换为真实的 commit hash
prompt_v1 = client.pull_prompt("my-customer-service-prompt:abc123")
prompt_v2 = client.pull_prompt("my-customer-service-prompt:def456")
print("v1 版本的系统提示词:", prompt_v1.messages[0].content)
print("v2 版本的系统提示词:", prompt_v2.messages[0].content)

在 Hub 网页界面中,可以直观地对比不同版本的差异,查看提交历史,甚至在线测试提示词效果。

本地管理 vs Hub 管理

特性本地文件/代码内嵌LangSmith Hub
版本控制依赖 Git(需手动提交)自动版本化,内置 Diff 对比
团队共享手动复制、同步一行命令拉取
在线测试无提供 Playground,可实时调试
复用性低,易重复造轮子高,社区模板可复用
权限与审计无支持 API Key 权限,可查看下载次数

完整可运行示例代码

以下代码将上述所有步骤整合为一个脚本,只需配置好 API Key 即可运行。未配置时会给出友好提示。

import os
import sys
from langchain import hub
from langsmith import Client
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI

# 检查必要的环境变量
if not os.getenv("LANGSMITH_API_KEY"):
    sys.exit("请设置环境变量 LANGSMITH_API_KEY")
if not os.getenv("OPENAI_API_KEY"):
    print("警告:未设置 OPENAI_API_KEY,仅测试提示词管理,不进行模型调用。")

def main():
    client = Client()
    
    # 1. 拉取公共模板
    print("=== 1. 从 Hub 拉取公共模板 ===")
    public_prompt = hub.pull("langchain-ai/text-to-sql")
    print("拉取成功,模板变量:", public_prompt.input_variables)
    
    # 2. 创建并推送自有模板
    print("\n=== 2. 推送自定义提示词 ===")
    my_template = ChatPromptTemplate.from_messages([
        ("system", "你是一个友好的客服助手,用中文回答。"),
        ("human", "{question}")
    ])
    prompt_name = "my-test-prompt-001"  # 请替换为你的命名空间/名称
    try:
        url = client.push_prompt(prompt_name, object=my_template)
        print(f"推送成功,Hub 地址:{url}")
    except Exception as e:
        print(f"推送失败(可能名称已存在): {e}")
        # 若已存在,直接拉取
        print("尝试拉取已有版本...")
    
    # 3. 拉取刚推送的模板(或已有版本)
    print("\n=== 3. 拉取提示词并调用模型 ===")
    pulled_prompt = client.pull_prompt(prompt_name)
    print("拉取成功,消息结构:")
    for msg in pulled_prompt.messages:
        print(f"  [{msg.type}]: {msg.content}")
    
    # 4. 如果有模型,运行一条测试
    if os.getenv("OPENAI_API_KEY"):
        model = ChatOpenAI(model="gpt-3.5-turbo", temperature=0)
        chain = pulled_prompt | model
        response = chain.invoke({"question": "我的订单什么时候发货?"})
        print("\n模型回答:")
        print(response.content)
    else:
        print("\n跳过模型调用(未配置 OPENAI_API_KEY)。")

if __name__ == "__main__":
    main()

API 速览

以下梳理本文涉及的核心 API:

langchain.hub.pull

  • 所属库:langchain
  • 方法签名:pull(owner_repo_commit: str) -> Runnable
  • 参数:
    • owner_repo_commit:提示词标识符,格式为 owner/repo 或 owner/repo/commit_hash
  • 返回值:Runnable 对象,可直接用于链式调用
  • 示例:
from langchain import hub
prompt = hub.pull("langchain-ai/text-to-sql")

langsmith.Client.push_prompt

  • 所属库:langsmith
  • 方法签名:push_prompt(name: str, object: Any, commit_tags: Optional[Sequence[str]] = None, description: Optional[str] = None) -> str
  • 参数:
    • name:提示词名称,建议使用 org/name 格式
    • object:要推送的 LangChain 对象(如 ChatPromptTemplate)
    • commit_tags:可选,为此次提交添加标签
    • description:可选,提示词描述
  • 返回值:提示词在 UI 中的 URL
  • 示例:
from langsmith import Client
from langchain_core.prompts import ChatPromptTemplate
client = Client()
prompt = ChatPromptTemplate.from_template("tell me a joke about {topic}")
url = client.push_prompt("joke-generator", object=prompt)

langsmith.Client.pull_prompt

  • 所属库:langsmith
  • 方法签名:pull_prompt(prompt_identifier: str, include_model: bool = False) -> Runnable
  • 参数:
    • prompt_identifier:提示词标识符,格式为 owner/repo 或 owner/repo:commit_hash
    • include_model:是否同时加载关联的模型配置
  • 返回值:Runnable 对象
  • 示例:
from langsmith import Client
client = Client()
prompt = client.pull_prompt("my-org/my-prompt")

参考文档

官方文档

参考链接

总结

LangSmith Hub 为提示词赋予了代码般的版本管理与协作能力,将“一次编写、到处复制”的原始模式升级为“集中托管、按需拉取、持续迭代”的工程化模式。关键技术栈要点包括:

  • langsmith SDK:官方推荐的提示词管理工具,langchainhub 包已废弃
  • push_prompt:使用 object 参数传递提示词对象,支持 commit_tags 标记版本
  • pull_prompt:支持通过 commit_hash 固定版本,生产环境应避免默认拉取 latest
  • 版本管理:每次推送自动生成 commit hash,支持 Diff 对比和标签管理
  • 环境管理:支持 Staging 和 Production 环境隔离,可通过 UI 完成版本晋升

无论是个人开发者复用社区模板,还是团队多人协作维护复杂应用,LangSmith Hub 都能显著提升提示词管理的效率和可靠性。

大模型应用工程化:Agent Skills与Harness架构实战指南 在人工智能领域,大模型的应用正从概念验证迈向规模化生产。其核心挑战在于如何将模型的智能能力稳定、高效地集成到复杂业务系统中。这涉及到从基础的工具调用到复杂的任务编排等一系列工程化问题。Agent(智能体)作为一种新兴范式,通过赋予大模型规划、工具调用和记忆能力,使其能够自主执行复杂任务。而Skills(技能)则是对工具和业务逻辑的封装,实现了能力的模块化和复用。为了管理多个Agent和Skills的协作、状态及生命周期,Harness(调度与管控平台)应运而生,它提供了工作流编排、监控部署等关键工程能力。这 阅读详情

相关推荐

「文智助手」全场景办公AI助理AI+OPC全流程实践方案(大赛作品)

「文智助手」全场景办公AI助理AI+OPC全流程实践方案(大赛作品)

jks212454的博客 401

视频隐私脱敏工程化:CSRT/KCF追踪算法在本地推理中的实现与边界

在短视频内容合规审查中,动态遮挡(Dynamic Masking)是高频且高耗时的环节。传统手动关键帧打码不仅效率低下,且在目标快速移动或遮挡时极易出现遮罩漂移。本文从计算机视觉工程角度,解析基于CSRT与KCF算法的目标追踪方案在视频隐私处理中的技术路径、性能权衡及落地实践。

Mysssone的博客 381

船载 OpenHarmony AIS 航海工作台:告警与防碰撞预警系统

船载OpenHarmony AIS航海工作台的告警与防碰撞系统,集成十余类告警(超速、偏航、会遇、SOS等),通过网格空间索引实现高效邻近判定,保障实时性。告警管理器统一调度规则、去重、通知与日志,支持悬浮球、语音、跑马灯、弹窗多渠道触达,确保航行安全。SOS紧急通道独立运行,避免干扰。系统设计强调性能优化与多场景适配,为航海安全提供核心支撑。

专注于计算机研发知识和资讯分享 390

AI 问数真的能替代 BI 报表吗?

AI问数赋能自然语言查询,提升临时分析效率,但无法替代传统报表。报表适用于稳定输出与持续监控,AI则擅长探索性提问。企业用好AI问数,关键在于夯实数据模型、统一指标口径、健全权限体系与结果校验机制。合理组合报表、仪表板与AI,才能实现高效、准确的业务洞察。

葡萄城技术团队博客 300

从STM32转战STC32G?逐飞开源库帮你快速上手GPIO、PWM与ADC(避坑指南)

本文详细介绍了从STM32迁移到STC32G32K128的开发实践,重点解析了GPIO、PWM和ADC等基础外设的设计差异,并提供了基于逐飞开源库的高效应用方案。通过对比两种平台的开发工具和操作方式,帮助开发者快速上手STC32G,避免常见陷阱,提升开发效率。

weixin_30316097的博客 532

Gem5模拟器,详解官网教程Event-driven programming(五)

Gem5模拟器,详解官网教程Event-driven programming、时间调度、如何自定义SimObject

qq_46675545的博客 2041

ChatGPT、Perplexity、Gemini 与 AI Overviews 引用对比:谁的引用更可信

AI 引擎的引用机制差异很大:ChatGPT 以行内引用加 Sources 列表呈现来源,Perplexity 几乎逐句可溯源,Gemini 在回答中内嵌相关来源链接,AI Overviews 则把多源聚合答案与来源列表一起放在搜索结果顶部。本文从引用透明度、来源偏好、可干预性 3 个维度对比这 4 个引擎,并给出 GEO 的 3 点启示,帮企业在多引擎环境下提升被引用的概率。

淡然一笑 的专栏 230

Meta DINOv3实战指南:如何用7B参数ViT模型提升你的视觉任务性能(附Hugging Face部署教程)

本文提供了Meta DINOv3 7B参数ViT模型的实战部署指南。文章详细解析了该自监督视觉模型的优势,并重点演示了如何在Hugging Face平台上高效加载这一大规模模型,同时给出了图像分类、语义分割等下游任务的性能提升技巧与代码示例,帮助开发者在实际视觉任务中应用这一前沿技术。

pz89012345的博客 326

AI Agent之核心框架

A: 显式 Thought 有三类价值:可解释性(便于人类审计)、可调试性(定位哪一步选错工具)、学习信号(可做监督微调或评估中间步骤质量)。ReAct 把推理与 可执行行动 绑定,每一步行动后都有 真实 Observation 反馈,从而用工具结果约束生成,降低闭卷幻觉。做完不等于结束——还要 评估做得好不好,把 教训 记下来,下次 带着教训重试,反思作为 记忆,影响后续尝试的策略。工作流程:Action → Evaluation → Reflection → Retry。A: 普通 CoT 只在。

剑雨巍巍的博客 266

WSL2+Docker实战:在Windows上部署MinerU 2.5.3,解锁媲美Demo的VLM PDF解析能力

本文详细介绍了如何在Windows系统上通过WSL2+Docker部署MinerU 2.5.3,实现媲美Demo的VLM PDF解析能力。文章涵盖环境准备、Docker部署实战技巧及高级使用技巧,特别针对PDF识别中的复杂排版、公式和图表处理提供了优化方案,帮助用户高效处理学术论文和技术文档。

weixin_29291573的博客 482

大厂嵌入式面试常考八股文及算法

1.指向已被释放或无效的内存地址的指针是野指针。互斥锁是一种用于线程同步的机制,用于确保同一时间只有一个线程访问共享资源。多态是面向对象编程中的一种特性,它允许以一种统一的方式处理不同类型的对象,通过相同的接口可以表现出不同的行为。大小端(Endian)指的是在计算机存储和处理多字节数据时,字节的存储顺序。大端序(Big Endian):高位字节存储在低地址,低位字节存储在高地址。类似于将数字的高位放在左边,低位放在右边的表示方式。例如整数值0x12345678在内存中按照大端序排列为。

谢谢大家的关注 6161

【从零理解 Spring AI · 12】MCP 的两种角色:做客户端还是做服务端

上一篇讲了 MCP 的概念:标准协议、三大角色、M+N 替代 M×N。

nice_lcj520的博客 579

运营商技术岗一面面经:从面试流程到回答框架的复盘总结

面试本质上是一场信息匹配与表达能力测试,技术岗一面尤其看重候选人能否在有限时间内清晰展现思考路径。运营商技术岗面试虽涉及网络、系统等专业基础,但核心考察点往往在于结构化表达、抗干扰能力以及面对未知问题的分析逻辑。从自我介绍的项目细节,到项目经历中的回滚方案,再到Linux命令、Python脚本等基础技能,面试官更关注你如何组织思路、如何应对追问。这类一面场景常见于通信运营商、网络运维、IT支撑等岗位的招聘流程中。提前梳理高频问题框架,训练90秒内的高密度表达,并掌握有条件的表态策略,能显著提升面试通过率。这

weixin_28721917的博客 185

AI 应用开发工程师技术实践:大模型接入、通用组件封装与性能优化

本文提出AI应用从PoC到生产的核心挑战:模型调用的持续可用、可控与可优化。通过构建统一LLM网关实现多供应商路由与故障转移,封装对话、工具调用与RAG组件以解耦业务逻辑,结合前缀缓存、批处理与流式背压治理等性能优化手段,形成“接通→接稳→接快”的工程路径,最终以工程化能力决定AI应用的生产可用性。

2301_79189962的博客 635

软件设计师考试下午题代码部分详解:23种设计模式全面解析

软件设计师考试的下午题通常会考察设计模式的应用,这部分内容既是重点也是难点。本文将系统地介绍考试中常见的23种设计模式,通过详细代码示例和通俗易懂的讲解,帮助考生掌握这些核心知识点,提高应试能力。概念:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。适用场景:系统要独立于产品的创建、组合和表示时;系统要由多个产品系列中的一个来配置时。@Override@Override@Override@Override// 产品族A@Override。

4万+

抽象主义人工智能和生命体AI的内在联系

彭军辉提出“抽象主义人工智能”作为第四大AI范式,批判符号主义、连接主义、行为主义剥离生命本体的误区,确立“智能是现象,生命是本体”的核心公理。主张原生智能必须依附具备存续诉求的生命本体,提出“生命体AI理论”,构建七层演化阶梯与自闭环工程框架,强调智能不可跳过底层存续机制直接模拟语言。该体系为生成式AI提供科学边界,推动从“仿真表象”向“原生智能”的范式跃迁,开辟硅基人工生命新赛道。

抽象主义人工智能和生命体AI 180

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

OpenAI Control Room 架构拆解:给企业 AI Agent 加一套可审计的急停系统

OpenAI 公开了用于追踪和停止研究模型工作负载的 Control Room。本文拆解 job_id、推理前鉴权、35 秒撤销窗口与 Fail Closed 设计,并给出企业 AI Agent 急停控制面的数据模型、FastAPI 参考实现、缓存撤销策略和故障演练清单。

jerry764的博客 328

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

OpenClaw 深度调查:把 AI 助手做成你自己的控制平面

对 openclaw/openclaw 的完整技术尽调:Gateway 架构、Agent 运行时、工具与沙箱、30 个消息通道、181 个插件、安全信任边界、工程代价与采用建议。17 章 / 10 张图,全部数字标注口径,数据截至 2026-10-31。

厚积薄发 311

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

AI赋能智慧港口建设|造形家快速生成港口全要素三维场景

随着智慧港口、港口数字孪生项目的持续推进,港口三维场景的需求日益旺盛。传统港口三维建模,往往需要航拍倾斜摄影采集数据,再人工搭建吊机、岸桥、船舶、集装箱等大量工业设施模型,项目周期长、人力成本高,修改迭代繁琐,制约港口可视化项目落地效率。国产AI三维建模工具,依托卫星影像 AI 识别能力,无需航拍作业,一键快速搭建港口完整三维场景,为港口数字孪生、方案汇报、投标演示提供高效的场景解决方案。

m0_69539167的博客 66

从设备增点到治理闭环:老旧小区物业数智化落地实践

系统连接合同审批、银行流水、收费记录与项目台账,执行到期提醒、收入核验、异常标色和月度对账,让每一笔资金来源明确、去向可查。针对设施老旧、诉求响应慢、公共收益不透明等问题,津南以6类小区为试点场景,统一建设物业数字化底座,关联楼栋、单元、房屋、业主、空间、设施设备、工单、公共收益等核心数据。系统采用统一编码管理,将摄像头、路灯、井盖、道路、绿化等设施纳入资产台账,解决纸质记录更新滞后、故障责任难追溯的问题。基于历史工单建立分类模型和知识库,辅助识别照明、给排水、电梯、环境秩序、秩序维护等问题;

wuyeshuzhihua的博客 136

企业微信iPad协议详解:接口接入、实时消息同步与语音转码实践

深入解析企业微信iPad协议的技术架构与开发思路,涵盖API接口接入、长连接通信、实时消息同步、Silk语音转码、异常重连及高并发优化,帮助开发者了解企业微信自动化系统的设计与实现。

欢迎来到祖安! 464

Product Hunt 热榜 2026-11-13:Plurai Simulation、YouArt Desktop App、Omnigraph

2026-11-13 Product Hunt 新产品精选:Plurai Simulation、YouArt Desktop App、Omnigraph。汇总 15 款产品的中文介绍、功能关键词和产品链接。

LaughingZhu的博客 544

【AI Agent面试系列】AI Agent可观测、评测、安全相关的知识点

之前的文章介绍了和,本文主要介绍AI Agent的测评、可观测等知识。

349

Docling 原理解读:是什么、为什么、怎么样

从论文视角拆解 Docling 的整体架构、DoclingDocument 数据模型、PDF 预处理、版面分析、OCR、TableFormer 双解码器、阅读顺序与装配流程,并解释版面框与 OCR 框的区别。

PLANTTHESON的博客 382

WorkBuddy 实战:一句话需求 → 七屏可交互原型,户外徒步 App 的 AI 设计全流程

WorkBuddy 实战:一句话需求 → 七屏可交互原型,户外徒步 App 的 AI 设计全流程,跟着博主一起来还原整个过程。

夜郎King的博客 5065
上一篇: AI Agent从无到有33: 使用 Partial 实现提示词部分格式化
下一篇: AI Agent从无到有35: LangChain 提示词模板体系总结与实践
Wang's Blog
博客等级 码龄12年 7438粉丝 2421原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wang's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值