字节面试题:ReAct 的工作原理是什么?很多人只答对了第一句

举报
霍格沃兹测试开发学社 发表于 2026/06/30 14:51:46 2026/06/30
【摘要】 很多人面试一聊到 ReAct,第一句话就是:ReAct = Reason + Act,也就是推理加行动。这句话不能说错,但只答到这里,基本就停留在“背概念”的层面。因为面试官真正想听的,不是你会不会把 ReAct 拆成两个英文单词,而是你能不能讲清楚:ReAct 为什么能让大模型从“会回答”变成“会办事”?它和普通问答、Function Calling、Workflow 到底有什么区别?它为...
很多人面试一聊到 ReAct,第一句话就是:

ReAct = Reason + Act,也就是推理加行动。

这句话不能说错,但只答到这里,基本就停留在“背概念”的层面。

因为面试官真正想听的,不是你会不会把 ReAct 拆成两个英文单词,而是你能不能讲清楚:

  • ReAct 为什么能让大模型从“会回答”变成“会办事”?
  • 它和普通问答、Function Calling、Workflow 到底有什么区别?
  • 它为什么适合复杂任务,而不是简单闲聊?
  • 它在真实系统里怎么调用工具、读取反馈、继续决策?
  • 如果放到测试开发、后端系统、AI 应用里,应该怎么落地?

很多候选人讲 Agent 时容易飘。

一会儿自主规划,一会儿长期记忆,一会儿多智能体协作,听起来很高级,但真正问到:

这个 Agent 到底怎么一步一步把任务跑完?

就开始答不清楚了。

而 ReAct 正好就是理解 Agent 工作方式的一个核心入口。

它最关键的地方不是“模型会推理”,而是让模型学会一件事:

当前信息不够时,不要硬编答案,而是先判断缺什么,再调用工具补齐信息,然后根据反馈继续决定下一步。

这才是 ReAct 真正重要的地方。


一、ReAct 到底是什么?

ReAct 是 Reasoning 和 Acting 的结合。

也就是让大模型在完成任务时,交替进行:

  • Reason:推理
  • Act:行动
  • Observation:观察工具返回结果
  • 再继续推理
  • 直到形成最终答案

一句话讲清楚:

ReAct 是一种让大模型通过“推理—行动—观察—再推理”的循环,逐步完成复杂任务的 Agent 思路。

它不是让模型一次性把答案说出来,而是让模型边想边做。

比如用户问:

今天上海会不会下雨?我要不要带伞?

普通问答模式下,模型可能直接生成一段建议。

但问题是:模型本身并不知道今天上海的实时天气。

如果它直接回答,很可能只是生成一个“看起来像答案”的内容。

而 ReAct 模式下,模型会先判断:

这是一个实时问题,内部知识不够,需要调用天气工具。

然后它会执行:

  1. 调用天气 API
  2. 获取降水概率、降雨时段、温度变化
  3. 判断是否需要带伞
  4. 基于实时结果给出建议

这时模型不是在“凭感觉回答”,而是在基于工具反馈完成任务。


二、ReAct 的核心流程

ReAct 的经典流程可以理解为:


这个流程看起来简单,但它解决了 Agent 系统里最关键的问题:

模型不是一次性回答,而是可以根据环境反馈不断调整下一步。

这也是 ReAct 和普通问答最大的区别。


三、普通问答和 ReAct 最大区别是什么?

普通问答模式下,大模型的工作方式更像这样:

这种方式适合:

  • 解释概念
  • 总结文章
  • 改写文案
  • 翻译文本
  • 写代码片段
  • 回答稳定知识

比如你问:

HTTP 404 是什么意思?

模型可以直接回答,因为这类知识相对稳定,不依赖实时信息。

但如果你问:

帮我查一下今天凌晨接口自动化为什么失败?

这就不是普通问答能解决的问题了。

因为模型必须知道:

  • 哪个项目失败了?
  • 哪些用例失败了?
  • 错误日志是什么?
  • 是否和环境有关?
  • 是否和发布变更有关?
  • 是否是脚本问题还是业务缺陷?

这些信息不在模型内部,需要它去查测试平台、日志系统、发布系统、接口报告。

这就是 ReAct 的价值。

