Lộ trình
Với cửa sổ ngữ cảnh lên tới một triệu token, Gemini 2.0 Flash được tối ưu để xử lý tốc độ cao các tài liệu lớn. Trong hướng dẫn này, tôi sẽ giải thích cách dùng Gemini 2.0 Flash để xây dựng một công cụ insight bán hàng SaaS chạy bằng AI có thể:
- Tóm tắt xu hướng bán hàng theo ngành và theo sản phẩm.
- Thực hiện phân tích cảm xúc về hiệu suất bán hàng.
- Trả lời các truy vấn kinh doanh liên quan đến doanh số và xu hướng doanh thu.
Mặc dù chúng ta tập trung xây dựng ứng dụng hướng tới SaaS, bạn có thể khám phá thêm các trường hợp sử dụng của Gemini 2.0 trong video này, nơi bạn sẽ học cách xây dựng công cụ hỗ trợ sáng tạo nội dung YouTube cục bộ:
Vì sao dùng Gemini 2.0 Flash thay cho RAG?
Gemini 2.0 Flash có cửa sổ ngữ cảnh 1.000.000 token, cho phép xử lý toàn bộ tập dữ liệu mà không cần chia nhỏ (chunking) hay cơ chế truy xuất. Ngoài ra, chi phí cũng hiệu quả hơn so với các mô hình lớn như Gemini Ultra.
Nhiều ứng dụng dùng retrieval-augmented generation (RAG) cho phân tích dữ liệu có cấu trúc, nhưng Gemini 2.0 Flash loại bỏ nhu cầu dùng RAG vì:
- Giới hạn token lớn cho phép xử lý toàn bộ tập dữ liệu trong một yêu cầu.
- Cho phép phân tích dữ liệu có cấu trúc trực tiếp, loại bỏ độ phức tạp của truy xuất.
- Cung cấp xử lý nhanh hơn và tiết kiệm chi phí hơn so với cách tiếp cận dựa trên RAG.
Nếu bạn muốn dùng Gemini 2.0 Flash Lite để tối ưu chi phí thì có thể, nhưng lưu ý tại thời điểm xuất bản bài viết này, nó bị giới hạn tần suất 60 truy vấn/phút và chỉ khả dụng ở vùng us-central1.
Tổng quan: Công cụ insight bán hàng SaaS với Gemini 2.0 Flash
Hãy phác thảo các bước chính mà chúng ta sẽ thực hiện:
- Bắt đầu bằng việc tải và chuẩn bị tập dữ liệu AWS SaaS Sales từ Kaggle.
- Khởi tạo Google Cloud Vertex AI và Gemini 2.0 Flash để xử lý AI.
- Tiếp theo, trích xuất danh sách ngành và sản phẩm duy nhất để người dùng chọn.
- Dùng Tiktoken để quản lý kích thước tập dữ liệu trong giới hạn token.
- Bộ lọc người dùng chọn sẽ kích hoạt tính toán các chỉ số bán hàng chính và insight do AI tạo.
- Phân tích cảm xúc sẽ phân loại hiệu suất, và tính năng Hỏi & Đáp sẽ cung cấp insight liên quan đến bán hàng.
- Cuối cùng, tích hợp công cụ vào Gradio để tương tác động và khám phá theo thời gian thực.
Bước 1: Điều kiện tiên quyết
Trước khi bắt đầu, hãy đảm bảo bạn đã cài các công cụ và thư viện sau:
- Python 3.8+
- Kaggle
- Google-genai
- Datasets
- Tiktoken
- Gradio
Chạy các lệnh sau để cài đặt các phụ thuộc cần thiết:
!pip install gradio -q
!pip install --upgrade --quiet google-genai
!pip install datasets -q
!pip install tiktoken -q
!pip install kaggle -q
Sau khi cài xong, chạy các lệnh import sau:
import sys
import os
import tiktoken
from datasets import load_dataset
import pandas as pd
import gradio as gr
import vertexai
from vertexai.preview.generative_models import GenerativeModel
Bước 2: Tải tập dữ liệu
Chúng ta sẽ dùng tập dữ liệu AWS SAAS Sales cho dự án này, có sẵn trên Kaggle. Bắt đầu bằng việc thiết lập thông tin xác thực Kaggle và truyền lần lượt tên tác giả và tên tập dữ liệu.
# Set Kaggle API credentials
os.environ["KAGGLE_CONFIG_DIR"] = os.path.expanduser("~/.kaggle")
# Download dataset
!kaggle datasets download -d nnthanh101/aws-saas-sales --unzip
Giờ đây tập dữ liệu đã được tải xuống môi trường của chúng ta, ta có thể bắt đầu làm việc với nó. Chúng ta sẽ dùng thư viện pandas để tải và đọc tập dữ liệu từ đường dẫn.
dataset_path = "path_to_your_data.csv" # Load dataset from specified path
dataset_df = pd.read_csv(dataset_path)
Tập dữ liệu này chứa 9.994 giao dịch với các cột như:
- Industry: Nhóm ngành của công ty.
- Product: Sản phẩm SaaS đã bán.
- Sales: Doanh thu từ giao dịch.
- Quantity: Số lượng giấy phép bán ra.
- Profit: Lợi nhuận từ giao dịch.
- Discount: Bất kỳ mức chiết khấu nào được áp dụng.
Bước 3: Thiết lập Google Cloud Vertex AI
Để dùng Gemini 2.0 Flash, chúng ta cần xác thực với Google Cloud.
if "google.colab" in sys.modules:
from google.colab import auth
auth.authenticate_user()
Để khởi tạo Vertex AI, hãy tìm Vertex AI API và bật nó (đảm bảo tài khoản của bạn đã bật thanh toán).

