Quay lại blog

Cách Xây Dựng Một Quy Trình Cơ Sở Dữ Liệu Vector Tươi Từ Dữ Liệu Web Trực Tiếp

Ava Wilson
Ava Wilson

Expert in Web Scraping Technologies

20-Aug-2026

TL;DR:

  • Cơ sở dữ liệu vector không làm dữ liệu web trở nên mới. Sự mới mẻ đến từ một vòng lặp render nguồn, làm sạch nó, tạo dấu vân tay, cập nhật các phần đã thay đổi và xóa các phần cũ.
  • Bản ghi nguồn quan trọng hơn việc nhúng đơn thuần. Mỗi phần cần có một ID ổn định, URL nguồn, tiêu đề, vị trí, dấu vân tay nội dung và ngữ cảnh bộ sưu tập.
  • ID phần nên là xác định. Chiết xuất chúng từ nguồn, vị trí và nội dung chuẩn hóa để các phần không thay đổi giữ được danh tính qua các quan sát.
  • Upsert phải đi kèm với việc xóa phần cũ. Nếu không, các đoạn đã xóa vẫn có thể tìm kiếm được sau khi nguồn thay đổi.
  • Đánh giá truy xuất cần kiểm tra sự mới mẻ và tính liên quan. Đo lường xem phiên bản nguồn hiện tại có được lập chỉ mục trước khi đánh giá chất lượng tìm kiếm không.
  • Scrapeless Scraping Browser cung cấp dữ liệu đầu vào web trực tiếp đã render. Chroma lưu trữ và tìm kiếm các vector đã chuẩn hóa; không sản phẩm nào thay thế cho sản phẩm khác.
  • Miễn phí để bắt đầu. Các tài khoản Scrapeless mới bao gồm thời gian thực thi Scraping Browser miễn phí — đăng ký tại app.scrapeless.com.

Giới thiệu: Chỉ Mục Vector Là Một Bức Tranh

Một cơ sở dữ liệu vector trả lời các câu hỏi về các bản ghi hiện đang được lưu trữ trong đó. Nó không biết rằng một trang nguồn đã thay đổi, biến mất, di chuyển, hoặc hiển thị một biến thể khu vực khác sau lần thu thập cuối cùng.

Sự phân biệt đó là nền tảng của một quy trình cơ sở dữ liệu vector mới mẻ. Lớp web quan sát trang hiện tại. Các biến đổi xác định làm sạch và tách nó. Một hàm nhúng ánh xạ các phần thành các vector. Cơ sở dữ liệu vector thực hiện upsert bản chỉnh sửa mới và xóa các bản ghi không còn thuộc về trang. Đánh giá kiểm tra cả sự liên quan trong truy xuất và sự mới mẻ của nguồn.

Hướng dẫn này sử dụng Scrapeless Scraping Browser cho ranh giới trang đã render và Chroma 1.5.9 cho lưu trữ vector cục bộ. Việc xác minh không cần chứng thực đã nắm bắt một trang công cộng qua HTTP, sau đó thực hiện đường dẫn sạch → phần → dấu vân tay → upsert → truy vấn đối với Chroma. Bước cloud-render của Scrapeless vẫn là một yêu cầu API-key rõ ràng.

Quy trình Một Cái Nhìn

Một quy trình dữ liệu web cơ sở dữ liệu vector mới mẻ tách biệt quan sát khỏi lập chỉ mục.

Giai đoạn Đầu vào Đầu ra Kiểm soát sự mới mẻ
Đăng ký URL công cộng đã được phê duyệt và chính sách Bản ghi nguồn Chủ sở hữu, khu vực, tần suất
Render URL và ngữ cảnh trình duyệt Tiêu đề và văn bản hiện có Tình trạng trang mong đợi
Làm sạch Văn bản đã render Tài liệu đã chuẩn hóa Quy tắc boilerplate
Phần Tài liệu đã chuẩn hóa Các phần đã sắp xếp Ranh giới ổn định
Nhúng Văn bản phần Các vector độ dài cố định Bản ghi mô hình/phiên bản
Upsert ID, vector, metadata Bản ghi hiện tại ID xác định
Rà soát ID trước và hiện tại Xóa phần cũ Bản kê nguồn
Đánh giá Tập truy vấn và phiên bản nguồn Kết quả liên quan/sự mới mẻ Ngưỡng chấp nhận

