1. Tổng quan
Trong lớp học lập trình này, bạn sẽ tạo Neighbor Loop, một ứng dụng chia sẻ hàng hoá dư thừa bền vững, coi trí thông minh là một thành phần quan trọng của lớp dữ liệu.
Bằng cách tích hợp Gemini 3.0 Flash và AlloyDB AI, bạn sẽ chuyển từ bộ nhớ cơ bản sang lĩnh vực Trí tuệ trong cơ sở dữ liệu. Bạn sẽ tìm hiểu cách thực hiện phân tích mặt hàng đa phương thức và khám phá ngữ nghĩa ngay trong SQL, loại bỏ "Thuế AI" của độ trễ và sự phình to về cấu trúc.

Sản phẩm bạn sẽ tạo ra
Một ứng dụng web "vuốt để ghép" hiệu suất cao để chia sẻ đồ dùng dư thừa trong cộng đồng.
Kiến thức bạn sẽ học được
- Cung cấp chỉ bằng một lần nhấp: Cách thiết lập một cụm và phiên bản AlloyDB được thiết kế cho khối lượng công việc AI.
- Nhúng trong cơ sở dữ liệu: Tạo vectơ text-embedding-005 ngay trong câu lệnh INSERT.
- Lập luận đa phương thức: Sử dụng Gemini 3.0 Flash để "nhìn thấy" các mục và tự động tạo tiểu sử theo phong cách hẹn hò một cách dí dỏm.
- Khám phá ngữ nghĩa: Thực hiện "kiểm tra cảm xúc" dựa trên logic trong các truy vấn SQL bằng cách sử dụng hàm ai.if() để lọc kết quả dựa trên ngữ cảnh, chứ không chỉ dựa trên toán học.
Kiến trúc
Neighbor Loop bỏ qua các điểm tắc nghẽn truyền thống ở lớp ứng dụng. Thay vì trích xuất dữ liệu để xử lý, chúng tôi sử dụng:
- AlloyDB AI: Để tạo và lưu trữ vectơ theo thời gian thực.
- Google Cloud Storage: Để lưu trữ hình ảnh
- Gemini 3.0 Flash: Để thực hiện suy luận trong vòng chưa đến một giây đối với dữ liệu hình ảnh và văn bản trực tiếp thông qua SQL.
- Cloud Run: Để lưu trữ một phụ trợ Flask nhẹ, có một tệp duy nhất.
Yêu cầu
2. Trước khi bắt đầu
Tạo dự án
- Trong Google Cloud Console, trên trang chọn dự án, hãy chọn hoặc tạo một dự án trên Google Cloud.
- Đảm bảo rằng bạn đã bật tính năng thanh toán cho dự án trên Cloud. Tìm hiểu cách kiểm tra xem tính năng thanh toán có được bật trên một dự án hay không.
- Bạn sẽ sử dụng Cloud Shell, một môi trường dòng lệnh chạy trong Google Cloud. Nhấp vào Kích hoạt Cloud Shell ở đầu bảng điều khiển Google Cloud.

