DeepSeek Web Query
Overview
本技能用于将用户的查询请求转发到 DeepSeek 网页版,利用 DeepSeek 的联网搜索能力获取最新信息,同时减轻主模型的负担。
技术栈: 使用 Chrome DevTools MCP (通过 mcporter) 控制浏览器,替代原有的 Playwright 方案。
故障恢复: 如果 Chrome DevTools MCP 服务不可用,会自动尝试使用 chrome-devtools-mcp-manager 技能启动浏览器和 MCP 服务。
When to Use
当用户有以下需求时触发此技能:
- - 优先触发:提问以 "ds:" 或 "ds:" 开头(例如:"ds:什么是量子计算?")
- "用 Deep Seek 查一下..."
- "联网搜索..."
- "查下最新的..."
- "搜索一下..."
- 需要查询最新的互联网信息(新闻、技术文档、产品信息等)
- 一般性知识查询,不需要复杂的多步推理
- 代码相关问题,需要最新的 API 文档或最佳实践
- 文本分析、翻译、总结等任务
Workflow
步骤 0: 预处理查询(处理 ds: 前缀)
如果用户查询以 "ds:" 或 "ds:" 开头:
- 1. 移除前缀("ds:" 或 "ds:")
- 将剩余内容作为实际查询问题
- 继续执行后续步骤
例如:
- - 输入:"ds:什么是量子计算?" → 实际查询:"什么是量子计算?"
- 输入:"ds:最新的Python版本是什么?" → 实际查询:"最新的Python版本是什么?"
步骤 1: 检查并启动 Chrome DevTools MCP
在执行 MCP 操作前,先检查服务状态:
CODEBLOCK0
如果服务不可用(连接错误或权限错误),执行自动恢复流程:
自动恢复流程
- 1. 检查内置 Chrome 浏览器状态
CODEBLOCK1
- 2. 如果浏览器未运行,启动它
browser({
action: "open",
profile: "openclaw",
url: "about:blank"
})
等待 2-3 秒让浏览器完全启动。
- 3. 验证 CDP 端点可用
CODEBLOCK3
- 4. 重新配置 mcporter 的 MCP 服务器
CODEBLOCK4
- 5. 验证 MCP 服务已恢复
CODEBLOCK5
完整自动恢复脚本示例
CODEBLOCK6
步骤 2: 打开浏览器并检测登录状态
- 1. 使用 Chrome DevTools MCP 打开 DeepSeek:
CODEBLOCK7
- 2. 等待页面加载完成后,获取页面快照:
CODEBLOCK8
- 3. 根据快照内容检测登录状态:
-
登录页面特征:包含"手机号"、"验证码"、"登录"、"微信扫码登录"等文本
-
已登录页面特征:包含"发送消息"、"深度思考"、"新对话"等文本
如果 MCP 调用失败,再次执行自动恢复流程,然后重试。
步骤 3: 处理登录(如需要)
如果检测到未登录:
- 1. 截图展示登录页面给用户:
CODEBLOCK9
- 2. 提示用户:"请先登录 DeepSeek(手机号+验证码或微信扫码)"
- 等待用户完成登录
- 用户登录完成后,重新检测状态(重复步骤 2)
步骤 4: 执行查询
- 1. 获取页面快照,找到输入框和深度思考按钮的 uid:
CODEBLOCK10
- 2. 启用深度思考模式(如果未启用):
- 在快照中查找包含"深度思考"文本的按钮
- 如果按钮状态显示未启用,点击启用:
CODEBLOCK11
- 3. 点击输入框获取焦点:
CODEBLOCK12
- 4. 输入用户问题:
CODEBLOCK13
- 5. 按 Enter 发送:
CODEBLOCK14
- 6. 等待回答完成:
- 等待 "已思考" 或 "已深度思考" 文本出现
- 或者等待停止按钮消失
CODEBLOCK15
步骤 5: 提取结果
使用 evaluate_script 提取 Markdown 内容:
CODEBLOCK16
备选方案:如果上述方法失败,直接提取页面文本:
CODEBLOCK17
步骤 6: 结果返回
重要:直接返回提取的原始内容,不要进行 LLM 二次总结或加工。
- - 直接将提取的 Markdown 文本返回给用户
- 不添加额外的解释、总结或格式化
- 不进行任何整理或编辑
- 保持 DeepSeek 原始输出的完整性
- 避免不必要的 token 消耗
步骤 7: 保持浏览器
重要: 不要关闭浏览器页面!保持浏览器会话供后续查询复用。
如需关闭,使用:
CODEBLOCK18
故障恢复机制详解
常见错误及处理
错误 1: "connect EPERM" 或管道连接错误
症状:
CODEBLOCK19
处理: 执行完整自动恢复流程(步骤 1)。
错误 2: "CDP not ready"
症状: 浏览器状态显示 INLINECODE0
处理:
- 1. 停止现有浏览器: INLINECODE1
- 重新启动浏览器: INLINECODE2
- 等待 3 秒后重试
错误 3: MCP 服务器返回错误
症状: mcporter call 返回错误但连接正常
处理:
- 1. 检查页面是否存在: INLINECODE4
- 如需要,重新导航到 DeepSeek
- 重试操作
自动恢复的最佳实践
- 1. 最多尝试 2 次恢复:如果连续 2 次恢复失败,向用户报告问题
- 记录恢复操作:在日志中记录每次恢复尝试
- 保持用户知情:如果恢复需要较长时间,告知用户正在处理
- 优雅降级:如果 MCP 完全不可用,建议使用替代方案(如 Tavily 搜索)
Chrome DevTools MCP 工具参考
核心工具
| 工具 | 用途 |
|---|
| INLINECODE5 | 创建新标签页并加载 URL |
| INLINECODE6 |
导航到 URL 或前进/后退/刷新 |
|
take_snapshot | 获取页面 a11y 树快照(用于查找元素 uid) |
|
take_screenshot | 截图 |
|
click | 点击元素 |
|
fill | 填写输入框 |
|
type_text | 输入文本 |
|
press_key | 按键 |
|
evaluate_script | 执行 JavaScript 并返回结果 |
|
wait_for | 等待特定文本出现 |
|
list_pages | 列出所有打开的页面 |
|
select_page | 选择特定页面作为上下文 |
DeepSeek 页面元素选择策略
输入框:
- - 查找 placeholder 包含"发送消息"的 textarea
- 或查找 contenteditable="true" 的元素
深度思考按钮:
- - 查找文本包含"深度思考"的按钮
- 检查按钮状态(aria-pressed 或 class)
Copy 按钮:
- - 查找 title 包含"复制"或 class 包含"copy"的按钮
- 通常位于每条消息的右上角
消息内容:
- - class 包含 "ds-markdown" 或 "message-content"
Login Detection
通过页面快照检测登录状态:
登录页面特征:
- - 包含文本:"手机号"、"验证码"、"登录"、"微信扫码登录"
- 有手机号输入框和验证码输入框
已登录页面特征:
- - 包含文本:"发送消息"、"深度思考"、"新对话"
- 有消息输入框
Result Extraction Methods
方法 1: Evaluate Script 提取(推荐)
优点:
- - 获取 Markdown 格式文本,保留格式
- Token 消耗极低(~100 tokens)
- 速度快
- 用户可直接复制编辑
实现:
- 1. 使用
evaluate_script 执行 JavaScript - 查询
.ds-markdown 或 [class*="message-content"] 元素 - 提取
innerText 返回
方法 2: 截图返回
优点:
缺点:
方法 3: LLM 整理(传统方式)
优点:
缺点:
- - Token 消耗高(~2k+ tokens)
- 速度慢
完整查询流程示例(含故障恢复)
ds: 前缀查询(推荐方式)
用户: "ds:什么是量子计算?"
- 1. 识别并移除 "ds:" 前缀,实际查询:"什么是量子计算?"
- 检查 MCP 服务状态,如不可用执行自动恢复流程
- 使用 Chrome DevTools MCP 导航到 chat.deepseek.com
- 获取快照检测登录状态
- 如果未登录,截图提示用户登录
- 如果已登录:
- 查找并点击深度思考按钮(如未启用)
- 点击输入框获取焦点
- 输入问题
- 按 Enter 发送
- 7. 等待回答完成
- 使用 evaluate_script 提取 Markdown 内容
- 直接返回提取的原始文本
- 保持页面打开
快速复用
用户: "ds:再详细说一下 asyncio 的事件循环"
- 1. 识别并移除 "ds:" 前缀
- 检查 MCP 服务状态,如不可用执行自动恢复流程
- 复用已打开的页面(使用
list_pages 和 select_page) - 直接输入新问题并获取回答
命令速查
MCP 服务管理
CODEBLOCK20
浏览器管理
CODEBLOCK21
CDP 验证
CODEBLOCK22
DeepSeek 查询
CODEBLOCK23
Notes
- - ds: 前缀:使用 "ds:" 或 "ds:" 前缀可以确保优先使用此技能进行查询
- 自动恢复:MCP 服务故障时会自动尝试恢复,无需手动干预
- 首次使用需要登录 DeepSeek 账号
- 浏览器页面会保持打开状态,供后续查询使用
- 如需关闭页面,使用
close_page 工具 - 查询结果取决于 DeepSeek 网页版的响应速度,通常需要 10-30 秒
- 默认使用 evaluate_script 提取方案,兼顾速度和质量
- Chrome DevTools MCP 需要浏览器通过
--remote-debugging-port 启动(内置 openclaw 配置文件已自动处理) - 故障恢复最多尝试 2 次,避免无限循环
- 如果 MCP 完全不可用,建议向用户说明并提供替代方案(如 Tavily 搜索)
依赖技能
本技能依赖于以下技能的正常工作:
- - chrome-devtools-mcp-manager: 用于管理 Chrome 浏览器和 MCP 服务的生命周期
- browser tool: OpenClaw 内置的浏览器控制工具
- mcporter: MCP 服务器管理 CLI 工具
故障排除
MCP 服务持续不可用
如果自动恢复流程无法解决问题:
- 1. 检查 Node.js 环境
CODEBLOCK24
- 2. 检查 chrome-devtools-mcp 包
CODEBLOCK25
- 3. 检查端口占用
CODEBLOCK26
- 4. 手动重启
CODEBLOCK27
- 5. 联系用户
如果以上步骤都无法解决问题,向用户报告:
- 当前状态
- 已尝试的解决方案
- 建议的替代方案(如 Tavily 搜索)
DeepSeek Web Query
概述
本技能用于将用户的查询请求转发到 DeepSeek 网页版,利用 DeepSeek 的联网搜索能力获取最新信息,同时减轻主模型的负担。
技术栈: 使用 Chrome DevTools MCP (通过 mcporter) 控制浏览器,替代原有的 Playwright 方案。
故障恢复: 如果 Chrome DevTools MCP 服务不可用,会自动尝试使用 chrome-devtools-mcp-manager 技能启动浏览器和 MCP 服务。
使用时机
当用户有以下需求时触发此技能:
- - 优先触发:提问以 ds: 或 ds: 开头(例如:ds:什么是量子计算?)
- 用 Deep Seek 查一下...
- 联网搜索...
- 查下最新的...
- 搜索一下...
- 需要查询最新的互联网信息(新闻、技术文档、产品信息等)
- 一般性知识查询,不需要复杂的多步推理
- 代码相关问题,需要最新的 API 文档或最佳实践
- 文本分析、翻译、总结等任务
工作流程
步骤 0: 预处理查询(处理 ds: 前缀)
如果用户查询以 ds: 或 ds: 开头:
- 1. 移除前缀(ds: 或 ds:)
- 将剩余内容作为实际查询问题
- 继续执行后续步骤
例如:
- - 输入:ds:什么是量子计算? → 实际查询:什么是量子计算?
- 输入:ds:最新的Python版本是什么? → 实际查询:最新的Python版本是什么?
步骤 1: 检查并启动 Chrome DevTools MCP
在执行 MCP 操作前,先检查服务状态:
bash
检查 MCP 服务状态
mcporter list
如果服务不可用(连接错误或权限错误),执行自动恢复流程:
自动恢复流程
- 1. 检查内置 Chrome 浏览器状态
javascript
browser({
action: status,
profile: openclaw
})
- 2. 如果浏览器未运行,启动它
javascript
browser({
action: open,
profile: openclaw,
url: about:blank
})
等待 2-3 秒让浏览器完全启动。
- 3. 验证 CDP 端点可用
powershell
Invoke-WebRequest -Uri http://localhost:18800/json/version -Method GET
- 4. 重新配置 mcporter 的 MCP 服务器
bash
# 移除旧的配置(如果存在)
mcporter server remove chrome-devtools
# 添加新的 MCP 服务器配置
mcporter server add chrome-devtools \
--command npx \
--args chrome-devtools-mcp@latest,--browserUrl,http://127.0.0.1:18800,--no-usage-statistics
- 5. 验证 MCP 服务已恢复
bash
mcporter list
mcporter call chrome-devtools.list_pages
完整自动恢复脚本示例
javascript
// 步骤 1: 检查浏览器状态
const status = await browser({ action: status, profile: openclaw });
// 步骤 2: 如果未运行,启动浏览器
if (!status.cdpReady) {
await browser({ action: open, profile: openclaw, url: about:blank });
await new Promise(r => setTimeout(r, 3000)); // 等待启动
}
// 步骤 3: 验证 CDP 端点
// (使用 exec 执行 PowerShell 命令)
// 步骤 4: 重新配置 mcporter
// (使用 exec 执行 mcporter 命令)
// 步骤 5: 验证 MCP 服务
// (使用 exec 执行 mcporter list)
步骤 2: 打开浏览器并检测登录状态
- 1. 使用 Chrome DevTools MCP 打开 DeepSeek:
bash
创建新页面并导航到 DeepSeek
mcporter call chrome-devtools.new_page url: https://chat.deepseek.com/
或者导航到现有页面
mcporter call chrome-devtools.navigate_page type: url url: https://chat.deepseek.com/
- 2. 等待页面加载完成后,获取页面快照:
bash
mcporter call chrome-devtools.take_snapshot
- 3. 根据快照内容检测登录状态:
-
登录页面特征:包含手机号、验证码、登录、微信扫码登录等文本
-
已登录页面特征:包含发送消息、深度思考、新对话等文本
如果 MCP 调用失败,再次执行自动恢复流程,然后重试。
步骤 3: 处理登录(如需要)
如果检测到未登录:
- 1. 截图展示登录页面给用户:
bash
mcporter call chrome-devtools.take_screenshot
- 2. 提示用户:请先登录 DeepSeek(手机号+验证码或微信扫码)
- 等待用户完成登录
- 用户登录完成后,重新检测状态(重复步骤 2)
步骤 4: 执行查询
- 1. 获取页面快照,找到输入框和深度思考按钮的 uid:
bash
mcporter call chrome-devtools.take_snapshot
- 2. 启用深度思考模式(如果未启用):
- 在快照中查找包含深度思考文本的按钮
- 如果按钮状态显示未启用,点击启用:
bash
mcporter call chrome-devtools.click uid: <深度思考按钮的uid>
- 3. 点击输入框获取焦点:
bash
mcporter call chrome-devtools.click uid: <输入框的uid>
- 4. 输入用户问题:
bash
mcporter call chrome-devtools.type_text text: 用户查询问题
- 5. 按 Enter 发送:
bash
mcporter call chrome-devtools.press_key key: Enter
- 6. 等待回答完成:
- 等待 已思考 或 已深度思考 文本出现
- 或者等待停止按钮消失
bash
mcporter call chrome-devtools.wait_for text: [已思考, 已深度思考] timeout: 60000
步骤 5: 提取结果
使用 evaluate_script 提取 Markdown 内容:
bash
mcporter call chrome-devtools.evaluate_script function:
() => {
// 方法1: 尝试点击 copy 按钮后从页面提取
const copyButtons = document.querySelectorAll(button[title=\复制\], button[class=\copy\], [class*=\copy-button\]);
if (copyButtons.length > 0) {
copyButtons[copyButtons.length - 1].click();
}
// 等待一下复制完成
return new Promise(resolve => {
setTimeout(() => {
// 提取 Markdown 内容
const markdownElements = document.querySelectorAll(.ds-markdown, [class=\markdown\], [class=\message-content\]);
let result = ;
markdownElements.forEach(el => {
if (el.innerText && el.innerText.trim().length > 0) {
result += el.innerText + \n\n;
}
});
resolve(result.trim());
}, 500);
});
}
备选方案:如果上述方法失败,直接提取页面文本:
bash
mcporter call chrome-devtools.evaluate_script function:
() => {
const messages = document.querySelectorAll(.ds-markdown, [class=\message-content\], [class=\chat-message\]);
const lastMessage = messages[messages.length - 1];
return lastMessage ? lastMessage.innerText : document.body.innerText;
}
步骤 6: 结果返回
重要:直接返回提取的原始内容,不要进行 LLM 二次总结或加工。
- - 直接将提取的 Markdown 文本返回给用户
- 不添加额外的解释、总结或格式化
- 不进行任何整理或编辑
- 保持 DeepSeek 原始输出的完整性
- 避免不必要的 token 消耗
步骤 7: 保持浏览器
重要: 不要关闭浏览器页面!保持浏览器会话供后续查询复用。
如需关闭,使用:
bash
mcporter call chrome-devtools.closepage pageId: id>
故障恢复机制详解
常见错误及处理
错误 1: connect EPERM 或管道连接错误
症状:
connect EPERM \\.\pipe\mcporter-daemon-xxx
处理: 执行完整自动恢复流程(步骤 1)。
错误 2: CDP not ready
症状: 浏览器状态显示 cdpReady: false