Phạm Văn Thư
RAG và quản trị tri thức · Nội dung có hỗ trợ AI

Weaviate: cơ sở dữ liệu vector, giấy phép hai tầng và trợ lý tri thức nội bộ

Đăng ngày 12/10/2026

Mục lục bài nghiên cứu
Hình đại diện Weaviate — RAG mã nguồn mở

Weaviate có đáng nằm trong danh sách lựa chọn năm 2026?

Weaviate là hệ cơ sở dữ liệu vector được xây bằng Go, lưu cả đối tượng dữ liệu lẫn vector của chúng, và kết hợp tìm kiếm ngữ nghĩa với lọc từ khóa, RAG, xếp hạng lại trong một giao diện truy vấn. Điểm riêng dễ thấy là khả năng tự vector hóa dữ liệu lúc nhập qua mô hình tích hợp, bên cạnh cách nhập vector tính sẵn. [1]

Điều cần biết trước tiên là giấy phép. Kho mã chứa Community Edition theo BSD-3-Clause và Enterprise Edition trong thư mục wl/, phần sau chỉ dùng được theo giấy phép thương mại kèm license key, còn image Docker chính thức gộp cả hai. [1][2] Thỏa thuận giấy phép doanh nghiệp ghi ngày đăng 26/08/2026 [4], nên đây là một thay đổi giấy phép của năm 2026: đánh giá nào trước đó coi toàn bộ Weaviate là BSD cần được làm lại.

Khuyến nghị: Weaviate hợp với tổ chức cần cơ sở dữ liệu vector có sẵn module vector hóa, tìm kiếm lai, đa thuê bao và RBAC, đồng thời sẵn lòng kiểm kê tính năng nào thuộc bản cộng đồng. Nên tránh khi chưa ai chịu trách nhiệm đọc ranh giới giấy phép, hoặc khi kế hoạch vận hành dựa vào tự phục hồi shard mà không định mua giấy phép. [7]

Vì sao trợ lý tra cứu nội bộ thường hỏng ở khâu tìm kiếm?

Tri thức nội bộ nằm rải rác trong quy trình, biên bản, thư điện tử và các câu hỏi lặp đi lặp lại. Tìm theo từ khóa hụt khi người hỏi không dùng đúng thuật ngữ; tìm theo ngữ nghĩa thuần túy lại dễ bỏ sót số hiệu văn bản, mã sản phẩm hay tên riêng. Hệ thống cần làm được cả hai trong một truy vấn.

Trở ngại thứ hai là đường ống dữ liệu: ứng dụng phải gọi mô hình embedding, lưu vector, đồng bộ khi tài liệu đổi. Weaviate rút ngắn đường ống bằng bộ vector hóa (vectorizer) cấu hình ngay trên collection; ví dụ trong README chạy mô hình nhẹ Model2Vec cạnh cơ sở dữ liệu bằng Docker Compose. [1]

Trở ngại thứ ba là cô lập dữ liệu khi nhiều phòng ban hay khách hàng dùng chung một hệ thống. README nêu multi-tenancy, replication và RBAC là nhóm tính năng dành cho triển khai production. [1]

Bên trong một cụm Weaviate: shard, bucket LSM và RAFT làm gì?

Mỗi collection chia thành shard, shard có thể có bản sao trên nhiều nút; dữ liệu shard nằm trong các bucket kiểu LSM gồm segment bất biến, bộ lọc Bloom và tệp WAL có thể thay đổi. Tài liệu xuất dữ liệu nêu chi tiết này khi giải thích vì sao segment được hard-link còn WAL phải sao chép lúc chụp snapshot. [5]

Schema và metadata cụm đi qua RAFT, nên thao tác thêm collection hay tenant phải qua leader [6]; tài liệu metrics ghi mỗi nút giữ toàn bộ schema [9]. Tài liệu giới hạn sử dụng thừa nhận phép kiểm tra số collection không giao dịch cùng RAFT, nên hai lệnh tạo đồng thời có thể cùng lọt qua. [6]

Tenant có trạng thái: tenant nóng được nạp, tenant lạnh nằm trên đĩa và nạp khi kích hoạt, tenant đã offload bị bỏ qua khi xuất dữ liệu [5][7]. Shard còn có thể đăng ký kiểu nạp lười (lazy), chỉ mở ở lần truy cập đầu [9]. Cơ chế này quan trọng khi có nhiều tenant ít hoạt động.

