- 博客(147)
- 收藏
- 关注
原创 browser_use event_bus订阅机制详解
browser-use项目event_bus订阅机制摘要: 该项目采用bubus库的EventBus实现事件驱动架构,订阅机制主要分布在四个关键位置:1) BrowserSession初始化时注册核心浏览器事件处理器;2) 各功能模块通过Watchdog注册专用处理器;3) CLI界面使用通配符*订阅所有事件用于可视化;4) Agent服务注册处理器实现任务管理。订阅过程强调类型安全、处理器唯一性保障和错误恢复机制,通过事件类型或通配符绑定异步处理器,实现组件间松耦合协作。核心特点是支持事件链路追踪和异步非
2025-09-07 15:11:03
280
原创 browser-use 的三种启动方式详解
本文详细介绍了browser-use的三种启动方式:MCP服务器模式通过JSON RPC接口与AI客户端集成;Prompt模式用于非交互式单任务执行;Textual界面模式提供交互式终端体验。三种模式在交互方式、主要用途和浏览器配置上各有特点,适用于不同场景。启动时根据参数自动选择模式,未指定参数则默认进入交互界面。这种设计使browser-use能灵活支持从自动化脚本到AI集成的各类浏览器自动化需求。
2025-09-06 20:27:16
414
原创 接雨水问题解析:双指针与单调栈解法
本文解析了"接雨水"问题的两种解法。双指针法通过维护左右指针和左右最大值,以O(n)时间、O(1)空间高效计算雨水量,是最优解。单调栈法利用递减栈识别凹槽,时间复杂度O(n)但需要O(n)空间。双指针法代码简洁高效,推荐面试使用;单调栈法则提供了直观的思路。两种方法各有特点,掌握它们有助于深入理解此类水池问题。
2025-09-06 16:13:33
334
原创 Search-O1,Search-R1、R1-Searcher、DeepResearcher、Atom-Searcher整理
本文对比分析5大搜索增强型AI框架,包括Search-O1、Search-R1、R1-Searcher、DeepResearcher和Atom-Searcher。各框架在核心创新、应用场景及数据需求上各具特色:Search-O1采用分步搜索修正机制,Search-R1运用强化学习训练搜索引擎,R1-Searcher采用两阶段训练方案,DeepResearcher支持多工具协同网页交互,Atom-Searcher则聚焦原子化推理单元。文章通过架构图和流程详解展示技术差异,并提供选型指南,帮助开发者根据项目周期
2025-09-06 13:51:03
661
原创 Agent方法梳理
摘要 本文系统介绍了多种大语言模型(LLM)优化框架与技术: 验证重试机制:通过初始化配置、验证循环和智能修复策略(如JSONPatch)提升工具调用的准确性。 LATS框架:采用蒙特卡洛树搜索实现思维树扩展,通过"选择-扩展-评估-回溯"四步循环获得结构化解决方案。 LLMCompiler:创新性任务并行框架,通过任务图规划、智能调度和结果合并,显著提升复杂问题处理效率。 多智能体协作:涵盖监督型、层级型和去中心化三种架构,支持动态任务分配和团队协作。 反思机制对比:分析Reflect
2025-09-04 16:36:18
745
原创 Flink 滑动窗口实战:从 KeyedProcessFunction 到 AggregateFunction & WindowFunction 的完整旅程
Flink实时流处理用户品牌行为的最晚时间统计方案对比。需求是统计每个用户-品牌组合最近1小时的最晚行为时间,每5分钟更新一次。提供了三种实现方案:1)KeyedProcessFunction灵活但代码复杂;2)AggregateFunction+WindowFunction组合,性能较好且API简单;3)新API方案兼顾性能与元数据。重点展示了第二种方案,通过滑动窗口(1小时长度,5分钟滑动)配合AggregateFunction计算最大值,再通过WindowFunction补齐窗口信息。启动后需等待1小
2025-08-25 15:58:01
1120
原创 用 WideSearch 思路打造「零幻觉、全覆盖」的多 Agent 信息收集器
WideSearch:大规模精准信息采集方案 摘要:WideSearch是针对电商、金融、舆情等场景中大规模精准信息采集需求提出的解决方案。传统方法在收集数百条原子级信息时存在漏检率高(平均漏37条/500条)、错误率高等问题。该系统采用三层架构:任务拆分层实现智能分片,并发执行层支持多Agent并行处理,结果归集层确保数据质量。通过多Agent交叉验证、强制工具引用等机制,将采集成功率从传统方法的5%提升至65%,耗时从人工的2.3小时缩短至22秒。生产环境采用Flink+Redis技术栈,支持实时数据流
2025-08-24 16:42:28
1307
原创 128. 最长连续序列
摘要 本文探讨了在未排序整数数组中寻找最长连续数字序列的高效算法。通过将数组转换为哈希集合实现O(1)查找,算法首先确定序列起点(即当前数字减1不在集合中),然后向后扩展计算序列长度。关键优化在于每个数字最多被访问两次,确保O(n)时间复杂度。文中还提出了边界哈希表方法,通过维护区间边界实现严格单次遍历。测试用例验证了算法的正确性,包括处理空数组、重复元素和负数等情况。两种方法均能高效解决问题,后者在空间效率上更优。
2025-08-24 13:01:58
827
原创 Flink 实时加购数据“维表补全”实战:从 Kafka 到 HBase 再到 Redis 的完整链路
本文介绍了基于Flink的电商实时加购数据维表补全方案,通过Kafka消费加购事件,使用Async I/O异步查询HBase维表补全商品维度,并写入Redis供下游业务使用。方案采用Guava缓存减轻HBase压力,支持Redis集群/单机模式,实现毫秒级延迟处理15万QPS,P99延迟<80ms。整套代码参数外置、开箱即用,已在电商大促场景验证,具备高并发处理能力。
2025-08-24 12:40:37
814
原创 Flink原理与实践 · 第三章总结
本文总结了《Flink原理与实践》第三章的核心内容,重点解析Flink从代码到分布式执行的完整流程。主要内容包括:1)Flink如何将DataStream程序转换为分布式任务;2)JobManager、TaskManager等组件的作用;3)并行度、算子链等关键概念。文章通过四阶段图演变(StreamGraph→JobGraph→ExecutionGraph→物理图)详解数据处理流程,并说明Slot资源分配机制。最后通过WordCount案例演示了Flink作业的调优方法。
2025-08-19 16:15:00
720
原创 Flink原理与实践:第一章大数据技术概述总结
本文介绍了大数据技术的基础概念与Flink流处理框架的核心原理。首先阐述了大数据的5V特征(Volume、Velocity、Variety、Veracity、Value),然后对比了批处理与流处理的差异,突出了流处理在实时性方面的优势。文章梳理了三代流处理技术演进,重点分析Flink作为新一代框架的特点(低延迟、状态计算、Exactly-Once)。同时介绍了Lambda和Kappa两种架构模式,并讲解了流处理核心概念(窗口、时间语义、Watermark等)。最后通过Kafka实例演示了数据管道的构建过程,
2025-08-19 13:22:35
934
原创 大模型对齐算法(四): DAPO,VAPO,GMPO,GSPO, CISPO,GFPO
DAPO算法,在GRPO基础上进行四项关键改进:1)非对称剪枝(Clip-Higher),通过设置不同上下界ε_low和ε_high,解决熵崩溃问题;2)动态采样机制,过滤无梯度样本;3)Token级梯度计算,避免长回答权重稀释;4)软长度惩罚,优化截断处理。实验表明DAPO在AIME任务上仅用50%训练步数即达到50分表现。此外,文章还讨论了VC-PPO中的价值预训练和Decoupled-GAE方法,通过分离critic和actor的λ参数,实现更准确的价值估计和更稳定的策略更新。
2025-08-18 16:04:05
682
原创 大模型对齐算法(三): DMPO
本文提出DMPO方法,将单回合的DPO扩展至多回合语言代理场景。通过将策略约束替换为状态-动作占用度量约束,并引入长度归一化因子,解决了多回合场景下partition function无法约简的问题。该方法在Bradley-Terry模型中实现轨迹长度归一化,使不同长度轨迹的累积奖励可比,同时通过衰减权重降低后期动作噪声影响。理论推导表明,DMPO能有效减少行为克隆在多回合任务中的累积误差,实现对专家分布的全局逼近。
2025-08-18 11:20:06
499
原创 大模型对齐算法(二): TDPO(Token-level Direct Preference Optimization)
TDPO:基于Token级偏好的语言模型优化方法 TDPO(Token-level Direct Preference Optimization)是针对DPO方法在句子级KL散度控制上的局限性提出的改进方案。传统DPO存在KL增长失衡和多样性下降等问题,而TDPO通过将RLHF任务拆分为token级MDP,引入Bellman方程和双向KL约束机制。
2025-08-17 19:29:12
908
原创 大模型对齐算法合集(一)
本文系统梳理了大模型对齐的核心算法,重点分析了DPO和PPO的理论框架。通过数学推导证明,DPO的最优策略服从Boltzmann分布,其目标函数可转化为最小化KL散度问题。PPO算法则在RLHF框架下,通过引入KL散度约束实现策略优化,其最优解形式与DPO类似。研究进一步探讨了Token-level PPO的实现,将其建模为最大熵软Q学习问题,并推导出最优策略的解析表达式。理论分析表明,这些对齐算法在数学形式上具有统一性,均可视为带约束的优化问题,其解可表示为基于回报函数的指数加权分布。
2025-08-17 18:02:01
1528
原创 从 SFT 到 Self-Rewarding:一文看懂大模型「训练四件套」——SFT / IFT / EFT / RLHF 全流程
这篇文章系统介绍了将7B基础模型升级为ChatGPT级AI助手的四大微调步骤: SFT监督微调:通过标准问答对训练,确保模型回答准确性 IFT指令微调:使用结构化指令数据,提升模型对复杂指令的理解能力 EFT评估微调:训练模型自我评估能力,为后续强化学习做准备 RLHF强化学习:基于人类反馈优化输出,使回答更符合人类偏好 该流程通过逐步优化模型的知识准确性、指令遵循性、评估能力和人类偏好对齐,最终使小模型也能展现大模型的性能。文章包含技术要点、示例说明、训练流程图示和代码示例,完整呈现了模型升级的标准化路径
2025-08-17 11:11:17
881
原创 GRPO(Group Relative Policy Optimization)公式速览
GRPO(Group Relative Policy Optimization)公式摘要: GRPO采用组内归一化优势计算,通过组内均值和标准差对奖励进行标准化处理。策略优化采用token级别的裁剪目标函数(公式2),结合KL正则项(公式3)形成最终损失函数(公式4)。与BNPO相比,GRPO使用静态的组内均值-方差归一化,适用于通用场景;而BNPO采用动态Beta分布自适应,更适合二值奖励任务。在HuggingFace TRL实现中,奖励计算通过多个奖励函数并行处理,支持动态奖励调整。
2025-08-16 19:39:45
1125
原创 huggingface TRL中是怎么获取参考模型的输出的
HuggingFace TRL 中获取参考模型输出的核心流程如下: 参考模型选择: 直接使用显式传入的ref_model 对于LoRA模型,通过临时禁用Adapter获取基础模型 概率计算: 对完整prompt+response序列进行前向计算 获取response部分的token对数概率 累加得到整句的log p(response|prompt) 高效实现: 使用torch.no_grad()节省内存 支持encoder-decoder和decoder-only架构 通过get_batch_logps()
2025-08-16 15:05:01
807
原创 huggingface TRL中的对齐算法: KTO
KTO算法:基于前景理论的单条样本对齐方法 KTO(Kahneman-Tversky Optimization)是一种创新的强化学习对齐方法,其核心创新在于仅需单条样本加二元标签(好/坏)即可训练模型,避免了传统RLHF/DPO方法对成对偏好数据的需求。KTO受前景理论启发,通过收益-损失框架建模人类主观效用。
2025-08-16 14:38:28
1140
原创 RLVR(可验证奖励的强化学习):大模型后训练的客观评估策略
RLVR(可验证奖励的强化学习)是当前主流的大模型训练方法,通过预定义规则(如数学答案匹配、代码测试)提供二元奖励信号,替代传统RLHF的主观评估。其核心优势在于客观性、易设计性和防作弊能力,广泛应用于数学推理、代码生成等确定性任务。构建RLVR需关注数据准备、奖励函数设计和验证体系,但存在领域依赖性强和可能窄化模型能力的局限。未来将聚焦垂直领域优化和工业级实施方案,推动技术实际落地。
2025-08-14 22:34:47
750
原创 万字长文 | 从 0 到 1 实现一个生产级 Raft
本文基于C++17和gRPC实现了一个生产级Raft分布式共识引擎,详细拆解了其核心架构与实现细节。主要内容包括:1) 分层架构设计(网络层、共识层、持久化层、应用层);2) Raft核心算法流程,如选举机制、日志复制、快照压缩等;3) 关键数据结构如逻辑时钟、日志条目、提交索引等;4) 控制面四大线程(选举、心跳、日志复制、应用提交)的实现;5) 日志复制与快照机制的具体处理流程;6) 并发控制与锁策略。文章提供了大量可直接复用的代码片段,完整实现了Raft协议的核心功能,可作为构建分布式系统的实践参考。
2025-08-11 08:56:47
1022
原创 使用lightGCN完整训练用户 + 商品向量的 3 步指南
本文介绍了如何将预训练的商品向量(item_emb)在LightGCN模型中变为可学习参数,实现用户和商品向量的联合优化。核心思路是将用户向量和商品向量都设为nn.Parameter,通过优化器进行联合训练。关键步骤包括:将预训练商品向量转换为可学习参数、设置差异化学习率优化器、在训练循环中动态拼接特征。文章还解答了常见疑问,如预训练特征的保留、显存优化等,并提供了完整的伪代码实现。该方法相比固定商品向量的方案,Recall@20指标预计可提升3-5个百分点。
2025-08-09 15:41:40
981
原创 解决React白板应用中的画布内容丢失问题
本文总结了解决React白板应用中画布内容丢失问题的完整方案。当修改Canvas尺寸导致内容消失时,关键在于使用getImageData/putImageData API保存和恢复画布数据。技术实现包括滚动阈值检测、异步尺寸更新和性能优化手段。同时通过添加分页标记等视觉元素优化用户体验。最终不仅解决了内容丢失问题,还实现了响应式的无限画布功能,为类似Canvas交互问题提供了参考解决方案。
2025-08-07 18:05:05
1046
原创 从 0 到 1:写一个能跑在大体量应用后台的 C++ 协程库
本文介绍了从零构建一个高性能C++协程库的核心实现。作者首先阐述了协程的优势:轻量级、易用性强、性能优异。随后详细拆解了协程库三大组件:Fiber(协程对象)、Scheduler(调度器)和IOManager(IO+定时器)。重点讲解了上下文切换、任务调度、epoll封装等关键技术,并展示了如何通过hook系统调用实现阻塞操作的非阻塞化。性能测试表明,该协程库在IO密集场景下接近原生epoll的性能,同时提供了同步编程的便利性。文章还指出了共享栈、协程池等优化方向,并分享了实际开发中的经验教训。
2025-08-06 14:57:31
1060
原创 一篇真正能让同事秒懂 Raft 的漫画长文
摘要:这篇文章通过通俗易懂的方式讲解分布式共识算法Raft,将其拆解为"选举班长"、"抄作业"和"作业安全"三个核心概念。重点介绍了Raft的三种角色(Follower/Candidate/Leader)、两个超时机制(选举超时和心跳超时)以及选主和日志复制流程。文章还总结了常见异常场景处理方案,提供了8个核心面试问答,并推荐了学习资源。全文采用生活化类比和可视化表达,旨在帮助工程师快速掌握Raft的核心思想,避免陷入复杂数学证明。
2025-08-03 13:36:51
1041
原创 从零开始设计一个分布式KV存储:基于Raft的协程化实现
本文介绍了如何从零构建一个基于Raft协议的分布式KV存储系统。系统采用协程化架构,包含客户端、KV服务、Raft核心和RPC层四层设计,相比线程模型节省90%上下文切换开销。详细讲解了Raft选举机制、日志复制和状态机应用的关键实现,以及协程化网络层的设计优势。存储引擎使用跳跃表实现高效并发访问,并提供了系统调试方法和扩展方向的建议。通过这个教学级项目,读者可以深入理解Raft协议、协程编程和分布式系统设计要点。
2025-08-03 10:25:43
1140
原创 【实战笔记】Next.js × Vercel × Supabase 部署踩坑全纪录
Next.js × Vercel × Supabase 部署避坑指南 本文总结了将本地项目部署到Vercel时常见的3个问题及解决方案: 仓库冲突:确保Vercel和Supabase关联同一个GitHub仓库; 环境变量缺失:需手动将.env.local内容添加到Vercel环境变量; 验证链接失效:需在Supabase中更新Site URL为线上域名。 提供了部署验证清单和CLI一键部署脚本,帮助开发者快速完成项目上线。文中还包含邮箱模板自定义等实用技巧,10分钟即可解决常见部署问题。
2025-08-02 08:54:16
634
1
原创 【C++进阶】一文吃透静态绑定、动态绑定与多态底层机制(含虚函数、vptr、thunk、RTTI)
【C++进阶摘要】静态绑定、动态绑定与多态底层机制解析 本文深入探讨C++多态实现原理,重点剖析静态绑定与动态绑定的本质差异。静态绑定在编译期确定函数调用,适用于普通成员函数;动态绑定通过虚函数表(vftable)和虚指针(vptr)在运行时解析,需满足继承、虚函数、重写和指针/引用四要素。文章详解虚函数调用机制、vptr内存布局、thunk桩代码作用,以及RTTI实现原理,特别强调虚析构函数的必要性。同时指出虚继承带来的性能损耗,并提供构造/析构期间的虚表变化过程。
2025-08-01 20:59:02
505
1
原创 虚基类问题的提出与初探:从菱形继承到内存布局的深入解析
本文深入解析了C++中虚基类的内存布局与工作机制。首先通过菱形继承问题引入虚基类的必要性,详细分析了包含虚基类的类内存布局,特别是虚基类表指针(vbptr)的作用。文章剖析了三层继承结构的内存分布,解释了虚基类成员访问的间接寻址过程,并讨论了成员变量指针的偏移原理。此外,还对比了虚函数动态绑定与静态绑定的区别,阐述了多态的三个核心要素。虚基类机制通过虚基类表确保虚基类子对象在继承体系中只存在一份,虽然带来性能开销,但解决了多重继承的语义正确性问题。理解这些底层机制对编写高效正确的C++代码至关重要。
2025-08-01 11:07:26
752
原创 hive新增列之后插入新数据时,新列为NULL的解决办法
Hive新增列查询为NULL问题解析 原因: 插入数据时未显式给新列赋值,默认填充NULL 动态分区或列顺序错位导致数据映射错误 Parquet/Avro等文件格式的旧数据未更新schema 解决方案: 显式指定新列值(INSERT...SELECT col1, col2, 'default') 严格匹配SELECT与表结构的列顺序 对旧数据执行INSERT OVERWRITE重建文件 分区表需单独更新历史分区。
2025-07-31 13:28:53
734
原创 跳跃表可视化深度解析:动态演示数据结构核心原理
跳跃表可视化演示系统通过动态交互方式直观展示了这一高效数据结构的核心原理。系统基于多层索引链表设计,实现O(log n)平均时间复杂度的查找、插入和删除操作。可视化工具采用分层渲染机制,从最高层到底层逆向展示节点结构,并通过颜色区分不同层级。核心功能包括:动态路径高亮追踪、动画演示插入/删除过程、实时状态监控(元素数量、最大层级等)。系统还实现了性能优化策略如虚拟滚动和批量DOM更新,并展示了跳跃表在数据库索引、缓存系统等场景的实际应用。配套的Mermaid流程图和代码片段清晰呈现了操作流程与实现细节。
2025-07-30 21:09:06
663
1
原创 LSM树Python实现深度解析:从理论到实战的全方位探索
本文深入剖析了LSM树的核心原理及其Python实现,揭示了其通过顺序写和分层存储实现的高效写入性能(<1ms延迟)与查询效率(<3次磁盘IO)。文章详细解析了MemTable内存层、SSTable磁盘层的代码实现,以及Tiered/Leveled合并策略,并演示了插入、查询、更新、范围扫描等核心操作。针对性能优化,提出了动态内存管理、内存映射文件等技术方案。最后探讨了在时序数据库、日志系统等场景的应用优势,指出未来硬件适配和分布式扩展的发展方向。该实现虽牺牲部分性能,但清晰展现了LSM树的设计
2025-07-30 20:20:59
600
原创 从 LinkedIn 简历到 Twitter 时间线——一文看懂数据模型如何决定架构命运
本文探讨了数据模型在系统架构中的核心作用。作者将数据模型分为关系型、文档型、图型和三元组四种类型,通过LinkedIn简历案例对比了不同模型的优缺点,指出建模错误将导致后续层层修补。文章强调应根据业务场景选择模型:关系型适合强一致事务,文档型适合树状结构,图型擅长处理多对多关系。最后给出三个实践建议:建模前先画图、利用JSONB渐进优化、尝试图查询。核心观点是数据模型选择是技术根基,直接影响架构发展方向。
2025-07-30 16:47:23
1058
原创 从 DDIA 第一章读懂可靠性、可伸缩性、可维护性——写给未来的系统设计者
本文提炼了《Designing Data-Intensive Applications》第一章的核心概念,为系统设计者总结了可靠性、可伸缩性和可维护性(3R)的关键要点。可靠性强调容错而非防错,区分故障与失效;可伸缩性需量化负载与性能,选择合适扩展方式;可维护性关注长期运维成本。文章通过案例(如Netflix的Chaos Monkey、推特流量处理)和简洁思维导图,帮助读者建立系统设计思维,并建议立即实践分析现有系统的3R状态。核心观点:优秀系统不在于完美运行,而在于优雅应对故障。
2025-07-30 15:54:57
933
原创 全球广告联盟深度测评:Google AdSense之外的6大暴利选择(附接入攻略)
【摘要】本文深度测评6大高收益海外广告联盟,为站长提供Google AdSense之外的优质选择。针对AdSense审核慢、单价低等痛点,推荐Chitika(高单价点击)、BidVertiser(高返佣)、Zanox(欧洲市场)等平台,详细解析各联盟的核心优势、接入技巧和防封策略。文章包含组合投放实战案例,展示如何通过流量分配实现年入50万美金,并提供AI优化、区块链广告等前沿趋势预测。最后强调抓住全球化红利,建议立即注册3个联盟搭建自动化系统,实现收益指数级增长。(150字)
2025-07-30 10:11:32
1057
原创 从0到1理解大语言模型:读《大语言模型:从理论到实践(第2版)》笔记
《大语言模型:从理论到实践》前三章精华速读:第一章定义大模型为基于自监督学习的超大规模语言模型(参数量≥100亿),其发展遵循Scaling Laws;第二章解析Transformer架构及GPT/LLaMA系列优化,如RoPE位置编码和FlashAttention;第三章强调数据质量决定模型上限,揭示数据处理四步法(过滤/去重/脱敏/词元化)和Chinchilla最优配比法则。核心逻辑呈现"概念→结构→数据"递进关系,并附赠3个面试高频问题解析。
2025-07-29 16:14:08
1012
原创 OpenMP 并行编程核心机制详解:从变量作用域到同步优化
本文深入解析OpenMP并行编程的核心机制,重点探讨变量作用域控制与同步优化策略。详细介绍了并行循环变量作用域的默认规则和显式控制方法,对比分析了临界区、原子操作和锁机制三种同步方式的特性及适用场景。通过性能测试数据说明原子操作相比临界区的性能优势(81%提升),并提供锁竞争优化方案。文章还总结了OpenMP最佳实践原则,包括最小化同步范围、优先使用原子操作等,并给出并行哈希表实现等实际案例。最后介绍了perf、VTune等性能分析工具的使用方法,帮助开发者编写高效安全的并行代码。
2025-07-28 19:34:03
694
原创 MPI环形AllReduce算法实现与深度解析
本文深入解析了MPI环形AllReduce算法的实现原理与优化策略。算法通过环形通信拓扑实现高效的梯度聚合与分发,包含Scatter-Reduce和AllGather两个阶段,采用双向环形通信设计。针对数据覆盖和分块索引等关键问题提出了解决方案,并探讨了非阻塞通信、内存管理等优化技术。性能对比显示优化后通信延迟降低29%,带宽利用率提升35%。该算法特别适用于大规模分布式深度学习训练场景,可实现高效的梯度同步。代码示例展示了完整的环形AllReduce实现,为分布式训练系统开发提供了重要参考。
2025-07-27 12:13:29
855
Jumpserver Chrome插件保持长连接不掉线2025最新版
2025-07-15
【数据库技术】SQL练习题集:涵盖多表关联、窗口函数、子查询优化及电商场景数据分析
2025-07-11
yolo-project.zip
2025-05-30
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人