对比项
普通问答
ReAct Agent
核心方式
直接生成答案
推理和行动交替进行
信息来源
模型内部知识
模型知识 + 外部工具
是否能查实时信息
通常不行
可以通过工具获取
是否能执行动作
通常不行
可以调用 API、数据库、脚本、搜索工具
适合任务
概念解释、总结、改写
查询、排查、分析、多步骤任务
最大风险
容易编造
工具调用失控、循环、越权

一句话总结:

普通问答解决“我知道什么”,ReAct 解决“我该怎么一步一步把事情办完”。


四、ReAct 的标准执行过程

面试时不要只说“先推理,再行动”。

这个回答太粗。

更完整的 ReAct 流程,通常包括下面几个步骤:

1. Task:理解用户任务

模型先理解用户到底想完成什么。

比如用户说:

帮我分析一下今天凌晨接口自动化失败原因。

这里的目标不是“解释什么是接口自动化”,而是要完成一次问题排查。


2. Reason:推理当前缺少什么信息

模型需要判断:

  • 我现在有没有执行报告?
  • 有没有失败用例列表?
  • 有没有错误日志?
  • 有没有最近发布记录?
  • 有没有环境状态信息?

如果这些信息不够,就不能直接下结论。


3. Action:选择工具并执行

模型根据当前缺失的信息,选择工具。

可能调用:

  • 测试报告查询工具
  • 日志查询工具
  • 数据库查询工具
  • 发布记录查询工具
  • 接口文档查询工具
  • 缺陷系统查询工具

4. Observation:读取工具返回结果

工具执行完成后,会返回结果。

比如:

{
  "taskName""凌晨接口自动化回归",
  "totalCases"120,
  "failedCases"17,
  "mainFailedApi""/order/create",
  "error""Inventory service timeout"
}

模型拿到结果后,需要继续判断:

这个结果是否足够定位问题?是否还需要继续查库存服务日志?


5. Final Answer:输出最终答案

当信息足够时,模型才给出结论。

比如:

今天凌晨接口自动化失败主要集中在订单创建接口,直接原因是库存服务调用超时。失败时间与库存服务凌晨发布窗口高度重合,初步判断不是自动化脚本问题,而是依赖服务发布后稳定性异常。建议先回看库存服务发布变更和连接池配置。

这就比一句“可能是环境问题”有价值多了。


五、用一个测试开发场景讲清楚 ReAct

如果你是测试开发方向,面试时最好不要只举“查天气”的例子。

查天气虽然容易理解,但太生活化。

更建议你举一个工作场景。

比如:

用户问:帮我分析一下今天凌晨接口自动化任务为什么失败。

普通问答会怎么做?

普通问答可能会说:

接口自动化失败可能由环境问题、接口变更、测试数据异常、依赖服务不可用、脚本断言错误等原因导致。

这句话没有错,但没用。

因为它只是泛泛而谈,没有真正排查。


ReAct Agent 会怎么做?

它会按步骤推进。

整个过程中,ReAct Agent 做了几件事:

  1. 没有直接猜答案
  2. 先判断缺少执行报告
  3. 查询报告后发现失败集中点
  4. 再查日志定位直接原因
  5. 再查发布记录验证关联性
  6. 最后给出结论和建议

这就是 ReAct 的价值。

它不是更会聊天,而是更会沿着任务往下查。


六、ReAct 为什么这么重要?

因为真实业务里的任务,很少是一步到位的。

用户不会总是问:

什么是 Redis?

更多时候问的是:

为什么今天 Redis 连接突然变慢?

用户不会总是问:

什么是接口自动化?

更多时候问的是:

为什么这次接口自动化通过率突然从 98% 掉到 83%?

用户不会总是问:

什么是测试用例?

更多时候问的是:

根据这份需求,帮我生成测试用例,并检查有没有漏掉异常场景。

这些任务都需要:

  • 查外部信息
  • 调用工具
  • 分析反馈
  • 再决定下一步
  • 最后形成结论

这正是 ReAct 适合的场景。

可以这么理解:

大模型本身擅长语言理解和推理,但不擅长直接访问外部世界。ReAct 通过工具调用,把模型的推理能力和外部系统连接起来。

所以 ReAct 是很多 Agent 系统的基础模式。