Ứng dụng giao tiếp qua REST, gRPC và GraphQL, với client chính thức cho Python, JavaScript/TypeScript, Java, Go và C#/.NET. Các module vector hóa, sinh câu trả lời và xếp hạng lại gọi tới mô hình cục bộ như model2vec hoặc nhà cung cấp như OpenAI, Cohere tùy cấu hình. [1]

Một đối tượng đi từ insert_many tới kết quả near_text như thế nào?

Theo ví dụ README, ứng dụng tạo collection có thuộc tính văn bản và cấu hình vectorizer; khi gọi insert_many, nội dung được gửi tới module vector hóa (ở đây là container model2vec-inference) và vector trả về được lưu cùng đối tượng. Dùng vector tự tạo thì bỏ qua bước này. [1]

Ở tầng lưu trữ, tài liệu giới hạn sử dụng chỉ ra điểm thắt Shard.PutObject và PutObjectBatch ngay trước khi ghi vào LSM. Lô ghi trên collection nhiều shard được tách theo shard trước khi chuyển đi, nên khi một shard từ chối, chẳng hạn vì chạm giới hạn, lô có thể thành công từng phần; với hệ số bản sao lớn hơn một, đường ghi đi qua lớp replication riêng. [6]

Khi đọc, truy vấn near_text nhận văn bản nên cần module của collection để biến câu hỏi thành vector, rồi có thể kết hợp BM25 và bộ lọc trong cùng lệnh [1]. Chỉ mục vector có thể là hnsw, flat, dynamic hoặc hfresh [6]. Nếu bật tìm kiếm sinh, kết quả được chuyển cho mô hình ngôn ngữ để soạn câu trả lời. [1]

Khi vectorizer hay module sinh trỏ tới dịch vụ ngoài, nội dung tài liệu và câu hỏi rời khỏi hạ tầng. Metrics có chỉ số đếm yêu cầu tới API bên ngoài và token gửi tới vectorizer ngoài [9]; chúng đo được dữ liệu đi ra nhưng không thay quyết định có cho phép hay không.

Những khả năng nào đối chiếu được trong mã nguồn và tài liệu?

README xác nhận: tìm kiếm vector, BM25, tìm kiếm ảnh và bộ lọc nâng cao trong một lệnh; RAG và reranking tích hợp; vector hóa lúc nhập với OpenAI, Cohere, HuggingFace, Google hoặc nhập vector tự tạo; mở rộng ngang, multi-tenancy, replication, RBAC; nén vector bằng lượng tử hóa và mã hóa đa vector; TTL cho đối tượng theo từng collection. [1]

Tài liệu giới hạn sử dụng cho thấy quản trị viên có thể giới hạn loại chỉ mục (hnsw, flat, dynamic, hfresh) và kiểu nén (none, pq, sq, rq-1, rq-8, bq) bằng danh sách cho phép, cùng trần số đối tượng, collection, tenant, shard. Mọi giới hạn đều tùy chọn, không có hiệu lực khi không đặt biến môi trường, và được thiết kế cho gói miễn phí sắp ra mắt của Weaviate Cloud. [6]

Danh sách lời gọi phân quyền sinh tự động cho thấy RBAC kiểm tra thao tác tạo, đọc, sửa, xóa trên vai trò, collection, metadata, dữ liệu shard, đối tượng, sao lưu, nút và cụm, kèm API tạo, gán, thu hồi vai trò. [8]

Một tính năng doanh nghiệp đã xác nhận là tự phục hồi shard (shard self-recovery): mã ở wl/selfrecovery, cần license key, và nút không có khóa sẽ không khởi động lượt phục hồi mới. [7]

Ai hưởng lợi nhiều nhất từ Weaviate?

Đội sản phẩm muốn đưa tìm kiếm ngữ nghĩa vào ứng dụng mà không tự xây đường ống embedding là nhóm hưởng lợi đầu tiên. Nhóm đã dùng LangChain, LlamaIndex, Haystack hay CrewAI cũng thuận lợi vì README liệt kê tích hợp với các framework này. [1]