Mỗi giai đoạn lưu trữ chứng cứ độc lập. Một truy xuất không tốt sau đó có thể được truy nguồn đến việc render, trích xuất, phân đoạn, nhúng, lập chỉ mục, hoặc lớp truy vấn.

Những Gì Cơ Sở Dữ Liệu Vector Làm và Không Làm

Một cơ sở dữ liệu vector lưu trữ các vector và các bản ghi liên quan, sau đó tìm kiếm các vector gần gũi theo một chỉ mục và chính sách khoảng cách. Chroma có thể lưu trữ các nhúng, tài liệu, và metadata trong một bộ sưu tập và truy vấn các bản ghi đó cùng nhau. tổng quan về Chroma mô tả bộ sưu tập và bề mặt truy xuất.

Cơ sở dữ liệu không khám phá URL, thực thi JavaScript, xác định bài viết chính, chọn phạm vi bộ sưu tập hợp pháp, hoặc quyết định rằng một phiên bản nguồn là hiện tại. Những trách nhiệm đó vẫn nằm trong quy trình thu thập.

Sự tách biệt sau đây giữ cho quyền sở hữu rõ ràng:

  • Scrapeless Scraping Browser render trang đã được phê duyệt và duy trì ngữ cảnh phiên/sự khu vực.
  • Mã làm sạch loại bỏ điều hướng, chrome trùng lặp, các tập lệnh, và văn bản rỗng.
  • Mã phân đoạn xác định đơn vị truy xuất.
  • Hàm nhúng xác định không gian vector.
  • Chroma lưu trữ các phần hiện tại và trả về các bản ghi gần nhất.
  • Bản kê nguồn quyết định bản ghi trước nào là cũ.

Điều Kiện Tiên Quyết

  • Python 3.12.
  • Chroma 1.5.9, HTTPX 0.28.1, và Beautiful Soup 4.14.3 cho xác minh cục bộ được thực hiện.
  • Node.js và scrapeless-scraping-browser CLI cho đầu vào cloud đã render.
  • Một tài khoản Scrapeless và khóa API.
  • Một hoặc nhiều nguồn công cộng với mục đích thu thập và chính sách giữ lại đã được ghi lại.

Cài đặt các phụ thuộc vector và làm sạch:

bash Copy
python -m pip install chromadb==1.5.9 httpx==0.28.1 beautifulsoup4==4.14.3

Giai Đoạn 1 — Render Nguồn Web Trực Tiếp

Giai đoạn render trả về một giao tiếp ngắn gọn: URL cuối cùng, tiêu đề, và văn bản chính rõ ràng. Không được truyền các ảnh chụp màn hình thô hoặc một trang shell chưa được kiểm tra vào quy trình vector.

Lưu ý: Khối sau đây yêu cầu khóa API Scrapeless của bạn. Việc xác minh không cần chứng thực không thể tạo phiên trình duyệt cloud, vì vậy không có đầu ra cloud nào được trình bày như một phiên chạy hoàn thành.

bash Copy
SESSION=$(scrapeless-scraping-browser new-session \
  --name vector-ingest --ttl 300 --proxy-country US --json \
  | jq -r '.taskId')

scrapeless-scraping-browser --session-id "$SESSION" open \
  "https://www.iana.org/help/example-domains"
scrapeless-scraping-browser --session-id "$SESSION" wait 3000
scrapeless-scraping-browser --session-id "$SESSION" eval '
JSON.stringify({
  url: location.href,
  title: document.title,
  text: document.body.innerText
})' > rendered-page.json

scrapeless-scraping-browser stop "$SESSION"