它让模型不只是“生成内容”,而是可以“推进任务”。


七、ReAct 和 Function Calling 有什么区别?

这个问题面试很常见。

很多人会把 ReAct 和 Function Calling 混在一起。

其实它们不是一回事。

一句话区分:

ReAct 是一种 Agent 决策模式,Function Calling 是一种工具调用实现方式。

更简单地说:

  • ReAct 解决的是:模型什么时候该调用工具,调用哪个工具,拿到结果后下一步怎么做。
  • Function Calling 解决的是:模型如何用结构化参数调用某个函数。
对比项
ReAct
Function Calling
本质
Agent 推理与行动模式
工具调用机制
关注点
如何一步步完成任务
如何规范调用函数
核心问题
什么时候调用工具、调用后怎么继续
函数名是什么、参数是什么
是否必须绑定
不必须
可以作为 ReAct 的实现方式
举例
判断需要查天气,再调用天气工具
调用 get_weather(city="上海")

可以这样回答面试官:

Function Calling 更像是工具接口层,ReAct 更像是工具使用策略。ReAct 的 Act 阶段可以通过 Function Calling 来实现,但 ReAct 不等于 Function Calling。

这个边界一定要讲清楚。

否则很容易被认为只是懂 API,不懂 Agent。


八、ReAct 和 Workflow 有什么区别?

现在很多 AI 应用平台都有 Workflow,比如 Dify、Coze、n8n、LangGraph 等。

面试官可能会继续问:

那 ReAct 和工作流有什么区别?

可以这样回答:

Workflow 更适合流程明确、步骤固定的任务;ReAct 更适合路径不确定、需要根据反馈动态调整的任务。

对比项
Workflow 工作流
ReAct
流程特点
预先编排
动态决策
执行路径
相对固定
根据反馈变化
可控性
更强
需要额外治理
灵活性
相对有限
更强
适合场景
固定审批、定时报表、标准流程
排障分析、复杂问答、多工具协作
风险点
流程僵硬
工具乱调、循环失控、越权操作

举个例子。

如果任务是:

每天上午 9 点拉取数据,清洗后生成报表,发送到群里。

这更适合 Workflow。

因为步骤很固定。

但如果任务是:

帮我分析为什么今天转化率突然下降。

这更适合 ReAct。

因为排查路径不确定,可能要查:

  • 投放数据
  • 页面变更
  • 用户行为
  • 接口错误率
  • 支付失败率
  • 客服反馈
  • 发布记录

下一步怎么查,要根据前一步结果决定。

所以:

稳定流程用 Workflow,不确定任务用 ReAct。实际工程里,两者经常结合使用。


九、ReAct 在工程里怎么落地?

一个简单的 ReAct Agent 系统,通常不是只有一个大模型。

它至少包括下面几层:

1. Agent Controller:控制循环

负责控制整个 ReAct 流程。

它要决定:

  • 最多执行几轮
  • 是否继续调用工具
  • 什么时候停止
  • 超时怎么处理
  • 工具失败是否重试
  • 是否需要人工确认

没有 Controller,Agent 很容易失控。


2. LLM 推理层:判断下一步

负责理解任务和做决策。

它要判断:

  • 当前任务是什么?
  • 现有信息够不够?
  • 缺少什么信息?
  • 应该调用哪个工具?
  • 工具参数是什么?
  • 工具结果是否足够?
  • 是否可以输出最终答案?

3. Tool Router:工具路由

负责把模型的动作转换成真实工具调用。

比如模型决定查询测试报告,Tool Router 就需要调用对应接口:

{
  "tool""query_test_report",
  "params": {
    "project""order-service",
    "date""2026-06-27",
    "taskType""api-regression"
  }
}

Tool Router 不是简单转发。

它还要做:

  • 工具是否存在校验
  • 参数是否合法校验
  • 权限是否允许校验
  • 调用频率控制
  • 异常结果兜底
  • 调用日志记录

4. Observation Parser:结果解析

工具返回结果后,最好不要直接把一大段原始文本丢给模型。

更好的方式是做结构化处理:

{
  "status""success",
  "summary""订单创建接口失败率升高",
  "data": {
    "totalCases"120,
    "failedCases"17,
    "mainError""Inventory service timeout",
    "affectedApi""/order/create"
  },
  "confidence""high"
}

