Web 搜索、内容提取与视频分析扩展 for Pi Agent.
支持 OpenAI/Codex、Exa、Brave、Parallel、Tavily、Perplexity、Gemini API,以及自定义 Gemini 代理网关。
Forked from nicobailon/pi-web-access — 增加自定义 Gemini 代理网关支持,修复了代理响应无 grounding chunks 时搜索结果显示为空的 bug。
- 🌐 Web 搜索 — 多引擎:OpenAI、Exa、Brave、Parallel、Tavily、Perplexity、Gemini
- 🔧 自定义 Gemini 代理网关 — 支持如
gcli.ggchan.dev等第三方 Gemini API 代理 - 🎥 视频理解 — YouTube 视频分析、本地视频分析、帧提取
- 📄 内容抓取 — 网页、PDF、GitHub 仓库、RSC
- 🛡️ 智能回退 — 一个引擎失败自动尝试下一个
pi install npm:pi-web-access或者从源码安装:
git clone https://github.com/lide4144/pi-web-access.git
cd pi-web-access
pi link .配置文件位于 ~/.pi/web-search.json:
{
"provider": "gemini",
"geminiBaseUrl": "https://gcli.ggchan.dev",
"searchModel": "gemini-3.5-flash-search"
}| 配置项 | 说明 |
|---|---|
provider |
默认搜索提供商:auto, openai, brave, parallel, tavily, exa, perplexity, gemini |
geminiBaseUrl |
Gemini API 代理网关地址。也可用环境变量 GOOGLE_GEMINI_BASE_URL |
searchModel |
Gemini 搜索模型名。常用值见下方表格 |
geminiApiKey |
Gemini API 密钥。也可用环境变量 GEMINI_API_KEY |
| 变量 | 对应配置项 |
|---|---|
GEMINI_API_KEY |
geminiApiKey |
GOOGLE_GEMINI_BASE_URL |
geminiBaseUrl |
CLOUDFLARE_API_KEY |
cloudflareApiKey |
OPENAI_API_KEY |
openaiApiKey |
BRAVE_API_KEY |
braveApiKey |
EXA_API_KEY |
exaApiKey |
PERPLEXITY_API_KEY |
perplexityApiKey |
TAVILY_API_KEY |
tavilyApiKey |
以下模型来自 gcli.ggchan.dev 代理网关示例:
| 模型名 | 说明 |
|---|---|
gemini-3.5-flash-search |
⭐ 推荐 最快 Flash + 搜索接地 |
gemini-3.5-flash |
Gemini 3.5 Flash |
gemini-3-flash-preview-search |
Gemini 3 Flash 预览版 + 搜索 |
gemini-3-flash-preview |
Gemini 3 Flash 预览版 |
gemini-3.1-pro-preview-search |
Gemini 3.1 Pro 预览版 + 搜索 |
gemini-2.5-pro-search |
Gemini 2.5 Pro + 搜索 |
gemini-2.5-flash-lite |
Gemini 2.5 Flash Lite |
如果你使用官方 Google AI Studio API 密钥(以
AIza开头),无需设置geminiBaseUrl,直接用:{ "provider": "gemini", "searchModel": "gemini-2.5-flash" }
// 基本搜索(使用配置文件中的 provider)
web_search({ query: "TypeScript 最佳实践 2025" })
// 多个查询角度
web_search({ queries: ["React vs Vue 性能对比", "React 生态 vs Vue 生态"] })
// 指定 provider
web_search({ query: "...", provider: "gemini" })
// 更多参数
web_search({
query: "最新新闻",
numResults: 10,
recencyFilter: "week",
provider: "gemini",
workflow: "none" // 跳过浏览器 curator
})fetch_content({ url: "https://example.com/article" })
fetch_content({ urls: ["url1", "url2"] })fetch_content({ url: "https://github.com/owner/repo" })// YouTube 视频
fetch_content({ url: "https://youtube.com/watch?v=abc", prompt: "视频里用了哪些库?" })
// 本地视频
fetch_content({ url: "/path/to/recording.mp4", prompt: "屏幕上出现了什么错误?" })
// 帧提取
fetch_content({ url: "https://youtube.com/watch?v=abc", timestamp: "23:41-25:00", frames: 4 })此版本的核心增强——如果你有第三方 Gemini API 代理(例如通过 gg-cli 搭建的网关),按以下步骤配置:
# Windows (cmd)
set GEMINI_API_KEY=your-custom-key
set GEMINI_API_BASE=https://your-gateway.example.com
# 或者写入 ~/.pi/web-search.json{
"provider": "gemini",
"geminiBaseUrl": "https://your-gateway.example.com",
"searchModel": "gemini-3.5-flash-search"
}curl -s "https://your-gateway.example.com/v1beta/models?key=$GEMINI_API_KEY" | jq '.models[].name'- 代理网关的 API 返回可能不含
groundingChunks(Google 搜索引用来源)。本版本已修复此问题——即使来源为空也能正常显示答案文本 - 代理模型名通常带
-search后缀(如gemini-3.5-flash-search),表示支持google_search工具
相比原始版本,本 fork 修复了以下问题:
问题现象:使用 GEMINI_API_KEY + 自定义代理网关时,web_search 始终返回 "No results found",即使 API 正确返回了答案文本。
根本原因:第三方 Gemini 代理通常不返回 groundingMetadata.groundingChunks(Google 搜索引用来源)。pi-web-access 的 searchWithGeminiApi 能正确获取 answer 文本,但后续 buildSearchReturn 中判断 results.length === 0 就直接输出 "No results found",忽略了已有的答案。
修复:
index.ts— 只有results.length === 0 && !answer才显示 "No results found"formatSearchSummary— 无来源时不再显示空的 "Sources:" 头部
更改涉及 index.ts 中的两处代码,总共约 5 行。
| 文件 | 用途 |
|---|---|
index.ts |
扩展入口,工具注册,命令处理 |
gemini-search.ts |
搜索路由与 Gemini API 搜索 |
gemini-api.ts |
Gemini REST API 客户端 |
gemini-web.ts |
Gemini Web 客户端(浏览器 Cookie) |
gemini-web-config.ts |
Gemini Web 配置 |
extract.ts |
URL 路由、HTTP 抓取、回退 |
curator-page.ts |
curator UI(HTML/CSS/JS) |
curator-server.ts |
临时 HTTP 服务器 |
youtube-extract.ts |
YouTube 视频提取 |
video-extract.ts |
本地视频分析 |
github-extract.ts |
GitHub 仓库克隆 |
openai-search.ts |
OpenAI/Codex 搜索 |
brave.ts |
Brave 搜索 |
parallel.ts |
Parallel AI 搜索 |
tavily.ts |
Tavily 搜索 |
exa.ts |
Exa 搜索 |
perplexity.ts |
Perplexity 搜索 |
MIT