BrowserSkill 完全指南让 AI Agent 复用真实登录态操作浏览器不打断你的工作【免费下载链接】BrowserSkillLet AI agents use your real, logged-in browser without interrupting your work. CLI extension for browser automation across any shell-capable AI agent.项目地址: https://gitcode.com/GitHub_Trending/br/BrowserSkill让 AI Agent 打开一个你没登录的网站它大概率会卡在登录页上。BrowserSkill 就是为这个问题设计的它是 AI Agent 与你真实浏览器之间的本地桥接层Agent 通过 shell 里的bsk命令驱动浏览器任务在独立的 Agent Window扩展自动打开的一个专用窗口中执行复用你真实登录态你的日常浏览不受任何影响而且它承诺绝不提取凭据、Cookie、Token 等敏感信息——这条约束直接写在 skill 文件 skill/SKILL.md 的开头。几个值得先知道的特性任何能调用 Shell 的 Agent 都能用Cursor、Claude Code、Codex、OpenClaw、CodeBuddy、WorkBuddy、Pi、Hermes Agent 等不绑定特定模型或框架。内置 human-in-loop人机协同遇到验证码、登录、支付确认这类必须人出面的步骤Agent 可以主动请求你接管完成后继续任务。Agent 想碰你已打开的标签页必须显式借用borrow用完归还其余窗口一律不碰。链路原理从 shell 命令到浏览器要经过哪些环节Agent 从不直接触碰浏览器。一次bsk click的完整路径是这里有三个概念值得解释一下。IPC进程间通信指 CLI 和 daemon 两个本地进程之间的消息通道BrowserSkill 用的是 JSON 行格式。daemon 相当于一个常驻的调度器持有浏览器连接的细节扩展则负责真正的页面自动化。标签借用规则贯穿所有操作用户窗口里的标签页只有在 Agent 显式tab borrow后才成为合法操作目标tab return后立即交还。从源码看这条链路是严格分层的。session start会先自动拉起 daemoncrates/bsk-cli/src/cli/ensure_daemon.rs再发出类型化 RPCdaemon 侧会把session.start这个请求挂起一直等到扩展重连上来才应答crates/bsk-cli/src/cli/session.rs。所有线上的参数与结果契约集中在 crates/bsk-protocol它的schema/目录为每个工具提供tool_*_params.json/tool_*_result.json契约文件扩展端在 apps/extension/src 实现自动化、录制、长截图、审计等模块。DeepSeek Harness 走的是同一条链路只是由插件代调bsk见下文 DSH 章节。一个工程细节CLI 的工具调用 IPC 超时被特意设为 35 秒略大于 daemon 的 30 秒工具超时——这样调用方拿到的是 daemon 返回的结构化超时错误而不是 IPC 连接先断crates/bsk-cli/src/cli/mod.rs。全局标志包括--json机器可读输出、--quiet抑制信息输出、-vdebug与-vvtrace。安装前先确认环境运行项支持情况操作系统macOSApple Silicon 和 Intel、Linuxx64 和 ARM64、Windows x64浏览器已支持 Chrome 与 Microsoft Edge其他可加载 Chromium 扩展的浏览器通常可用Firefox 计划中BrowserSkill 由两个本地组件组成bskCLI/daemonRust 编写和浏览器扩展TypeScript/WXT 编写。两者缺一不可。三步装好 bsk CLI 与浏览器扩展让 Agent 替你装最省事如果你已经在用 Cursor、Claude Code 或任何支持 Shell 的 Agent直接把这句发给它按照仓库中 AGENT_INSTALL.md 的说明在本机安装并配置 browser-skill它会完成 CLI 与 skill 的安装并引导你加载扩展。完整说明见仓库根目录的 AGENT_INSTALL.md。手动安装 CLImacOS / Linux安装到~/.local/bincurl -fsSL https://raw.githubusercontent.com/Tencent/BrowserSkill/main/install.sh | sh export PATH${BSK_INSTALL_DIR:-$HOME/.local/bin}:$PATHWindowsPowerShellirm https://raw.githubusercontent.com/Tencent/BrowserSkill/main/install.ps1 | iex那条export让当前 Unix shell 能找到二进制。注意正在运行的 Agent 可能在每次 Shell 调用里都看不到这条 PATH需要用绝对路径或在 Agent 侧做同样设置装完仍报旧路径问题的 Agent重启一次。然后验证bsk --version手动安装扩展从 Chrome Web Store 或 Edge 加载项商店安装 BrowserSkill 扩展其他 Chromium 系浏览器装 Chrome 商店版即可。Agent 跑在沙盒里先看这条如果 Agent 沙盒会在每条命令结束后回收后台进程例如 Linux 的 bubblewrap 沙盒、Windows 的任务级 Job 终止daemon 会被一起杀掉的。正确做法是把 daemon 放在宿主的持久执行环境中沙盒内通过共享的BSK_HOME目录含 IPC 套接字和BSK_AUTO_START0连接已有 daemon。普通本地环境无需任何配置daemon 默认自动启动。细节见 docs/sandboxed-agents.md。给 Agent 注入操作手册bsk install-skill光有 CLIAgent 不知道该怎么用它。BrowserSkill 自带一份 skill操作手册即crates/bsk-cli/skill/SKILL.md安装命令bsk install-skill用空格键勾选目标 harnessCursor、Claude Code、Codex、OpenClaw、CodeBuddy、WorkBuddy、Pi、Hermes Agent 八选一或全选回车完成。bsk install-skill --list可以查看 internal 变体与各安装路径。非交互场景显式指定 harness例如bsk install-skill --harness cursor --json——即使本机没检测到该 harness 也能显式装入。单独加--yes会装进所有被检测到的 harness一个都没检测到时直接报错。想装自己改过的指令bsk install-skill --harness cursor --source ./SKILL.md显式带--source的安装一律视为自定义即使内容和内置完全一样已有安装默认跳过--force才覆盖。其他能调 Shell 但不在清单里的 harness手动把 SKILL.md 复制进对应 skills 目录的browser-skill/SKILL.md即可。受管 skill 的自动更新daemon 启动、session start和doctor时都会检查已安装的 skill——只有文件内容与上次安装/同步时一致才继续自动更新检测到本地编辑就保留文件、暂停更新。没有内容基线的历史安装只有与当前内置 skill 字节级一致才会被纳入管理此时只补来源标记不重写文件明确的自定义安装即使内容相同也不纳入。内容不同、被本地编辑或来源标记无法识别的历史文件doctor会给出WARN并说明暂停原因与恢复方法但不会让健康检查失败--json里是status: warn、ok: true。同步进行中时本次同步推迟到下一次。把现有文件保留为明确自定义安装bsk install-skill --harness cursor --source existing-SKILL.md --force恢复内置 skill 并重新启用自动更新会覆盖现有指令bsk install-skill --harness cursor --force用 bsk doctor 和真实页面验证链路装完后先跑bsk doctor按提示处理各项然后打开扩展弹窗确认已连接。注意两点skill 一项可能显示N/A且 doctor 依然通过——skill 是否真的被 Agent 发现要单独验证测试浏览器操作之前把 doctor 里的警告说明清楚、失败项解决掉。接着做一次真实验证开一个新的Agent 会话确认 harness 里能看到browser-skill让它打开https://example.com并总结页面内容。支持斜杠命令调 skill 的 harness 可以这样写/browser-skill open example.com and summarize what is on the page.期望结果成功读取页面并停止本次 BrowserSkill session。找不到 skill 时先核对目标 harness 和安装路径再重试。一次会话的完整生命周期推荐的任务工作流与 skill/SKILL.md 一致分四步从用户请求里定义成功标准运行bsk session start --json保留返回的session_id多浏览器时用--browser id-or-label指定需要后台打开 Agent Window 时加--no-focus。新页面直接导航已有用户标签走借用流程。动手前先读页面bsk navigate https://example.com --session id bsk observe --session id用本次 observe 返回的新鲜eNrefs元素引用编号选择动作导航或大 DOM 变化后重新 observe。模糊结果最多复查一次成功可见就立刻收手。无论成败都运行bsk session stop id除非用户明确要求保持会话打开。这也同时归还借用的标签。不要指望空闲清理来结束任务更不要为结束任务去重启共享 daemon。三个子命令start新会话、stop停单个或--all全停、list列出活动会话。除stop直接吃位置参数外每个 session-scoped 命令都要带--session id。最常用交互命令其余见 skill/SKILL.mdbsk click e3 --session id bsk fill e3 --value text --session id bsk select e3 --value option-value --session id bsk press Enter --ref e3 --session id bsk hover e3 --session id bsk scroll-to e3 --session id几条容易踩坑的语义select认选项的value属性值不是可见标签。悬停触发器带有标记如[hover first: Shoes | Bags]、[has-submenu]、[expanded]。先 hover 触发器再 observe然后使用新出现条目的 ref预期控件缺失且没有标记时可以试一次observe --probe-hover。scroll-to返回按祖先裁剪后的可见边界坐标是顶层 viewport CSS 像素部分可见算成功完全隐藏/被裁剪的目标会失败。完整契约见 docs/scroll-to.md。wheel --delta-y 600发带符号增量至少一个非零值不保证精确滚动距离focus/blur用于聚焦与失焦。观察结果太大时用observe --max-tokens n配合返回的next_cursor/more用bsk observe --cursor token --session id续读。每页会替换 ref 映射续读针对同一份捕获不刷新页面也不触发悬停。借用与归还用户标签页先列出相关步骤一结束立刻归还bsk tab list --scope user --session id bsk tab borrow tab-id --session id bsk tab return tab-id --session id要点借用会在 Agent Window 里选中该标签作为后续命令的默认目标不额外抢焦点。后台创建的标签tab create --no-active要保存返回的tab_id并在观察/导航/输入命令里显式传--tab-id。控制中的网页移到后台仍继续运行普通视口截图对后台标签可用全页截图仍要求活动标签。不要编造 tab ID不要让用户的标签跨无关任务滞留。tab borrow --timeout 120s只改变确认等待时间默认 60 秒自定义等待需要 daemon 和扩展都支持协议 1.2 及以上。需要人手时bsk request-help 与结果处理启用了人工协助后登录、CAPTCHA、OTP、支付确认、同意弹窗或者两次尝试仍无进展时Agent 可以主动把方向盘交给你bsk request-help --session id --prompt Please complete sign-in --target e3不同结果对应不同下一步continued / completed重新 observe用新 refs 继续。cancelled / timed_out尊重拒绝或阻塞不要反复请求。disabled没有确认过任何人的操作重新 observe 并按协助禁用规则继续。stale refobserve 后重试一次目标动作。未知标签/会话列出当前标签与会话绝不猜 ID、更不借别的任务的会话。超时或效果未知先检查当前状态再重试——动作可能已经发生了。fill_value_mismatch先读字段。格式可能已经满足要求只修正剩余差异。允许人工协助只表示request-help可用不代表每个操作都要先问许可任务授权与宿主审批照常生效。协助被关闭时不要请求协助、也不要试图重新启用用现有登录态、已授权输入和可行替代方案完成已授权步骤。仅手机扫码、人脸验证、拿不到的短信码、纯文本模型认不出的图形验证码可以如实报告受阻——但协助关闭不增加授权也不能因为求助不可用就把任务判成完成或受阻不可恢复失败时报告阻塞并停止所属会话。截图与 Canvas 上的像素级点击bsk screenshot --session id --out viewport.png bsk screenshot --session id --ref e3 --out element.png --json bsk screenshot --session id --full-page --out page.png bsk screenshot --session id --full-page --scope current --out loaded.png截图返回本地 PNG 路径--out会覆盖已有文件省略时用临时路径--json带尺寸与字节数--ref与--full-page互斥。Canvas 类内容在观察结果里以eN canvas [visual:screenshot]标记。要点击图中某一点保留这张截图的capture_id用原始 PNG 坐标bsk click e3 --capture capture-id --image-x x --image-y y --session idcaptures 单次使用、2 分钟过期会被该 ref 的替换或更新截图提前失效。文件与其他工具bsk upload e3 --file ./report.pdf --session id会把文件披露给站点bsk download e3 --out ./report.pdf --session id接受站点控制的字节流。用 Agent 本地路径别用浏览器内部暂存路径下载默认拒绝覆盖需要时加--overwrite。console/network适合有界的只读诊断emulate --device iphone-14只影响一个标签页--off恢复。evaluate是最后手段必须检查 JSON 的.ok字段因为脚本异常时 CLI 退出码仍可能是 0绝不 evaluate 敏感信息。record start能把用户操作录成语义化的trace.json录之前先读帮助且绝不录银行、SSO 或密码管理器页面。长截图10 万像素的页面为什么不爆内存入口有两个插件快捷功能 → 长截图或让 Agent 调 CLIbsk screenshot --session id --full-page --out page.png默认采集与编码超时两分钟超长页面可加--timeout 5m支持 Ctrl-C 取消结束后恢复原始滚动位置。CLI 与扩展版本必须匹配详见 docs/long-screenshot.md。插件端提供三种模式Full page · Automatic整页 · 自动从顶部开始增量滚动跟随追加内容。Long image · I scroll长图 · 我滚动从当前位置开始你手动往下滚屏与屏之间保留重叠内容完成后在弹窗点Finish and keep。Visible area可见区域当前视口截一次。自动模式用测量到的文档坐标加重叠视口拼接到达底部后等待至少 1.5 秒高度稳定、且 600ms 内无附近内容变化没有加载指示器时安静等待上限 5 秒避免跳动时钟类控件造成无限挂起。若追加内容把旧底部推开了捕获会回退到临时尾部重拍替换磁盘上对应的瓦片。快捷功能在 CLI 连接关闭时也能用不依赖 daemon 或 Agent 会话。CLI/Agent 侧的语义--scope follow默认跟随追加内容--scope current只捕获开始时测量的文档区域CSS 像素仍会滚动该区域露出懒加载图片但后续高度增长不扩展范围。JSON 结果包含确认的scope旧扩展不确认current时 CLI 拒绝保存。内部浏览器页面、Web Store、嵌套滚动面板和虚拟化列表不支持。保持捕获标签可见page_hidden是环境中断user_cancelled是用户输入停止。Agent 的follow模式下底部 30 秒加载指示器无高度增长会产生loading_stalled而不是干等到总截止失败不保存部分图片。存储与编码是这套设计最精彩的部分。新捕获是一组 512 像素高的 PNG 瓦片存在扩展的 OPFSOrigin Private File System浏览器给扩展的本地私有文件系统里配一个小型持久化 manifest。捕获期间只解码当前截图和小型工作 canvas追加内容不分配全页 canvas。导出由专用 worker 顺序读瓦片、应用 PNG Up filter再用原生流式 zlib 压缩写出——不构建全图像素缓冲也不产生 base64。完整页截图走独立的tool.screenshot_full_pageRPC随后是内部tool.screenshot_read与tool.screenshot_release读取按 256 KiB 分块扩展流式写 PNG 到 OPFSCLI 校验完整字节数后原子替换输出文件。基准数据3,170 × 100,062 像素的结果canvas 最高只用 512 像素高RGBA 缓冲峰值约 41.7 MiB而完整 RGBA 图需要约 1.27 GB该测量不含编解码器内部、堆与 GPU 拷贝不是浏览器总内存。远程连接Agent 跑服务器浏览器在你电脑上扩展发起出站连接用户电脑无需开放任何入站端口任务仍走独立 Agent Window包括借用-归还流程。bsk内置设备配对、连接鉴权、凭据轮换与吊销不需要账号系统或鉴权网关。本地模式默认bsk daemon start # 等价bsk daemon start --mode local监听回环地址扩展弹窗选Local connection即可退出远程会结束当前任务。独立服务器模式bsk daemon start --mode server \ --listen 0.0.0.0 --port 52800 \ --public-url wss://browser.example.com:52800/extension \ --tls-cert /etc/bsk/fullchain.pem \ --tls-key /etc/bsk/privkey.pem证书必须是浏览器信任的主机名要与公网 URL 匹配bsk不签发证书、不改浏览器信任设置。服务器模式保持前台运行、空闲不退出可由进程管理器托管证书变更需以相同参数重启会话空闲限制仍然适用。在 Agent 环境设置BSK_AUTO_START0让已停止的受管服务器被如实报告为不可用。BSK_HOME这个私有目录存放设备授权与本地 IPC 元数据必须跨服务重启与容器替换持久化不要在不同独立服务器或不受信任的 OS 用户之间共享。服务器相关 flag 的默认值--pairing-ttl默认5m一次性配对有效期上限 1 小时。--device-ttl默认90d设备自配对或成功续期起的寿命上限 366 天。--renew-after默认30d扩展应续期的时间点必须小于设备寿命。--max-connections默认64在线浏览器容量1–1000容量满时已有设备可替换连接。--authorize-rate-limit默认60每对端 IP 每分钟配对/续期请求数1–60000。TLS 反向代理不想自己实现鉴权时可用传统 TLS 反向代理终结 HTTPS/WSSbsk daemon start --mode server --listen 127.0.0.1 --port 52800 \ --public-url wss://browser.example.com/extension把/extension与/extension/authorize转发到127.0.0.1:52800保留路径与 WebSocket 升级头保留Origin、Authorization和Sec-WebSocket-Protocol绝不记录鉴权头、WebSocket 子协议值或请求体也不在查询串里传凭据。代理后服务器看到的是代理 IP每客户端限流要在代理侧配置服务器不信任X-Forwarded-For。没有原生 TLS 时监听必须落在回环地址非回环的浏览器连接要求 WSS。配对与验证的四个检查点服务器操作者生成配对链接BSK_AUTO_START0 bsk daemon pair。浏览器用户在扩展弹窗选择Remote connection粘贴完整链接并保存。链接是机密、单次使用、默认 5 分钟过期保存后扩展把配对密钥替换为设备凭据。服务器上的 Agent用BSK_AUTO_START0 bsk status --json确认目标浏览器出现。生成链接或保存配对本身都不是活跃连接的证明。首次使用验证用status里的浏览器instance_id作为browser-id建会话并读页BSK_AUTO_START0 bsk session start --browser browser-id --no-focus --json BSK_AUTO_START0 bsk navigate https://example.com --session id BSK_AUTO_START0 bsk observe --session id BSK_AUTO_START0 bsk session stop id按证据推进生成链接 → 服务器列出已连接浏览器 → 页面读取成功且测试会话成功停止。授权管理bsk daemon devices bsk daemon revoke DEVICE_ID bsk daemon revoke --alldevices输出设备与浏览器 ID、标签和过期时间绝不输出凭据revoke --all同时让未使用的配对链接失效吊销既关闭现有连接也拒绝新连接。边界约束只与你能信任其操作已登录网站的服务器配对——配对是设备授权不是受限账号或网站沙箱。远程内容读取、截图、录制和页面操作都要求标签被显式创建或借用target_blank、window.open、OAuth 打开的标签不会自动获得控制权已在 Agent Window 内的无主标签需要你先移到普通窗口再借用。断开连接会取消任务工作、归还借用标签、关闭任务创建的标签用户创建的标签在清理中存活。远程上传/下载当前版本不支持返回unsupported截图等既有 RPC 内容结果仍支持。设备凭据存放在扩展源 IndexedDB普通扩展设置只有连接模式与非机密修订号独立服务器以私有文件权限和原子写入持久化哈希凭据。更多细节见 docs/remote-extension-connection.md。无人值守设置扩展开关矩阵与协议兼容性插件弹窗有两个默认开启的独立开关用户在插件里保存的设置对所有会话具有最终决定权借用标签页前确认允许请求人工协助实际行为开开借用需要确认求助正常弹窗开关借用需要确认求助返回disabled关开借用免确认求助正常弹窗关关借用免确认求助返回disabled生效语义设置自动保存到当前浏览器配置对已有和新建会话都生效。关闭借用确认会放行待确认请求关闭人工协助会把等待中的求助结束为disabled。重新打开开关后后续操作恢复对应行为——包括当年用--unattended创建的会话。已完成的借用不会撤销已结束的求助不会重新弹出。偏好读取失败时后台保留已有有效值尚无有效值时按两项开启处理不写回默认值也不阻止新建会话后续请求会重试读取存储变更也能恢复策略。弹窗保留读取错误提示并禁止保存写入失败不会被当成功。浏览器未连接时返回连接错误不会依据命令行参数或环境变量在本地伪造disabled。session start --json与session list --json返回浏览器实际的interaction策略。弃用与兼容--unattended、tab borrow --no-confirm、BSK_REQUEST_HELPoff保留兼容识别但已弃用不能覆盖插件开关。CLI 使用这些输入时会输出说明daemon 也会为自己继承到的旧环境记录说明原先只靠它们避免等待的脚本现在必须遵循浏览器设置。协议层面协议 1.3 保持与 1.0–1.2 的连接兼容分步升级时仍可建普通会话、用默认等待借用标签插件会提示旧 daemon 的兼容限制bsk status也显示协议差异。自定义借用等待时间要求 daemon 和扩展都 ≥ 协议 1.2否则只限制这一次操作并提示升级旧 daemon 的默认借用等待预算可能仍较短。新版 CLI 的request-help要求 daemon 协议 1.3——旧 daemon 可能在本地返回而不询问浏览器。该限制不会断开浏览器连接也不影响其他操作。旧 CLI 可能在连接 daemon 前就因BSK_REQUEST_HELPoff本地返回混用版本时保留这类历史行为只升级扩展无法改变旧可执行文件的动作。CLI、daemon、扩展全部更新后上述设置优先级才完整生效。升级 bsk 与 0.3.0 弃用项默认本地配置下先结束正在执行的浏览器任务再更新bsk update --yes它会以默认启动配置重启正在运行的 daemon。若通过安装脚本替换了二进制任务结束后运行bsk daemon restart。Windows 提示更新已暂存staged时等替换完成再查bsk --version。自定义端口、宿主管理的沙盒 daemon 或远程服务器先在所属宿主环境停止 daemon运行bsk update --yes --no-restart-daemon再以原参数和BSK_HOME启动维护期间在 Agent 命令中设BSK_AUTO_START0。扩展通过浏览器商店更新开发时加载的解压版需重新构建并重新加载商店版本可能晚于 CLI 上线。用bsk --version、bsk status核对 CLI/daemon/扩展版本再跑bsk doctor。长截图等新功能要求版本匹配。受管 CLI skill 会在 daemon 启动、session start、doctor时同步本地编辑与自定义 skill 保留升级后开新 Agent 会话加载新指令。DSH 插件需单独更新并重启对应 profile。升到 0.3.0 的注意点--unattended、tab borrow --no-confirm和BSK_REQUEST_HELPoff不再跳过确认或关闭人工协助请改用扩展弹窗里的对应设置。历史变化见 CHANGELOG.md。DeepSeek Harness 插件原生 browser_* 工具用 DeepSeek Harnessdsh的话有官方 npm 插件wxg-prc-cpg/browser-skill-dsh-plugin它给 Agent 注入原生browser_*工具由插件代为执行bsk并在 Web UI 里实时展示浏览器会话。先装好bsk并连上扩展再把插件装进 profileweb换成你的 profile 名dsh plugin --profile web add wxg-prc-cpg/browser-skill-dsh-plugin dsh --profile web插件自带browser-skillskill在 dsh 下无需再跑bsk install-skill。已安装插件不会自动更新升级用dsh plugin --profile web update wxg-prc-cpg/browser-skill-dsh-plugin --latest升级后重启该 profile。插件源码在 packages/dsh-plugin-browserskill其中 skill.ts 负责 skill 注入tools.ts 定义browser_*工具用法与配置见其 README。仓库地图代码都在哪里这是一个 Cargo pnpm 混合 workspacecrates/bsk-cli—bskCLI 与本地 daemon。命令树定义在 crates/bsk-cli/src/cli/mod.rs覆盖 session、tab、window、emulate、screenshot、snapshot、observe、console、network、navigate、click、fill、press、select、upload、download、evaluate、wait、request-help、record 等全部命令。crates/bsk-protocol— 共享协议类型schema/目录为每个工具提供参数/结果 JSON 契约。apps/extension— 浏览器扩展src 下分 browser-driver、content、lib、long-screenshot、session-manager、tools、transport 等模块配 vitest 测试。packages/ui与packages/i18n— 扩展 UI 共享支持含英文、简体中文、韩语等本地化。packages/dsh-plugin-browserskill— DeepSeek Harness 插件。evals/browser— 确定性本地页面、Agent 无关的浏览器能力测试台。需要深入时按主题查这几份文档docs/sandboxed-agents.md沙盒 daemon 托管、docs/long-screenshot.md捕获模式与--scope、docs/remote-extension-connection.md服务器模式与第三方网关协议、docs/scroll-to.mdscroll-to 契约、AGENT_INSTALL.mdAgent 自助安装。项目采用 MIT 许可证。【免费下载链接】BrowserSkillLet AI agents use your real, logged-in browser without interrupting your work. CLI extension for browser automation across any shell-capable AI agent.项目地址: https://gitcode.com/GitHub_Trending/br/BrowserSkill创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考