结构化反馈更利于模型继续判断。


十、ReAct 的伪代码怎么写?

面试时如果你能写出一个简单伪代码,会比只讲概念更有说服力。

def react_agent(user_task):
    context = []
    max_steps = 5

    for step in range(max_steps):
        # 1. 模型基于用户任务和已有上下文判断下一步
        decision = llm_reason(
            task=user_task,
            context=context
        )

        # 2. 如果模型认为信息足够,就生成最终答案
        if decision["type"] == "final_answer":
            return decision["answer"]

        # 3. 如果需要调用工具,先获取工具名和参数
        if decision["type"] == "tool_call":
            tool_name = decision["tool"]
            params = decision["params"]

            # 4. 工具权限和参数校验
            validate_tool(tool_name, params)

            # 5. 执行工具
            observation = call_tool(tool_name, params)

            # 6. 将工具返回结果加入上下文,进入下一轮
            context.append({
                "tool": tool_name,
                "params": params,
                "observation": observation
            })

    return"当前任务未能在限定步骤内完成,建议补充信息或转人工处理。"

这段代码说明了几个关键点:

  • ReAct 是循环结构
  • 每一轮都要判断是否需要工具
  • 工具调用前要做校验
  • 工具返回结果要进入上下文
  • 必须有最大轮次限制

这比单纯背“Reason + Act”要强很多。


十一、ReAct 在测试开发里的典型应用

如果你是测试开发从业者,面试时可以从这些场景展开。

1. 需求生成测试用例

用户输入一份需求文档后,ReAct Agent 可以:

  1. 阅读需求文档
  2. 判断是否缺少接口说明
  3. 查询接口文档
  4. 查询历史用例
  5. 生成测试点
  6. 补充边界场景和异常场景
  7. 输出结构化测试用例

这比单纯让模型“根据需求写用例”更可靠。

因为它会主动补齐上下文。


2. 自动化失败归因

自动化失败后,ReAct Agent 可以:

  1. 查询失败报告
  2. 聚合失败用例
  3. 查看错误日志
  4. 查询服务健康状态
  5. 查询发布记录
  6. 判断失败类型
  7. 给出处理建议

最终可以区分:

  • 脚本问题
  • 环境问题
  • 测试数据问题
  • 接口变更问题
  • 依赖服务异常
  • 真实业务缺陷

这就是测试平台智能化的典型方向。


3. 缺陷报告辅助生成

用户输入一段问题描述后,Agent 可以:

  1. 判断描述是否完整
  2. 提醒补充复现步骤
  3. 查询历史相似缺陷
  4. 判断是否重复提交
  5. 补充影响范围
  6. 生成规范缺陷报告

比如原始描述是:

支付失败了。

Agent 可以继续追问或调用工具补充:

  • 哪个用户?
  • 哪个订单?
  • 哪个支付渠道?
  • 错误码是什么?
  • 是否所有用户都失败?
  • 是否和近期发布有关?

这就比简单润色缺陷标题更有价值。


4. 测试数据准备

比如用户说:

我要测新用户首单优惠。

ReAct Agent 可以判断需要准备:

  • 新用户账号
  • 手机号绑定
  • 优惠券配置
  • 商品库存
  • 订单创建
  • 支付链路
  • 优惠金额校验

然后调用不同工具准备数据。

这类任务不是普通问答,而是典型的多步骤执行任务。


十二、ReAct 的优势是什么?

1. 能处理多步骤任务

很多真实任务不能一步完成。

ReAct 可以通过多轮推理和工具调用逐步推进。

比如:

查报告 → 查日志 → 查发布 → 归因 → 生成建议。


2. 能连接外部系统

大模型本身不能直接访问数据库、日志平台、测试平台、业务系统。

但 ReAct 可以通过工具调用把这些系统接进来。

这让模型从“知识问答”变成“任务执行”。


3. 能根据反馈调整路径

ReAct 不是死流程。

如果工具返回结果不完整,它可以继续补查。

如果发现方向错了,它可以换一个工具。

如果信息已经足够,它可以停止并输出答案。


4. 更接近真实工作方式

