尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

OpenCLI DeepSeek 适配器实战:用浏览器会话驱动 chat.deepseek.com 的 CLI 命令指南

OpenCLI DeepSeek 适配器实战:用浏览器会话驱动 chat.deepseek.com 的 CLI 命令指南 OpenCLI DeepSeek 适配器实战用浏览器会话驱动 chat.deepseek.com 的 CLI 命令指南【免费下载链接】OpenCLIMake Any Website into CLI Use your logged-in browser by AI agent.项目地址: https://gitcode.com/gh_mirrors/ope/OpenCLI导读本文讲解 OpenCLI 项目中 DeepSeek 浏览器适配器的完整使用方式它不调用 DeepSeek API而是通过 Browser Bridge 扩展 驱动你已登录的chat.deepseek.com网页在终端里完成提问、新开会话、读取对话、查看用量等操作。读完本文你将掌握opencli deepseek全部 8 个子命令的用法、ask命令的模型/DeepThink/联网搜索/文件上传等核心参数以及这些命令在源码clis/deepseek中的底层实现原理。一、适配器概览浏览器驱动而非 API 驱动DeepSeek 适配器是 OpenCLI 众多把任意网站变成 CLI的适配器之一其工作方式与基于 API 的调用有本质区别Mode模式Browser浏览器Domains作用域chat.deepseek.com聊天、platform.deepseek.com平台用量鉴权方式复用你在 Chrome 中已登录的浏览器会话Cookie 策略无需单独配置 API Key行为本质脚本在真实浏览器页面中定位输入框、切换开关、点击发送按钮再从 DOM 中提取回复——因此它与 DeepSeek 网页版所见即所得包括 DeepThink深度思考和联网搜索等网页功能。从源码看所有子命令都通过cli({ site: deepseek, strategy: Strategy.COOKIE, browser: true, siteSession: persistent, ... })注册例如 ask.js、usage.js其中siteSession: persistent表示默认复用同一个 DeepSeek 页面会话连续命令之间共享上下文。二、环境准备与前置条件使用前需要满足三个条件Chrome 正在运行并已安装 Browser Bridge 扩展已在chat.deepseek.com登录使用usage命令时还需要能访问platform.deepseek.com需登录平台账号以读取余额与用量。DeepSeek 网页版的登录态与大多数站点不同它不依赖 Cookie而是把 Bearer Token 存放在localStorage的userToken键中。适配器在 auth.js 中实现了whoami 探针读取userToken后调用/api/v0/users/current接口校验身份若返回code 40002则判定为匿名未登录抛出AuthRequiredError。这也是status、login等鉴权相关命令的实现基础。三、命令总览命令说明opencli deepseek ask prompt发送提示词并等待回复opencli deepseek new新开一个会话opencli deepseek status检查登录状态与页面可用性opencli deepseek usage读取平台余额、消费、API 请求数与 Token 用量opencli deepseek read读取当前会话内容opencli deepseek history从侧边栏列出会话历史opencli deepseek detail id按 ID 或 URL 读取指定会话opencli deepseek send id prompt向指定会话发送提示词且不等待回复其中ask、send的access为write写操作其余为read读操作对应源码中cli()注册时声明的access字段。四、核心命令ask 的完整用法4.1 基础用法与模式组合ask是最常用的命令官方文档给出的可运行示例# 问一个问题 opencli deepseek ask explain quicksort in 3 sentences # 提问前先新开一个会话 opencli deepseek ask hello --new # 使用 Expert 模型而非 Instant opencli deepseek ask prove that sqrt(2) is irrational --model expert # 使用 Vision 模型并附带图片 opencli deepseek ask describe this image --model vision --file ./image.png # 开启 DeepThink 深度思考模式 opencli deepseek ask prove that sqrt(2) is irrational --think # 开启联网搜索 opencli deepseek ask latest news about AI --search # 附带文件 opencli deepseek ask summarize this document --file ./report.pdf # 组合模式 opencli deepseek ask what happened today? --model expert --think --search --new # 自定义超时默认 120 秒 opencli deepseek ask write a long essay --timeout 180 # JSON 输出 opencli deepseek ask hello -f json4.2 ask 参数说明选项说明prompt要发送的消息必填位置参数--timeout等待回复的最大秒数默认 120--new发送前先新开会话默认 false--model模型instant、expert或vision默认 instant--think开启 DeepThink 模式默认 false--search开启联网搜索默认 false--file附带文件PDF、图片、文本最大 100 MB这些参数在 ask.js 中有精确对应timeout为 int 类型默认 120model限定在[instant, expert, vision]三个取值think、search、new均为布尔开关。4.3 参数同步与重置语义一个容易被忽略但重要的行为默认模型是 Instant且 DeepThink 与联网搜索默认关闭每次调用时--model、--think、--search三个开关都会被同步到页面上因此省略某个标志就等于把它重置为关闭。也就是说如果上一次用--think开了深度思考下一次不带--think的ask会把它关掉。这保证了命令的可重复性但也要求你每次显式声明需要的模式。从源码实现看模型选择由selectModel(page, wantModel)完成utils.js它遍历页面中div[roleradio]元素按索引 0/1/2 分别对应 instant/expert/visionDeepThink 与 Search 开关则由setFeatureutils.js按.ds-toggle-button的位置第 0 个为 DeepThink、第 1 个为 Search进行点击切换。4.4 模型与搜索的组合限制Vision 模式不支持--search需要联网搜索时请使用--model instant或--model expert。在已有会话中不能切换模型如果当前处于某个会话页面URL 包含/a/chat/s/而你又显式传了--model命令会直接报错提示Re-run with --new to start a fresh chat。原因从 ask.js 的注释可知模型选择器只在新建会话页面出现不会出现在既有会话内部。上述两条限制在源码中都会抛出类型化的CliError(ARGUMENT, ...)并给出修复建议ask.js。4.5 会话恢复逻辑不带--new时ask会调用ensureOnDeepSeek检查当前是否已在 DeepSeek 页面若工作区被回收、页面被重置则会通过pickResumeUrlutils.js从侧边栏挑选最近一个非置顶会话继续对话如果侧边栏里没有可用会话会抛出CommandExecutionError提示改用--new。置顶会话的识别是基于置顶/Pinned文本判断的因为 DeepSeek 的 CSS-module 类名每次构建都会随机化。4.6 回复等待与 DeepThink 的解析发送后waitForResponseutils.js会每 3 秒轮询一次页面中.ds-message气泡的文本只有当回复内容连续 3 次保持不变判定输出稳定才返回避免抓到流式输出中间态。开启--think时回复会被拆分为thinking思考过程、response最终回答、thinking_time思考耗时三个字段。实现优先通过 DOM 层分离页面中思考区块与正文.ds-markdown分属不同容器当 DOM 分离不可用时回退到文本头解析匹配 Thought for X seconds 或 已思考用时 X 秒 两种格式utils.js。需要注意这里的文本解析刻意不做\n\n切分——那会在多段落思考或多段落回答时破坏内容。五、文件上传--file的两种路径--file支持 PDF、图片、文本等格式上限 100 MB超出直接拒绝见 utils.js 中100 * 1024 * 1024的判断。上传优先走浏览器原生文件输入路径page.setFileInput若当前运行环境不支持如 CDP 报 Unknown action 等错误则回退到 base64 注入把文件内容转成 base64 后在页面中构造File对象通过 React 的__reactProps$钩子触发onChange事件utils.js。上传后还会等待两件事文件预览出现、发送按钮解除禁用服务端上传完成才会启用随后才真正发送消息utils.js。整个上传流程在 ask.test.js 中有对应的单元测试覆盖例如验证发送文件前会先记录消息气泡基线数量再调用sendWithFile并等待新回复。六、其余读写命令6.1 会话管理new / read / detail / history / send# 新开一个会话会等待输入框真正挂载后才返回成功 opencli deepseek new # 读取当前会话输出 Role/Text 两列 opencli deepseek read # 列出最近会话限制 10 条 opencli deepseek history --limit 10 # 按 UUID 读取指定会话 opencli deepseek detail 749e6bbd-6a45-4440-beaa-ae5238bf06d8 # 向指定会话发送消息且不等待回复 opencli deepseek send 749e6bbd-6a45-4440-beaa-ae5238bf06d8 continue from the last answer细节说明new会跳转到https://chat.deepseek.com/并等待 composertextarea[placeholder*DeepSeek]在 8 秒内挂载否则抛出错误提示检查登录态new.jsread提取当前页所有可见消息按用户/助手角色输出用户消息通过.ds-message的额外 hash 类名区分见 utils.jshistory --limit N从侧边栏抓取会话列表若侧边栏折叠会自动展开输出Index/Title/Url三列默认上限 20history.jsdetail的id参数既接受裸 UUID也接受完整的/a/chat/s/idURLparseDeepSeekConversationIdutils.js会在导航前先用 UUID 正则校验格式不对直接抛ArgumentError避免无效跳转。跳转后等待消息气泡最多 10 秒若无消息则抛出EmptyResultErrordetail.jssend与ask的区别是不等待回复适合把消息注入会话后就结束。它必须先有明确的会话 ID用history找到并且输入依赖 CDP 的Input.insertText原生输入而非execCommand——因为 DeepSeek 的 composer 由 React 控制模拟输入事件会导致受控状态失步、发送静默失效send.js。发送后还会校验提示词确实以用户气泡形式渲染并经过 3 秒稳定窗口确认未被回滚。6.2 status检查登录与页面状态opencli deepseek status输出Status / Login / Url三列页面存在 composer 则 Status 为Connected否则为Page not ready通过检测img[src*user-avatar]判断是否已登录status.js 配合 utils.js 的getPageState。6.3 usage读取平台用量与余额opencli deepseek usage该命令会导航到https://platform.deepseek.com/usage数据来自两部分usage.js账户汇总读取localStorage中的userToken作为 Bearer Token调用平台内部接口/api/v0/users/get_user_summary返回 CNY 钱包余额正常钱包 赠送钱包、累计消费、本月消费、本月 API 请求数、本月 Token 数与当前可用 Token 估算值时间段卡片从页面innerText中解析近 7 天/本月等时间段标签以及该时段的消费金额¥、API 请求次数、Tokens。输出的 11 列字段为balance、bonusBalance、cumulativeSpend、monthlySpend、monthlyApiCalls、monthlyTokens、currentTokenEstimation、timePeriod、periodSpend、periodApiCalls、periodTokens。所有字段都会经过格式校验金额转两位小数、数值字段必须匹配纯数字正则缺失或畸形直接抛出CommandExecutionError若接口返回 401/403 或匿名错误则抛出AuthRequiredError提示需要已登录的平台会话。七、会话生命周期与站点会话策略文档中的 Caveats 强调DeepSeek 命令默认使用持久化站点会话siteSession: persistent因此连续的deepseek ask/deepseek read/deepseek detail调用会停留在同一个 DeepSeek 页面共享同一上下文方便多命令接力操作。如果希望每次都是独立的一次性标签页可传入--site-session ephemeral。这套机制对应源码注册时显式声明的siteSession: persistent如 ask.js并且read/detail等读命令也复用同一持久会话这是读取当前会话这类语义能够成立的前提。八、Caveats 与避坑指南综合官方文档的 Caveats 与源码实现使用时有几点需要特别注意这是浏览器 UI 驱动而非 API所有能力取决于 DeepSeek 网页 DOM 结构与 React 行为网页改版可能导致选择器失效默认持久会话连续命令共享同一页面需要隔离时用--site-session ephemeral每个标志每次调用都会同步省略--model/--think/--search等于重置为默认值Instant 关闭 关闭Vision 与--search互斥见上文 4.4send必须显式指定会话 ID先用history找到 URL 或 ID长回复建议提高--timeout代码、长文等生成时间可能超过默认 120 秒超时会抛出TimeoutError并提示调大超时ask.js文件上传上限 100 MB优先走浏览器文件输入路径必要时回退 base64 注入usage的失败是类型化的未登录、接口被拦截、页面/接口结构异常分别对应AuthRequiredError与CommandExecutionError便于脚本按类型处理。九、常见问题排查现象排查方向status显示Page not readyChrome 未启动、Browser Bridge 未安装或chat.deepseek.com未登录new报 composer 未挂载页面加载过慢或未登录检查网络与登录态ask --model vision --search报错组合不合法去掉--search或改用 instant/expert在既有会话中--model报错模型选择仅限新会话页加--new重试ask长时间无回复后超时增加--timeout长代码/长文生成耗时可能超过 120 秒send提示原生输入不可用需要更新 daemon 与扩展使Input.insertText可用usage报未登录需要在platform.deepseek.com有已登录的浏览器会话detail报无可见消息会话 ID 是否正确、是否有权限访问该会话十、延伸阅读适配器全部源码与单元测试clis/deepseekask/usage/detail/send均有对应.test.jsBrowser Bridge 扩展安装与原理docs/guide/browser-bridge.md更多浏览器类适配器的文档docs/adapters共享站点鉴权命令的实现clis/_shared/site-auth.js【免费下载链接】OpenCLIMake Any Website into CLI Use your logged-in browser by AI agent.项目地址: https://gitcode.com/gh_mirrors/ope/OpenCLI创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表