
之前在做系统巡检和性能优化时我遇到过不少“优化软件越优化越卡”的尴尬情况表面上是清理了垃圾、释放了内存但实际上系统瓶颈根本没被找到。最近看到 Show HN 上有个叫 Tempered 的开源项目主打“AI Powered PC Optimizer”思路是把 AI Agent 引进了 PC 优化这个老领域。本文会结合这个项目带大家拆解 AI 驱动 PC 优化器的核心设计并用 Python 从零实现一个轻量级版本帮助你理解系统指标采集、健康度评分、清理建议生成和安全执行这几个关键环节。1. Tempered 是什么重新理解 PC 优化PC 优化不是一个新概念。从早期的 Windows 清理助手到现在的各种“电脑管家”核心动作无非是清理临时文件、管理开机启动项、结束高占用进程。但传统优化器往往有一个共性问题它只会执行优化动作并不理解系统当前真正需要优化什么。Tempered 这个项目的思路则不同它不再把优化规则写死成“清 C 盘、关启动项、杀进程”这种固定套路而是把系统状态收集起来交给 AI 模型去判断当前系统是否健康并生成针对性的优化建议。也就是说优化工具从“执行器”变成了“决策器”。1.1 传统 PC 优化器的痛点先把传统优化器的问题说清楚不然很难理解“AI 优化器”为什么存在。盲目清理不管系统是否需要先把临时文件删一遍。结果就是某些程序缓存被清掉下次启动反而更慢。忽略根因电脑卡顿的原因可能是内存不足、磁盘碎片化、后台进程抢占 CPU也可能是散热降频、驱动异常。传统工具往往只处理了表现没有定位根因。误杀风险为了“优化”一刀切禁用启动项或者强制结束进程导致用户软件数据丢失或系统功能异常。规则静态所有用户共用一套固定规则但每个人电脑的硬件配置、软件环境、使用场景完全不同。这些问题的本质是传统优化器缺少“理解系统状态”的能力。1.2 AI 优化器与传统方案的本质区别AI 驱动的优化器并不是简单加一个“智能模式”按钮而是从数据流到决策路径都发生了变化。传统优化器的流程是采集固定指标 - 匹配预设规则 - 执行清理动作AI 优化器的流程则是采集全量指标 - 分析系统健康度 - 生成个性化建议 - 人机确认 - 执行动作其中最关键的变化在于“分析系统健康度”这一步。AI 模型可以综合 CPU、内存、磁盘、进程、温度、启动项等多维数据判断系统当前是“正常”“亚健康”还是“需要干预”并且能针对不同用户给出差异化建议。1.3 Tempered 的核心能力拆解从项目公开信息来看Tempered 的核心看点是“AI powered”也就是把 LLM 能力接入到 PC 优化场景中。我们可以把它的功能拆成三个层面指标采集层读取系统 CPU、内存、磁盘、进程、网络等状态形成结构化的系统画像。AI 决策层将系统画像提交给大语言模型或本地模型由模型判断异常并给出优化建议。执行与反馈层用户确认后执行清理/优化动作并把执行结果反馈给模型形成闭环。这也给了我们一个很好的实践切入点用 Python 模拟实现一个最小可用的 AI PC 优化助手既能加深对系统资源监控的理解也能练习 AI Agent 的工程落地思路。2. 环境准备与版本说明我们先明确一个原则AI PC 优化器最终形态通常需要跨平台支持 Windows、macOS、Linux但本文的示例代码会以通用性优先。部分系统级操作在不同平台上命令不同我会在代码中做兼容处理并标注清楚。2.1 运行环境要求本文示例使用 Python 实现需要准备以下环境项目要求说明操作系统Windows 10/11、macOS、Linux示例中涉及系统命令处做了平台判断Python3.9 及以上推荐 3.10类型注解体验更好psutil5.9.x系统信息采集库requests2.x用于调用大模型 API 的示例IDEPyCharm 或 VS Code按个人习惯选择即可版本需要根据你的项目实际情况调整本文示例以常见环境为例重点演示配置思路。2.2 安装依赖建议创建一个虚拟环境避免污染全局 Pythonmkdir ai-pc-optimizer cd ai-pc-optimizer python -m venv venv # Windows venv\Scripts\activate # macOS/Linux source venv/bin/activate pip install psutil requests安装完成后可以用下面命令验证 psutil 是否可用import psutil print(psutil.cpu_percent(interval1))如果能正常输出 CPU 使用率说明环境已经准备好。3. AI 优化器的核心原理在动手写代码之前先理解 AI 优化器的几个核心概念。这部分是整个项目的“魂”代码只是实现手段。3.1 系统状态采集从指标到特征系统状态采集是 AI 优化器的数据基础。采集什么指标直接决定了 AI 分析的上限。常见指标包括CPU 维度使用率、核心数、频率、负载均值。内存维度总内存、可用内存、交换分区使用量。磁盘维度各分区使用率、IO 读写速率。进程维度占用 CPU/内存最高的前 N 个进程、进程数量。系统维度开机时长、用户数、平台信息。采集到的原始指标还不能直接丢给 AI需要做结构化处理。比如“内存使用率 87%”“C 盘剩余空间 4.2G”“Chrome 进程占用内存 3.1G”这些信息需要整理成一段结构化的系统画像文本或 JSON方便后续交给模型分析。这一阶段核心原则是你喂给模型的系统画像越完整、越准确模型给出的建议就越有价值。3.2 健康度评分模型健康度评分是 AI 优化器的“中间表示”。它把多维指标压缩成一个或几个可解释的分数方便用户理解也方便 AI 快速定位问题方向。一个简单的健康度评估思路是加权评分制健康度 100 - (CPU扣分 内存扣分 磁盘扣分 进程异常扣分)扣分规则可以自定义比如CPU 使用率超过 85%扣 20 分。内存使用率超过 85%扣 20 分。系统盘剩余空间低于 10%扣 25 分。发现未知的高占用进程扣 10 分。健康度分数可以分成三档80 ~ 100系统健康无需优化。60 ~ 79系统亚健康建议关注。0 ~ 59系统需要干预。当然这只是最简化的评分逻辑。真实项目中还可以引入时间维度比如观察 CPU 是否持续高占用还是瞬间峰值这需要定时采集并存储历史数据。3.3 决策引擎规则 AI Agent 的混合架构实际工程中不建议完全依赖大模型做决策因为大模型可能给出不安全的操作建议比如直接删除未知文件。每次调用模型都有延迟和成本不适合高频执行。系统级操作必须可解释、可回溯、可回滚。所以推荐的架构是规则优先、AI 辅助先用规则引擎处理确定性高的逻辑比如磁盘剩余空间不足时提示清理临时文件。再用 AI 处理需要综合判断的逻辑比如根据多项指标定位系统“卡顿”的根因。最终操作必须经过用户确认并且限制在安全范围内。后面实战部分会同时给出规则引擎和 AI 接入两种方式方便你理解两种决策路径的差异。4. 完整实战从零实现一个 AI PC 优化助手接下来我们实现一个课程版的核心项目TinyOptimizer。它的定位不是替代 Tempered而是复刻 AI PC 优化器的核心链路包含采集、评估、建议、执行四个模块。4.1 项目结构设计设计项目结构时按模块职责拆分方便维护和扩展ai-pc-optimizer/ ├── main.py # 主入口 ├── requirements.txt # 依赖列表 ├── core/ │ ├── __init__.py │ ├── system_monitor.py # 系统信息采集 │ ├── health_score.py # 健康度评估 │ ├── advisor.py # AI 建议引擎 │ └── cleaner.py # 安全清理执行 └── config.py # 全局配置每个文件职责单一这样后续替换 AI 模型、增加清理策略都比较方便。4.2 编写系统信息采集模块系统信息采集模块是整个项目的数据基础。使用 psutil 可以跨平台获取几乎全部系统指标。文件路径core/system_monitor.py系统信息采集模块 import platform import psutil def get_system_info() - dict: 采集系统核心指标返回结构化字典 # 磁盘分区信息 disk_list [] for part in psutil.disk_partitions(allFalse): try: usage psutil.disk_usage(part.mountpoint) disk_list.append({ device: part.device, mountpoint: part.mountpoint, fstype: part.fstype, total_gb: round(usage.total / (1024 ** 3), 2), used_gb: round(usage.used / (1024 ** 3), 2), free_gb: round(usage.free / (1024 ** 3), 2), percent: usage.percent, }) except PermissionError: # 某些系统路径无权限访问跳过即可 continue # 内存信息 mem psutil.virtual_memory() # CPU 信息 cpu_percent psutil.cpu_percent(interval1) # 高占用进程 Top 5 process_list [] for proc in psutil.process_iter([pid, name, cpu_percent, memory_percent]): try: process_list.append(proc.info) except (psutil.NoSuchProcess, psutil.AccessDenied): continue top_processes sorted( process_list, keylambda p: (p[cpu_percent] or 0) (p[memory_percent] or 0), reverseTrue )[:5] # 开机时长 boot_time psutil.boot_time() uptime_hours round((__import__(time).time() - boot_time) / 3600, 2) return { platform: platform.system(), hostname: platform.node(), cpu_percent: cpu_percent, cpu_count: psutil.cpu_count(logicalTrue), memory_total_gb: round(mem.total / (1024 ** 3), 2), memory_used_gb: round(mem.used / (1024 ** 3), 2), memory_percent: mem.percent, disk_list: disk_list, top_processes: top_processes, uptime_hours: uptime_hours, }采集模块的关键点psutil.disk_partitions(allFalse)只取普通分区跳过光驱等特殊设备。psutil.process_iter遍历进程时可能遇到权限拒绝需要捕获AccessDenied。采集 CPU 使用率时cpu_percent(interval1)会阻塞 1 秒换取更准确的值。4.3 编写健康度评估模块接下来定义一个评分函数把采集到的系统状态映射为健康度分数。文件路径core/health_score.py健康度评分模块 from core.system_monitor import get_system_info def calculate_health_score(info: dict) - tuple: 根据系统信息计算健康度分数。 返回 (score, level, reason_list) score 100 reasons [] # CPU 评估 cpu info[cpu_percent] if cpu 85: score - 20 reasons.append(fCPU 使用率过高 ({cpu}%)可能有进程持续占用资源) elif cpu 70: score - 10 reasons.append(fCPU 使用率偏高 ({cpu}%)建议关注后台任务) # 内存评估 mem_percent info[memory_percent] if mem_percent 90: score - 20 reasons.append(f内存使用率过高 ({mem_percent}%)建议关闭部分应用) elif mem_percent 80: score - 10 reasons.append(f内存使用率偏高 ({mem_percent}%)) # 磁盘评估 for disk in info[disk_list]: # 优先找系统盘 is_system_disk C: in disk[device] or disk[mountpoint] / if is_system_disk and disk[percent] 85: score - 25 reasons.append( f系统盘剩余空间不足 ({disk[mountpoint]} 已用 {disk[percent]}%) ) # 进程评估检查有无可疑进程占用过高 suspicious_names {cryptominer, minerd, xmrig} for proc in info[top_processes]: name (proc[name] or ).lower() total_usage (proc[cpu_percent] or 0) (proc[memory_percent] or 0) if name in suspicious_names and total_usage 50: score - 20 reasons.append(f发现可疑进程 {proc[name]}占用资源过高) break # 分数区间限制 score max(0, min(100, score)) if score 80: level 健康 elif score 60: level 亚健康 else: level 需要干预 return score, level, reasons这部分用了硬编码的规则。优点是快速、可解释、稳定缺点是不够智能。实际项目中可以先跑规则再把规则结果和原始指标一起交给 AI 做二次分析。4.4 编写 AI 建议生成模块AI 建议模块是 Tempered 这类项目的核心差异点。这里给出两种方式方式一本地规则生成建议不依赖外部 API适合离线环境。方式二调用大模型 API 生成建议更适合理解 AI Agent 的思想。先看本地规则生成建议的方式代码放在core/advisor.py中优化建议生成模块规则 AI 双模式 import json import requests from core.health_score import calculate_health_score from core.system_monitor import get_system_info def build_system_prompt(info: dict, score: int, level: str, reasons: list) - str: 构造大模型需要的系统提示词 prompt f 你是一名资深的 PC 优化专家。请根据以下系统状态数据给出 3 条最关键的优化建议。 要求 1. 每条建议必须具体、可执行。 2. 说明建议原因。 3. 不要建议删除用户个人文件。 4. 如果系统健康请说明不需要干预。 系统健康度{score} 分{level} 系统平台{info[platform]} CPU 使用率{info[cpu_percent]}% 内存使用率{info[memory_percent]}%已用 {info[memory_used_gb]}G / 共 {info[memory_total_gb]}G 开机时长{info[uptime_hours]} 小时 磁盘信息 {json.dumps(info[disk_list], ensure_asciiFalse, indent2)} 高占用进程 Top 5 {json.dumps(info[top_processes], ensure_asciiFalse, indent2)} 评分原因 {json.dumps(reasons, ensure_asciiFalse, indent2)} return prompt def generate_advice_by_rule(info: dict, score: int, level: str, reasons: list) - list: 规则模式根据扣分原因生成建议 advices [] for reason in reasons: if CPU 使用率过高 in reason or CPU 使用率偏高 in reason: advices.append({ action: 排查并结束高占用进程, reason: reason, command: 任务管理器中按 CPU 排序结束不必要的高占用进程, risk: 低, }) if 内存使用率 in reason: advices.append({ action: 关闭无用的后台应用, reason: reason, command: 清理系统托盘常驻程序或重启部分内存泄漏的应用, risk: 低, }) if 磁盘剩余空间不足 in reason: advices.append({ action: 清理系统盘临时文件, reason: reason, command: 执行 clean_temp_files 安全清理, risk: 中, }) if 可疑进程 in reason: advices.append({ action: 检查并隔离可疑进程, reason: reason, command: 手动确认进程来源必要时结束进程并全盘杀毒, risk: 中, }) if not advices: advices.append({ action: 无需额外干预, reason: 系统当前处于健康状态, command: 保持现有使用习惯建议定期观察, risk: 无, }) return advices def generate_advice_by_llm(info: dict, score: int, level: str, reasons: list) - list: AI 模式调用大模型 API 生成建议示例用 OpenAI 兼容接口 api_key config.LLM_API_KEY if not api_key: return generate_advice_by_rule(info, score, level, reasons) url config.LLM_BASE_URL /chat/completions headers { Authorization: fBearer {api_key}, Content-Type: application/json, } payload { model: config.LLM_MODEL, messages: [ {role: system, content: 你是一个专业的 PC 优化助手输出 JSON 数组每个元素包含 action, reason, command, risk 四个字段。}, {role: user, content: build_system_prompt(info, score, level, reasons)}, ], temperature: 0.3, } try: resp requests.post(url, headersheaders, jsonpayload, timeout30) resp.raise_for_status() content resp.json()[choices][0][message][content] # 尝试解析 JSON advices json.loads(content) if isinstance(advices, list): return advices except Exception as e: print(f[AI 建议生成失败降级到规则模式] {e}) return generate_advice_by_rule(info, score, level, reasons)关于 AI 接入说明几点调用大模型时设置了temperature0.3让输出更稳定减少随机发挥。要求模型输出 JSON 数组方便程序直接解析。加入降级机制API 调用失败时自动回退到规则模式保证功能可用。4.5 实现安全清理模块安全是这个模块的红线。真正的 PC 优化器需要执行文件清理、启动项管理等系统级操作稍有不慎可能破坏用户数据。这里只实现一个最安全的清理动作清理当前用户目录下的常见临时文件并且模拟“移动文件到回收站”的逻辑而不是直接删除。文件路径core/cleaner.py安全清理执行模块 import os import shutil import tempfile def get_temp_dirs() - list: 获取当前用户可访问的临时目录列表 dirs [] # 系统临时目录 dirs.append(tempfile.gettempdir()) # Windows 用户临时目录 if os.name nt: user_temp os.environ.get(TEMP) if user_temp: dirs.append(user_temp) return dirs def clean_temp_files(threshold_mb: int 10, dry_run: bool True) - dict: 清理临时文件。 dry_runTrue 时只统计不删除用于安全预览。 返回清理结果统计。 total_cleaned 0 cleaned_count 0 skipped_count 0 details [] temp_dirs get_temp_dirs() for temp_dir in set(temp_dirs): if not os.path.isdir(temp_dir): continue for root, dirs, files in os.walk(temp_dir): # 限制遍历深度避免扫描过深卡住 depth root[len(temp_dir):].count(os.sep) if depth 2: continue for name in files: file_path os.path.join(root, name) try: size os.path.getsize(file_path) # 只清理超过阈值的文件且限定扩展名类型 ext os.path.splitext(name)[1].lower() if size threshold_mb * 1024 * 1024 and ext in {.tmp, .log, .bak}: if dry_run: details.append(f[预览] 将清理 {file_path} ({size // 1024} KB)) else: # 安全方案重命名到回收站而不是直接删除 trash_path file_path .trash shutil.move(file_path, trash_path) details.append(f[已清理] {file_path} ({size // 1024} KB)) total_cleaned size cleaned_count 1 else: skipped_count 1 except (PermissionError, OSError): skipped_count 1 continue return { dry_run: dry_run, cleaned_count: cleaned_count, skipped_count: skipped_count, total_cleaned_mb: round(total_cleaned / (1024 * 1024), 2), details: details, }安全设计原则默认dry_runTrue先预览再执行。只清理特定扩展名的文件避免误删用户文档。清理操作改为“移动文件到 .trash 后缀路径”相当于软删除给用户后悔的机会。限制遍历深度防止扫描整个目录树导致卡顿。4.6 编写主流程主流程把采集、评分、建议、清理四个模块串起来。文件路径main.pyAI PC 优化助手主入口 import argparse import json from core.system_monitor import get_system_info from core.health_score import calculate_health_score from core.advisor import generate_advice_by_rule, generate_advice_by_llm from core.cleaner import clean_temp_files def main(): parser argparse.ArgumentParser(descriptionAI 驱动的 PC 优化助手) parser.add_argument(--mode, choices[rule, llm], defaultrule, help建议生成模式rule 本地规则 / llm 调用大模型) parser.add_argument(--clean, actionstore_true, help执行临时文件清理默认预览) parser.add_argument(--json, destoutput_json, actionstore_true, help以 JSON 格式输出结果) args parser.parse_args() print( * 60) print(TinyOptimizer - AI PC 优化助手) print( * 60) # 1. 采集系统信息 print(\n[1/4] 正在采集系统信息...) info get_system_info() print(f平台: {info[platform]} | CPU: {info[cpu_percent]}% f| 内存: {info[memory_percent]}% | 开机: {info[uptime_hours]}h) # 2. 健康度评分 print(\n[2/4] 正在评估系统健康度...) score, level, reasons calculate_health_score(info) print(f健康度评分: {score} 分{level}) for reason in reasons: print(f - {reason}) # 3. 生成优化建议 print(\n[3/4] 正在生成优化建议...) if args.mode llm: advices generate_advice_by_llm(info, score, level, reasons) else: advices generate_advice_by_rule(info, score, level, reasons) for i, advice in enumerate(advices, 1): print(f {i}. [{advice.get(risk, ?)}风险] {advice.get(action, )}) print(f 原因{advice.get(reason, )}) print(f 操作{advice.get(command, )}) # 4. 清理执行 if args.clean: print(\n[4/4] 执行安全清理...) result clean_temp_files(threshold_mb10, dry_runFalse) print(f清理文件数: {result[cleaned_count]}释放空间: {result[total_cleaned_mb]} MB) for detail in result[details][:5]: print(f {detail}) else: print(\n[4/4] 跳过清理使用 --clean 参数可执行安全清理) if args.output_json: output { system_info: {k: v for k, v in info.items() if k ! top_processes}, score: score, level: level, reasons: reasons, advices: advices, } print(\n json.dumps(output, ensure_asciiFalse, indent2)) if __name__ __main__: main()4.7 运行与验证先以规则模式运行只看系统状态评估和建议不执行清理python main.py --mode rule预期输出示例 TinyOptimizer - AI PC 优化助手 [1/4] 正在采集系统信息... 平台: Windows | CPU: 23.5% | 内存: 67.8% | 开机: 12.3h [2/4] 正在评估系统健康度... 健康度评分: 80 分亚健康 - 系统盘剩余空间不足 (已用 91.2%) [3/4] 正在生成优化建议... 1. [中风险] 清理系统盘临时文件 原因系统盘剩余空间不足 () 操作执行 clean_temp_files 安全清理 [4/4] 跳过清理使用 --clean 参数可执行安全清理如果要以 JSON 格式输出便于程序处理python main.py --mode rule --json执行安全清理时建议先执行预览模式python main.py --mode rule --clean --dry-run注意当前代码中的--dry-run参数需要你在main.py中自行添加或将dry_run改为先调用预览再确认执行。建议在实际测试时保留默认预览机制。5. 常见问题与排查思路在实现和运行过程中有一些高频问题值得提前了解。问题现象常见原因解决思路psutil.AccessDenied异常当前用户权限不足无法读取某些系统进程或分区捕获异常并跳过Windows 下尝试以管理员身份运行CPU 使用率采集值为 0cpu_percent在第一次调用时没有历史数据第一次调用前先调用一次psutil.cpu_percent(intervalNone)预热大模型 API 调用超时网络原因或 API 地址不可达设置超时时间捕获异常后降级到规则模式清理临时文件时权限不足部分临时文件被占用或锁定跳过PermissionError不要强制删除磁盘信息中出现重复挂载点macOS/Linux 下虚拟文件系统较多使用allFalse过滤或手动过滤掉/proc、/sys等路径健康度评分总为 100阈值设置过高或采集指标未生效打印评分原因列表逐项校验指标值排错时建议加一个 “调试模式”打印完整的系统信息字典确认采集数据是否符合预期import json from core.system_monitor import get_system_info info get_system_info() print(json.dumps(info, ensure_asciiFalse, indent2, defaultstr))6. 工程化落地最佳实践从 Demo 到生产级 AI PC 优化器中间还隔着不少工程问题。这里重点聊几个方向。6.1 系统级操作的安全边界如果你要做一个真正给别人用的 PC 优化器安全是第一优先级。操作前备份涉及删除、修改注册表、禁用启动项等操作必须允许用户备份。默认预览不直接执行所有危险操作默认展示“将要做什么”由用户主动确认。操作可回滚优先采用移动到回收站、导出配置备份、创建还原点等方式。最小权限原则工具本身尽量不申请管理员权限只有在执行特定操作时才提权。白名单机制只操作已知安全的路径和文件类型避免全盘扫描删除。6.2 AI 建议的准确率与反馈闭环AI 生成建议这件事最难的不是“生成”而是“衡量生成得好不好”。建议工程化方案建议审核层AI 建议必须经过规则校验才能展示。比如“删除文件”类建议必须校验路径是否在安全目录内。用户反馈机制让用户对每条建议点“有用/没用”收集反馈数据。本地缓存对相同系统画像的请求做缓存减少 API 调用成本。离线降级设计完整的 fallback 链路确保 AI 不可用时规则模式依然可用。6.3 权限与隐私设计PC 优化器会采集大量系统数据其中可能包含用户进程名、文件路径等信息。这些数据如果直接传给第三方大模型存在隐私风险。落地建议优先本地模型使用 Ollama 等本地模型处理敏感数据只在必要时调用云端 API。数据脱敏发送给大模型前过滤掉用户名、路径中的个人标识信息。隐私政策透明明确告知用户采集了哪些数据、传到哪里。6.4 性能开销控制优化工具自身不能成为系统负担采集动作使用interval1或更长时间避免频繁读取系统指标。使用异步或定时任务执行采集不要持续占用 CPU。分析过程尽量在后台执行避免阻塞 UI。清理时注意遍历深度和文件数量限制防止长时间 IO 占用。7. 总结与下一步学习建议通过 Tempered 这个项目我们重新审视了 PC 优化器这个老赛道。传统优化器解决的是“怎么清理”AI 优化器解决的是“该不该清理、为什么清理、怎么安全地清理”。本文用 Python 实现了一个轻量级 AI PC 优化助手核心链路包括系统指标采集psutil、健康度评分规则引擎、建议生成规则 大模型 API 双模式、安全清理预览 软删除。如果你要继续深入学习以下几个方向值得关注AI Agent 工程化把建议生成从“单次问答”升级为“可执行任务的 Agent”让模型能主动调用系统工具完成优化。时序数据分析定期采集系统指标并存储训练一个小型异常检测模型动态识别系统状态变化。跨平台发布学习 PyInstaller 打包、Windows 服务注册、macOS 权限申请等发布相关技术。最后说一个实际经验做这类工具先把规则引擎和安全隐患处理好再谈引入 AI。否则模型一句话“建议删除某个文件”就可能让你辛苦积累的用户信任瞬间归零。如果你准备做一个自己的 PC 优化工具建议从本文的最小示例起步先把采集、评分、安全清理这三个基础模块打磨扎实再逐步引入 AI 能力这样踩坑成本会低很多。