人类排查问题时,本来也是这样:

  1. 先看现象
  2. 判断可能原因
  3. 查一个证据
  4. 根据证据调整判断
  5. 继续查
  6. 最后形成结论

ReAct 只是把这套过程放到了 Agent 系统里。


十三、ReAct 的风险是什么?

讲 ReAct 不能只讲优点。

面试官更看重你是否知道它的边界。

1. 可能无限循环

如果没有限制,Agent 可能一直推理、一直调用工具、一直无法结束。

所以必须设置:

  • 最大执行轮次
  • 最大工具调用次数
  • 单次工具超时时间
  • 总任务超时时间
  • 失败兜底策略

2. 可能调用错误工具

模型可能选错工具,也可能传错参数。

所以工具层必须做:

  • 工具白名单
  • 参数类型校验
  • 必填字段校验
  • 权限校验
  • 风险等级校验

3. 工具结果可能不可靠

工具返回结果不一定都是可信的。

可能出现:

  • 工具超时
  • 返回空数据
  • 返回脏数据
  • 接口报错
  • 数据不一致
  • 权限不足

所以不能“工具返回什么就信什么”。

需要做:

  • 错误码识别
  • 结果结构化
  • 置信度判断
  • 多工具交叉验证
  • 异常兜底回答

4. 高风险动作不能自动执行

尤其是涉及生产环境时,不能让 Agent 想做什么就做什么。

比如:

  • 删除数据
  • 修改配置
  • 发布上线
  • 触发生产任务
  • 批量发送消息
  • 修改用户权限

这些都不能直接交给 Agent 自动执行。

更合理的方式是分级控制:

工具类型
示例
建议策略
查询类
查日志、查报告、查知识库
可以自动执行
分析类
总结原因、生成建议
可以自动执行
低风险写入
创建草稿、生成待审核用例
可自动执行,但要记录
中风险操作
提交缺陷、触发测试任务
建议人工确认
高风险操作
删除数据、发布上线、修改生产配置
禁止自动执行或必须审批

十四、ReAct 是否要把推理过程展示给用户?

这也是一个很重要的工程问题。

很多教学文章会写成:

Thought: 我需要查询天气
Action: 调用天气工具
Observation: 下午有雨
Thought: 用户应该带伞
Final Answer: 建议带伞

这种格式适合学习,但不一定适合生产环境。

真实系统里,不建议把完整推理过程原样展示给用户。

更合理的方式是:

  • 对用户展示关键依据和最终结论
  • 内部记录工具调用日志
  • 保留必要的决策摘要
  • 隐藏敏感推理细节
  • 对高风险操作保留审计记录

比如用户看到的是:

我查询了上海今天的天气信息,下午 3 点后降水概率较高,建议带伞。

而不是看到完整的内部推理链路。

面试时可以这样答:

ReAct 的思想是推理和行动交替,但生产环境不一定要把完整推理过程暴露给用户。更常见的做法是展示关键依据和结论,同时在系统内部保留工具调用记录、参数、返回结果和必要的决策摘要,方便审计和排查。

这个回答会显得更工程化。


十五、一个高质量 ReAct Agent 应该怎么设计?

如果面试官继续追问:

如果让你实现一个 ReAct Agent,你会重点关注什么?

可以从下面几个方面回答。

1. 工具定义要清晰

工具描述越清楚,模型越容易选对。

不要给模型一个“万能工具”。

比如:

{
  "name""query_test_report",
  "description""查询指定项目在指定时间范围内的自动化测试报告",
  "params": {
    "project""string",
    "start_time""string",
    "end_time""string"
  }
}

这个工具的边界很清楚:

只能查测试报告,不能查日志,也不能修改数据。


2. 工具权限要分级

不同工具的风险等级不一样。

查询日志和删除数据,绝对不能放在同一个权限级别。

可以这样设计:


3. 执行轮次要限制

ReAct 不是越多轮越好。

轮次越多,成本越高,延迟越高,失控风险也越大。

所以要限制:

  • 最大推理轮次
  • 最大工具调用次数
  • 最大 Token 消耗
  • 最大任务执行时间
  • 最大重试次数

4. 工具返回要结构化

工具最好返回结构化结果,而不是一大段自然语言。

比如:

