LangChain 中间件与人工介入:构建可控的智能客服系统

langchain4j 人工介入工作流 阅读详情

1. 引言

在构建基于大模型的智能客服系统时,我们面临两个核心挑战:如何控制模型行为和何时需要人工介入。LangChain 提供了强大的中间件(Middleware)机制和人工中断(Human-in-the-Loop)功能,让开发者能够精确控制 Agent 的执行流程。

本文将深入探讨 LangChain 中间件的使用方式,并重点介绍如何在工具调用中实现人工介入,确保关键决策由人类把关。

2. LangChain 中间件机制

2.1 什么是中间件?

中间件是 LangChain Agent 执行流程中的拦截器,可以在模型调用前后插入自定义逻辑。它类似于 Web 开发中的中间件,能够:

  • 过滤用户输入内容
  • 修改模型输出
  • 添加系统级功能(如日志、监控)
  • 控制执行流程(跳转、终止)

2.2 中间件类型

LangChain 提供了三种主要中间件装饰器:

  1. @before_model - 在模型调用前执行
  2. @after_model - 在模型调用后执行
  3. @wrap_tool_call - 在工具调用前后执行

3. 中间件实战:智能客服内容守卫

3.1 内容过滤中间件

以下是一个实际的内容守卫中间件实现,用于过滤不当内容:

from langchain.agents.middleware import before_model
from langchain.messages import HumanMessage

@before_model
def content_guard(state, runtime):
    """过滤用户输入中的不当内容"""
    last_msg = state["messages"][-1] if state.get("messages") else None
    if not last_msg:
        return None
    
    content = str(getattr(last_msg, 'content', ''))
    # 定义需要过滤的关键词
    blocked = ["黄X", "X博", "违法"]
    
    for word in blocked:
        if word in content:
            # 直接跳转到结束,返回预设回复
            return {
                "jump_to": "end",
                "messages": [HumanMessage(content="抱歉,我不能处理这个请求。")]
            }
    return None

关键特性:

  • jump_to: "end" - 直接终止当前执行流程
  • 返回预设消息替代模型生成
  • 实时检查用户输入,防止不当内容进入模型

3.2 自动签名中间件

from langchain.agents.middleware import after_model
from langchain.messages import AIMessage

@after_model
def auto_signature(state, runtime):
    """自动追加客服签名"""
    msgs = state.get("messages", [])
    if not msgs:
        return None
    
    last = msgs[-1]
    # 只在 AI 回复且不是工具调用时添加签名
    if last.type == "ai" and last.content and not (
        hasattr(last, 'tool_calls') and last.tool_calls
    ):
        return {"messages": [AIMessage(
            content=last.content 
            + "\n\n---\n菜鸟教程 RUNOOB 客服中心 | 工作时间 9:00-18:00"
        )]}
    return None

4. 人工介入(HITL)机制

4.1 为什么需要人工介入?

在某些关键场景下,完全依赖 AI 决策存在风险:

  • 敏感操作(退款、转账)
  • 法律合规问题
  • 超出知识范围的问题
  • 用户明确要求人工服务

4.2 实现人工介入的工具

LangChain 通过 interrupt 机制实现人工介入。以下是一个转接人工客服的工具示例:

from langchain.tools import tool
from langgraph.types import interrupt

@tool
def transfer_to_human(reason: str) -> str:
    """将用户转接给人工客服。
    
    Args:
        reason: 转接原因
    """
    # 触发人工介入审批
    approval = interrupt({
        "action": "transfer_to_human",
        "reason": reason,
        "message": f"用户请求转接人工客服,原因:{reason}。是否转接?"
    })
    
    # 等待人工审批结果
    if approval.get("confirmed"):
        return (f"已为您转接人工客服,预计等待 {approval.get('wait_time', 3)} 分钟。"
                f"工单号:TK-{approval.get('ticket_id', 'N/A')}")
    return "转接已取消,我继续为您服务。"

4.3 中断处理流程