Lưu ID dự án và vị trí để tham chiếu sau. Chạy Gemini 2.0 Flash cho dự án này tốn khoảng $0,07 cho xấp xỉ năm lần gọi API.
# Set up Google Cloud Vertex AI
PROJECT_ID = "Your_project_id"
LOCATION = "Your_location"
vertexai.init(project=PROJECT_ID, location=LOCATION)
model = GenerativeModel("gemini-2.0-flash")
Để tìm hiểu thêm về Vertex AI, hãy xem hướng dẫn nhập môn này về Vertex AI.
Bước 4: Tiền xử lý dữ liệu
Để xử lý dữ liệu đúng cách, hãy chuẩn hoá tên cột và trích xuất các danh mục chính. Chúng tôi tìm các ngành và sản phẩm duy nhất để làm nguồn cho markdown trong bản demo. Nếu bạn dùng tập dữ liệu khác, hãy chọn danh mục phù hợp.
# Normalize column names to prevent key errors
df.columns = df.columns.str.strip().str.lower()
print("Dataset columns:", df.columns) # Debugging
# Extract unique industry names and product categories
unique_industries = sorted(df["industry"].dropna().unique().tolist())
unique_industries.insert(0, "All Industries") # Add "All Industries" option
unique_products = sorted(df["product"].dropna().unique().tolist())
unique_products.insert(0, "All Products") # Add "All Products" option
Bước 5: Đếm token trong tập dữ liệu
Giờ khi đã xử lý xong tập dữ liệu, chúng ta sẽ đếm số token. Vì Gemini 2.0 Flash có giới hạn 1.000.000 token, việc tính số token trong tập dữ liệu trước khi gửi vào mô hình là quan trọng. Tập dữ liệu này có 805447 token.
# Initialize tokenizer (use "cl100k_base" for Gemini/GPT models)
encoder = tiktoken.get_encoding("cl100k_base")
# Choose relevant text columns
text_columns = ['industry', 'product', 'sales', 'quantity', 'discount', 'profit']
# Create a combined text column for tokenization
df["combined_text"] = df[text_columns].astype(str).agg(" | ".join, axis=1)
# Function to count tokens
def count_tokens(texts):
total_tokens = sum(len(encoder.encode(str(text))) for text in texts)
return total_tokens
# Calculate total tokens
total_tokens = count_tokens(df["combined_text"].dropna().tolist())
print(f"Total tokens in the dataset: {total_tokens}")
Chúng ta dùng Tiktoken để token hóa như sau:
- Khởi tạo bộ tách token: Dùng bộ tách
cl100k_basecủa Tiktoken, tối ưu cho các mô hình Gemini và GPT. - Chọn các cột văn bản liên quan: Xác định các cột chính (industry, product, sales, quantity, discount, profit) cho phân tích AI.
- Kết hợp các cột đã chọn thành một trường văn bản: Chuyển cột sang dạng chuỗi để tránh lệch kiểu và gộp vào combined_text với dấu " | " làm phân cách.
- Định nghĩa hàm đếm token: Tách token từng hàng trong
combined_textvà tính tổng số token trên tất cả các hàng. - Tính tổng token trong tập dữ liệu: Loại bỏ giá trị NaN, áp dụng hàm đếm token, và in tổng số token để đảm bảo tuân thủ giới hạn 1M token của Gemini 2.0 Flash.
Bước 6: Tóm tắt xu hướng bán hàng
Giờ chúng ta có thể làm phần phân tích của bản demo. Hàm này tạo bản tóm tắt bán hàng dựa trên ngành và sản phẩm được chọn.
def summarize_sales(industry, product):
filtered_data = df.copy()
if industry != "All Industries":
filtered_data = filtered_data[filtered_data["industry"] == industry]
if product != "All Products":
filtered_data = filtered_data[filtered_data["product"] == product]
if filtered_data.empty:
return "No sales data available for the selected industry and product."
# Create sales report
total_sales = filtered_data["sales"].sum()
total_quantity = filtered_data["quantity"].sum()
total_profit = filtered_data["profit"].sum()
avg_discount = filtered_data["discount"].mean()
sales_text = f"""
Sales Data for {industry} - {product}:
- Total Sales: ${total_sales:,.2f}
- Total Quantity Sold: {total_quantity}
- Total Profit: ${total_profit:,.2f}
- Average Discount: {avg_discount:.2f}%
"""
# Generate summary using Gemini 2.0 Flash
response = model.generate_content(sales_text, stream=True)
response_text = "".join(chunk.text for chunk in response)
return response_text
Hàm summarize_sales() lọc tập dữ liệu theo ngành và sản phẩm được chọn, tính các chỉ số bán hàng chính như tổng doanh số, số lượng bán, lợi nhuận và chiết khấu trung bình, rồi định dạng dữ liệu thành một prompt có cấu trúc. Prompt này sau đó được đưa vào mô hình Gemini 2.0 Flash để tạo bản tóm tắt bán hàng ngắn gọn.
Bước 7: Thực hiện phân tích cảm xúc về bán hàng
Tương tự, chúng ta định nghĩa một hàm khác để phân tích cảm xúc dựa trên tổng lợi nhuận.
def analyze_sales_sentiment(industry, product):
filtered_data = dataset_df.copy()
if industry != "All Industries":
filtered_data = filtered_data[filtered_data["industry"] == industry]
if product != "All Products":
filtered_data = filtered_data[filtered_data["product"] == product]
if filtered_data.empty:
return "No sales data available for sentiment analysis."
total_sales = filtered_data["sales"].sum()
total_profit = filtered_data["profit"].sum()
# Define sentiment labels based on profit margins
if total_profit > 500000:
sentiment_label = "Positive"
elif total_profit > 100000:
sentiment_label = "Neutral"
else:
sentiment_label = "Negative"
sentiment_text = f"""
The total sales for {industry} - {product} is ${total_sales:,.2f},
with a total profit of ${total_profit:,.2f}.
Based on market trends, this performance is considered {sentiment_label}.
Analyze the sentiment of sales performance for this product.
"""
# Generate sentiment analysis using Gemini Flash 2.0
response = model.generate_content(sentiment_text, stream=True)
# Collect response text
response_text = "".join(chunk.text for chunk in response)
return response_text
Hàm analyze_sales_sentiment() phân tích cảm xúc bán hàng bằng cách lọc tập dữ liệu theo ngành và sản phẩm đã chọn, tính tổng doanh số và tổng lợi nhuận, rồi tạo phân tích cảm xúc do AI hỗ trợ bằng Gemini 2.0 Flash. Mô hình được nhắc bằng một bản tóm tắt có cấu trúc về hiệu suất bán hàng, cho phép đánh giá cảm xúc một cách linh hoạt thay vì chỉ dựa trên ngưỡng lợi nhuận cố định.
Bước 8: Xây dựng giao diện Gradio
Giờ chúng ta đã có các hàm logic chính. Tiếp theo, xây dựng giao diện tương tác bằng Gradio.
with gr.Blocks() as demo:
gr.Markdown("# AI-Powered SaaS Sales Analysis")
industry_dropdown = gr.Dropdown(choices=unique_industries, label="Select an Industry")
product_dropdown = gr.Dropdown(choices=unique_products, label="Select a Product")
summarize_btn = gr.Button("Summarize Sales Trends")
summary_output = gr.Textbox(label="Sales Trend Summary")
summarize_btn.click(summarize_sales, inputs=[industry_dropdown, product_dropdown], outputs=summary_output)
demo.launch(debug=True)
Đoạn mã này tạo giao diện Gradio tương tác cho phân tích bán hàng SaaS chạy bằng AI, nơi người dùng có thể chọn ngành và sản phẩm từ các menu xổ xuống rồi nhấp nút để tạo tóm tắt bán hàng. Các đầu vào được chuyển tới hàm summarize_sales(), hàm xử lý dữ liệu và trả về insight hiển thị trong ô văn bản. Ứng dụng Gradio sau đó được khởi chạy để tương tác thời gian thực.

Dưới đây là kết quả từ một bài thử nhanh tôi đã chạy. Tôi chọn tất cả ngành và tất cả sản phẩm, rồi yêu cầu mô hình tạo tóm tắt bán hàng và thực hiện phân tích cảm xúc trên các tham số đã chọn.



Kết luận
Trong hướng dẫn này, chúng ta đã xây dựng một công cụ insight bán hàng SaaS chạy bằng AI với Gemini 2.0 Flash, cho phép phân tích dữ liệu bán hàng SaaS theo thời gian thực. Chúng ta đã tận dụng cửa sổ ngữ cảnh lớn của Gemini 2.0 Flash để xử lý dữ liệu có cấu trúc mà không cần RAG và tích hợp giao diện tương tác dựa trên Gradio để người dùng sử dụng dễ dàng.
Tôi khuyến khích bạn điều chỉnh hướng dẫn này cho trường hợp sử dụng của riêng mình. Để tìm hiểu thêm về cách xây dựng ứng dụng với Gemini 2.0, tôi gợi ý các hướng dẫn sau:
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.