{
  "result""failed",
  "reason""database connection timeout",
  "affected_cases"23,
  "suggestion""check database connection pool and recent deployment"
}

结构化结果更容易被模型继续使用。


5. 过程必须可观测

Agent 系统一旦上线,必须能追踪过程。

否则出问题时根本不知道它为什么这么做。

至少要记录:

  • 用户原始输入
  • 每一轮模型决策
  • 调用了哪个工具
  • 工具参数是什么
  • 工具返回结果是什么
  • 是否重试
  • 是否触发人工确认
  • 最终答案依据是什么

没有可观测性,Agent 很难进生产环境。


十六、面试标准答案:ReAct 工作原理是什么?

如果面试官直接问:

ReAct 的工作原理是什么?

可以这样回答:

ReAct 是 Reasoning 和 Acting 的结合,它让大模型在完成任务时,不是直接生成答案,而是交替进行推理和行动。

模型会先理解用户任务和当前上下文,判断已有信息是否足够。如果信息不足,它会推理缺少什么信息,并选择合适的工具去执行,比如搜索、查数据库、调 API、查日志、查测试报告等。工具返回结果后,模型会把这个结果作为新的观察信息,再继续判断下一步,直到可以形成最终答案。

所以 ReAct 的核心是“推理—行动—观察—再推理”的闭环。它比普通问答更适合实时查询、多步骤任务、复杂排查和外部系统协作。

这段回答基本可以覆盖大部分面试场景。


十七、面试官继续追问,可以这样答

1. ReAct 和普通问答有什么区别?

普通问答是模型基于已有知识直接生成答案,适合解释概念、总结文本、写作改写等任务。

ReAct 会先判断信息是否足够,如果信息不足,会主动调用工具获取外部信息,并根据工具反馈继续推理。它更适合实时查询、多步骤操作和复杂业务任务。


2. ReAct 和 Function Calling 有什么区别?

Function Calling 是工具调用机制,解决的是怎么用结构化参数调用函数。

ReAct 是 Agent 决策模式,解决的是模型什么时候该调用工具、调用哪个工具、拿到工具结果后下一步怎么做。

Function Calling 可以作为 ReAct 的 Act 阶段实现方式,但 ReAct 不等于 Function Calling。


3. ReAct 和 Workflow 有什么区别?

Workflow 是预先编排好的固定流程,适合路径明确、步骤稳定的任务。

ReAct 是动态决策模式,会根据每一步反馈决定下一步,适合排查类、分析类、多路径不确定的任务。

实际系统里两者可以结合:稳定流程用 Workflow,不确定节点交给 ReAct Agent。


4. ReAct 有什么风险?

主要风险包括工具调用错误、循环次数失控、工具结果不可靠、执行高风险动作等。

工程上需要通过工具白名单、参数校验、权限分级、最大轮次限制、超时控制、人工确认和审计日志来降低风险。


5. ReAct 适合哪些场景?

ReAct 适合需要多步推理和外部工具协作的场景,比如智能客服、知识库问答、日志分析、自动化测试失败归因、测试用例生成、运维排障、数据查询等。

如果任务只是简单文本生成,或者流程完全固定,不一定需要 ReAct。


十八、最后总结

ReAct 不是一个复杂到听不懂的概念。

它最核心的逻辑就是:

当模型发现当前信息不够时,不要硬答,而是先推理缺什么,再调用工具补齐信息,然后根据反馈继续判断下一步。

这件事看起来简单,但它是 Agent 从“会聊天”走向“会做事”的关键一步。

普通问答解决的是:

我知道什么。

ReAct 解决的是:

我现在不知道完整答案,但我知道下一步该查什么、该调用什么、该怎么根据结果继续推进。

所以,面试官问 ReAct,表面是在问一个 Agent 概念。

实际上是在看你有没有理解:

  • 大模型为什么需要工具
  • Agent 为什么需要反馈闭环
  • ReAct 和普通问答有什么本质区别
  • ReAct 和 Function Calling、Workflow 的边界在哪里
  • 一个 Agent 系统怎么才能真正落到工程里

真正理解 ReAct,不是会背 Reason + Act。

而是能讲清楚:

一个 Agent 到底是怎么一步一步把真实任务跑完的。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。