ChatGPT浏览器集成实战:从插件开发到API调用的完整指南

1次阅读
没有评论

共计 1804 个字符,预计需要花费 5 分钟才能阅读完成。

image.webp

浏览器集成 AI 助手能大幅提升工作效率,典型场景包括:

ChatGPT 浏览器集成实战:从插件开发到 API 调用的完整指南

  • 表单智能填充:自动识别网页输入框并生成合规数据
  • 代码实时补全:在开发工具中提供 AI 建议
  • 内容摘要生成:快速提炼网页文章核心观点

技术方案对比

浏览器插件方案

优势
– 完全掌控 DOM 操作权限
– 可长期保持后台服务运行
– 支持离线功能开发

劣势
– 需处理 MV3 的 Service Worker 生命周期
– 上架商店需严格隐私审查

网页直连 API 方案

优势
– 开发调试流程简单
– 无需处理插件更新机制

劣势
– 受 CORS 策略严格限制
– API 密钥存在暴露风险

核心实现

Chrome 插件基础配置

// manifest.json (MV3 规范)
{
  "manifest_version": 3,
  "name": "AI 助手",
  "version": "1.0",
  "background": {"service_worker": "background.js"},
  "content_scripts": [{"matches": ["<all_urls>"],
    "js": ["content.js"]
  }],
  "permissions": ["storage"]
}

API 交互模块

/**
 * 带重试机制的 API 请求
 * @param prompt - 用户输入文本
 * @param retries - 最大重试次数  
 */
async function queryChatGPT(prompt: string, retries = 3): Promise<string> {
  const API_ENDPOINT = 'https://api.openai.com/v1/chat/completions';

  try {
    const response = await fetch(API_ENDPOINT, {
      method: 'POST',
      headers: {'Authorization': `Bearer ${await getTempToken()}`,
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({
        model: "gpt-3.5-turbo",
        messages: [{role: "user", content: prompt}]
      })
    });

    if (!response.ok) throw new Error(`HTTP ${response.status}`);
    return (await response.json()).choices[0].message.content;
  } catch (error) {if (retries > 0) return queryChatGPT(prompt, retries - 1);
    throw new Error(`API 请求失败: ${error}`);
  }
}

通信流程实现

  1. Content Script 捕获页面事件
  2. 通过 chrome.runtime.sendMessage 发送请求
  3. Background Worker 处理 API 调用
  4. 使用 chrome.tabs.sendResponse 返回结果

性能与安全

请求节流设计

  • 采用令牌桶算法控制请求频率
  • 错误响应自动触发退避重试
// 令牌桶实现示例
class RateLimiter {constructor(capacity, refillRate) {
    this.tokens = capacity;
    setInterval(() => {this.tokens = Math.min(capacity, this.tokens + refillRate);
    }, 1000);
  }

  async acquire() {while (this.tokens < 1) {await new Promise(resolve => setTimeout(resolve, 100));
    }
    this.tokens--;
  }
}

敏感数据保护

  • 使用 chrome.storage.local 存储加密 token
  • 设置 token 自动过期时间(推荐 1 小时)
  • 实现权限分级控制

常见问题解决方案

CORS 问题突破

  1. 插件模式:利用 chrome.webRequest 修改响应头
  2. 代理方案:通过自有服务器中转请求
  3. 本地开发:配置 devServer 代理

商店审核要点

  • 明确声明数据收集范围
  • 提供隐私政策链接
  • 禁止静默追踪用户行为

进阶实践

查看完整示例项目:
GitHub 仓库 (包含单元测试与 CI 配置)

挑战任务
尝试在 background.js 中使用 LRU 缓存实现多轮对话上下文保持,需考虑:
– 会话 ID 的生成与关联
– token 消耗计算
– 自动清理过期会话

正文完
 0
评论(没有评论)