Ngành nhiều văn bản nội bộ và đòi hỏi phân quyền chặt như tài chính, bảo hiểm, pháp chế, y tế có thể cân nhắc, với điều kiện chạy mô hình vector hóa cục bộ hoặc có hợp đồng xử lý dữ liệu rõ ràng với nhà cung cấp. Với SME muốn dựng hệ tri thức nội bộ, một nút Docker Compose là điểm khởi đầu vừa sức.

Không phù hợp với tổ chức chưa có người đọc giấy phép, cần tự phục hồi tự động mà không mua bản doanh nghiệp [7], hoặc đã có cơ sở dữ liệu quan hệ đáp ứng đủ nhu cầu tìm kiếm.

Một công ty chứng khoán có thể dùng Weaviate cho tra cứu nội bộ ra sao?

Tình huống giả định: một công ty chứng khoán cỡ vừa muốn có trợ lý tra cứu cho khối hỗ trợ, gồm quy trình mở tài khoản, hướng dẫn lưu ký, quy chế nội bộ, văn bản pháp quy đã được pháp chế tóm tắt và kho câu hỏi thường gặp của bộ phận chăm sóc khách hàng. Phạm vi loại trừ hoàn toàn hệ thống đặt lệnh, dữ liệu giao dịch thời gian thực và mọi tư vấn đầu tư. Đây là đề xuất, không phải dự án có thật.

Mỗi khối nghiệp vụ là một tenant hoặc collection riêng; RBAC cấp quyền đọc theo khối, quyền ghi cho người quản trị nội dung, quyền sao lưu cho CNTT. [1][8] Bức tường thông tin giữa khối phân tích và các khối khác được thực thi bằng tách tenant và vai trò, không bằng câu dặn trong prompt.

Vector hóa chạy cục bộ: một mô hình embedding đa ngữ đặt cạnh Weaviate trong mạng nội bộ, theo cách README ghép container model2vec, và không bật module gọi nhà cung cấp ngoài. Tìm kiếm lai giúp khớp đúng số hiệu văn bản, mã chứng khoán, tên sản phẩm; TTL dọn dữ liệu tạm như bản nháp câu trả lời. [1]

Mỗi câu trả lời kèm trích dẫn tới văn bản gốc và phiên bản; câu trả lời về quy định phải được pháp chế xác nhận trước khi vào kho câu trả lời mẫu.

Đưa Weaviate vào vận hành cần chuẩn bị gì?

README nêu ba đường triển khai là Docker, Kubernetes và Weaviate Cloud, cùng lựa chọn trên marketplace AWS, GCP. Ví dụ Docker Compose mở cổng 8080 và 50051 và gắn image 1.36.0 [1]; triển khai thật nên chọn bản phát hành cụ thể, đọc ghi chú phát hành và cố định tag thay vì chép nguyên ví dụ.

Giám sát dựa trên Prometheus. Tài liệu metrics chia chỉ số thành nhóm dashboard, vận hành, cảnh báo, gỡ lỗi; nhiều chỉ số mang nhãn class_name và shard_name nên số chuỗi thời gian tăng nhanh, và có tùy chọn PROMETHEUS_MONITORING_GROUP_CLASSES để gộp nhãn. [9] Hệ thống nhiều tenant nên bật gộp nhãn từ đầu.

Không có giấy phép, nút mất thư mục shard sẽ khởi tạo shard rỗng rồi trông vào async replication để bù nếu tính năng này được bật, vì tự phục hồi từ nút ngang hàng là tính năng có khóa; khi dữ liệu mất thật, cùng tài liệu hướng dẫn khôi phục bằng module Backup [7]. Metrics có nhóm chỉ số riêng cho sao lưu, khôi phục. [9]

Nâng cấp cụm cần kỷ luật: cụm trộn phiên bản khi bật cờ tính năng mới có thể làm lệch trạng thái RAFT, nên phải nâng cấp mọi nút trước rồi mới bật cờ. [7] Nguyên tắc này nên áp dụng cho mọi cờ cấu hình cấp cụm.

Xuất snapshot ra Parquet có thay được sao lưu?

Tài liệu kiến trúc xuất dữ liệu mô tả việc chụp các collection tại một thời điểm thành tệp Parquet trên S3, GCS hoặc Azure. Điều phối theo dạng Prepare/Commit nhưng không có đảm bảo nguyên tử của two-phase commit thật; mục tiêu là chỉ một lượt xuất chạy trong cụm, và nếu một nút lỗi sau Commit thì các nút còn lại hủy để người dùng chạy lại. [5]