def chat(thread_id: str, message: str) -> str:
    """处理用户消息并返回回复"""
    config = {"configurable": {"thread_id": thread_id}}
    
    # 运行 Agent
    result = agent.invoke(
        {"messages": [HumanMessage(content=message)]},
        config=config,
    )
    
    # 检查是否需要人工介入
    state = agent.get_state(config)
    if state.tasks and state.tasks[0].interrupts:
        interrupt_info = state.tasks[0].interrupts[0].value
        return f"[需要审批] {interrupt_info.get('message', '')}"
    
    return result["messages"][-1].content

5. 完整智能客服系统实现

5.1 系统架构

from langchain.agents import create_agent
from langchain.chat_models import init_chat_model
from langchain.agents.middleware import before_model, after_model
from langgraph.checkpoint.sqlite import SqliteSaver

# 1. 初始化模型
model = init_chat_model("deepseek:deepseek-v4-flash", temperature=0)

# 2. 创建检查点(支持记忆和中断恢复)
checkpointer = SqliteSaver.from_conn_string("customer_service.db")

# 3. 定义工具集
tools = [search_kb, query_order, transfer_to_human]

# 4. 定义中间件链
middleware = [content_guard, auto_signature]

# 5. 创建带中间件和人工介入能力的 Agent
agent = create_agent(
    model=model,
    tools=tools,
    middleware=middleware,
    checkpointer=checkpointer,
    system_prompt="""你是菜鸟教程 RUNOOB 的智能客服"小菜"。
## 你的职责
1. 热情接待每一位用户,用"您"称呼
2. 关于平台信息、课程内容、政策等问题,使用 search_kb 查询
3. 关于订单查询,使用 query_order 工具
4. 遇到无法解决的问题,使用 transfer_to_human 转接人工
## 行为准则
- 回答简洁,每次 2-3 句话
- 不知道的就查询知识库,查不到就诚实告知
- 保持友好亲切的语气""",
)

5.2 测试场景

if __name__ == "__main__":
    user_id = "user_xiaoming"
    
    print("=== 测试 1:正常知识库查询 ===")
    print(chat(user_id, "Python3 教程有多少章?"))
    # 输出:Python3 基础教程共 30 章,累计学习人次超 500 万。课程完全免费。
    
    print("\n=== 测试 2:订单查询 ===")
    print(chat(user_id, "我的订单 ORD-2024-001 状态是什么?"))
    # 输出:订单 ORD-2024-001:VIP 年费会员 | 金额 ¥799 | 状态 已完成 | 日期 2024-01-15
    
    print("\n=== 测试 3:触发人工介入 ===")
    print(chat(user_id, "我要投诉,找你们领导!"))
    # 输出:[需要审批] 用户请求转接人工客服,原因:我要投诉,找你们领导!。是否转接?

6. 中间件最佳实践

6.1 执行顺序管理

中间件的执行顺序很重要:

# 正确的顺序:输入验证 -> 业务逻辑 -> 输出格式化
middleware = [
    input_validator,      # 1. 验证输入
    content_guard,        # 2. 内容过滤
    rate_limiter,         # 3. 频率限制
    business_logic,       # 4. 业务处理
    auto_signature,       # 5. 添加签名
    response_logger       # 6. 记录日志
]

6.2 错误处理中间件

@before_model
def error_handler(state, runtime):
    """统一错误处理中间件"""
    try:
        # 检查状态是否有效
        if not state.get("messages"):
            return {
                "jump_to": "end",
                "messages": [HumanMessage(content="系统错误:消息为空")]
            }
    except Exception as e:
        return {
            "jump_to": "end",
            "messages": [HumanMessage(content=f"系统错误:{str(e)}")]
        }
    return None

6.3 性能监控中间件

import time
from langchain.agents.middleware import wrap_tool_call

@wrap_tool_call
def performance_monitor(tool_call, runtime):
    """监控工具调用性能"""
    start_time = time.time()
    
    try:
        result = yield tool_call
        elapsed = time.time() - start_time
        
        # 记录慢查询
        if elapsed > 2.0:  # 超过2秒
            print(f"⚠️ 慢工具调用: {tool_call['name']} 耗时 {elapsed:.2f}秒")
        
        return result
    except Exception as e:
        print(f"❌ 工具调用失败: {tool_call['name']}, 错误: {str(e)}")
        raise

7. 人工介入的应用场景

7.1 敏感操作审批

