omp packages

@lijian-ui/pi-deepseek-web0.1.0

pi 扩展:为 pi 提供 web_search / web_fetch 工具,底层用 DeepSeek 官方网页搜索与抓取 API

lijian-ui Published 10 days ago MIT ~231 downloads/mo

Untested on omp

This is a pi package. No one has reported whether it works on omp yet. If you try it, add your result below.

Did it work for you?

Result

One report per person. A new report replaces your old one.

Reports 0

No reports yet.

Readme

pi-deepseek-web

给 pi CLI 的扩展,新增两个工具:

工具 作用 后端
web_search 搜索网页,返回标题、链接、长摘要、站点、权威性评分 POST https://api.deepseek.com/v1/tools/search
web_fetch 打开指定 URL,返回标题 + Markdown 正文 POST https://api.deepseek.com/v1/tools/fetch

两者的分工和模型行为一致:先 web_search 拿线索,再对具体链接 web_fetch 读正文,避免模型凭摘要臆测细节。

准备

不需要额外配 Key:扩展直接复用 pi 里已经配置好的 DeepSeek 凭据。

# 在 pi 里登录一次(之后所有会话复用)
/login deepseek

如果你习惯用环境变量,pi 自身也会读 DEEPSEEK_API_KEY,两种方式都行:

export DEEPSEEK_API_KEY=sk-xxxx          # macOS / Linux
$env:DEEPSEEK_API_KEY="sk-xxxx"          # Windows PowerShell

一个都没有时,两个工具会返回一条明确的错误文本,提示你先去 /login deepseek, 不会静默失败。

安装

前置:先装 pi(另一台电脑上)

npm install -g @earendil-works/pi-coding-agent
pi --version

方式一:从 npm 安装(推荐)

pi install npm:@lijian-ui/pi-deepseek-web
# 锁版本
pi install npm:@lijian-ui/pi-deepseek-web@0.1.0
# 以后更新
pi update --extensions
# 卸载
pi remove npm:@lijian-ui/pi-deepseek-web

pi 会用生产模式安装依赖(--omit=dev),运行时依赖 typebox 已在 dependencies 里,无需额外操作。

方式二:本地目录安装(改代码时用)

cd E:\Project\deepseek-web
npm install --omit=dev
pi install .

方式三:临时试跑(完全不装)

cd E:\Project\deepseek-web
npm install          # 开发用,含 devDependencies
pi -e ./src/index.ts

如果不想走 npm 而想直接拷源码目录,注意目录必须是 ~/.pi/agent/extensions/<名字>/,且里面要有 index.ts(仓库已带,它转发到 src/index.ts),并在该目录执行 npm install --omit=dev。

验证是否加载成功

进 pi 后输入 /reload,然后问一句:

你有哪些 web 工具?web_search 的参数是什么?

能看到 web_search / web_fetch 就算装好;如果会话启动时就弹了「没有配置 DeepSeek 凭据」的警告,说明扩展已加载,只是还没 /login deepseek。

配置项

环境变量 必填 默认 说明
DEEPSEEK_API_KEY 否 pi 的 DeepSeek 凭据 设了优先用环境变量;没设就用 pi 里 /login deepseek 存的 Key
DEEPSEEK_BASE_URL 否 https://api.deepseek.com 指向自建代理/网关时用,可写成 .../v1 也会自动归一

凭据每次调用时才解析,所以在 pi 里换 Key 不用重启扩展。

其他内置约束(改源码即可调整):

  • 请求超时 60s,尊重 pi 的取消信号(Ctrl+C 立即中断);
  • count 上限收到 20(官方允许 50,但一次塞 50 条摘要会污染上下文);
  • web_fetch 正文上限 10 万字符,超出截断并告知模型原文长度。

使用

装好后不用记工具名,正常提问即可,模型会自己选。它看到的是这几句引导:

  • 需要时效性事实(新闻、价格、版本、文档变更)→ 用 web_search,不要凭记忆答;
  • 只有主题没有链接 → 先 web_search;
  • 已经拿到具体 URL、需要读正文 → 用 web_fetch。

实际对话示例:

> 帮我查一下 DeepSeek tools/search 的计费方式

  ⟳ web_search  query="DeepSeek tools search 计费"  count=8
  ⟳ web_fetch   url="https://api-docs.deepseek.com/zh-cn/guides/search"
  ✔ 按官方文档,搜索按调用次数计费……

搜索语法直接写在 query 里:

  • site:api-docs.deepseek.com 限流
  • -site:zhihu.com "DeepSeek V4" 发布

想控制条数就明说「看前 3 条」,模型会把 count 设成 3(上限 20)。

错误处理

所有失败都以文本返回给模型(而不是抛异常中断回合),模型可以据此换关键词或换 URL:

  • pi 里没配 DeepSeek 凭据 → 返回提示,让你执行 /login deepseek(会话启动时也会先提醒一次);
  • 网络不可达 / 超时 → 提示检查网络与 DEEPSEEK_BASE_URL;
  • 接口 4xx/5xx → 返回状态码 + 响应体前 400 字符。

说明

  • 工具名采用 web_search / web_fetch,与 pi 内置工具无冲突;
  • 运行时只依赖 typebox;@earendil-works/pi-coding-agent 仅用于类型,不会在运行时加载;
  • 扩展通过 jiti 直接执行 TypeScript,无需编译。