Mỗi nút chụp shard bằng hard-link các segment LSM nên lượt quét dài không giữ khóa và ghi mới vẫn tiếp tục; WAL được sao chép nguyên tử. Shard của tenant lạnh được chụp thẳng từ đĩa, tenant đã offload bị bỏ qua có ghi lý do. Trạng thái xuất và tệp tiến độ từng nút nằm trên backend lưu trữ, nên nút điều phối không giữ trạng thái sau phản hồi đầu. [5]

Với công ty chứng khoán giả định ở trên, Parquet tiện cho bản chụp định kỳ phục vụ đối soát. Nhưng xuất dữ liệu không phải sao lưu: không có cam kết nguyên tử toàn cụm, và tệp xuất chứa nội dung nhạy cảm nên bucket đích cần mã hóa, phân quyền riêng. Mã tính năng nằm ngoài wl/, tức thuộc phạm vi BSD theo quy tắc của LICENSE, nhưng vẫn cần kiểm tra trong bản phát hành cụ thể. [2][5]

Dữ liệu nhạy cảm được bảo vệ tới đâu?

RBAC của Weaviate đủ chi tiết tới dữ liệu shard, metadata collection, đối tượng, sao lưu, nút và cụm. [1][8] Vai trò nên theo nguyên tắc tối thiểu: chatbot chỉ đọc collection được phép, công cụ nhập liệu chỉ ghi vào collection của mình, chỉ quản trị viên được sao lưu và quản lý vai trò.

Cổng giám sát là điểm yếu tiềm ẩn. Tài liệu metrics ghi tên namespace là định danh tenant và được phục vụ trên cổng giám sát không xác thực, kèm khuyến nghị giữ cổng này trong mạng tin cậy [9]; các endpoint /debug cũng nằm trên cổng profiling riêng [7]. Tường lửa phải chặn các cổng này khỏi mạng người dùng.

Quyền riêng tư phụ thuộc lựa chọn module: mô hình cục bộ giữ dữ liệu trong hạ tầng, còn OpenAI, Cohere hay nhà cung cấp khác sẽ nhận nội dung để tính vector hoặc sinh câu trả lời [1]. Với dữ liệu khách hàng của công ty chứng khoán, mặc định phải là cục bộ, mọi ngoại lệ được đánh giá theo quy định bảo vệ dữ liệu cá nhân và quy chế nội bộ.

Tệp Parquet xuất ra và bản sao lưu nằm ngoài cơ sở dữ liệu nên RBAC không bảo vệ chúng; quyền trên bucket là lớp kiểm soát riêng [5]. TTL dọn dữ liệu tạm theo lịch [1] nhưng không xóa được dữ liệu đã nằm trong bản sao lưu cũ.

BSD-3-Clause hay giấy phép doanh nghiệp: dòng mã nào thuộc về đâu?

LICENSE gốc chia theo vị trí tệp: mã ngoài thư mục wl theo BSD-3-Clause như LICENSE-BSD; mã trong wl và thư mục con thuộc bản quyền Weaviate BV từ 2026, bảo lưu mọi quyền, chỉ dùng theo giấy phép doanh nghiệp riêng. Tính năng doanh nghiệp bật bằng license key, và BSD không cho quyền dùng các tính năng đó hay vượt qua khóa. [2][3]

Với phần cộng đồng, BSD-3-Clause đặt ba điều kiện: giữ thông báo bản quyền trong mã nguồn, tái hiện thông báo khi phân phối bản nhị phân, và không dùng tên chủ sở hữu để quảng bá sản phẩm phái sinh khi chưa được phép. [3]

README mô tả cách phân phối: mã Community Edition theo BSD; mã Enterprise Edition nằm trong wl/ để xem nhưng không được cấp phép ở đó; image Docker theo BSD nhưng gộp phần Enterprise, cần khóa để bật. README cũng ghi đóng góp cho Enterprise Edition sẽ theo giấy phép BSD. [1] Tệp wl/LICENSE-WEAVIATE mang tiêu đề WEAVIATE LICENSE AGREEMENT, ngày đăng 26/08/2026. [4]