@tool
def process_refund(order_id: str, amount: float) -> str:
    """处理退款申请(需要人工审批)"""
    # 1. 验证订单信息
    order = orders_db.get(order_id)
    if not order:
        return f"订单 {order_id} 不存在"
    
    # 2. 触发人工审批
    approval = interrupt({
        "action": "refund_approval",
        "order_id": order_id,
        "amount": amount,
        "customer": order["user"],
        "message": f"用户 {order['user']} 申请退款 ¥{amount},订单 {order_id}。是否批准?"
    })
    
    # 3. 根据审批结果执行
    if approval.get("approved"):
        # 执行退款逻辑
        return f"退款 ¥{amount} 已批准并处理,预计3-5个工作日到账。"
    else:
        reason = approval.get("reason", "审批未通过")
        return f"退款申请未通过:{reason}"

7.2 复杂问题升级

@tool  
def handle_complaint(issue: str, severity: str = "medium") -> str:
    """处理用户投诉(根据严重程度决定是否转人工)"""
    
    # 根据严重程度决定处理方式
    if severity == "high":
        # 高严重度直接转人工
        return transfer_to_human(f"高严重度投诉:{issue}")
    
    elif severity == "medium":
        # 中等严重度尝试自动处理,失败则转人工
        try:
            # 尝试自动处理逻辑
            response = auto_handle_complaint(issue)
            if "无法解决" in response:
                return transfer_to_human(f"中等严重度投诉自动处理失败:{issue}")
            return response
        except Exception:
            return transfer_to_human(f"中等严重度投诉处理异常:{issue}")
    
    else:
        # 低严重度完全自动处理
        return auto_handle_complaint(issue)

8. 总结与建议

8.1 中间件使用要点

  1. 保持中间件轻量:避免在中间件中执行耗时操作
  2. 明确执行顺序:输入验证在前,输出格式化在后
  3. 错误隔离:每个中间件应该有独立的错误处理
  4. 可配置化:通过参数控制中间件行为

8.2 人工介入设计原则

  1. 明确触发条件:清晰定义何时需要人工介入
  2. 提供充分上下文:给审批人足够的信息做决策
  3. 设置超时机制:避免用户长时间等待
  4. 保留处理记录:所有人工介入都应记录日志

8.3 系统监控建议

# 在系统入口添加监控
def chat_with_monitoring(thread_id: str, message: str) -> str:
    """带监控的聊天接口"""
    start_time = time.time()
    
    try:
        result = chat(thread_id, message)
        
        # 记录性能指标
        elapsed = time.time() - start_time
        log_performance(thread_id, elapsed, len(message), len(result))
        
        return result
    except Exception as e:
        # 自动触发人工介入处理异常
        return transfer_to_human(f"系统异常:{str(e)}")

通过合理使用中间件和人工介入机制,我们可以在保持 AI 系统自主性的同时,确保关键决策的可控性和安全性。这种混合智能(Human-AI Collaboration)模式是构建可靠企业级 AI 应用的关键。

9. 扩展阅读

LangChain人机协同中间件:为AI Agent构建安全审批工作流 在AI应用开发中,中间件作为拦截器或装饰器,能在不修改核心逻辑的情况下为系统注入自定义行为,实现关注点分离和可插拔架构。这一机制在构建需要安全控制的AI代理时尤为重要,通过人机协同(Human-in-the-Loop)设计模式,可以在自动化流程中插入人工审批节点,将敏感操作的最终决策权交还给人类。其技术价值在于平衡效率与安全,为涉及资金、数据或关键决策的AI应用提供可控的“方向盘”和“刹车”。典型的应用场景包括金融领域的自动交易顾问、电商智能客服以及企业内部的数据处理自动化工具。本文以LangChain的H 阅读详情

相关推荐

基于LangChain构建安全可控AI Agent:Guardrail与HITL实战指南

在AI应用开发中,大语言模型(LLM)的自主决策能力带来了效率提升,但也引入了工具滥用、内容安全和资源失控等风险。为了解决这些问题,业界提出了Guardrail(安全护栏)和HITL(人在回路)等核心机制。Guardrail通过预设规则在Agent执行前、中、后进行多层校验,防止危险操作;HITL则在关键决策点引入人工审核,结合AI效率与人类判断力。这些技术对于构建生产级AI系统至关重要,尤其在客户支持、自动化流程等场景中,能确保AI Agent在安全边界内可靠运行。本文将以LangChain框架为例,详细

