Dữ liệu là chìa khóa để mở ra những hiểu biết có giá trị và phần lớn dữ liệu này đều có sẵn trên web. Nhưng làm thế nào để bạn thu thập lượng lớn dữ liệu từ các trang web một cách hiệu quả? Đó là lúc Python web scraping xuất hiện. Web scraping, quá trình trích xuất dữ liệu từ các trang web, đã nổi lên như một kỹ thuật mạnh mẽ để thu thập thông tin từ phạm vi rộng lớn của internet.
Python thường được sử dụng để thu thập dữ liệu web và các công cụ mạnh mẽ như BeautifulSoup , Scrapy và Selenium để thu thập dữ liệu bất kỳ trang web nào đó.
Sự phổ biến của Python trong việc thu thập dữ liệu web bắt nguồn từ một số yếu tố:
Dễ sử dụng : Cú pháp rõ ràng và dễ đọc của Python giúp người mới bắt đầu dễ hiểu và viết mã. Sự đơn giản này giúp đẩy nhanh quá trình phát triển và giảm đường cong học tập cho các tác vụ thu thập dữ liệu web.
Hệ sinh thái phong phú : Python tự hào có một hệ sinh thái rộng lớn các thư viện và khuôn khổ được thiết kế riêng cho việc trích xuất dữ liệu web. Các thư viện như BeautifulSoup, Scrapy và Requests đơn giản hóa quá trình phân tích cú pháp HTML, giúp việc trích xuất dữ liệu trở nên dễ dàng.
Tính linh hoạt : Python là ngôn ngữ đa năng có thể được sử dụng cho nhiều tác vụ khác nhau ngoài việc thu thập dữ liệu web. Tính linh hoạt của nó cho phép các nhà phát triển tích hợp thu thập dữ liệu web một cách liền mạch vào các dự án lớn hơn, chẳng hạn như phân tích dữ liệu, học máy hoặc phát triển web.
Hỗ trợ cộng đồng : Python có một cộng đồng lớn và năng động gồm các nhà phát triển đóng góp vào các thư viện của mình và cung cấp hỗ trợ thông qua các diễn đàn, hướng dẫn và tài liệu. Nguồn tài nguyên phong phú này đảm bảo rằng các nhà phát triển có thể tiếp cận được sự hỗ trợ và hướng dẫn khi giải quyết các thách thức về web scraping.
Mô-đun yêu cầu Python có một số phương thức tích hợp để tạo yêu cầu HTTP tới URI đã chỉ định bằng các yêu cầu GET, POST, PUT, PATCH hoặc HEAD. Yêu cầu HTTP có nghĩa là truy xuất dữ liệu từ URI đã chỉ định hoặc đẩy dữ liệu lên máy chủ. Nó hoạt động như một giao thức yêu cầu-phản hồi giữa máy khách và máy chủ. Ở đây chúng ta sẽ sử dụng yêu cầu GET. Phương thức GET được sử dụng để truy xuất thông tin từ máy chủ đã cho bằng cách sử dụng URI đã cho. Phương thức GET gửi thông tin người dùng đã mã hóa được thêm vào yêu cầu trang.
pip install requests
import requests
# Making a GET request
r = requests.get(‘https://www.geeksforgeeks.org/python-programming-language/’)
# check status code for response received
# success code – 200
print(r)
# print content of request
print(r.content)
Thư viện BeautifulSoup
Beautiful Soup cung cấp một số phương pháp đơn giản và cụm từ Pythonic để hướng dẫn, tìm kiếm và thay đổi cây phân tích cú pháp: một bộ công cụ để nghiên cứu tài liệu và loại bỏ những gì bạn cần. Không cần nhiều mã để lập tài liệu cho một ứng dụng.
https://viblo.asia/p/cach-scrape-mot-trang-web-bang-python-va-beautifulsoup-vyDZODwPlwj
Beautiful Soup tự động chuyển đổi các bản ghi đến thành Unicode và các biểu mẫu đi thành UTF-8. Bạn không cần phải nghĩ về mã hóa trừ khi tài liệu không xác định mã hóa và Beautiful Soup không thể bắt được mã hóa nào. Sau đó, bạn chỉ cần chọn mã hóa gốc. Beautiful Soup nằm trên các trình phân tích cú pháp Python nổi tiếng như LXML và HTML, cho phép bạn thử các chiến lược phân tích cú pháp khác nhau hoặc đánh đổi tốc độ để lấy tính linh hoạt.
pip install beautifulsoup4
Ví dụ
Nhập thư viện: Mã nhập thư viện yêu cầu để thực hiện yêu cầu HTTP và lớp BeautifulSoup từ thư viện bs4 để phân tích cú pháp HTML.
Thực hiện yêu cầu GET: Gửi yêu cầu GET tới ‘https://www.geeksforgeeks.org/python-programming-language/’ và lưu trữ phản hồi trong biến r.
Kiểm tra mã trạng thái: In mã trạng thái của phản hồi, thường là 200 nếu thành công.
Phân tích cú pháp HTML : Nội dung HTML của phản hồi được phân tích cú pháp bằng BeautifulSoup và lưu trữ trong biến soup.
In HTML được chỉnh sửa đẹp mắt: In phiên bản được chỉnh sửa đẹp mắt của nội dung HTML đã phân tích để dễ đọc và phân tích.
import requests
from bs4 import BeautifulSoup
# Making a GET request
r = requests.get(‘https://www.geeksforgeeks.org/python-programming-language/’)
# check status code for response received
# success code – 200
print(r)
# Parsing the HTML
soup = BeautifulSoup(r.content, ‘html.parser’)
print(soup.prettify())
Tìm kiếm các phần tử theo lớp
Bây giờ, chúng ta muốn trích xuất một số dữ liệu hữu ích từ nội dung HTML. Đối tượng soup chứa tất cả dữ liệu trong cấu trúc lồng nhau có thể được trích xuất theo chương trình. Trang web chúng ta muốn trích xuất chứa rất nhiều văn bản, vì vậy bây giờ hãy trích xuất tất cả các nội dung đó. Trước tiên, hãy kiểm tra trang web chúng ta muốn trích xuất.
Trong hình ảnh trên, chúng ta có thể thấy rằng tất cả nội dung của trang nằm dưới div có lớp entry-content. Chúng ta sẽ sử dụng lớp find. Lớp này sẽ tìm thẻ đã cho với thuộc tính đã cho. Trong trường hợp của chúng ta, nó sẽ tìm tất cả div có lớp là entry-content.
Chúng ta có thể thấy rằng nội dung của trang nằm dưới thẻ <p>. Bây giờ chúng ta phải tìm tất cả các thẻ p có trong lớp này. Chúng ta có thể sử dụng lớp find_all của BeautifulSoup.
import requests
from bs4 import BeautifulSoup
# Making a GET request
r = requests.get(‘https://www.geeksforgeeks.org/python-programming-language/’)
# Parsing the HTML
soup = BeautifulSoup(r.content, ‘html.parser’)
s = soup.find(‘div’, class_=’entry-content’)
content = soup.find_all(‘p’)
print(content)
Tương tự các thư viện khác
https://www.geeksforgeeks.org/python-web-scraping-tutorial/
Selenium là một mô-đun Python phổ biến được sử dụng để tự động hóa trình duyệt web. Nó cho phép các nhà phát triển kiểm soát trình duyệt web theo chương trình, cho phép các tác vụ như thu thập dữ liệu web, thử nghiệm tự động và tương tác ứng dụng web. Selenium hỗ trợ nhiều trình duyệt web khác nhau, bao gồm Chrome, Firefox, Safari và Edge, khiến nó trở thành một công cụ đa năng để tự động hóa trình duyệt.
Module lxml trong Python là một thư viện mạnh mẽ để xử lý các tài liệu XML và HTML. Nó cung cấp khả năng phân tích cú pháp XML và HTML hiệu suất cao cùng với API đơn giản và Pythonic. lxml được sử dụng rộng rãi trong việc trích xuất dữ liệu web Python do tốc độ, tính linh hoạt và dễ sử dụng.
Mô-đun urllib trong Python là một thư viện tích hợp cung cấp các hàm để làm việc với URL. Nó cho phép bạn tương tác với các trang web bằng cách lấy URL (Uniform Resource Locators), mở và đọc dữ liệu từ chúng và thực hiện các tác vụ khác liên quan đến URL như mã hóa và phân tích cú pháp. Urllib là một gói thu thập một số mô-đun để làm việc với URL, chẳng hạn như: urllib.request để mở và đọc. urllib.parse để phân tích cú pháp URL. urllib.error cho các ngoại lệ được nêu ra. urllib.robotparser để phân tích các tập tin robot.txt
Mô-đun pyautogui trong Python là một thư viện tự động hóa GUI đa nền tảng cho phép các nhà phát triển điều khiển chuột và bàn phím để tự động hóa các tác vụ. Mặc dù không được thiết kế riêng cho việc thu thập dữ liệu web, nhưng nó có thể được sử dụng kết hợp với các thư viện thu thập dữ liệu web khác như Selenium để tương tác với các trang web yêu cầu người dùng nhập dữ liệu hoặc mô phỏng hành động của con người.
Mô-đun lịch trình trong Python là một thư viện đơn giản cho phép bạn lên lịch các hàm Python chạy theo các khoảng thời gian đã chỉ định. Nó đặc biệt hữu ích trong việc trích xuất dữ liệu web trong Python khi bạn cần trích xuất dữ liệu thường xuyên từ một trang web theo các khoảng thời gian được xác định trước, chẳng hạn như hàng giờ, hàng ngày hoặc hàng tuần.
Lưu trữ dữ liệu trong PostgreSQL
Để lưu dữ liệu đã thu thập vào tệp CSV, chúng ta có thể sử dụng csvmô-đun của Python. Hãy tiếp tục mã của chúng ta và lưu datavào tệp CSV:
import csv
# Sample data
data = [
{‘id’: ‘1’, ‘title’: ‘Post 1’, ‘url’: ‘http://example.com/1’, ‘rank’: 1},
{‘id’: ‘2’, ‘title’: ‘Post 2’, ‘url’: ‘http://example.com/2’, ‘rank’: 2}
]
# Define the CSV file path
csv_file = ‘hacker_news_posts.csv’
# Write data to CSV
with open(csv_file, ‘w’, newline=”) as file:
writer = csv.DictWriter(file, fieldnames=[‘id’, ‘title’, ‘url’, ‘rank’])
writer.writeheader()
for row in data:
writer.writerow(row)
Mẹo chuyên nghiệp: Theo kinh nghiệm của tôi, sự kết hợp giữa Requests, BeautifulSoup và module này csv hoàn hảo cho người mới bắt đầu xây dựng các trình thu thập dữ liệu web mạnh mẽ với mã tối thiểu. Khi bạn đã quen với các công cụ này với tư cách là người mới bắt đầu, bạn có thể khám phá các tùy chọn nâng cao hơn như Scrapy và Selenium .
Nhưng trên hành trình đến vùng đất dữ liệu lớn, tệp CSV đáng tin cậy của chúng ta có thể bắt đầu mất kiểm soát. May mắn thay, chúng ta có một vũ khí bí mật: cơ sở dữ liệu! Với một cơ sở dữ liệu như PostgreSQL, chúng ta có thể làm cho kho lưu trữ dữ liệu của mình mạnh mẽ như kho báu của rồng.
Bước 1: Cài đặt PostgreSQL
Để bắt đầu, chúng ta cần một phiên bản cơ sở dữ liệu đang hoạt động. Hãy xem Trang tải xuống PostgreSQL để biết thông tin đó và chọn gói phù hợp cho hệ điều hành của bạn, sau đó làm theo hướng dẫn cài đặt.
Bước 2: Tạo bảng cơ sở dữ liệu
Sau khi cài đặt, chúng ta cần thiết lập một cơ sở dữ liệu (hãy đặt tên cho nó scrape_demo) và thêm một bảng chứa các liên kết Hacker News vào đó (hãy đặt tên cho nó hn_links) với lược đồ sau:
CREATE TABLE “hn_links” (
“id” INTEGER NOT NULL,
“title” VARCHAR NOT NULL,
“url” VARCHAR NOT NULL,
“rank” INTEGER NOT NULL
);
Lưu ý: Để quản lý cơ sở dữ liệu, chúng ta có thể sử dụng dòng lệnh riêng của PostgreSQL ( psql ) hoặc một trong các giao diện UI có sẵn (PostgreSQL Client ). Được rồi, cơ sở dữ liệu đã sẵn sàng và chúng ta có thể quay lại với mã của mình.
Bước 3: Cài đặt Psycopg2 để kết nối với PostgreSQL
Đầu tiên, chúng ta cần thứ gì đó cho phép chúng ta giao tiếp với PostgreSQL và Psycopg2 là một thư viện thực sự tuyệt vời cho việc đó. Như thường lệ, chúng ta có thể nhanh chóng cài đặt nó bằng pip :
pip install psycopg2
Phần còn lại tương đối dễ dàng và đơn giản. Chúng ta chỉ cần thiết lập kết nối đến cơ sở dữ liệu PostgreSQL của mình:
con = psycopg2.connect(host=”127.0.0.1″, port=”5432″, user=”postgres”, password=””, database=”scrape_demo”)
Sau khi thiết lập kết nối, chúng ta có thể chèn dữ liệu vào cơ sở dữ liệu.
Bước 4: Chèn dữ liệu vào PostgreSQL
Sau khi kết nối, chúng ta sẽ có một con trỏ cơ sở dữ liệu để thực thi các lệnh SQL và chèn dữ liệu vào cơ sở dữ liệu:
cur = con.cursor()
Và khi đã có con trỏ, chúng ta có thể sử dụng phương pháp này executeđể chạy lệnh SQL:
cur.execute(“INSERT INTO table [HERE-GOES-OUR-DATA]”)
Hoàn hảo! Chúng tôi đã lưu trữ mọi thứ trong cơ sở dữ liệu của mình!
Bước 5: Cam kết dữ liệu và đóng kết nối
Xin hãy bình tĩnh. Trước khi bạn đi vào hoàng hôn, đừng quên commitgiao dịch cơ sở dữ liệu (ngầm định) của bạn 😉. Thêm một lần nữa con.commit()(và một vài chữ closes) và chúng ta thực sự ổn rồi:
# Commit the data
con.commit();
# Close our database connections
cur.close()
con.close()
Bây giờ, chúng ta hãy xem qua dữ liệu:
Và cuối cùng, đây là mã hoàn chỉnh, bao gồm cả logic trích xuất từ trước và lưu trữ cơ sở dữ liệu:
import psycopg2
import requests
from bs4 import BeautifulSoup
# Establish database connection
con = psycopg2.connect(
host=”127.0.0.1″,
port=”5432″,
user=”postgres”,
password=””,
database=”scrape_demo”
)
# Get a database cursor
cur = con.cursor()
r = requests.get(‘https://news.ycombinator.com’)
soup = BeautifulSoup(r.text, ‘html.parser’)
links = soup.findAll(‘tr’, class_=’athing’)
for link in links:
cur.execute(“””
INSERT INTO hn_links (id, title, url, rank)
VALUES (%s, %s, %s, %s)
“””,
(
link[‘id’],
link.find_all(‘td’)[2].a.text,
link.find_all(‘td’)[2].a[‘href’],
int(link.find_all(‘td’)[0].span.text.replace(‘.’, ”))
)
)
# Commit the data
con.commit()
# Close our database connections
cur.close()
con.close()
Với điều đó, chúng ta đã hoàn tất! Dữ liệu của chúng ta được lưu trữ an toàn trong cơ sở dữ liệu, sẵn sàng cho bất kỳ phân tích hoặc xử lý nào mà chúng ta có thể nghĩ đến.
https://www.scrapingbee.com/blog/web-scraping-101-with-python/
Bảng tóm tắt nhanh về mọi công nghệ, sau đây là một số điểm chính khác cần nhớ:
- Socket và urllib3cung cấp nền tảng để hiểu các yêu cầu HTTP cấp thấp và cấp cao.
- Requestsđơn giản hóa các yêu cầu HTTP, là điểm khởi đầu tuyệt vời cho người mới bắt đầu.
- Asynciocho phép thực hiện các yêu cầu đồng thời ở tốc độ cao, giúp tăng tốc đáng kể các tác vụ thu thập dữ liệu.
- BeautifulSoupgiúp phân tích cú pháp HTML, trong khiScrapycung cấp một khuôn khổ mạnh mẽ cho các tác vụ thu thập dữ liệu quy mô lớn.
- Seleniumlà công cụ chúng tôi sử dụng để thu thập dữ liệu từ các trang web có nhiều JavaScript, cho phép chúng tôi tự động hóa các hành động của trình duyệt.
- Đôi khi, sử dụng APIcó thể là phương pháp hiệu quả nhất để lấy dữ liệu có cấu trúc trực tiếp.
- ScrapingBeegiúp bạn thu thập dữ liệu từ bất kỳ trang web nào ở quy mô lớn mà không cần phải quản lý cơ sở hạ tầng thu thập dữ liệu web.
PydanticIA và CrawlAI
Bằng cách tận dụng xác thực có cấu trúc với PydanticIA và thu thập dữ liệu web hiệu quả với CrawlAI, các nhà phát triển có thể nâng cao khả năng của LLM bằng cách cung cấp cho họ các cơ sở kiến thức có cấu trúc, được quản lý chặt chẽ. Phương pháp này, thường được gọi là Retrieval-Augmented Generation (RAG) , đảm bảo rằng LLM có thể cung cấp các câu trả lời chính xác và phong phú theo ngữ cảnh.
https://github.com/unclecode/crawl4ai
Web Scraping, Chunking, Vector Embeddings cho ứng dụng RAG
Tìm hiểu cách trích xuất nội dung từ các trang web và sử dụng nó để cải thiện phản hồi của LLM trong ứng dụng RAG. Chúng tôi sẽ đề cập đến mọi thứ từ những điều cơ bản về web scraping đến các chiến lược chunking và tạo nhúng vector để truy xuất hiệu quả.
Cơ bản về Web Scraping
Để tích hợp nội dung trang web vào hệ thống RAG, bước đầu tiên là trích xuất nội dung. Quá trình này được gọi là web scraping. Trong khi một số trang web cung cấp API để truy cập dữ liệu của họ, nhiều trang web thì không. Trong những trường hợp như vậy, web scraping trở nên rất có giá trị.
Một số thư viện Python phổ biến có thể hỗ trợ trích xuất dữ liệu web. Trong trường hợp này, chúng ta sẽ sử dụng Beautiful Soup để phân tích nội dung HTML và các yêu cầu để tạo các yêu cầu HTTP. Các công cụ nâng cao như Selenium (cho nội dung động) hoặc Scrapy (cho việc thu thập dữ liệu quy mô lớn hơn) cũng có thể được sử dụng.
Ví dụ: Trích xuất Wikipedia
Hãy bắt đầu bằng cách trích xuất một trang Wikipedia bằng BeautifulSoup.
import requests
from bs4 import BeautifulSoup
# Send a request to the Wikipedia page for Data Science
response = requests.get(
url=“https://en.wikipedia.org/wiki/Data_science”,
)
# Parse the HTML content
soup = BeautifulSoup(response.content, ‘html.parser’)
# Get textual content inside the main body of the article
content = soup.find(id=“bodyContent”)
print(content.text)
Mã này gửi yêu cầu đến Wikipedia, lấy nội dung từ trang Khoa học dữ liệu và trích xuất phần văn bản chính để xử lý thêm.
Chunking: Phân tích nội dung
Sau khi trích xuất thành công một số nội dung, bước tiếp theo là chia nhỏ nội dung đó thành nhiều phần. Chia nhỏ nội dung quan trọng vì một số lý do:
Độ chi tiết : Chia văn bản thành các phần nhỏ hơn giúp dễ dàng lấy được thông tin có liên quan nhất.
Cải thiện ngữ nghĩa : Sử dụng một nhúng duy nhất cho toàn bộ tài liệu có thể làm mất thông tin có ý nghĩa.
Hiệu quả : Các đoạn văn bản nhỏ hơn giúp tính toán hiệu quả hơn trong quá trình nhúng.
Phân đoạn có kích thước cố định so với phân đoạn có nhận thức ngữ cảnh
Các phương pháp phân đoạn phổ biến nhất là phân đoạn có kích thước cố định và phân đoạn theo ngữ cảnh. Các phân đoạn có kích thước cố định chia văn bản theo các khoảng thời gian được xác định trước, trong khi phân đoạn theo ngữ cảnh điều chỉnh kích thước phân đoạn dựa trên ranh giới câu hoặc đoạn văn.
Trong hướng dẫn này, chúng tôi sẽ sử dụng RecursiveCharacterTextSplitter khung LangChain để thực hiện phân đoạn, đảm bảo rằng các phần tách xảy ra tại các điểm hợp lý trong văn bản.
from langchain.text_splitter import RecursiveCharacterTextSplitter
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=512, # Set chunk size to 512 characters
length_function=len
)
chunked_text = text_splitter.split_text(content.text)
Mã này chia văn bản đã thu thập thành các đoạn khoảng 512 ký tự, điều chỉnh các đoạn chia dựa trên các điểm ngắt tự nhiên.
Từ Chunks đến Vector nhúng
Khi chúng ta có các đoạn văn bản, bước tiếp theo là chuyển đổi chúng thành nhúng vector . Nhúng là các biểu diễn số của văn bản nắm bắt được ý nghĩa ngữ nghĩa của nó, cho phép so sánh độ tương đồng hiệu quả.
Các loại nhúng
Có hai loại nhúng chính:
Nhúng dày đặc : Được tạo ra bởi các mô hình học sâu như mô hình từ OpenAI hoặc Sentence Transformers . Chúng mã hóa tốt sự tương đồng về mặt ngữ nghĩa.
Nhúng thưa thớt : Được tạo ra bằng các phương pháp cổ điển như TF-IDF hoặc BM25 . Chúng có hiệu quả đối với sự tương đồng dựa trên từ khóa.
Đối với ứng dụng RAG của mình, chúng tôi sẽ sử dụng các nhúng dày đặc được tạo bởi all-MiniLM-L6-v2mô hình từ Sentence Transformers .
from langchain.embeddings import SentenceTransformerEmbeddings
# Load the model for generating embeddings
embeddings = SentenceTransformerEmbeddings(model_name=“all-MiniLM-L6-v2”)
# Create embeddings for the third chunk of text
chunk_embedding = embeddings.embed_documents([chunked_text[3]])
Mã này chuyển đổi một trong các khối thành một nhúng dày đặc bằng cách sử dụng mô hình MiniLM-L6-v2 . Trong thực tế, bạn sẽ tạo nhúng cho tất cả các khối.
Lưu trữ và truy xuất nhúng với Milvus
Sau khi tạo nhúng, chúng ta cần lưu trữ chúng trong cơ sở dữ liệu vector để truy xuất hiệu quả. Milvus là cơ sở dữ liệu vector nguồn mở chuyên lưu trữ và tìm kiếm nhúng. Nó tích hợp tốt với LangChain, khiến nó trở thành lựa chọn tuyệt vời cho các ứng dụng RAG.
Sau đây là cách lưu trữ các nhúng khối của bạn trong Milvus:
from langchain.vectorstores.milvus import Milvus
# Store the embeddings in Milvus
vector_db = Milvus.from_texts(texts=chunked_text, embedding=embeddings, collection_name=“rag_milvus”)
Mã này tạo ra một bộ sưu tập trong Milvus và lưu trữ tất cả các nhúng khối để truy xuất sau này.
Xây dựng đường ống RAG
Với các khối được lưu trữ và nhúng đã sẵn sàng, đã đến lúc xây dựng đường ống RAG của chúng ta. Đường ống này sẽ truy xuất các nhúng có liên quan nhất dựa trên truy vấn của người dùng và chuyển chúng đến LLM để tạo phản hồi.
Bước 1: Thiết lập Retriever
Trước tiên, chúng ta cần thiết lập một trình thu thập dữ liệu có thể lấy các nhúng có liên quan nhất từ cơ sở dữ liệu vector dựa trên truy vấn của người dùng.
retriever = vector_db.as_retriever()
Bước 2: Khởi tạo LLM
Tiếp theo, chúng tôi khởi tạo mô hình ngôn ngữ của mình bằng GPT-3.5-turbo của OpenAI :
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model=“gpt-3.5-turbo-0125”)
Bước 3: Xác định lời nhắc tùy chỉnh
Chúng ta cần tạo một mẫu lời nhắc để hướng dẫn LLM tạo ra các câu trả lời phù hợp dựa trên nội dung đã thu thập.
from langchain_core.prompts import PromptTemplate
template = “””Use the following pieces of context to answer the question at the end.
If you don’t know the answer, just say that you don’t know, don’t try to make up an answer.
Use three sentences maximum and keep the answer as concise as possible.
Always say “thanks for asking!” at the end of the answer.
{context}
Question: {question}
Helpful Answer:”””
custom_rag_prompt = PromptTemplate.from_template(template)
Bước 4: Xây dựng chuỗi RAG
Cuối cùng, chúng ta sẽ tạo chuỗi RAG để truy xuất các đoạn có liên quan nhất, chuyển chúng đến LLM và đưa ra phản hồi đã tạo.
from langchain_core.runnables import RunnablePassthrough
from langchain_core.output_parsers import StrOutputParser
def format_docs(docs):
return “nn”.join(doc.page_content for doc in docs)
rag_chain = (
{“context”: retriever | format_docs, “question”: RunnablePassthrough()}
| custom_rag_prompt
| llm
| StrOutputParser()
)
Khi chuỗi RAG được thiết lập, giờ đây bạn có thể gửi truy vấn đến đường truyền và nhận câu trả lời dựa trên nội dung trang web.
for chunk in rag_chain.stream(“What is a Data Scientist?”):
print(chunk, end=“”, flush=True)
Trong hướng dẫn này, chúng tôi đã đề cập đến quy trình trích xuất nội dung trang web và sử dụng nó để cải thiện phản hồi LLM trong ứng dụng RAG. Chúng tôi đã thảo luận về việc trích xuất web, phân đoạn văn bản, tạo nhúng vector và lưu trữ các nhúng đó trong cơ sở dữ liệu vector như Milvus.
Bằng cách sử dụng kỹ thuật này, bạn có thể phát triển các ứng dụng AI có thông tin và nhận thức theo ngữ cảnh hơn. Cho dù bạn đang tạo chatbot hay hệ thống trả lời câu hỏi, RAG đều tăng cường tính liên quan và độ chính xác của các phản hồi được tạo ra.
Điều quan trọng cần nhớ là sự thành công của đường ống RAG phụ thuộc vào chất lượng dữ liệu và cách bạn sắp xếp các khối, nhúng và quy trình truy xuất. Thử nghiệm với các mô hình, kích thước khối và phương pháp truy xuất khác nhau để tinh chỉnh hệ thống của bạn.
Nguồn https://medium.com/ai-agent-insider/building-rag-applications-with-website-content-60ddd3be124d
Thunderbit: AI Web Scraper & Web Automation
Thunderbit: AI Web Scraper & Web Automation là một tiện ích mở rộng của trình duyệt Chrome, giúp người dùng trích xuất dữ liệu từ các trang web một cách dễ dàng và tự động. Nó đặc biệt hữu ích trong việc thu thập thông tin tuyển dụng, dữ liệu thị trường, nghiên cứu đối thủ cạnh tranh, v.v. Bài viết này sẽ hướng dẫn bạn cách sử dụng Thunderbit để tìm thông tin tuyển dụng ngành Logistics.
- Truy cập trang web Thunderbit: Mở trình duyệt Chrome và truy cập Thunderbit.com.
- Tải xuống tiện ích mở rộng: Nhấp vào nút “Download” hoặc “Get Started” trên trang web để tải xuống tiện ích mở rộng Thunderbit.
- Cài đặt: Sau khi tải xuống, tiện ích sẽ tự động được cài đặt vào trình duyệt Chrome của bạn. Bạn có thể kiểm tra lại ở phần “Extensions” trong cài đặt Chrome.
- Mở Thunderbit: Sau khi cài đặt xong, bạn sẽ tìm thấy biểu tượng Thunderbit ở góc trên cùng bên phải của trình duyệt Chrome. Nhấp vào biểu tượng để mở giao diện của Thunderbit.
- Đăng nhập: Nếu bạn đã có tài khoản Thunderbit, bạn có thể đăng nhập bằng tài khoản của mình. Nếu chưa có tài khoản, bạn có thể đăng ký một tài khoản miễn phí.
Tìm thông tin tuyển dụng ngành Logistics
- Truy cập trang web tuyển dụng: Mở một trang web tuyển dụng mà bạn muốn thu thập thông tin, ví dụ như VietnamWorks hoặc TopCV.
- Tìm kiếm ngành Logistics: Sử dụng thanh tìm kiếm của trang web để nhập từ khóa “Logistics” và thực hiện tìm kiếm. Kết quả sẽ hiển thị danh sách các công việc liên quan đến ngành Logistics.
- Chọn dữ liệu để thu thập: Sau khi kết quả tìm kiếm hiển thị, bạn sẽ thấy biểu tượng Thunderbit ở góc trên cùng bên phải của trình duyệt. Nhấp vào biểu tượng Thunderbit và chọn “Scrape”.
- Chọn dữ liệu cần thu thập: Giao diện của Thunderbit sẽ yêu cầu bạn chọn các trường dữ liệu mà bạn muốn thu thập. Bạn có thể chọn các trường như tiêu đề công việc, công ty, địa điểm, mô tả công việc, yêu cầu công việc, v.v.
- Thu thập dữ liệu: Sau khi chọn xong các trường dữ liệu, nhấp vào nút “Start Scraping” để bắt đầu thu thập dữ liệu. Thunderbit sẽ tự động trích xuất dữ liệu từ trang web và lưu trữ vào tài khoản của bạn.
- Xem dữ liệu: Sau khi thu thập dữ liệu xong, bạn có thể xem dữ liệu đã thu thập trong tài khoản Thunderbit của mình. Nhấp vào biểu tượng Thunderbit và chọn “View Data” để xem dữ liệu đã thu thập.
- Xuất dữ liệu: Bạn có thể xuất dữ liệu đã thu thập ra các định dạng khác nhau như CSV, Excel, JSON, v.v. Nhấp vào nút “Export” và chọn định dạng mà bạn muốn xuất dữ liệu.