Vì vậy nhãn giấy phép tự động không đủ để kết luận; cần lập danh mục tính năng định dùng kèm vị trí mã, và tự phục hồi shard là ví dụ đã xác nhận thuộc wl/ [7]. LICENSE cũng chỉ áp dụng cho mã trong kho tại commit này, không bao trùm mô hình embedding, dữ liệu, client ở kho khác hay dịch vụ Weaviate Cloud.

Ngân sách nên tính theo những hạng mục nào?

Nguồn không có giá, và bài không ước đoán. Hạng mục cần lập gồm máy chủ cho Weaviate (RAM cho chỉ mục vector, SSD cho bucket LSM), tài nguyên cho mô hình vector hóa cục bộ, lưu trữ đối tượng cho sao lưu và tệp Parquet, phí API nếu dùng nhà cung cấp ngoài, và giờ công vận hành, quản trị nội dung, duyệt câu trả lời.

Chính hệ thống cung cấp số liệu để lập ngân sách: metrics có tổng số chiều vector theo shard, số token gửi tới vectorizer và số yêu cầu tới API ngoài [9]. Từ giả định về khối lượng tài liệu mỗi tháng và số đoạn trung bình mỗi tài liệu, nhóm dự án ước được số vector, số token, rồi nhân với đơn giá thực tế lúc mua.

Nén vector là đòn bẩy giảm bộ nhớ được README nêu [1]; tác động lên chất lượng tìm kiếm tiếng Việt phải đo. Khoản dự phòng riêng là giấy phép doanh nghiệp nếu cần tính năng trong wl/, và nguồn không có thông tin giá.

Về người, một nút cần kỹ sư thạo Docker và Python; cụm nhiều nút cần thêm kinh nghiệm Kubernetes, RAFT và quy trình nâng cấp. Thời gian pháp chế xác nhận câu trả lời mẫu cũng là chi phí thật.

So với những hướng tiếp cận nào thì quyết định mới có cơ sở?

So với PostgreSQL kèm pgvector, Weaviate đổi một hệ thống quen thuộc lấy module vector hóa, tìm kiếm lai và đa thuê bao dựng sẵn. Dữ liệu ít và đội đã thạo PostgreSQL thì pgvector thường dễ vận hành hơn; nhiều tenant và cần tích hợp mô hình thì Weaviate bớt công tích hợp.

So với Elasticsearch hay OpenSearch, câu hỏi là tổ chức đã vận hành chúng chưa và cần tìm kiếm toàn văn tiếng Việt mạnh tới đâu. So với cơ sở dữ liệu vector khác như Milvus hay Qdrant, điểm cần đối chiếu là mô hình giấy phép, cách chia tenant và công cụ vận hành; nên đọc nguồn gốc của từng dự án thay vì so benchmark do nhà cung cấp công bố.

Trong chính Weaviate có ba đường: tự vận hành Community Edition, tự vận hành kèm giấy phép doanh nghiệp, hoặc Weaviate Cloud [1]. Với dữ liệu khách hàng của công ty chứng khoán, tự vận hành trong hạ tầng công ty dễ đáp ứng yêu cầu về nơi lưu dữ liệu hơn.

Khi nào không nên dùng Weaviate?

Ranh giới giấy phép là rủi ro quản trị lớn nhất: cùng một image có cả tính năng mở lẫn tính năng cần khóa [1][2], nên dễ vô tình phụ thuộc vào tính năng doanh nghiệp nếu không kiểm kê.

Ngay khi có giấy phép, tự phục hồi vẫn có giới hạn được ghi rõ: tenant tạo trong lúc nút ngừng sẽ thành rỗng khi nút khởi động lại, và có trường hợp thao tác kẹt ở trạng thái FINALIZING mà chưa có cách gỡ trong sản phẩm. [7]

Cổng giám sát không xác thực và số chuỗi thời gian lớn do nhãn chi tiết [9], cùng việc giới hạn sử dụng chỉ chính xác khi hệ số bản sao bằng một [6], là những điểm kỹ thuật cần biết trước. Chất lượng BM25 với tiếng Việt chưa được bài này xác minh.

Weaviate không nên là nơi lưu bản gốc duy nhất của văn bản nghiệp vụ hay hồ sơ khách hàng; hệ thống quản lý văn bản hiện có vẫn là nguồn chuẩn, còn Weaviate là lớp chỉ mục dựng lại được.