weixin_29084111的博客 351

大模型开发手记(九):LangChain Agent 中间件-提升Agent的可靠性与可控性

在构建复杂的LangChain Agent时,我们常常面临上下文超限、成本失控、工具调用失败、敏感信息泄露等问题。LangChain提供了一套生产就绪的预构建中间件,像乐高积木一样,让我们轻松为Agent添加对话总结、人工审核、调用限流、自动重试等能力。这篇博客主要讲述中间件的作用、有哪些内置的中间件、怎么自己定义中间等场景:长对话易超Token限制,自动总结旧消息,保留最新上下文。配置:trigger:触发总结的条件(如token数≥4000或消息数≥6)

勇往直前的博客 975

langchain agent人工介入

langchain agent人工介入

luohualiushui1的专栏 301

LangChain v1.0 中间件实战:构建高可控AI Agent的五大核心策略

本文深入探讨了LangChain v1.0中间件在构建高可控AI Agent中的五大核心策略,包括上下文修剪、权限管控、敏感信息防护、动态能力调整和人工审核流程。通过实战案例和代码示例,展示了如何利用中间件机制实现业务逻辑与管控逻辑的解耦,提升AI Agent的稳定性和安全性。

1058

中间件:内置中间件

接近令牌限制时自动总结对话历史,保留最近消息,同时压缩较早的上下文。摘要中间件适用于以下场景:超出上下文窗口的长时间对话。历史记录庞大的多轮对话。需要保留完整对话上下文的应用。API 参考),],支持三种自定义检测器:正则字符串编译正则自定义检测函数import re# 正则字符串tools=[],"api_key",),],# 自定义检测函数import re})tools=[],"ssn",),],

Long_像风一样自由 240

7.2 中间件(LangChain 内置中间件)

LangChain提供丰富的内置中间件,分为跨服务商和专属服务商两类。跨服务商中间件包括对话总结、人工介入、模型/工具调用限制、PII检测等12种通用功能,支持生产环境灵活配置。其中对话总结可在令牌数接近上限时自动压缩历史对话;人工介入则允许审批高风险操作。专属中间件针对Anthropic等服务商提供提示词缓存等特色功能。这些中间件通过标准化API集成,为智能体开发提供开箱即用的能力增强。

kjkdd的博客 112

LangChain中间件架构:像搭积木一样构建可控AI Agent

本文深入探讨了LangChain v1.0中间件架构如何革新AI Agent开发,通过模块化设计实现可控性。文章详细解析了中间件在上下文控制、权限管理等方面的核心价值,并对比传统架构,展示其灵活性和可维护性优势。结合教育领域案例,演示了如何像搭积木一样构建自适应AI Agent,为开发者提供生产环境最佳实践。

jenkins8butler的博客 524

SPSS因子分析实战:从数据清洗到结果解读的完整流程

本文提供了一份详尽的SPSS因子分析实战指南,涵盖从数据清洗、适用性检验(KMO与巴特利特检验)、公因子提取、因子旋转到结果解读与报告撰写的完整流程。通过具体案例,手把手教你如何利用SPSS进行探索性因子分析,实现数据降维并提炼核心公共因子,适用于市场研究、心理学等多变量数据分析场景。

weixin_29055699的博客 329

LangChain1.0 中间件实战:构建可控、安全、高效的AI Agent全攻略!

这些问题的根源在于:Agent 缺乏运行时的“监管机制”。LangChain 的 Middleware(中间件) 正是为此而生——它就像 Agent 执行流程中的“交通警察”,在关键时刻介入、检查、修改甚至终止流程,让你对 AI 行为拥有完全掌控权。本文将带你从零理解 Middleware 原理,并在数据问答场景实战!

Z4400840的博客 1030

【BLE】HID设备开发实战:从自拍杆到复合设备的蓝牙控制方案

