建立利用 AI 技術的 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中文網其他相關文章!