Thử nghiệm thế nào để quyết định dựa trên bằng chứng?

Tuần 1 và 2: gom vài trăm câu hỏi thật đã ẩn danh của nhân viên, mỗi câu gắn văn bản đúng do pháp chế xác nhận, và chọn hai mô hình embedding cục bộ để so sánh. Kế hoạch này là đề xuất, chưa có kết quả.

Tuần 3 tới 5: dựng một nút Docker Compose với phiên bản cố định, tạo tenant theo khối, cấu hình RBAC, nạp dữ liệu [1][8]. Đo tỷ lệ câu hỏi có văn bản đúng trong năm kết quả đầu với tìm kiếm vector, BM25 và lai; số truy vấn chéo khối bị chặn, với yêu cầu tuyệt đối không rò rỉ; độ trễ p95 đo tại chỗ; số token đi qua vectorizer theo metrics. [9]

Tuần 6 tới 8: sao lưu rồi khôi phục một collection, xuất Parquet và kiểm tra quyền bucket [5], nâng cấp thử bản vá, xác nhận cổng giám sát không truy cập được từ mạng người dùng [9], và lập danh mục tính năng đang dùng kèm vị trí mã trong hay ngoài wl/. [2]

Dừng nếu xảy ra bất kỳ rò rỉ chéo khối nào, nếu chất lượng truy hồi tiếng Việt không vượt mốc tìm kiếm hiện tại, hoặc nếu tính năng bắt buộc nằm trong wl/ mà công ty chưa sẵn sàng mua giấy phép. Chỉ mở rộng khi trưởng khối pháp chế và CNTT cùng ký xác nhận.

Kết luận: chọn Weaviate với con mắt mở về giấy phép

Weaviate gói gọn những gì một hệ tìm kiếm ngữ nghĩa cần: vector hóa tích hợp, tìm kiếm lai, RAG, đa thuê bao, RBAC và công cụ như xuất Parquet. [1][5]

Điểm phải đọc kỹ nhất năm 2026 là cấu trúc giấy phép theo thư mục và các tính năng cần license key nằm trong cùng một binary. [2][4]

Với công ty chứng khoán giả định, giá trị nằm ở việc giúp nhân viên tìm đúng văn bản nhanh hơn trong khuôn khổ phân quyền chặt, không phải tự động hóa quyết định. Một thử nghiệm ngắn với dữ liệu ẩn danh, mô hình cục bộ và tiêu chí dừng rõ ràng đủ để trả lời câu hỏi có nên đi tiếp.

Nguồn và phương pháp: bài viết dựa trên những gì?

Weaviate lọt vào loạt bài nhờ một kho lưu trữ độc lập ghi lại các trang GitHub Trending theo từng ngôn ngữ; trang được trích là danh sách Go ngày 14/01/2026, vị trí 23 [10]; dữ liệu tuyển chọn ghi nhận 10 lần xuất hiện từ 14/01 đến 19/07/2026, tức đều trước ngày đăng thỏa thuận giấy phép doanh nghiệp. Kho lưu chỉ theo dõi bốn danh sách Python, Go, JavaScript, Swift và thiếu ngày 03/09, 12/10, nên không phải xếp hạng chính thức hay Top 100 của GitHub.

Đối chiếu kỹ thuật dùng commit 98d5f50bb4e8efd3c95e59024a594bf808f3e54c (12/10/2026), kiểm tra ngày 12/10/2026. Tệp đã đọc gồm README, LICENSE, LICENSE-BSD, wl/LICENSE-WEAVIATE, kiến trúc xuất dữ liệu, giới hạn sử dụng, tự phục hồi shard, danh sách lời gọi phân quyền và tài liệu metrics [1][2][3][4][5][6][7][8][9]. Trường license trong metadata GitHub ghi Other và không được dùng để kết luận.

Không có bước cài đặt, chạy thử hay đo hiệu năng Weaviate nào trong quá trình viết. Phần tình huống công ty chứng khoán, ước tính nguồn lực và lộ trình thử nghiệm thuộc về phân tích của người viết; bài không phải ấn phẩm khoa học đã bình duyệt.

Xem mã nguồn Weaviate trên GitHub

Khám phá nghiên cứu của BDSG Foundation

Trao đổi về ứng dụng công nghệ cho doanh nghiệp