本文深入解析了BLE HID(低功耗蓝牙人机接口设备)的开发实战,从蓝牙自拍杆的工作原理切入,详细阐述了HID Report Map的设计与实现。通过拆解自拍杆、键盘、鼠标等案例,指导开发者如何利用BLE的低功耗与即插即用特性,构建从单一功能到键盘鼠标复合设备的完整蓝牙控制方案。

weixin_29159613的博客 464

【阿里云大模型高级工程师ACP习题集】2.4 自动化评测答疑机器人的表现(⭐️⭐️⭐️ 重点章节!!!)

【摘要】这是我精心整理出对应的习题集,里面足足有 30 道题目,从基础概念到深度拓展,全方位覆盖章节重点、难点。不管你是想检验自己的学习成果,还是想针对薄弱环节进行强化训练,它都能完美适配!

davidkorhenn的博客 2477

LangChain1.0 中间件(Middleware)实战:打造可控、安全、高效的 AI Agent

在构建复杂 AI 应用时,我们常常遇到这些问题: * Agent 无限调用工具,陷入死循环? * 用户输入包含敏感信息(如手机号、身份证),却直接传给大模型? * 想在关键步骤暂停,让人工审核后再继续? * 多轮对话上下文太长,Token 超限? * 大模型MCP工具调用时怎样动态修改参数?

m0_59164520的博客 1108

T100批处理作业开发

g_bgjob = ‘Y’ 后台执行g_bgjob = ‘N’ 前台执行。

weixin_43400895的博客 585

langchain 内置中间件详解 -HumanInTheLoopMiddleware — 人工审批

摘要:HumanInTheLoopMiddleware 是一种中间件,可在Agent执行特定工具前暂停并等待人工审批,支持批准、编辑或拒绝操作。需配合检查点器(checkpointer)使用,通过interrupt_on参数配置需要审批的工具及允许的决策(如approve/edit/reject)。示例代码展示了如何创建带审批的Agent,当调用配置的工具(如发送邮件)时会中断流程等待人工干预。该功能适用于需人工复核的关键操作场景。

lw的博客 89

ollama接入图像识别大模型

ollama接入图像识别大模型

qq_36437991的博客 2075

多 Agent 之间如何通信和协调?OpenClaw 的 Gateway 在其中扮演什么角色?

多 Agent 之间如何通信和协调?OpenClaw 的 Gateway 在其中扮演什么角色?

我哎GIS博客 1665

LangChain1.0 中间件(Middleware)实战:打造可控、安全、高效的AI Agent完全指南!

本文详细介绍了LangChain1.0的Middleware机制,它如同Agent执行流程中的"交通警察",可监管AI行为。文章系统讲解了内置中间件的功能与使用方法,以及如何通过装饰器和类方式自定义中间件。通过数据问答场景实战,展示了中间件如何解决Agent无限调用、敏感信息处理、人工审核等问题,帮助开发者打造可控、安全、高效的AI Agent。

m0_59162248的博客 1628

C# 与欧姆龙 PLC 实战:通过 Ethernet/IP 协议进行设备控制与监控

本文介绍了如何通过C#和Ethernet/IP协议实现与欧姆龙PLC的通信。Ethernet/IP是基于以太网的工业协议,适用于工业设备间的实时数据交换。文章详细讲解了使用EthernetIPSharp库建立连接、读写数据的步骤,并提供了示例代码。此外,还探讨了实时监控、报警系统等高级功能,为工业自动化控制系统开发提供了实用指导。该方法简化了PLC通信开发,提高了系统可靠性和智能化程度。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 811

LangChain 中间件实战:HumanInTheLoopMiddleware 实现高危操作人工审核

本文介绍了如何使用LangChain的HumanInTheLoopMiddleware中间件实现高危操作的人工审核机制。文章详细讲解了中间件的工作原理,并通过数据库写操作的完整示例,展示了如何: 定义高危工具(如SQL执行) 配置人工审核规则 实现中断处理逻辑(支持批准、拒绝和修改三种决策) 恢复Agent执行流程 该方案能有效拦截Agent对数据库的高危操作(如INSERT、UPDATE、DELETE),在人工确认后才继续执行,确保了系统的安全性和可控性。示例代码覆盖了从工具定义到多轮对话模拟的完整实现流