Các quy tắc:

  1. Chỉ xuất ra văn bản đã dịch — không có giải thích, không có mã bao bọc thêm.
  2. Bảo tồn cấu trúc Markdown/HTML (tiêu đề, danh sách, liên kết, bảng) một cách chính xác.
  3. Giữ nguyên bất kỳ token giữ chỗ nào như bash python -m pip install chromadb==1.5.9 httpx==0.28.1 beautifulsoup4==4.14.3 hoặc 1.5.9 EXACTLY; không bao giờ dịch, sắp xếp lại, hợp nhất hoặc định dạng lại chúng.
  4. Không thêm hoặc xóa ``` code fences, và KHÔNG bọc văn bản bình thường vào một khối mã.

Xác thực việc chuyển giao trước khi nhúng. Từ chối bất kỳ trang đăng nhập bất ngờ nào, thông báo truy cập, nội dung trống, hoặc lỗi mềm 404. Một trạng thái HTTP thành công đơn thuần không chứng minh rằng nội dung dự định đã được hiển thị.

Người bắt đầu với Trình duyệt Scraping giải thích thiết lập phiên làm việc. Trang sản phẩm Trình duyệt Scrapinggiá cả bao gồm lớp trình duyệt được quản lý.

Giai đoạn 2 — Làm sạch và Phân đoạn với Ranh giới Ổn định

Làm sạch nên bảo tồn ý nghĩa trong khi làm cho những thay đổi không liên quan biến mất. Thu gọn khoảng trắng lặp lại, loại bỏ những vùng điều hướng/chân trang đã biết trước khi chuyển giao, và giữ lại URL và tiêu đề cuối cùng bên cạnh văn bản.

Ví dụ thực thi sử dụng các cửa sổ 80 từ với 15 từ chồng chéo vì trang kiểm tra công cộng là ngắn. Các giá trị đó là đầu vào trình diễn, không phải là khuyến nghị phổ quát. Kích thước phân đoạn sản xuất nên được chọn dựa trên tập v.v., mô hình nhúng, tập truy vấn và kết quả đánh giá.

Vị trí phân đoạn rất quan trọng. Nếu mỗi chỉnh sửa nhỏ thay đổi mọi phân đoạn tiếp theo, các ID xác định sẽ thay đổi trên toàn trang. Thích ranh giới ngữ nghĩa như tiêu đề và đoạn văn khi nguồn cung cấp chúng, sau đó áp dụng chính sách kích thước giới hạn trong mỗi phần.

Giai đoạn 3 — Nhúng với Siêu dữ liệu Rõ ràng

Mỗi bản ghi vector cần đủ siêu dữ liệu để giải thích nguồn gốc và phiên bản của nó.

Trường Mục đích
source_url Nguồn quan sát chuẩn
title Bối cảnh đánh giá con người
position Thứ tự trong trang
content_sha256 So sánh phiên bản nguồn
mô hình/phiên bản nhúng Quyết định tương thích và tái lập chỉ mục
bối cảnh sưu tập Khu vực, trạng thái trang, và phiên bản bộ điều hợp

Mẫu dưới đây sử dụng một vector có thuật toán băm định danh 64 tọa độ để giữ cho phiên chạy cục bộ tự-contained. Nó chứng minh cơ sở hạ tầng cơ sở dữ liệu vector, không phải chất lượng mô hình ngữ nghĩa. Thay thế nó bằng một mô hình nhúng đã được đánh giá trước khi sản xuất và tái lập chỉ mục bộ sưu tập khi không gian vector thay đổi.

SHA-256 tạo ra dấu vân tay nguồn và bản ghi. FIPS 180-4 xác định các thuật toán băm an toàn. Một dấu vân tay nội dung phát hiện sự thay đổi; nó không phải là quyết định ủy quyền hay tin cậy.

Bắt đầu Scraping với Scrapeless

Nâng cao quá trình scraping và tự động hóa trang web của bạn với Scrapeless!
Đăng ký ngay hôm nay và nhận 5 đô la tín dụng miễn phíkhông cần thẻ tín dụng.

Nhận tín dụng miễn phí của bạn ngay bây giờ trong Bảng điều khiển Scrapeless.

Bảng điều khiển Scrapeless hiển thị 5,00 USD trong Tín dụng Nhóm

Giai đoạn 4 — Cập nhật Các Phân đoạn Hiện tại và Xóa Các Phân đoạn Cũ

Chương trình dưới đây đọc rendered-page.json, tạo ID phân đoạn định danh, cập nhật chúng vào một bộ sưu tập Chroma bền vững, xóa các ID trước không còn hiện hữu và thực hiện một truy vấn.

python Copy
import hashlib
import json
import math
import os
import re
from pathlib import Path

import chromadb

VECTOR_SIZE = 64
CHUNK_WORDS = 80
OVERLAP_WORDS = 15


def hash_embedding(text: str) -> list[float]:
    vector = [0.0] * VECTOR_SIZE
    for token in re.findall(r"[a-z0-9]+", text.lower()):
        digest = hashlib.sha256(token.encode()).digest()
        bucket = int.from_bytes(digest[:2], "big") % VECTOR_SIZE
        vector[bucket] += 1.0 if digest[2] % 2 == 0 else -1.0
    length = math.sqrt(sum(value * value for value in vector)) or 1.0
    return [value / length for value in vector]


def make_chunks(text: str) -> list[str]:
    words = text.split()
    step = CHUNK_WORDS - OVERLAP_WORDS
    return [" ".join(words[start:start + CHUNK_WORDS]) for start in range(0, len(words), step)]


input_path = Path(os.environ.get("RENDERED_PAGE_PATH", "rendered-page.json"))
database_path = os.environ.get("CHROMA_PATH", "chroma-data")
page = json.loads(input_path.read_text(encoding="utf-8"))
clean_text = " ".join(page["text"].split())
chunks = make_chunks(clean_text)
fingerprint = hashlib.sha256(clean_text.encode()).hexdigest()

ids = [
    hashlib.sha256(f'{page["url"]}:{position}:{chunk}'.encode()).hexdigest()[:24]
    for position, chunk in enumerate(chunks)
]
metadata = [
    {
        "source_url": page["url"],
        "title": page["title"],
        "position": position,
        "content_sha256": fingerprint,
    }
    for position in range(len(chunks))
]

client = chromadb.PersistentClient(path=database_path)
collection = client.get_or_create_collection(
    name="live_web_pages",
    metadata={"hnsw:space": "cosine"},
)

previous = collection.get(where={"source_url": page["url"]})
stale_ids = sorted(set(previous["ids"]) - set(ids))
if stale_ids:
    collection.delete(ids=stale_ids)

collection.upsert(
    ids=ids,
    documents=chunks,
    metadatas=metadata,
    embeddings=[hash_embedding(chunk) for chunk in chunks],
)

query = collection.query(
    query_embeddings=[hash_embedding("example domains documentation")],
    n_results=min(2, len(ids)),
    include=["documents", "metadatas", "distances"],
)

print(json.dumps({
    "chromadb_version": chromadb.__version__,
    "vector_size": VECTOR_SIZE,
    "chunk_count": len(chunks),
    "stored_count": collection.count(),
    "stale_deleted": len(stale_ids),
    "fingerprint_prefix": fingerprint[:12],
    "top_ids": query["ids"][0],
}, indent=2))

Chạy trang công cộng trực tiếp đã tạo ra đầu ra sau:

json Copy
{
  "chromadb_version": "1.5.9",
  "vector_size": 64,
  "chunk_count": 2,
  "stored_count": 2,
  "stale_deleted": 0,
  "fingerprint_prefix": "9ed322155bab",
  "top_ids": [
    "8289a31c06c87c9e1abac29d",
    "3ee123fc6659b0c9168231ff"
  ]
}

Lần thực thi thứ hai trả về cùng một dấu vân tay, ID và số lượng đã lưu. Đó là hành vi nguồn không thay đổi được mong đợi.

Giai đoạn 5 — Phát hiện Thay đổi Trước Khi Nhúng Lại

Tính toán một dấu vân tay nguồn chuẩn trước khi phân đoạn. Nếu dấu vân tay và bối cảnh bộ sưu tập khớp với quan sát thành công trước đó, thì giai đoạn vector có thể dừng lại mà không thay đổi bản ghi.

Khi dấu vân tay thay đổi, hãy xây dựng tập phân đoạn mới đầu tiên. Cập nhật các ID hiện tại, sau đó xóa sự khác biệt giữa các ID trước và ID hiện tại. Giữ lại bản kê nguồn cũ cho đến khi việc ghi và hòa giải mới hoàn tất để một sự chuyển đổi thất bại không xóa đi trạng thái chỉ mục gần nhất đã biết.

Đừng chỉ dựa vào dấu thời gian. Một trang có thể trả về cùng một dấu thời gian với nội dung khác nhau, hoặc một dấu thời gian mới mà không có thay đổi văn bản có ý nghĩa nào. Các ID được định địa chỉ nội dung làm cho việc so sánh trở nên xác định.

Giai đoạn 6 — Thêm Tìm kiếm Lai Mà Không Mất Gốc Gác

Các vector dày đặc ghi lại mối quan hệ được xác định bởi mô hình nhúng, trong khi việc so khớp từ vựng giúp với các định danh chính xác, mã sản phẩm, và tên hiếm. Một lớp truy xuất lai có thể kết hợp cả hai, nhưng mỗi kết quả vẫn nên trả về URL nguồn, tiêu đề trang, vị trí phân đoạn, và dấu vân tay nội dung.
Nguồn gốc mô tả cách mà một thực thể được sinh ra và hoạt động nào đã sản xuất ra nó. vốn từ W3C PROV-O cung cấp một mô hình chính thức cho các thực thể, hoạt động và đại lý khi một pipeline cần dòng chảy có khả năng tương tác.

met văn bản web sạch cho pipeline RAG đi sâu hơn vào các ranh giới fetch, extraction và chunking mà trước khi lưu trữ vector.

Đánh giá Chất lượng và Tính Mới của Việc Lấy Dữ Liệu

Đánh giá pipeline với hai bộ câu hỏi độc lập.

Các bài kiểm tra tính mới hỏi liệu phiên bản nguồn được phê duyệt mới nhất có hiện hữu, các đoạn bị loại bỏ có vắng mặt, trạng thái vùng và trang có khớp với chính sách, và mọi kết quả đều chỉ đến dấu vân tay hiện tại.

Các bài kiểm tra lấy dữ liệu hỏi liệu các đoạn liên quan có xuất hiện cho các câu hỏi đại diện, các định danh chính xác vẫn có thể tìm thấy, các đoạn không liên quan không cao hơn ngưỡng chấp nhận, và các trích dẫn giải quyết đến bằng chứng đã được trình bày cho mô hình.

giấy chứng nhận điểm chuẩn BEIR cho thấy tại sao chất lượng lấy dữ liệu thay đổi giữa các bộ dữ liệu và nhiệm vụ. Sử dụng một bộ câu truy vấn được rút ra từ tập hợp thực tế của bạn thay vì coi một điểm số chung là phổ quát.

Danh sách kiểm tra Chi phí và Hoạt động

  • Đăng ký chủ sở hữu nguồn, mục đích, vùng, nhịp điệu và thời gian lưu giữ trước khi thu thập.
  • Từ chối các trạng thái trang không mong đợi trước khi nhúng.
  • Lưu trữ phiên bản nguồn, đoạn, nhúng và bộ chuyển đổi với mỗi bản ghi.
  • Bỏ qua nội dung chuẩn hóa không thay đổi bằng dấu vân tay.
  • Xóa ID đoạn cũ sau khi một upsert thành công.
  • Tái lập chỉ mục khi mô hình nhúng hoặc kích thước vector thay đổi.
  • Không giữ nhiều hơn ba công nhân cho mỗi máy chủ mục tiêu trừ khi chủ sở hữu phê duyệt giới hạn khác.
  • Đo lường thành công xử lý, sản lượng văn bản sạch, lưu lượng đoạn, tuổi chỉ mục, tính liên quan của truy vấn và tính hợp lệ của trích dẫn một cách riêng biệt.

Kết luận: Tính Mới Là Một Vòng Lặp Đối Chiếu

Một pipeline cơ sở dữ liệu vector mới là một hệ thống đối chiếu, không phải là một lần nhập. Xuất bản nguồn đã được phê duyệt, xác thực trạng thái trang, chuẩn hóa nội dung, tạo ra các đoạn xác định, nhúng chúng dưới một mô hình có phiên bản, upsert các bản ghi hiện tại, và xóa các ID cũ.

Scrapeless Scraping Browser sở hữu quan sát web đã được xuất bản. Chroma sở hữu lưu trữ vector và tìm kiếm. Manifest giữa chúng chứng minh phiên bản nguồn nào mà chỉ mục đại diện.


Sẵn sàng để Xây dựng Một Pipeline Kiến Thức Web Mới?

Tham gia cộng đồng của chúng tôi để nhận một kế hoạch miễn phí và kết nối với các nhà phát triển đang xây dựng việc thu thập RAG có thể truy được: Discord · Telegram.

Đăng ký tại app.scrapeless.com để nhận thời gian chạy Scraping Browser miễn phí và kết nối việc bàn giao trang đã xuất bản với kho lưu trữ vector đã được đánh giá của bạn.


Câu Hỏi Thường Gặp

Q: Có phải cơ sở dữ liệu vector tự động giữ dữ liệu web tươi mới?

Không. Một cơ sở dữ liệu vector lưu trữ các bản ghi mà nó nhận được. Pipeline của bạn phải quan sát các nguồn, so sánh các phiên bản, upsert các đoạn đã thay đổi, và xóa các đoạn cũ.

Q: Pipeline dữ liệu web nên sử dụng cơ sở dữ liệu vector nào?

Chọn cơ sở dữ liệu phù hợp với triển khai, lọc siêu dữ liệu, chỉ mục, độ bền, kiểm soát truy cập và yêu cầu hoạt động của bạn. Hướng dẫn này sử dụng Chroma cho một ví dụ thực thi cục bộ, không phải như một xếp hạng phổ quát.

Q: Có cần một proxy cho các pipeline vector web không?

Các nguồn động hoặc phụ thuộc vào vùng thường cần một đầu ra trình duyệt ổn định. Ghi rõ quốc gia đã được phê duyệt để các quan sát kế tiếp tham chiếu đến cùng một trạng thái trang khu vực.

Q: Điều gì xảy ra khi DOM nguồn thay đổi?

Kiểm tra lại bộ chuyển đổi xuất bản và extraction trước khi lập chỉ mục. Từ chối một trạng thái trang không mong đợi thay vì nhúng một thông điệp truy cập, shell rỗng, hoặc trang chỉ điều hướng.

Q: Collector nên sử dụng bao nhiêu đồng thời?

Không giữ nhiều hơn ba công nhân cho mỗi máy chủ mục tiêu trừ khi chủ sở hữu trang phê duyệt giới hạn khác. Chỉ mục vector có thể mở rộng riêng biệt với việc thu thập nguồn.

Q: Liệu việc thu thập nội dung web công cộng cho một cơ sở dữ liệu vector có hợp pháp không?

Tính khả dụng công cộng không giải quyết mọi câu hỏi pháp lý. Xem xét các điều khoản nguồn, hướng dẫn robot, bản quyền, quyền riêng tư, thời gian lưu giữ, và cách sử dụng dự kiến; tham khảo ý kiến luật sư cho dự án cụ thể.

Q: Có thể pipeline này hoạt động mà không có tác nhân AI không?

Có. Bộ render, biến đổi xác định, chức năng nhúng, khách hàng Chroma và bộ đánh giá có thể hoạt động như phần mềm theo lịch mà không cần tác nhân AI.

Tại Scrapless, chúng tôi chỉ truy cập dữ liệu có sẵn công khai trong khi tuân thủ nghiêm ngặt các luật, quy định và chính sách bảo mật trang web hiện hành. Nội dung trong blog này chỉ nhằm mục đích trình diễn và không liên quan đến bất kỳ hoạt động bất hợp pháp hoặc vi phạm nào. Chúng tôi không đảm bảo và từ chối mọi trách nhiệm đối với việc sử dụng thông tin từ blog này hoặc các liên kết của bên thứ ba. Trước khi tham gia vào bất kỳ hoạt động cạo nào, hãy tham khảo ý kiến ​​cố vấn pháp lý của bạn và xem xét các điều khoản dịch vụ của trang web mục tiêu hoặc có được các quyền cần thiết.

Bài viết phổ biến nhất

Danh mục