构建利用人工智能技术的 Chrome 扩展程序可以通过直接向浏览器添加强大的功能来显着增强用户体验。
在本教程中,我们将介绍使用 AI/ML API、Deepgram Aura 和 IndexDB 从头开始构建 Chrome 扩展程序(从设置到部署)的整个过程。我们将从设置开发环境开始,包括安装必要的工具和配置我们的项目。然后,我们将深入研究 Chrome 扩展程序的核心组件:manifest.json 包含有关扩展程序的基本元数据,scripts.js 负责我们的扩展程序的行为方式,styles.css 用于添加一些样式。我们将探索如何通过 AI/ML API 将这些技术与 Deepgram Aura 集成,并使用 IndexDB 作为生成的音频文件的临时存储。在此过程中,我们将讨论构建 Chrome 扩展、处理用户查询以及在数据库中保存数据的最佳实践。学完本教程后,您将在构建 Chrome 扩展程序方面打下坚实的基础,并具备构建任何人工智能驱动的 Chrome 扩展程序的能力。
让我们简要概述一下我们将要使用的技术。
AI/ML API 是一个改变游戏规则的平台,适合希望将尖端 AI 功能集成到其产品中的开发人员和 SaaS 企业家。 AI/ML API 提供对 200 多个最先进的 AI 模型的单点访问,涵盖从 NLP 到计算机视觉的所有内容。
面向开发者的主要功能:
深入研究 AI/ML API 文档; https://docs.aimlapi.com/
Chrome 扩展程序是一个小型软件程序,可修改或增强 Google Chrome 网络浏览器的功能。这些扩展是使用 HTML、CSS 和 JavaScript 等 Web 技术构建的,旨在服务于单一目的,使它们易于理解和使用。
浏览 Chrome 网上应用店; https://chromewebstore.google.com/
Deepgram Aura 是第一个专为实时对话式 AI 代理和应用程序设计的文本转语音 (TTS) AI 模型。它以无与伦比的速度和效率提供类人语音质量,使其成为构建响应灵敏、高吞吐量的语音 AI 体验的游戏规则改变者。
了解更多技术细节; https://aimlapi.com/models/aura
IndexedDB 是一个低级 API,用于客户端存储大量结构化数据(包括文件/blob)。 IndexedDB 是一个基于 JavaScript 的面向对象数据库。
了解更多关键概念和用法; https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API
构建 Chrome 扩展程序需要了解其结构、权限以及它如何与网页交互。我们将首先设置开发环境并创建扩展所需的基础文件。
在我们开始编码之前,请确保您具备以下条件:
最小的 Chrome 扩展程序至少需要三个文件:
让我们为我们的项目创建一个目录并设置这些文件。
第 1 步:创建新目录
打开终端并运行以下命令为您的扩展创建一个新文件夹:
mkdir my-first-chrome-extension cd my-first-chrome-extension
第 2 步:创建基本文件
在新目录中,创建必要的文件:
touch manifest.json touch scripts.js touch styles.css
manifest.json 文件是 Chrome 扩展程序的核心。它告诉浏览器您的扩展程序、它的用途以及它需要什么权限。让我们深入研究如何正确配置此文件。
{ "manifest_version": 3, "name": "Read Aloud", "version": "1.0", "description": "Read Aloud anything in any tab", "host_permissions": [ "*://*.aimlapi.com/*" ], "permissions": [ "activeTab" ], "content_scripts": [ { "matches": ["<all_urls>"], "js": ["scripts.js"], "css": ["styles.css"] } ], "icons": { "16": "icons/icon.png", "48": "icons/icon.png", "128": "icons/icon.png" } }
manifest.json 必须至少包含:
除了必要字段之外,我们将添加:
打开浏览器并访问 chatgpt.com。现在让我们为 Chrome 扩展程序生成图标。我们将使用一个图标来实现不同的尺寸(完全没问题)。
输入以下提示:
为我的“Read Aloud”Chrome 扩展程序生成黑白图标。此扩展允许用户突出显示网站中的特定文本并收听它。它是由人工智能驱动的 Chrome 扩展。背景应为白色且纯色。
等待几秒钟,直到 ChatGPT 生成图标(图像)。单击下载并将其重命名为 icon.png。然后放入icons文件夹内。
正确定义所有字段后,您的manifest.json将使浏览器能够理解并正确加载您的扩展。
scripts.js 文件包含控制扩展行为方式的逻辑。我们将概述您的脚本需要实现的关键功能。
首先设置必要的变量:
mkdir my-first-chrome-extension cd my-first-chrome-extension
您的扩展程序应该检测用户何时选择网页上的文本:
mkdir my-first-chrome-extension cd my-first-chrome-extension
touch manifest.json touch scripts.js touch styles.css
{ "manifest_version": 3, "name": "Read Aloud", "version": "1.0", "description": "Read Aloud anything in any tab", "host_permissions": [ "*://*.aimlapi.com/*" ], "permissions": [ "activeTab" ], "content_scripts": [ { "matches": ["<all_urls>"], "js": ["scripts.js"], "css": ["styles.css"] } ], "icons": { "16": "icons/icon.png", "48": "icons/icon.png", "128": "icons/icon.png" } }
// Set your AIML_API_KEY key const AIML_API_KEY = ''; // Replace with your AIML_API_KEY key // Create the overlay const overlay = document.createElement('div'); overlay.id = 'read-aloud-overlay'; // Create the "Read Aloud" button const askButton = document.createElement('button'); askButton.id = 'read-aloud-button'; askButton.innerText = 'Read Aloud'; // Append the button to the overlay overlay.appendChild(askButton); // Variables to store selected text and range let selectedText = ''; let selectedRange = null;
document.addEventListener('mouseup', (event) => { console.log('mouseup event: ', event); //...code }
当用户单击“朗读”按钮时:
const selection = window.getSelection(); const text = selection.toString().trim(); if (text !== '') { const range = selection.getRangeAt(0); const rect = range.getBoundingClientRect();
// Set the position of the overlay overlay.style.top = `${window.scrollY + rect.top - 50}px`; // Adjust as needed overlay.style.left = `${window.scrollX + rect.left + rect.width / 2 - 70}px`; // Adjust to center the overlay selectedText = text; selectedRange = range;
// Remove existing overlay if any const existingOverlay = document.getElementById('read-aloud-overlay'); if (existingOverlay) { existingOverlay.remove(); } // Append the overlay to the document body document.body.appendChild(overlay); } else { // Remove overlay if no text is selected const existingOverlay = document.getElementById('read-aloud-overlay'); if (existingOverlay) { existingOverlay.remove(); } }
// Function to handle text selection document.addEventListener('mouseup', (event) => { console.log('mouseup event: ', event); const selection = window.getSelection(); const text = selection.toString().trim(); if (text !== '') { const range = selection.getRangeAt(0); const rect = range.getBoundingClientRect(); // Set the position of the overlay overlay.style.top = `${window.scrollY + rect.top - 50}px`; // Adjust as needed overlay.style.left = `${window.scrollX + rect.left + rect.width / 2 - 70}px`; // Adjust to center the overlay selectedText = text; selectedRange = range; // Remove existing overlay if any const existingOverlay = document.getElementById('read-aloud-overlay'); if (existingOverlay) { existingOverlay.remove(); } // Append the overlay to the document body document.body.appendChild(overlay); } else { // Remove overlay if no text is selected const existingOverlay = document.getElementById('read-aloud-overlay'); if (existingOverlay) { existingOverlay.remove(); } } });
if (selectedText.length > 200) { // ...code }
要有效管理音频文件:
// Disable the button askButton.disabled = true; askButton.innerText = 'Loading...';
// Send the selected text to your AI/ML API for TTS const response = await fetch('https://api.aimlapi.com/tts', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${AIML_API_KEY}`, // Replace with your actual API key }, body: JSON.stringify({ model: '#g1_aura-asteria-en', // Replace with your specific model if needed text: selectedText }) });
try { // ...code if (!response.ok) { throw new Error('API request failed'); } // ...code } catch (error) { console.error('Error:', error); askButton.disabled = false; askButton.innerText = 'Read Aloud'; alert('An error occurred while fetching the audio.'); }
// Play the audio audio.play();
// Open IndexedDB const db = await openDatabase(); const audioId = 'audio_' + Date.now(); // Generate a unique ID for the audio
// Save audio blob to IndexedDB await saveAudioToIndexedDB(db, audioId, audioBlob);
IndexedDB 是一个强大的客户端存储系统,它允许我们存储大量数据,包括文件和 blob。
您需要创建四个主要函数来与 IndexedDB 交互:
mkdir my-first-chrome-extension cd my-first-chrome-extension
touch manifest.json touch scripts.js touch styles.css
{ "manifest_version": 3, "name": "Read Aloud", "version": "1.0", "description": "Read Aloud anything in any tab", "host_permissions": [ "*://*.aimlapi.com/*" ], "permissions": [ "activeTab" ], "content_scripts": [ { "matches": ["<all_urls>"], "js": ["scripts.js"], "css": ["styles.css"] } ], "icons": { "16": "icons/icon.png", "48": "icons/icon.png", "128": "icons/icon.png" } }
// Set your AIML_API_KEY key const AIML_API_KEY = ''; // Replace with your AIML_API_KEY key // Create the overlay const overlay = document.createElement('div'); overlay.id = 'read-aloud-overlay'; // Create the "Read Aloud" button const askButton = document.createElement('button'); askButton.id = 'read-aloud-button'; askButton.innerText = 'Read Aloud'; // Append the button to the overlay overlay.appendChild(askButton); // Variables to store selected text and range let selectedText = ''; let selectedRange = null;
为了提供无缝的用户体验,您的扩展程序应该有一个干净直观的界面。
定义样式:
document.addEventListener('mouseup', (event) => { console.log('mouseup event: ', event); //...code }
const selection = window.getSelection(); const text = selection.toString().trim(); if (text !== '') { const range = selection.getRangeAt(0); const rect = range.getBoundingClientRect();
// Set the position of the overlay overlay.style.top = `${window.scrollY + rect.top - 50}px`; // Adjust as needed overlay.style.left = `${window.scrollX + rect.left + rect.width / 2 - 70}px`; // Adjust to center the overlay selectedText = text; selectedRange = range;
// Remove existing overlay if any const existingOverlay = document.getElementById('read-aloud-overlay'); if (existingOverlay) { existingOverlay.remove(); } // Append the overlay to the document body document.body.appendChild(overlay); } else { // Remove overlay if no text is selected const existingOverlay = document.getElementById('read-aloud-overlay'); if (existingOverlay) { existingOverlay.remove(); } }
要与 AI/ML API 和 Deepgram Aura 模型交互,您需要一个 API 密钥。
mkdir my-first-chrome-extension cd my-first-chrome-extension
现在输入您的 API 密钥:
touch manifest.json touch scripts.js touch styles.css
但它不会立即起作用。在 Chrome 扩展程序中使用 .env 需要其他额外的配置。我们将在接下来的教程中讨论这个问题。
{ "manifest_version": 3, "name": "Read Aloud", "version": "1.0", "description": "Read Aloud anything in any tab", "host_permissions": [ "*://*.aimlapi.com/*" ], "permissions": [ "activeTab" ], "content_scripts": [ { "matches": ["<all_urls>"], "js": ["scripts.js"], "css": ["styles.css"] } ], "icons": { "16": "icons/icon.png", "48": "icons/icon.png", "128": "icons/icon.png" } }
所有组件就位后,就可以将扩展程序加载到 Chrome 浏览器中并查看其运行情况了。
启用开发者模式:切换右上角的“开发者模式”开关。
在本教程中,我们:
有了扎实的基础,你就可以进一步增强你的延伸:
恭喜您构建了一个集成了高级 AI 功能的 Chrome 扩展!该项目展示了如何将网络技术与强大的 API 相结合来创建引人入胜且易于访问的用户体验。您现在已经具备了开发和扩展此扩展或创建利用 AI/ML API 的全新扩展的知识。
Github 上提供了完整的实现; https://github.com/TechWithAbee/Building-a-Chrome-Extension-from-Scratch-with-AI-ML-API-Deepgram-Aura-and-IndexDB-Integration
如果您有任何疑问或需要进一步帮助,请随时通过电子邮件联系 abdibrokhim@gmail.com。
以上是使用 AI/ML API、Deepgram Aura 和 IndexedDB 集成从头开始构建 Chrome 扩展的详细内容。更多信息请关注PHP中文网其他相关文章!