⚠️ 学习研究项目,非生产用途本项目是作者为研究底层 Agent 工作原理而创建的个人学习项目,代码结构和实现均以探索为目的,不适合用于生产环境。
目前实测效果并不理想:网页版 AI 对工具调用的支持参差不齐,稳定性和准确性均有较大局限,距离实用仍有差距。
OpenLink 通过浏览器扩展模拟用户操作来驱动网页 AI,并不是一个 API 接口,不适合作为日常 API 调用使用。请合理使用,勿滥用。
让网页版 AI(Gemini、AI Studio)直接访问你的本地文件系统和执行命令。
AI 网页 → 输出 <tool> 指令 → Chrome 扩展拦截 → 本地 Go 服务执行 → 结果返回 AI
macOS / Linux
curl -fsSL https://raw.githubusercontent.com/jkxiongxin/openlink/main/install.sh | shWindows(PowerShell)
irm https://raw.githubusercontent.com/jkxiongxin/openlink/main/install.ps1 | iex安装完成后运行:
openlink服务默认监听 http://127.0.0.1:39527,启动后会输出认证 URL。
Chrome Web Store 版本即将上线,目前请手动安装。
- 下载最新 Release 中的
openlink-extension.zip并解压 - 打开 Chrome,访问
chrome://extensions/ - 开启右上角「开发者模式」
- 点击「加载已解压的扩展程序」,选择解压后的目录
- 点击浏览器工具栏中的 OpenLink 图标
- 将终端输出的认证 URL 粘贴到「API 地址」输入框
- 点击保存
访问 Gemini、AI Studio 或 LMArena / Arena,点击页面右下角的「🔗 初始化」按钮,AI 即可开始使用本地工具。
如果你要使用 Google Labs Flow 的图片 / 视频生成能力,则不需要点击「🔗 初始化」。Flow 通过 OpenLink 提供的 OpenAI 兼容接口下发任务,由浏览器扩展在已登录的 Flow 页面中代为执行。
如果你要使用浏览器网页作为 OpenAI 兼容的文本接口,也不需要点击「🔗 初始化」。保持对应网站的已登录页面打开,服务端会把 /v1/chat/completions 文本任务交给扩展在页面中提交并等待回答。Gemini 文本接口同时支持 gemini.google.com 和 aistudio.google.com 页面接单。
目前测试效果最佳的平台是 Google AI Studio
AI Studio 原生支持配置系统提示词(System Instructions),点击「🔗 初始化」后会自动将工具说明写入系统提示词,无需占用对话上下文,工具调用更稳定、更准确。
其他平台通过对话消息注入提示词,效果因模型而异。
| 平台 | 状态 | 备注 |
|---|---|---|
| Google AI Studio | ✅ | 推荐,原生支持系统提示词 |
| Google Gemini | ✅ | |
LMArena / Arena (arena.ai) |
✅ | 支持 /text/direct 和进入对话后的 /c/... 页面 |
ChatGPT (chatgpt.com) |
✅ | 支持工具卡片、图片任务和 Phase 1 浏览器文本接口 |
Claude (claude.ai) |
✅ | 新增 Phase 1 浏览器文本接口,建议先开 debugMode 验证选择器 |
DeepSeek (chat.deepseek.com) |
✅ | 支持工具卡片和 Phase 1 浏览器文本接口 |
Kimi (kimi.com / moonshot.cn) |
✅ | 新增 Phase 1 浏览器文本接口,建议先开 debugMode 验证选择器 |
Perplexity (perplexity.ai) |
✅ | 新增 Phase 1 浏览器文本接口,建议先开 debugMode 验证选择器 |
通义千问 / Qwen (chat.qwen.ai) |
✅ | 支持工具卡片、图片任务和 Phase 1 浏览器文本接口 |
豆包 / Doubao (doubao.com) |
✅ | 支持工具卡片和 Phase 1 浏览器文本接口 |
z.ai / GLM International (chat.z.ai) |
✅ | 新增 Phase 1 浏览器文本接口,建议先开 debugMode 验证选择器 |
Google Labs Flow (labs.google/fx) |
✅ | 支持图片 / 视频生成;通过 OpenAI 兼容接口调用;无需初始化 |
LMArena / Arena 目前通过对话消息注入提示词工作,兼容性和工具调用稳定性仍依赖具体模型与页面结构。
Flow 不是通过网页对话里的
<tool>调用来工作的,而是由扩展在已打开的 Flow 页面里执行生成任务,所以不需要「初始化」步骤。
OpenLink 现在可以把一部分 OpenAI 兼容请求路由到已打开的浏览器网页:
GET /v1/models:返回媒体模型和浏览器文本模型POST /v1/chat/completions:文本模型返回普通 chat completion;媒体模型保持原有图片 / 视频响应POST /v1/images/generations:图片生成 POST /v1/images/edits:图片编辑 / 参考图生成
Phase 1 文本模型:
| 模型 ID | 网站 |
|---|---|
gemini-web/gemini-2.5-pro |
Gemini |
chatgpt-web/gpt-4o |
ChatGPT |
claude-web/claude-sonnet-4-6 |
Claude |
kimi-web/moonshot-v1-32k |
Kimi |
perplexity-web/perplexity-web |
Perplexity |
glm-intl-web/glm-4-plus |
z.ai / GLM International |
qwen-web/qwen-plus |
Qwen |
deepseek-web/deepseek-chat |
DeepSeek |
doubao-web/doubao-seed-2.0 |
Doubao |
文本调用示例:
curl http://127.0.0.1:39527/v1/chat/completions \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-web/deepseek-chat",
"messages": [
{
"role": "user",
"content": "用三句话解释 OpenLink 的浏览器文本接口"
}
]
}'当前限制:
- 需要先打开并登录目标网站页面,扩展会在该页面轮询任务。
- 文本接口 Phase 1 只支持非流式响应;
stream: true会返回明确的暂不支持错误。 - 文本任务使用最近一条用户消息作为主要提示词;图片引用的文本多模态输入还没有在所有文本网站上做完整适配。
- 网页 DOM 变化可能影响提交按钮和回答提取,调试新站点时请先打开扩展的
debugMode。 - 新增的 Claude / Kimi / Perplexity / z.ai 站点采用 DOM 选择器方式接入,第一次使用时建议在真实登录页面上做一次端到端冒烟验证。
Flow 主要用于媒体生成,不用于本地工具调用。
- 启动本地 OpenLink 服务
- 加载最新版浏览器扩展
- 打开并登录 Google Labs Flow
- 保持 Flow 页面处于打开状态
Flow 不需要点击右下角的「🔗 初始化」按钮。
你可以直接通过 OpenLink 提供的 OpenAI 兼容接口发起生成请求:
POST /v1/images/generationsPOST /v1/chat/completions
其中:
labs-google-fx/labs-google-fx-image用于图片生成labs-google-fx-video/labs-google-fx-veo用于纯文本视频生成labs-google-fx-video-reference/labs-google-fx-veo-reference用于参考图视频生成labs-google-fx-video-start-end/labs-google-fx-veo-start-end用于首尾帧视频生成
curl http://127.0.0.1:39527/v1/images/generations \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"model": "labs-google-fx",
"prompt": "一只戴墨镜的橘猫,电影感,海报风格"
}'curl http://127.0.0.1:39527/v1/chat/completions \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"model": "labs-google-fx-video",
"messages": [
{
"role": "user",
"content": "一只海龟飞出海面,电影感镜头"
}
]
}'Flow 也支持基于图片生成:
- 图片生成时可传
image/images/reference_images - 视频生成时可在
chat/completions的用户消息中传image_url - 参考图视频请使用
labs-google-fx-video-reference - 首尾帧视频请使用
labs-google-fx-video-start-end - 首尾帧模式会取前 2 张参考图作为首帧和尾帧
生成完成后,媒体文件会保存到当前工作目录下的 .openlink/generated/,接口响应会返回 OpenLink 代理后的访问地址。
| 工具 | 说明 |
|---|---|
exec_cmd |
执行 Shell 命令 |
list_dir |
列出目录内容 |
read_file |
读取文件内容(支持分页) |
write_file |
写入文件内容(支持追加/覆盖) |
glob |
按文件名模式搜索文件 |
grep |
正则搜索文件内容 |
edit |
精确替换文件中的字符串 |
web_fetch |
获取网页内容 |
question |
向用户提问并等待回答 |
skill |
加载自定义 Skill |
todo_write |
写入待办事项 |
在任意支持的 AI 平台输入框中,OpenLink 提供两种快捷触发:
| 触发方式 | 效果 |
|---|---|
输入 / |
弹出当前项目所有 Skills 列表,选择后自动插入工具调用 XML |
输入 @ |
弹出工作目录文件路径补全列表,选择后插入文件路径 |
操作方式:
- ↑ / ↓ 键盘导航
- Enter 确认选择
- Escape 或点击外部关闭
Skills 是放在本地的 Markdown 文件,AI 可以按需加载,用于扩展特定领域的能力(如部署流程、代码规范、项目约定等)。
OpenLink 会依次扫描以下目录,同名 Skill 以先找到的为准:
<工作目录>/.skills/
<工作目录>/.openlink/skills/
<工作目录>/.agent/skills/
<工作目录>/.claude/skills/
~/.openlink/skills/
~/.agent/skills/
~/.claude/skills/
在任意 Skills 目录下创建子目录,并在其中放置 SKILL.md:
.skills/
└── deploy/
└── SKILL.md
SKILL.md 格式:
---
name: deploy
description: 项目部署流程
---
## 部署步骤
...AI 通过 skill 工具加载:
<tool name="skill">
<parameter name="skill">deploy</parameter>
</tool>
- 沙箱隔离:所有文件操作限制在指定工作目录内
- 危险命令拦截:
rm -rf、sudo、curl等命令被屏蔽 - 超时控制:命令执行默认 60 秒超时
openlink [选项]
选项:
-dir string 工作目录(默认:当前目录)
-port int 监听端口(默认:39527)
-timeout int 命令超时秒数(默认:60)加微信:afumudev
备注:openlink
本项目在开发过程中参考了以下优秀的开源项目:
感谢这些项目的作者和贡献者。
本项目仅供学习和研究使用,严禁用于任何商业用途。