Hướng dẫn Perplexity Search API: Xây dựng công cụ kiểm tra tuyên bố theo thời gian thực ngay trên trình duyệt
Tìm hiểu cách dùng Perplexity Search API để xây dựng tiện ích Chrome xác minh phát biểu thực tế theo thời gian thực. Bao gồm thiết lập backend Node.js và hướng dẫn tích hợp API.
Gần đây, Perplexity đã ra mắt Perplexity Search API, được thiết kế cho việc truy xuất web chi tiết, trả về các đoạn trích giàu ngữ cảnh đã được xếp hạng thay vì toàn bộ trang. API này phục vụ các tình huống thời gian thực như kiểm chứng thông tin, nghiên cứu, và các pipeline RAG, nơi tốc độ và độ chính xác là ưu tiên.
Trong hướng dẫn này, chúng ta sẽ xây dựng Claim Checker, một tiện ích mở rộng trình duyệt giúp xác minh các phát biểu thực tế trên bất kỳ trang web nào theo thời gian thực (dựa trên bằng chứng truy xuất từ web). Bạn sẽ thấy chỉ mục luôn được làm mới và ngăn xếp truy xuất độ trễ thấp của Perplexity Search API, kết hợp với tín hiệu ngữ nghĩa và tái xếp hạng nhiều giai đoạn, giúp tìm nhanh bằng chứng phù hợp nhất. Trong quá trình này, bạn sẽ học cách:
Khai thác Perplexity Search API để lấy bằng chứng chất lượng cao, có xếp hạng từ web và xử lý kết quả tìm kiếm bằng thuật toán sắp xếp tùy chỉnh.
Phát triển backend Node.js để quản lý an toàn khóa API của bạn, xử lý yêu cầu CORS, và triển khai xử lý kết quả thông minh với trích xuất miền và xếp hạng theo ngày.
Tạo tiện ích Chrome/Edge với content script cho phép chọn văn bản, giao diện bảng bên, và giao tiếp mượt giữa trình duyệt với máy chủ backend của bạn.
Hiển thị kết quả xác minh gồm URL nguồn, tiêu đề, đoạn trích, miền và ngày xuất bản trong bảng bên tương tác với xử lý tuyên bố theo thời gian thực.
Kết thúc bài, bạn sẽ có một công cụ kiểm chứng thông tin full-stack hoạt động mượt trong trình duyệt. Người dùng có thể chọn bất kỳ văn bản nào trên trang và nhận ngay kết quả xác minh kèm nguồn tham khảo, đồng thời vẫn giữ an toàn thông tin xác thực API ở phía máy chủ.
Perplexity Search API là cách thân thiện với nhà phát triển để nhận kết quả tìm kiếm web nhanh và chi tiết.
Khác với các API tìm kiếm truyền thống chỉ trả về toàn bộ trang, Perplexity cung cấp các đoạn trích và mảnh tài liệu con đã xếp hạng, chứa chính xác câu và đoạn phù hợp với truy vấn của bạn. Một số tính năng chính của API tìm kiếm này gồm:
Tiết kiệm chi phí: Search API có giá $5 cho mỗi 1.000 yêu cầu, không tính theo token, lý tưởng cho ứng dụng chạy kiểm tra thường xuyên hoặc theo lịch.
Truy xuất chất lượng cao: Kết hợp xếp hạng từ vựng và ngữ nghĩa với tái xếp hạng nhiều giai đoạn, giúp bạn nhận kết quả cực kỳ liên quan, cập nhật từ một chỉ mục khổng lồ, luôn được làm mới (~200 triệu truy vấn/ngày).
Độ trễ thấp: Perplexity search API phản hồi nhanh, giữ cho giao diện của bạn mượt mà ngay cả khi xác minh nhiều tuyên bố cùng lúc.
Với tiện ích của chúng ta, điều này có nghĩa là có thể truyền bất kỳ câu nào làm truy vấn và nhận về bằng chứng ủng hộ hoặc phủ nhận đáng tin cậy, kèm tiêu đề, URL và đoạn trích ngữ cảnh — hoàn hảo cho kiểm chứng theo thời gian thực.
Dự án Perplexity Search API: Tiện ích kiểm tra tuyên bố trên trình duyệt
Trong phần này, chúng ta sẽ xây dựng tiện ích mở rộng trình duyệt kiểm tra tuyên bố, xác minh ngay lập tức các phát biểu thực tế bằng Perplexity Search API. Dự án kết hợp:
Backend Node.js gọn nhẹ gửi văn bản đã chọn tới Perplexity Search API và xử lý kết quả
Tiện ích Chrome với giao diện bảng bên để hiển thị chi tiết xác minh
Content script thu nhận văn bản do người dùng chọn từ bất kỳ trang web nào
Kết thúc dự án, cấu trúc kho mã của bạn sẽ trông như sau:
Giờ chúng ta đã cài đặt xong các phụ thuộc. Tiếp theo, có thể xây dựng máy chủ backend và tiện ích mở rộng.
Bước 2: Xây dựng backend
Tệp server.js thiết lập backend Node.js gọn nhẹ bằng Express. Backend này là cầu nối giữa tiện ích trình duyệt và Perplexity Search API. Nó nhận các tuyên bố do người dùng chọn hoặc nhập, truy vấn Perplexity để lấy bằng chứng liên quan, rồi trả về phản hồi đã làm sạch, có cấu trúc, sẵn sàng hiển thị trên giao diện của tiện ích.
const express =require('express');const cors =require('cors');require('dotenv').config();const app =express();constPORT=3000;
app.use(cors());
app.use(express.json());functionextractDomain(url){try{const urlObj =newURL(url);return urlObj.hostname.replace('www.','');}catch{return url;}}
app.post('/check-claim',async(req, res)=>{try{const{ claim }= req.body;if(!claim){return res.status(400).json({error:'Claim is required'});}if(!process.env.PERPLEXITY_API_KEY){return res.status(500).json({error:'Perplexity API key not configured',sources:[]});}const response =awaitfetch('https://api.perplexity.ai/search',{method:'POST',headers:{'Authorization': Bearer ${process.env.PERPLEXITY_API_KEY},'Content-Type':'application/json'},body:JSON.stringify({query: claim,max_results:20,max_tokens_per_page:1024})});if(!response.ok){thrownewError(Perplexity APIerror: ${response.status});}const data =await response.json();const searchResults = data.results ||[];if(searchResults.length ===0){return res.json({
claim,sources:[],totalSources:0,explanation:'No relevant sources found to verify this claim.',summary:'No sources found for fact-checking.'});}const sortedResults = searchResults.sort((a, b)=>{const dateA =newDate(a.last_updated || a.date ||0);const dateB =newDate(b.last_updated || b.date ||0);return dateB - dateA;});const sources = sortedResults.slice(0,3).map((result)=>({url: result.url,title: result.title,snippet: result.snippet ||'',domain:extractDomain(result.url),date: result.date ||null,lastUpdated: result.last_updated ||null}));const result ={
claim,
sources,totalSources: searchResults.length,explanation: ${searchResults.length} sources found, showing top 3.,summary: Found ${searchResults.length} relevant sources for fact-checking.};
res.json(result);}catch(error){
res.status(500).json({error: error.message,sources:[]});}});
app.get('/health',(req, res)=>{
res.json({status:'ok'});});
app.listen(PORT,()=>{
console.log(Server running on http://localhost:${PORT});
console.log('Make sure PERPLEXITY_API_KEY is set in .env file');});Được hỗ trợ bởi
Đoạn mã trên là lớp bảo mật và logic cho tiện ích Claim Checker, thực hiện các chức năng sau:
Backend an toàn và có logic: Nhận một tuyên bố qua tuyến POST /check-claim, xác thực đầu vào, và gọi Perplexity Search API bằng khóa API lưu ở máy chủ.
Xử lý và cấu trúc hóa: Máy chủ nhận danh sách nguồn web và đoạn trích liên quan, sắp xếp theo độ mới bằng trường last_updated và ngày, chọn 3 mục hàng đầu, rồi trả về JSON gọn gàng cho tiện ích.
An toàn khóa: Chạy backend này giúp khóa API của bạn không lộ trên trình duyệt và cho phép bổ sung logic như xếp hạng, lọc, hoặc cache trước khi dữ liệu tới tay người dùng.
Thiết kế dễ mở rộng: Cách tiếp cận này giúp tiện ích an toàn hơn và dễ mở rộng cho các cải tiến tương lai như chấm điểm nâng cao, hợp nhất đa nguồn, hoặc phân tích.
Giờ chúng ta đã sẵn sàng cho máy chủ. Hãy xây dựng tiện ích Chrome.
Bước 3: Xây dựng tiện ích Chrome
Trong bước này, chúng ta sẽ xây dựng tiện ích Chrome cung cấp trải nghiệm người dùng cho Claim Checker. Tiện ích chịu trách nhiệm thu nhận tuyên bố từ bất kỳ trang web nào, gửi tới backend, và hiển thị kết quả xác minh trong giao diện trực quan.
Trước khi đi sâu vào từng tệp, dưới đây là chức năng của các thành phần lõi:
background.js: Chạy dưới dạng service worker, quản lý tác vụ nền như lắng nghe hành động người dùng, mở bảng bên, và gửi tuyên bố an toàn tới backend để xác minh.
content.js: Chạy bên trong trang đang mở. Trích xuất văn bản bài viết hiển thị, nhận diện các tuyên bố có thể kiểm chứng, và làm nổi bật động để người dùng thấy nội dung đang được kiểm tra.
sidepanel.js: Điều khiển UI bảng bên tương tác hiển thị các tuyên bố trích xuất và trạng thái xác minh của chúng. Cập nhật kết quả theo thời gian thực và liên kết với vùng highlight trên trang.
popup.js: Vận hành pop-up truy cập nhanh khi người dùng nhấp biểu tượng tiện ích. Cung cấp cách kiểm tra nhẹ nhàng mà không cần mở bảng bên.
Bạn có thể tìm một số tệp trợ giúp thêm cho tiện ích Chrome trong kho GitHub.
Bước 3.1: Background script và xử lý sự kiện
Dựa trên thiết lập tiện ích Chrome của chúng ta, tệp background.js là bộ điều khiển trung tâm giúp tiện ích luôn phản hồi. Nó lắng nghe hành động người dùng (như nhấp biểu tượng tiện ích), mở bảng bên khi cần, và chuyển tiếp tuyên bố tới backend để xác minh.
Đoạn mã trên tập trung vào tính phản hồi của tiện ích thông qua các điểm sau:
Trung tâm sự kiện: Background script đăng ký hai listener chính, chrome.action.onClicked và chrome.runtime.onMessage. Listener đầu phản hồi khi người dùng nhấp biểu tượng tiện ích và cố mở bảng bên. Listener thứ hai lắng nghe thông điệp tùy chỉnh như checkClaim từ content script hoặc các thành phần UI.
Xử lý API an toàn: Hàm checkClaim() dùng fetch để gửi tuyên bố đã chọn tới backend tại http://localhost:3000/check-claim; vì khóa API nằm ở phía máy chủ nên trình duyệt không bao giờ lộ khóa, bảo mật thông tin nhạy cảm.
Chống lỗi tốt: Cả hai listener đều có khối try/catch để xử lý lỗi runtime. Nếu không mở được bảng bên, script sẽ quay về dùng pop-up. Khi gọi API lỗi, tiện ích ghi log và trả về thông điệp lỗi có cấu trúc cho UI để tránh lỗi im lặng.
Với background script xử lý giao tiếp và gọi API an toàn, bước tiếp theo là tương tác trực tiếp với trang web.
Bước 3.2: Trích xuất và làm nổi bật tuyên bố
Tệp content.js chạy ngay trong trang và chịu trách nhiệm trích xuất văn bản bài viết, xác định các tuyên bố có thể kiểm chứng, và làm nổi bật trực quan cho người dùng. Nó bắc cầu giữa nội dung trang và logic nền của tiện ích bằng cách thu thập văn bản liên quan và cho phép tương tác.
Hãy phân tích các phần chính của content.js để hiểu cách nó trích xuất văn bản có ý nghĩa, phát hiện tuyên bố tiềm năng, và kết nối phần được tô sáng với UI của tiện ích.
Trích xuất văn bản bài viết: Hàm extractArticleText() quét các vùng chứa bài viết phổ biến để lấy nội dung dễ đọc chính. Điều này giúp tiện ích tập trung vào văn bản có ý nghĩa thay vì menu điều hướng hay quảng cáo.
Logic phát hiện tuyên bố: Hàm extractClaims() chia văn bản thành câu, áp dụng bộ lọc độ dài và cấu trúc, và dùng các từ khóa regex để phát hiện câu nhiều khả năng là tuyên bố thực tế.
Làm nổi bật động: Hàm highlightTextOnPage() định vị tuyên bố trong DOM và bọc bằng <span> được tạo kiểu. Nó thêm hiệu ứng hover và click để người dùng liên kết trực quan giữa tuyên bố trên trang và kết quả xác minh trong bảng bên.
Xử lý thông điệp: Listener chrome.runtime.onMessage điều phối các hành động như trích xuất tuyên bố, thêm highlight và xóa khi cần. Điều này giữ cho trang và tiện ích đồng bộ, đảm bảo tương tác mượt.
Với content script đảm nhận trích xuất văn bản và tô sáng tuyên bố trên trang, bước tiếp theo là trình bày các tuyên bố và kết quả xác minh cho người dùng. Đây là lúc giao diện sidepanel.js phát huy tác dụng.
Bước 3.3: Giao diện bảng bên
Tệp sidepanel.js vận hành bảng bên tương tác, nơi người dùng xem các tuyên bố đã trích xuất và kết quả xác minh. Nó kết nối content script và phản hồi từ backend vào một giao diện cuộn gọn gàng trong tiện ích.
Danh sách tuyên bố động: Khi người dùng nhấp “Check Claims”, script yêu cầu danh sách tuyên bố từ tab đang hoạt động, xóa highlight cũ, và tạo danh sách tuyên bố với trạng thái chờ.
Cập nhật xác minh theo thời gian thực: Mỗi tuyên bố được gửi tới background script bằng chrome.runtime.sendMessage với hành động checkClaim. Khi backend trả về kết quả, UI cập nhật ngay với nguồn, miền, và đoạn trích.
Liên kết tương tác: Script lắng nghe thông điệp highlightClaimInPanel, nhờ đó khi nhấp vào đoạn văn được tô sáng trên trang, bảng bên sẽ cuộn tới chi tiết tuyên bố tương ứng. Tạo vòng điều hướng mượt giữa highlight và dữ liệu xác minh.
Tiếp theo, chúng ta sẽ thêm pop-up truy cập nhanh để dễ khởi chạy và sử dụng tiện ích đã xây dựng ở các bước trước.
Bước 3.4: Giao diện pop-up truy cập nhanh
Tệp popup.js là giao diện pop-up gọn nhẹ xuất hiện khi người dùng nhấp biểu tượng tiện ích. Khác với bảng bên, pop-up này cung cấp cách kiểm tra nhanh, theo nhu cầu, mà không rời trang hiện tại hay mở bảng tương tác đầy đủ.
Cách popup.js vận hành công cụ kiểm tra theo yêu cầu trực tiếp từ thanh công cụ của tiện ích.
Quét trang và hiển thị tuyên bố: Khi người dùng nhấp “Check”, pop-up yêu cầu văn bản từ tab đang hoạt động qua content script, nhanh chóng trích xuất các tuyên bố tiềm năng và liệt kê trong cửa sổ pop-up.
Xác minh qua backend: Mỗi tuyên bố được gửi tới background script để gọi tuyến API /check-claim. Pop-up cập nhật theo thời gian thực với phán quyết, thanh độ tin cậy, giải thích, phản biện, và liên kết nguồn do máy chủ trả về.
Giờ đây, tiện ích đã sẵn sàng để thử nghiệm.
Lưu ý: Bạn có thể tìm toàn bộ mã nguồn cho dự án này trong kho GitHub.
Mở Chrome và nhấp vào “Extensions”(ở bên phải thanh tìm kiếm).
Bật “Chế độ nhà phát triển” và nhấp “Load unpacked” (góc trên bên trái).
Tiếp theo, tải thư mục extensions của chúng ta chứa tất cả các tệp và chờ xác nhận.
Sau khi Chrome xác nhận tiện ích đã được thêm, hãy nhấp biểu tượng Claim Checker trên bất kỳ trang web nào, chọn đoạn văn bản bạn muốn xác minh và chạy kiểm tra tuyên bố.
Hãy xem kết quả:
Kết luận
Giờ bạn đã có một công cụ kiểm tra tuyên bố nhanh và tiết kiệm, vận hành hoàn toàn bằng Search API của Perplexity (không cần gọi LLM). Bản demo này làm nổi bật các thế mạnh của API như kết quả tìm kiếm mới và đáng tin cậy, mức độ liên quan ở cấp độ đoạn trích, độ trễ thấp và giá thành dễ dự đoán.
Từ đây, bạn có thể mở rộng dự án bằng cách thêm bộ lọc nâng cao, lên lịch kiểm tra tự động, hoặc tích hợp như bước tiền lọc cho pipeline RAG. Để đi xa hơn, hãy khám pháPerplexity API tài liệu và các hướng dẫn khởi động nhanh để khai thác thêm khả năng tìm kiếm và lọc nâng cao.
Tôi là Chuyên gia Google Developers trong lĩnh vực ML (Gen AI), Chuyên gia Kaggle 3x và Đại sứ Women Techmakers với hơn 3 năm kinh nghiệm trong ngành công nghệ. Tôi đồng sáng lập một startup công nghệ y tế vào năm 2020 và hiện đang theo học thạc sĩ khoa học máy tính tại Georgia Tech, chuyên sâu về học máy.
Gần đây, Perplexity đã ra mắt Perplexity Search API, được thiết kế cho việc truy xuất web chi tiết, trả về các đoạn trích giàu ngữ cảnh đã được xếp hạng thay vì toàn bộ trang. API này phục vụ các tình huống thời gian thực như kiểm chứng thông tin, nghiên cứu, và các pipeline RAG, nơi tốc độ và độ chính xác là ưu tiên.
Trong hướng dẫn này, chúng ta sẽ xây dựng Claim Checker, một tiện ích mở rộng trình duyệt giúp xác minh các phát biểu thực tế trên bất kỳ trang web nào theo thời gian thực (dựa trên bằng chứng truy xuất từ web). Bạn sẽ thấy chỉ mục luôn được làm mới và ngăn xếp truy xuất độ trễ thấp của Perplexity Search API, kết hợp với tín hiệu ngữ nghĩa và tái xếp hạng nhiều giai đoạn, giúp tìm nhanh bằng chứng phù hợp nhất. Trong quá trình này, bạn sẽ học cách:
Kết thúc bài, bạn sẽ có một công cụ kiểm chứng thông tin full-stack hoạt động mượt trong trình duyệt. Người dùng có thể chọn bất kỳ văn bản nào trên trang và nhận ngay kết quả xác minh kèm nguồn tham khảo, đồng thời vẫn giữ an toàn thông tin xác thực API ở phía máy chủ.
Bạn cũng có thể xem hướng dẫn về Comet Browser của Perplexity trong một bài viết riêng.
Perplexity Search API là gì?
Perplexity Search API là cách thân thiện với nhà phát triển để nhận kết quả tìm kiếm web nhanh và chi tiết.
Khác với các API tìm kiếm truyền thống chỉ trả về toàn bộ trang, Perplexity cung cấp các đoạn trích và mảnh tài liệu con đã xếp hạng, chứa chính xác câu và đoạn phù hợp với truy vấn của bạn. Một số tính năng chính của API tìm kiếm này gồm:
Với tiện ích của chúng ta, điều này có nghĩa là có thể truyền bất kỳ câu nào làm truy vấn và nhận về bằng chứng ủng hộ hoặc phủ nhận đáng tin cậy, kèm tiêu đề, URL và đoạn trích ngữ cảnh — hoàn hảo cho kiểm chứng theo thời gian thực.
Dự án Perplexity Search API: Tiện ích kiểm tra tuyên bố trên trình duyệt
Trong phần này, chúng ta sẽ xây dựng tiện ích mở rộng trình duyệt kiểm tra tuyên bố, xác minh ngay lập tức các phát biểu thực tế bằng Perplexity Search API. Dự án kết hợp:
Kết thúc dự án, cấu trúc kho mã của bạn sẽ trông như sau:
Hãy đi qua từng phần của dự án và xem chúng phối hợp thế nào để mang lại xác minh tuyên bố đáng tin cậy ngay trong trình duyệt.
Bước 1: Phụ thuộc và thư viện
Trước khi bắt đầu, hãy đảm bảo các điều kiện tiên quyết sau:
Tiếp theo, cài đặt các phụ thuộc cần thiết cho backend:
Tạo tệp
.envtrong thư mục server và thêm khóa API Perplexity của bạn:Giờ chúng ta đã cài đặt xong các phụ thuộc. Tiếp theo, có thể xây dựng máy chủ backend và tiện ích mở rộng.
Bước 2: Xây dựng backend
Tệp
server.jsthiết lập backend Node.js gọn nhẹ bằng Express. Backend này là cầu nối giữa tiện ích trình duyệt và Perplexity Search API. Nó nhận các tuyên bố do người dùng chọn hoặc nhập, truy vấn Perplexity để lấy bằng chứng liên quan, rồi trả về phản hồi đã làm sạch, có cấu trúc, sẵn sàng hiển thị trên giao diện của tiện ích.Đoạn mã trên là lớp bảo mật và logic cho tiện ích Claim Checker, thực hiện các chức năng sau:
POST /check-claim, xác thực đầu vào, và gọi Perplexity Search API bằng khóa API lưu ở máy chủ.last_updatedvà ngày, chọn 3 mục hàng đầu, rồi trả về JSON gọn gàng cho tiện ích.Giờ chúng ta đã sẵn sàng cho máy chủ. Hãy xây dựng tiện ích Chrome.
Bước 3: Xây dựng tiện ích Chrome
Trong bước này, chúng ta sẽ xây dựng tiện ích Chrome cung cấp trải nghiệm người dùng cho Claim Checker. Tiện ích chịu trách nhiệm thu nhận tuyên bố từ bất kỳ trang web nào, gửi tới backend, và hiển thị kết quả xác minh trong giao diện trực quan.
Trước khi đi sâu vào từng tệp, dưới đây là chức năng của các thành phần lõi:
background.js: Chạy dưới dạng service worker, quản lý tác vụ nền như lắng nghe hành động người dùng, mở bảng bên, và gửi tuyên bố an toàn tới backend để xác minh.content.js: Chạy bên trong trang đang mở. Trích xuất văn bản bài viết hiển thị, nhận diện các tuyên bố có thể kiểm chứng, và làm nổi bật động để người dùng thấy nội dung đang được kiểm tra.sidepanel.js: Điều khiển UI bảng bên tương tác hiển thị các tuyên bố trích xuất và trạng thái xác minh của chúng. Cập nhật kết quả theo thời gian thực và liên kết với vùng highlight trên trang.popup.js: Vận hành pop-up truy cập nhanh khi người dùng nhấp biểu tượng tiện ích. Cung cấp cách kiểm tra nhẹ nhàng mà không cần mở bảng bên.Bạn có thể tìm một số tệp trợ giúp thêm cho tiện ích Chrome trong kho GitHub.
Bước 3.1: Background script và xử lý sự kiện
Dựa trên thiết lập tiện ích Chrome của chúng ta, tệp
background.jslà bộ điều khiển trung tâm giúp tiện ích luôn phản hồi. Nó lắng nghe hành động người dùng (như nhấp biểu tượng tiện ích), mở bảng bên khi cần, và chuyển tiếp tuyên bố tới backend để xác minh.Đoạn mã trên tập trung vào tính phản hồi của tiện ích thông qua các điểm sau:
chrome.action.onClickedvàchrome.runtime.onMessage. Listener đầu phản hồi khi người dùng nhấp biểu tượng tiện ích và cố mở bảng bên. Listener thứ hai lắng nghe thông điệp tùy chỉnh nhưcheckClaimtừ content script hoặc các thành phần UI.checkClaim()dùngfetchđể gửi tuyên bố đã chọn tới backend tạihttp://localhost:3000/check-claim; vì khóa API nằm ở phía máy chủ nên trình duyệt không bao giờ lộ khóa, bảo mật thông tin nhạy cảm.try/catchđể xử lý lỗi runtime. Nếu không mở được bảng bên, script sẽ quay về dùng pop-up. Khi gọi API lỗi, tiện ích ghi log và trả về thông điệp lỗi có cấu trúc cho UI để tránh lỗi im lặng.Với background script xử lý giao tiếp và gọi API an toàn, bước tiếp theo là tương tác trực tiếp với trang web.
Bước 3.2: Trích xuất và làm nổi bật tuyên bố
Tệp
content.jschạy ngay trong trang và chịu trách nhiệm trích xuất văn bản bài viết, xác định các tuyên bố có thể kiểm chứng, và làm nổi bật trực quan cho người dùng. Nó bắc cầu giữa nội dung trang và logic nền của tiện ích bằng cách thu thập văn bản liên quan và cho phép tương tác.Hãy phân tích các phần chính của
content.jsđể hiểu cách nó trích xuất văn bản có ý nghĩa, phát hiện tuyên bố tiềm năng, và kết nối phần được tô sáng với UI của tiện ích.extractArticleText()quét các vùng chứa bài viết phổ biến để lấy nội dung dễ đọc chính. Điều này giúp tiện ích tập trung vào văn bản có ý nghĩa thay vì menu điều hướng hay quảng cáo.extractClaims()chia văn bản thành câu, áp dụng bộ lọc độ dài và cấu trúc, và dùng các từ khóa regex để phát hiện câu nhiều khả năng là tuyên bố thực tế.highlightTextOnPage()định vị tuyên bố trong DOM và bọc bằng<span>được tạo kiểu. Nó thêm hiệu ứng hover và click để người dùng liên kết trực quan giữa tuyên bố trên trang và kết quả xác minh trong bảng bên.chrome.runtime.onMessageđiều phối các hành động như trích xuất tuyên bố, thêm highlight và xóa khi cần. Điều này giữ cho trang và tiện ích đồng bộ, đảm bảo tương tác mượt.Với content script đảm nhận trích xuất văn bản và tô sáng tuyên bố trên trang, bước tiếp theo là trình bày các tuyên bố và kết quả xác minh cho người dùng. Đây là lúc giao diện
sidepanel.jsphát huy tác dụng.Bước 3.3: Giao diện bảng bên
Tệp
sidepanel.jsvận hành bảng bên tương tác, nơi người dùng xem các tuyên bố đã trích xuất và kết quả xác minh. Nó kết nối content script và phản hồi từ backend vào một giao diện cuộn gọn gàng trong tiện ích.Cách bảng bên hoạt động trên trình duyệt của bạn:
chrome.runtime.sendMessagevới hành độngcheckClaim. Khi backend trả về kết quả, UI cập nhật ngay với nguồn, miền, và đoạn trích.highlightClaimInPanel, nhờ đó khi nhấp vào đoạn văn được tô sáng trên trang, bảng bên sẽ cuộn tới chi tiết tuyên bố tương ứng. Tạo vòng điều hướng mượt giữa highlight và dữ liệu xác minh.Tiếp theo, chúng ta sẽ thêm pop-up truy cập nhanh để dễ khởi chạy và sử dụng tiện ích đã xây dựng ở các bước trước.
Bước 3.4: Giao diện pop-up truy cập nhanh
Tệp
popup.jslà giao diện pop-up gọn nhẹ xuất hiện khi người dùng nhấp biểu tượng tiện ích. Khác với bảng bên, pop-up này cung cấp cách kiểm tra nhanh, theo nhu cầu, mà không rời trang hiện tại hay mở bảng tương tác đầy đủ.Cách
popup.jsvận hành công cụ kiểm tra theo yêu cầu trực tiếp từ thanh công cụ của tiện ích./check-claim. Pop-up cập nhật theo thời gian thực với phán quyết, thanh độ tin cậy, giải thích, phản biện, và liên kết nguồn do máy chủ trả về.Giờ đây, tiện ích đã sẵn sàng để thử nghiệm.
Lưu ý: Bạn có thể tìm toàn bộ mã nguồn cho dự án này trong kho GitHub.
Bước 4: Chạy ứng dụng
Khởi động máy chủ backend bằng lệnh sau:
Khi máy chủ đã chạy, hãy tải tiện ích Chrome:
Hãy xem kết quả:
Kết luận
Giờ bạn đã có một công cụ kiểm tra tuyên bố nhanh và tiết kiệm, vận hành hoàn toàn bằng Search API của Perplexity (không cần gọi LLM). Bản demo này làm nổi bật các thế mạnh của API như kết quả tìm kiếm mới và đáng tin cậy, mức độ liên quan ở cấp độ đoạn trích, độ trễ thấp và giá thành dễ dự đoán.
Từ đây, bạn có thể mở rộng dự án bằng cách thêm bộ lọc nâng cao, lên lịch kiểm tra tự động, hoặc tích hợp như bước tiền lọc cho pipeline RAG. Để đi xa hơn, hãy khám phá Perplexity API tài liệu và các hướng dẫn khởi động nhanh để khai thác thêm khả năng tìm kiếm và lọc nâng cao.