2303_76774094的博客 368

YOLOv8交通管理 详细解释及代码完整示例

YOLOv8在交通管理中的应用及代码实现 摘要:本文详细介绍了YOLOv8在交通管理领域的应用场景,包括车辆检测、违规行为识别和行人安全预警等。文章提供了完整的Python代码示例,展示了如何使用YOLOv8进行交通对象检测和车辆计数统计。代码包含模型加载、对象检测、结果可视化等功能模块,并给出了性能优化和功能扩展建议。该实现基于Ultralytics框架,支持多种YOLOv8模型选择,可根据实际需求调整模型大小和检测参数。

u010117029的博客 152

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

langchain中间件之人工审核件:HumanInTheLoopMiddleware

换句话说,当 Agent 决定调用某个工具并生成了工具调用的参数后,中间件会立刻中断流程,把“待审批的工具调用请求”交给你,此时工具还没真正执行。如果为ollama调用本地模型等其他方式调用,只需更改与之适配的模型调用方式即可。使用 LangChain 的 @tool 装饰器来定义函数,@tool 装饰器的作用是将一个普通的 Python 函数转换为 Agent 能够理解并使用的“工具”对象。在创建create_agent之前,需要提前写好有关智能体的提示词部分,在提示词中澄清模型调用工具的规则。

weixin_64448960的博客 184

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

LangChain1.0 中间件实战:构建安全可控的AI Agent数据流管道

本文深入探讨了LangChain1.0中间件在构建安全可控的AI Agent数据流管道中的实战应用。通过Middleware机制,开发者可以有效拦截敏感信息、控制权限并优化性能,确保AI Agent行为安全可靠。文章结合金融、医疗等场景案例,展示了如何利用PIIMiddleware、RBACMiddleware等工具降低数据泄露风险,提升系统稳定性。

kmeans3miner的博客 421

jre9下载 jdk9

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

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

【万字长文】LangChain多智能体终极指南:吃透人工审查与信息流,从入门到掌控!

我们已经成功地搭建了一个由 Supervisor 统一协调 Calendar Agent 和 Email Agent 的多智能体系统,能够根据用户输入自动拆解任务、调用合适的工具并完成复杂操作。

m0_59235945的博客 1108

在LangChain中实现人工审核工具调用:提高AI助手的安全性和可控性

tool"""计算最近n天的邮件数量。"""@tool"""发送邮件。"""return f"成功发送邮件给@tool def count_emails(last_n_days : int) - > int : """计算最近n天的邮件数量。""" return last_n_days * 2 @tool def send_email(message : str , recipient : str) - > str : """发送邮件。""" return f"成功发送邮件给 {

qq_29929123的博客 1086

【干货收藏】LangChain 1.0 中间件实战:程序员必备的 AI Agent 安全可控开发技巧

本文详细介绍LangChain 1.0中间件机制,通过内置中间件和自定义方式(装饰器/类)实现对AI Agent的精细控制。涵盖沙箱环境隔离、对话历史摘要、人工审核流程、敏感信息拦截、工具调用限制等核心功能,帮助开发者解决Agent无限循环、上下文溢出、数据安全等问题,打造更安全、可控、高效的AI Agent应用。

2401_85327249的博客 821

LangChain 架构深度解析:从中间件机制到人机协同 SQL 智能体实战报告

摘要 随着大语言模型从确定性链条向概率性智能体演进,AI应用开发面临非确定性输出、资源消耗和安全风险等挑战。LangChain通过中间件架构和人机协同机制,为企业级智能体提供了标准化解决方案。报告深入解析了中间件的生命周期管理、拦截钩子设计及状态/上下文管理机制,详细介绍了内置中间件功能如对话摘要、资源限流、敏感信息检测等的最佳实践。通过构建具备生产级安全防护的SQL智能体案例,展示了如何将理论转化为工程实践,有效解决数据库查询中的幻觉和破坏性操作风险。

炼丹上岸 1349
上一篇: LangChain与LangGraph深度解析:从智能体搭建到工作流编排
下一篇: LlamaIndex 核心教程总结:从原理到实战,构建高效 RAG 系统
shiyibushiqi
博客等级 码龄3年 3粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值