- Sau khi kết nối với Cloud Shell, bạn có thể kiểm tra để đảm bảo rằng bạn đã được xác thực và dự án được đặt thành mã dự án của bạn bằng lệnh sau:
gcloud auth list
- Chạy lệnh sau trong Cloud Shell để xác nhận rằng lệnh gcloud biết về dự án của bạn.
gcloud config list project
- Nếu bạn chưa đặt dự án, hãy dùng lệnh sau để đặt:
gcloud config set project <YOUR_PROJECT_ID>
- Bật các API bắt buộc: Truy cập vào đường liên kết rồi bật các API.
Ngoài ra, bạn có thể dùng lệnh gcloud cho việc này. Tham khảo tài liệu để biết các lệnh và cách sử dụng gcloud.
Các lỗi thường gặp và cách khắc phục sự cố
Hội chứng "Dự án ma" | Bạn đã chạy |
Rào chắn thanh toán | Bạn đã bật dự án nhưng quên tài khoản thanh toán. AlloyDB là một công cụ hiệu suất cao; công cụ này sẽ không khởi động nếu "bình xăng" (thanh toán) trống. |
Độ trễ truyền API | Bạn đã nhấp vào "Bật API", nhưng dòng lệnh vẫn hiển thị |
Quota Quags | Nếu đang sử dụng tài khoản dùng thử hoàn toàn mới, bạn có thể đạt đến hạn mức theo khu vực cho các phiên bản AlloyDB. Nếu |
Nhân viên hỗ trợ dịch vụ"bị ẩn" | Đôi khi, AlloyDB Service Agent không được tự động cấp vai trò |
3. Thiết lập cơ sở dữ liệu
Trong phòng thí nghiệm này, chúng ta sẽ sử dụng AlloyDB làm cơ sở dữ liệu cho dữ liệu kiểm thử. Nền tảng này sử dụng cụm để lưu giữ tất cả tài nguyên, chẳng hạn như cơ sở dữ liệu và nhật ký. Mỗi cụm có một phiên bản chính cung cấp một điểm truy cập vào dữ liệu. Các bảng sẽ chứa dữ liệu thực tế.
Hãy tạo một cụm, phiên bản và bảng AlloyDB nơi tập dữ liệu kiểm thử sẽ được tải.
- Nhấp vào nút hoặc Sao chép đường liên kết bên dưới vào trình duyệt mà bạn đã đăng nhập người dùng Google Cloud Console.
- Sau khi hoàn tất bước này, kho lưu trữ sẽ được sao chép vào trình chỉnh sửa Cloud Shell cục bộ và bạn có thể chạy lệnh bên dưới từ thư mục dự án (điều quan trọng là phải đảm bảo bạn đang ở trong thư mục dự án):
sh run.sh
- Bây giờ, hãy sử dụng giao diện người dùng (nhấp vào đường liên kết trong thiết bị đầu cuối hoặc nhấp vào đường liên kết "xem trước trên web" trong thiết bị đầu cuối.
- Nhập thông tin chi tiết về mã dự án, tên cụm và tên phiên bản để bắt đầu.
- Hãy đi lấy một tách cà phê trong khi nhật ký cuộn và bạn có thể đọc về cách nhật ký thực hiện việc này ở chế độ nền tại đây.
Các lỗi thường gặp và cách khắc phục sự cố
Vấn đề về "Tính kiên nhẫn" | Cụm cơ sở dữ liệu là cơ sở hạ tầng lớn. Nếu làm mới trang hoặc kết thúc phiên Cloud Shell vì phiên này "có vẻ bị treo", bạn có thể gặp phải một phiên bản "ảo" được cung cấp một phần và không thể xoá nếu không có sự can thiệp thủ công. |
Khu vực không khớp | Nếu đã bật API trong |
Nhóm zombie | Nếu trước đây bạn đã dùng cùng một tên cho một cụm và chưa xoá cụm đó, thì tập lệnh có thể cho biết tên cụm đã tồn tại. Tên cụm phải là duy nhất trong một dự án. |
Thời gian chờ của Cloud Shell | Nếu bạn giải lao uống cà phê trong 30 phút, Cloud Shell có thể chuyển sang chế độ ngủ và ngắt kết nối quy trình |
4. Cung cấp giản đồ
Sau khi bạn chạy cụm và phiên bản AlloyDB, hãy chuyển đến trình chỉnh sửa SQL của AlloyDB Studio để bật các tiện ích AI và cung cấp giản đồ.

Bạn có thể phải đợi phiên bản của mình được tạo xong. Sau khi tạo xong, hãy đăng nhập vào AlloyDB bằng thông tin đăng nhập mà bạn đã tạo khi tạo cụm. Sử dụng dữ liệu sau để xác thực với PostgreSQL:
- Tên người dùng : "
postgres" - Cơ sở dữ liệu : "
postgres" - Mật khẩu : "
alloydb" (hoặc mật khẩu bạn đặt tại thời điểm tạo)
Sau khi bạn xác thực thành công vào AlloyDB Studio, các lệnh SQL sẽ được nhập vào Trình chỉnh sửa. Bạn có thể thêm nhiều cửa sổ Trình chỉnh sửa bằng cách nhấp vào dấu cộng ở bên phải cửa sổ cuối cùng.

Bạn sẽ nhập các lệnh cho AlloyDB trong cửa sổ trình chỉnh sửa, sử dụng các lựa chọn Chạy, Định dạng và Xoá khi cần.
Bật tiện ích
Để tạo ứng dụng này, chúng ta sẽ sử dụng các tiện ích pgvector và google_ml_integration. Tiện ích pgvector cho phép bạn lưu trữ và tìm kiếm các vectơ nhúng. Tiện ích google_ml_integration cung cấp các hàm mà bạn dùng để truy cập vào các điểm cuối dự đoán của Vertex AI nhằm nhận thông tin dự đoán bằng SQL. Bật các tiện ích này bằng cách chạy các DDL sau:
CREATE EXTENSION IF NOT EXISTS google_ml_integration CASCADE;
CREATE EXTENSION IF NOT EXISTS vector;
Tạo bảng
Bạn có thể tạo một bảng bằng câu lệnh DDL bên dưới trong AlloyDB Studio:
-- Items Table (The "Profile" you swipe on)
CREATE TABLE items (
item_id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
owner_id UUID,
provider_name TEXT,
provider_phone TEXT,
title TEXT,
bio TEXT,
category TEXT,
image_url TEXT,
item_vector VECTOR(768),
status TEXT DEFAULT 'available',
created_at TIMESTAMP DEFAULT NOW()
);
-- Swipes Table (The Interaction)
CREATE TABLE swipes (
swipe_id SERIAL PRIMARY KEY,
swiper_id UUID,
item_id UUID REFERENCES items(item_id),
direction TEXT CHECK (direction IN ('left', 'right')),
is_match BOOLEAN DEFAULT FALSE,
created_at TIMESTAMP DEFAULT NOW()
);
Cột item_vector sẽ cho phép lưu trữ các giá trị vectơ của văn bản.
Cấp quyền
Chạy câu lệnh bên dưới để cấp quyền thực thi cho hàm "embedding":
GRANT EXECUTE ON FUNCTION embedding TO postgres;
Cấp VAI TRÒ Người dùng Vertex AI cho tài khoản dịch vụ AlloyDB
Trên bảng điều khiển IAM của Google Cloud, hãy cấp cho tài khoản dịch vụ AlloyDB (có dạng như sau: service-<<PROJECT_NUMBER>>@gcp-sa-alloydb.iam.gserviceaccount.com) quyền truy cập vào vai trò "Người dùng Vertex AI". PROJECT_NUMBER sẽ có số dự án của bạn.
Ngoài ra, bạn có thể chạy lệnh bên dưới trong Cloud Shell Terminal:
PROJECT_ID=$(gcloud config get-value project)
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:service-$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")@gcp-sa-alloydb.iam.gserviceaccount.com" \
--role="roles/aiplatform.user"
Đăng ký mô hình Gemini 3 Flash trong AlloyDB
Chạy câu lệnh SQL bên dưới trong Trình chỉnh sửa truy vấn AlloyDB
CALL google_ml.create_model(
model_id => 'gemini-3-flash-preview',
model_request_url => 'https://aiplatform.googleapis.com/v1/projects/<<YOUR_PROJECT_ID>>/locations/global/publishers/google/models/gemini-3-flash-preview:generateContent',
model_qualified_name => 'gemini-3-flash-preview',
model_provider => 'google',
model_type => 'llm',
model_auth_type => 'alloydb_service_agent_iam'
);
--replace <<YOUR_PROJECT_ID>> with your project id.
Các lỗi thường gặp và cách khắc phục sự cố
Vòng lặp "Quên mật khẩu" | Nếu bạn sử dụng chế độ thiết lập "Một lần nhấp" và không nhớ mật khẩu, hãy chuyển đến trang Thông tin cơ bản về phiên bản trong bảng điều khiển rồi nhấp vào "Chỉnh sửa" để đặt lại mật khẩu |
Lỗi "Không tìm thấy tiện ích" | Nếu |
Khoảng trống truyền tải IAM | Bạn đã chạy lệnh IAM |
Vector Dimension Mismatch | Bảng |
Lỗi chính tả mã dự án | Trong lệnh gọi |
5. Lưu trữ hình ảnh (Google Cloud Storage)
Để lưu trữ ảnh của các mặt hàng dư thừa, chúng tôi sử dụng một vùng lưu trữ GCS. Đối với mục đích của ứng dụng minh hoạ này, chúng ta muốn hình ảnh có thể truy cập công khai để chúng hiển thị ngay lập tức trong thẻ vuốt.
- Tạo một nhóm: Tạo một nhóm mới trong dự án GCP của bạn (ví dụ: neighborloop-images), tốt nhất là trong cùng khu vực với cơ sở dữ liệu và ứng dụng của bạn.
- Định cấu hình quyền truy cập công khai: * Chuyển đến thẻ Quyền của nhóm.
- Thêm đối tượng chính allUsers.
- Chỉ định vai trò Storage Object Viewer (để mọi người có thể xem ảnh) và vai trò Storage Object Creator (cho mục đích tải bản minh hoạ lên).
Phương án thay thế (Tài khoản dịch vụ): Nếu bạn không muốn sử dụng quyền truy cập công khai, hãy đảm bảo Tài khoản dịch vụ của ứng dụng được cấp toàn quyền truy cập vào AlloyDB và các vai trò Lưu trữ cần thiết để quản lý các đối tượng một cách an toàn.
Các lỗi thường gặp và cách khắc phục sự cố
The Region Drag | Nếu cơ sở dữ liệu của bạn nằm trong |
Tính duy nhất của tên bộ chứa | Tên bộ chứa là một không gian tên chung. Nếu bạn cố gắng đặt tên cho nhóm của mình là |
Nhầm lẫn giữa "Nhà sáng tạo" và "Người xem" | Nhầm lẫn giữa "Người tạo" và "Người xem": Nếu bạn chỉ thêm "Người xem", ứng dụng của bạn sẽ gặp sự cố khi người dùng cố gắng liệt kê một mục mới vì ứng dụng không có quyền ghi tệp. Bạn cần cả hai để thiết lập bản minh hoạ cụ thể này. |
6. Hãy tạo ứng dụng
Sao chép kho lưu trữ này vào dự án của bạn và hãy cùng xem qua.
- Để sao chép dự án này, hãy chạy lệnh sau từ Cloud Shell Terminal (trong thư mục gốc hoặc từ bất cứ nơi nào bạn muốn tạo dự án này):
git clone https://github.com/AbiramiSukumaran/neighbor-loop
Thao tác này sẽ tạo dự án và bạn có thể xác minh dự án đó trong Cloud Shell Editor.

- Cách lấy Khoá Gemini API
- Truy cập Google AI Studio: Truy cập vào aistudio.google.com.
- Đăng nhập: Sử dụng cùng Tài khoản Google mà bạn đang dùng cho dự án trên Google Cloud.
- Tạo khoá API:
- Trên thanh bên bên trái, hãy nhấp vào "Lấy khoá API".
- Nhấp vào nút "Tạo khoá API trong dự án mới".
- Sao chép khoá: Sau khi khoá được tạo, hãy nhấp vào biểu tượng sao chép.
- Bây giờ, hãy thiết lập các biến môi trường trong tệp .env
GEMINI_API_KEY=<<YOUR_GEMINI_API_KEY>>
DATABASE_URL=postgresql+pg8000://postgres:<<YOUR_PASSWORD>>@<<HOST_IP>>:<<PORT>>/postgres
GCS_BUCKET_NAME=<<YOUR_GCS_BUCKET>>
Thay thế các giá trị cho phần giữ chỗ <<YOUR_GEMINI_API_KEY>>, <<YOUR_PASSWORD>, <<HOST_IP>>, <<PORT>> and <<YOUR_GCS_BUCKET>>.
Các lỗi thường gặp và cách khắc phục sự cố
Nhầm lẫn về nhiều tài khoản | Nếu bạn đăng nhập vào nhiều Tài khoản Google (Tài khoản cá nhân và Tài khoản do nơi làm việc cấp), AI Studio có thể mặc định chọn nhầm tài khoản. Kiểm tra hình đại diện ở góc trên cùng bên phải để đảm bảo hình đại diện đó khớp với tài khoản Dự án GCP của bạn. |
Đạt hạn mức "Bậc miễn phí" | Nếu bạn đang sử dụng gói Miễn phí, thì sẽ có hạn mức về tần suất (RPM – Số yêu cầu mỗi phút). Nếu "vuốt" quá nhanh trong Vòng kết nối hàng xóm, bạn có thể gặp lỗi |
Bảo mật khoá bị lộ | Nếu bạn vô tình |
Khoảng trống "Hết thời gian kết nối" | Bạn đã sử dụng địa chỉ IP riêng tư trong tệp .env nhưng đang cố gắng kết nối từ bên ngoài VPC (chẳng hạn như máy cục bộ). Bạn chỉ có thể truy cập vào IP riêng tư trong cùng một mạng Google Cloud. Chuyển sang IP công khai! |
Giả định về cổng 5432 | Mặc dù 5432 là cổng PostgreSQL tiêu chuẩn, nhưng đôi khi AlloyDB yêu cầu cấu hình cổng cụ thể nếu bạn đang sử dụng một Proxy uỷ quyền. Đối với bài thực hành này, hãy đảm bảo rằng bạn đang sử dụng :5432 ở cuối chuỗi máy chủ lưu trữ. |
Người kiểm soát "Mạng được uỷ quyền" | Ngay cả khi bạn có IP công khai, AlloyDB sẽ "Từ chối kết nối" trừ phi bạn đã đưa địa chỉ IP của máy chạy mã vào danh sách cho phép.Cách khắc phục: Trong phần cài đặt phiên bản AlloyDB, hãy thêm 0.0.0.0/0 (chỉ dành cho kiểm thử tạm thời!) hoặc IP cụ thể của bạn vào Mạng được uỷ quyền. |
Lỗi bắt tay SSL/TLS | AlloyDB ưu tiên các kết nối bảo mật. Nếu DATABASE_URL không chỉ định trình điều khiển đúng cách (chẳng hạn như sử dụng pg8000), thì quá trình bắt tay có thể âm thầm thất bại, khiến bạn gặp phải lỗi chung chung "Không thể truy cập vào cơ sở dữ liệu". |
Hoán đổi "Nhóm chính với nhóm chỉ đọc" | Nếu bạn vô tình sao chép địa chỉ IP của Nhóm đọc thay vì Phiên bản chính, ứng dụng của bạn sẽ hoạt động để tìm kiếm các mục nhưng sẽ gặp sự cố với lỗi "Chỉ đọc" khi bạn cố gắng liệt kê một mục mới. Luôn sử dụng IP của phiên bản chính để ghi. |
7. Hãy kiểm tra mã
"Hồ sơ hẹn hò" cho đồ đạc của bạn

Khi tải ảnh của một mặt hàng lên, người dùng không cần phải viết nội dung mô tả dài. Tôi dùng Gemini 3 Flash để "nhìn thấy" mặt hàng và viết trang thông tin cho họ.
Ở phần phụ trợ, người dùng chỉ cần cung cấp tiêu đề và ảnh. Gemini sẽ lo phần còn lại:
prompt = """
You are a witty community manager for NeighborLoop.
Analyze this surplus item and return JSON:
{
"bio": "First-person witty dating-style profile bio for the product, not longer than 2 lines",
"category": "One-word category",
"tags": ["tag1", "tag2"]
}
"""
response = genai_client.models.generate_content(
model="gemini-3-flash-preview",
contents=[types.Part.from_bytes(data=image_bytes, mime_type="image/jpeg"), prompt],
config=types.GenerateContentConfig(response_mime_type="application/json")
)

Mục nhúng trong cơ sở dữ liệu theo thời gian thực

Một trong những tính năng thú vị nhất của AlloyDB là khả năng tạo các mục nhúng mà không cần rời khỏi ngữ cảnh SQL. Thay vì gọi một mô hình nhúng trong Python và gửi vectơ trở lại DB, tôi thực hiện tất cả trong một câu lệnh INSERT bằng cách sử dụng hàm embedding():
INSERT INTO items (owner_id, provider_name, provider_phone, title, bio, category, image_url, status, item_vector)
VALUES (
:owner, :name, :phone, :title, :bio, :cat, :url, 'available',
embedding('text-embedding-005', :title || ' ' || :bio)::vector
)
Điều này đảm bảo rằng mọi mục đều có thể "tìm kiếm" theo ý nghĩa của nó ngay khi được đăng. Xin lưu ý rằng đây là phần đề cập đến tính năng "liệt kê sản phẩm" của ứng dụng Neighbor Loop.

Tính năng Tìm kiếm vectơ nâng cao và Lọc thông minh bằng Gemini 3.0
Tính năng tìm kiếm từ khoá tiêu chuẩn bị hạn chế. Nếu bạn tìm kiếm "cái gì đó để sửa ghế của tôi", thì một cơ sở dữ liệu truyền thống có thể không trả về kết quả nào nếu từ "ghế" không có trong tiêu đề. Neighbor Loop giải quyết vấn đề này bằng tính năng tìm kiếm vectơ nâng cao của AlloyDB AI.
Bằng cách sử dụng tiện ích pgvector và bộ nhớ được tối ưu hoá của AlloyDB, chúng tôi có thể thực hiện các tìm kiếm tương tự cực kỳ nhanh chóng. Nhưng "phép màu" thực sự xảy ra khi chúng ta kết hợp khoảng cách vectơ với logic dựa trên LLM.
AlloyDB AI cho phép chúng tôi gọi các mô hình như Gemini ngay trong các truy vấn SQL. Điều này có nghĩa là chúng ta có thể thực hiện một quy trình Khám phá ngữ nghĩa bao gồm cả "kiểm tra tính hợp lý" dựa trên logic bằng cách sử dụng hàm ai.if():
SELECT item_id, title, bio, category, image_url,
1 - (item_vector <=> embedding('text-embedding-005', :query)::vector) as score
FROM items
WHERE status = 'available'
AND item_vector IS NOT NULL
AND ai.if(
prompt => 'Does this text: "' || bio ||'" match the user request: "' || :query || '", at least 60%? "',
model_id => 'gemini-3-flash-preview'
)
ORDER BY score DESC
LIMIT 5
Truy vấn này thể hiện một bước chuyển đổi lớn về cấu trúc: chúng ta đang chuyển logic sang dữ liệu. Thay vì kéo hàng nghìn kết quả vào mã ứng dụng để lọc, Gemini 3 Flash sẽ thực hiện "kiểm tra cảm xúc" bên trong công cụ cơ sở dữ liệu. Điều này giúp giảm độ trễ, giảm chi phí đầu ra và đảm bảo rằng kết quả không chỉ tương tự về mặt toán học mà còn phù hợp theo ngữ cảnh.

Vòng lặp "Vuốt để ghép"
Giao diện người dùng là một bộ bài tiêu chuẩn.
Vuốt sang trái: Loại bỏ.
Vuốt sang phải: Bạn đã tìm được người phù hợp!

Khi bạn vuốt sang phải, hệ thống phụ trợ sẽ ghi lại lượt tương tác trong bảng vuốt của chúng tôi và đánh dấu mục đó là đã được ghép. Giao diện người dùng ngay lập tức kích hoạt một phương thức hiển thị thông tin liên hệ của nhà cung cấp để bạn có thể sắp xếp việc nhận hàng.
8. Hãy triển khai ứng dụng này lên Cloud Run
- Triển khai ứng dụng đó trên Cloud Run bằng cách chạy lệnh sau từ Cloud Shell Terminal (nơi dự án được sao chép) và đảm bảo bạn đang ở trong thư mục gốc của dự án.
Chạy lệnh này trong thiết bị đầu cuối Cloud Shell:
gcloud beta run deploy neighbor-loop \
--source . \
--region=us-central1 \
--network=<<YOUR_NETWORK_NAME>> \
--subnet=<<YOUR_SUBNET_NAME>> \
--allow-unauthenticated \
--vpc-egress=all-traffic \
--set-env-vars GEMINI_API_KEY=<<YOUR_GEMINI_API_KEY>>,DATABASE_URL=postgresql+pg8000://postgres:<<YOUR_PASSWORD>>@<<PRIVATE_IP_HOST>>:<<PORT>>/postgres,GCS_BUCKET_NAME=<<YOUR_GCS_BUCKET>>
Thay thế các giá trị cho phần giữ chỗ <<YOUR_GEMINI_API_KEY>>, <<YOUR_PASSWORD>, <<PRIVATE_IP_HOST>>, <<PORT>> and <<YOUR_GCS_BUCKET>>
Sau khi hoàn tất, lệnh này sẽ xuất ra một URL dịch vụ. Sao chép.
- Cấp vai trò AlloyDB Client (Ứng dụng AlloyDB) cho tài khoản dịch vụ Cloud Run.Điều này cho phép ứng dụng không dùng máy chủ của bạn tạo đường hầm an toàn vào cơ sở dữ liệu.
Chạy lệnh này trong thiết bị đầu cuối Cloud Shell:
# 1. Get your Project ID and Project Number
PROJECT_ID=$(gcloud config get-value project)
PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")
# 2. Grant the AlloyDB Client role
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
--role="roles/alloydb.client"
Bây giờ, hãy sử dụng URL dịch vụ (điểm cuối Cloud Run mà bạn đã sao chép trước đó) và kiểm thử ứng dụng. Tải ảnh của dụng cụ điện cũ đó lên và để Gemini làm phần việc còn lại!
Các lỗi thường gặp và cách khắc phục sự cố
Vòng lặp "Bản sửa đổi không thành công" | Nếu quá trình triển khai hoàn tất nhưng URL trả về |
Vai trò "Shadow" của IAM | Ngay cả khi bạn có quyền triển khai, Tài khoản dịch vụ Cloud Run (thường là |
9. Khắc phục sự cố ở cấp cao

10. Bản minh hoạ
Bạn có thể sử dụng điểm cuối cho các bài kiểm thử.
Tuy nhiên, để minh hoạ trong vài ngày, bạn có thể thử dùng mã này:
11. Dọn dẹp
Sau khi hoàn tất bài thực hành này, đừng quên xoá cụm và phiên bản alloyDB.
Thao tác này sẽ dọn dẹp cụm cùng với(các) phiên bản của cụm.
12. Xin chúc mừng
Bạn đã tạo thành công ứng dụng Neighbor Loop cho các cộng đồng bền vững bằng Google Cloud. Bằng cách di chuyển logic nhúng và logic AI của Gemini 3 Flash vào AlloyDB, ứng dụng này có tốc độ cực kỳ nhanh (tuỳ thuộc vào chế độ cài đặt triển khai) và mã rất gọn gàng. Chúng tôi không chỉ lưu trữ dữ liệu mà còn lưu trữ ý định.
Sự kết hợp giữa tốc độ của Gemini 3 Flash và khả năng xử lý vectơ được tối ưu hoá của AlloyDB thực sự là bước tiến tiếp theo cho các nền tảng dựa trên cộng đồng.