Giới thiệu
Trong thế giới ngày càng toàn cầu hóa hiện nay, nhu cầu về nội dung đa ngôn ngữ đang bùng nổ. Dù là tài liệu kỹ thuật, bài đăng blog, báo cáo nghiên cứu hay ghi chú cá nhân, việc dịch chúng sang các ngôn ngữ khác nhau có thể mở rộng đáng kể phạm vi đối tượng và tác động của chúng. Tuy nhiên, các phương pháp dịch truyền thống, chẳng hạn như dịch thủ công, tốn kém và mất thời gian. Việc sử dụng các dịch vụ dịch trực tuyến (như Google Translate, DeepL, v.v.) có thể liên quan đến các mối lo ngại về quyền riêng tư dữ liệu, phí gọi API và hạn chế kết nối mạng.
Đối với các nhà phát triển, người tạo nội dung và những người đam mê công nghệ đang tìm kiếm hiệu quả, quyền riêng tư dữ liệu và hiệu quả chi phí, liệu có cách nào để thực hiện dịch hàng loạt chất lượng cao tại chỗ, ngoại tuyến và với chi phí thấp không? Câu trả lời là có! Với sự trưởng thành và phổ biến của công nghệ Mô hình ngôn ngữ lớn (LLM) cục bộ, giờ đây chúng ta có thể chạy các mô hình AI mạnh mẽ trên máy tính của chính mình để hoàn thành các tác vụ khác nhau, bao gồm cả dịch văn bản.
Và đối với người dùng ServBay, điều này trở nên đơn giản và tích hợp hơn nữa. ServBay, với tư cách là một môi trường phát triển Web tích hợp mạnh mẽ, không chỉ cung cấp quản lý tiện lợi máy chủ web, cơ sở dữ liệu và môi trường ngôn ngữ mà phiên bản mới nhất của nó còn bắt kịp xu hướng công nghệ bằng cách tích hợp hỗ trợ AI/LLM, đặc biệt là tích hợp framework Ollama phổ biến. Điều này có nghĩa là bạn có thể dễ dàng triển khai và quản lý các mô hình AI cục bộ trong môi trường ServBay mà không cần cấu hình phức tạp và tận dụng khả năng mạnh mẽ của chúng.
Hướng dẫn này, dựa trên ServBay, sẽ hướng dẫn bạn chi tiết cách:
- Hiểu về hỗ trợ AI/LLM mới nhất của ServBay, đặc biệt là các tính năng Ollama tích hợp của nó.
- Dễ dàng cài đặt và cấu hình dịch vụ Ollama trong ServBay.
- Tìm kiếm, tải xuống và quản lý các mô hình Ollama phù hợp cho các tác vụ dịch thông qua giao diện đồ họa của ServBay.
- Viết một tập lệnh Python sử dụng điểm cuối API Ollama do ServBay cung cấp để tự động hóa việc dịch hàng loạt tất cả các tệp Markdown (
.md
) trong một thư mục được chỉ định (ví dụ:docs
).
Thông qua hướng dẫn này, bạn sẽ nắm vững một giải pháp dịch tài liệu cục bộ mạnh mẽ, riêng tư và hiệu quả, khai thác triệt để tiềm năng của ServBay và AI cục bộ. Hãy bắt đầu hành trình AI cục bộ thú vị này!
Phần 1: Kỷ nguyên mới AI / LLM của ServBay: Đón nhận Trí tuệ Cục bộ
ServBay luôn cam kết cung cấp cho các nhà phát triển một môi trường phát triển cục bộ toàn diện, hiệu quả và tiện lợi. Từ việc quản lý nhiều phiên bản PHP, Python, Java, .Net, Node.js, chuyển đổi giữa Nginx/Apache/Caddy, đến hỗ trợ cơ sở dữ liệu MySQL/PostgreSQL/MongoDB, ServBay đơn giản hóa đáng kể việc thiết lập và bảo trì môi trường phát triển. Giờ đây, ServBay một lần nữa đi đầu, tích hợp các khả năng AI/LLM mạnh mẽ vào các tính năng cốt lõi của mình, mở ra một chương mới về trí tuệ cục bộ cho người dùng.
Tích hợp Ollama: Con dao đa năng Thụy Sĩ cho LLM cục bộ
Cốt lõi của chức năng AI của ServBay là sự tích hợp của Ollama. Ollama là một dự án mã nguồn mở được thiết kế để cho phép người dùng dễ dàng chạy các mô hình ngôn ngữ lớn như Llama 3, Mistral, Phi-3, Gemma3, v.v., tại chỗ. Nó đơn giản hóa đáng kể quá trình thiết lập, chạy và quản lý các mô hình, cung cấp một giao diện API tiêu chuẩn cho phép các nhà phát triển tương tác với các mô hình cục bộ một cách thuận tiện như gọi các dịch vụ đám mây.
Việc tích hợp Ollama của ServBay mang lại nhiều lợi thế:
- Cài đặt và Cấu hình bằng một cú nhấp chuột: ServBay cung cấp một giao diện đồ họa chuyên dụng để quản lý Ollama. Người dùng không cần tải xuống Ollama thủ công, cấu hình biến môi trường hoặc quản lý các phụ thuộc phức tạp. Chỉ cần bật và cấu hình ngắn gọn trong bảng điều khiển AI của ServBay, và bạn đã có một dịch vụ LLM cục bộ sẵn sàng sử dụng.
- Quản lý cấu hình trực quan: ServBay cung cấp các tùy chọn cấu hình phong phú, chẳng hạn như
Model Download Threads
(Số luồng tải mô hình),Bind IP
,Bind Port
(mặc định là127.0.0.1:11434
, cấu hình Ollama tiêu chuẩn), các công tắc gỡ lỗi (Debug
,Flash Attention
,No History
,No Prune
,Schedule Spread
,Multi-user Cache
), loại bộ đệm (K/V Cache Type
), tối ưu hóa GPU (GPU Overhead
), duy trì kết nối (Keepalive
), thời gian chờ tải (Load Timeout
), số mô hình được tải tối đa (Max loaded models
), hàng đợi tối đa (Max Queue
), số xử lý song song (Parallel Num.
), đường dẫn thư viện LLM (LLM Library
), đường dẫn lưu trữ mô hình (Models folder
), và kiểm soát nguồn gốc truy cập (origins
). Điều này cho phép người dùng tinh chỉnh các tham số thời gian chạy của Ollama dựa trên phần cứng và nhu cầu của họ mà không cần ghi nhớ các đối số dòng lệnh. - Hệ sinh thái thống nhất: Tích hợp Ollama vào ServBay có nghĩa là môi trường phát triển web và môi trường suy luận AI của bạn có thể hoạt động cùng nhau dưới cùng một nền tảng quản lý. Điều này mang lại sự tiện lợi lớn cho việc phát triển các ứng dụng web yêu cầu các chức năng AI (chẳng hạn như dịch vụ khách hàng thông minh, tạo nội dung, phân tích dữ liệu cục bộ, v.v.).
Quản lý mô hình tiện lợi
Chỉ có một framework đang chạy là không đủ; việc lựa chọn và quản lý các mô hình AI phù hợp cũng quan trọng không kém. ServBay cũng xuất sắc trong lĩnh vực này:
- Liệt kê và Tìm kiếm Mô hình: ServBay cung cấp một giao diện danh sách mô hình nơi người dùng có thể trực tiếp tìm kiếm các mô hình có sẵn trong thư viện mô hình Ollama chính thức (ví dụ: ảnh chụp màn hình cho thấy việc tìm kiếm
deeps
hiển thị các phiên bản khác nhau củadeepseek-r1
). - Tải xuống và Xóa bằng một cú nhấp chuột: Đối với các mô hình được tìm kiếm, giao diện hiển thị rõ ràng tên mô hình (bao gồm các thẻ như
latest
,1.5b
,7b
, v.v.), mô hình cơ sở, số lượng tham số (Parameters
), kích thước tệp (File Size
), và các nút hành động (tải xuống+
hoặc xóa). Người dùng chỉ cần nhấp vào một nút, và ServBay sẽ tự động xử lý việc tải xuống và lưu trữ mô hình (đường dẫn lưu trữ có thể được chỉ định trong cấu hình Ollama, mặc định là/Applications/ServBay/db/ollama/models
). - Tổng quan về Mô hình Cục bộ: Trong giao diện
Ollama Config
(ảnh chụp màn hình đầu tiên), danh sách bên trái hiển thị các mô hình hiện đã được tải xuống cục bộ (ví dụ:alfred
,all-minilm
,codellama
, v.v.). Điều này cung cấp cho người dùng cái nhìn tổng quan rõ ràng về "bộ não" AI cục bộ mà họ sở hữu.
Giá trị cốt lõi của AI cục bộ
Tại sao nên sử dụng AI cục bộ (thông qua Ollama trong ServBay) để dịch thay vì tiếp tục sử dụng các dịch vụ trực tuyến?
- Quyền riêng tư và Bảo mật Dữ liệu: Đây là lợi thế quan trọng nhất. Tất cả quá trình xử lý dữ liệu được thực hiện trên máy tính của riêng bạn; nội dung tài liệu của bạn không cần phải gửi đến bất kỳ máy chủ bên thứ ba nào. Điều này rất cần thiết cho các tài liệu chứa thông tin nhạy cảm hoặc bí mật thương mại.
- Hiệu quả chi phí: Chạy LLM cục bộ không phát sinh phí gọi API. Mặc dù có thể có một khoản đầu tư phần cứng ban đầu (đặc biệt nếu cần tăng tốc GPU), chi phí dài hạn cho các tác vụ lớn hoặc thường xuyên thấp hơn nhiều so với các dịch vụ đám mây trả tiền theo dung lượng sử dụng.
- Khả dụng Ngoại tuyến: Sau khi mô hình được tải xuống cục bộ, bạn có thể thực hiện dịch hoặc các tác vụ AI khác mà không cần kết nối internet, điều này rất hữu ích trong môi trường có mạng không ổn định hoặc các tình huống yêu cầu hoạt động hoàn toàn ngoại tuyến.
- Tùy chỉnh và Kiểm soát: Bạn có quyền tự do lựa chọn mô hình phù hợp nhất cho nhiệm vụ và phần cứng của mình, thử nghiệm với các phiên bản và tham số mô hình khác nhau, và thậm chí thực hiện tinh chỉnh (fine-tuning) (mặc dù bản thân ServBay không trực tiếp cung cấp các tính năng tinh chỉnh, môi trường Ollama cục bộ đã đặt nền tảng cho việc đó).
- Độ trễ thấp: Các yêu cầu được gửi trực tiếp đến dịch vụ đang chạy cục bộ, thường dẫn đến độ trễ thấp hơn và phản hồi nhanh hơn so với việc gọi các API từ xa qua internet.
Tóm lại, bằng cách tích hợp Ollama, ServBay giảm đáng kể rào cản cho người dùng sử dụng các mô hình ngôn ngữ lớn cục bộ, kết hợp liền mạch các khả năng AI mạnh mẽ của chúng vào một môi trường phát triển quen thuộc, cung cấp một nền tảng vững chắc để triển khai các tác vụ tự động hóa nâng cao như dịch tài liệu hàng loạt.
Phần 2: Cài đặt và Cấu hình Ollama và Mô hình trong ServBay
Bây giờ, hãy thực hiện từng bước thiết lập dịch vụ Ollama trong ServBay và tải xuống một mô hình phù hợp cho các tác vụ dịch.
Bước 1: Điều hướng đến Cấu hình AI của ServBay
- Khởi chạy ứng dụng ServBay.
- Trong thanh điều hướng bên trái của giao diện chính ServBay, tìm và nhấp vào AI.
- Trong menu con AI, nhấp vào Ollama. Bạn sẽ thấy một giao diện tương tự như
Ollama Config
được hiển thị trong ảnh chụp màn hình đầu tiên.
Bước 2: Kiểm tra và (Tùy chọn) Điều chỉnh Cấu hình Ollama
ServBay thường cung cấp một bộ cấu hình mặc định hợp lý, thường đủ cho lần sử dụng đầu tiên hoặc các tác vụ cơ bản. Tuy nhiên, việc hiểu các tùy chọn này sẽ giúp ích cho việc tối ưu hóa trong tương lai:
- Trạng thái Dịch vụ Ollama: Thường có một công tắc bật/tắt hoặc chỉ báo trạng thái ở đầu giao diện (một chấm màu xanh lá cây trong ảnh chụp màn hình). Đảm bảo dịch vụ Ollama được bật. Nếu ServBay cung cấp các nút Bắt đầu/Dừng, hãy đảm bảo nó đang chạy.
- Bind IP và Bind Port: Các giá trị mặc định
127.0.0.1
và11434
là cấu hình tiêu chuẩn, có nghĩa là dịch vụ Ollama chỉ lắng nghe các yêu cầu từ máy cục bộ trên cổng 11434. Đây là địa chỉ mà tập lệnh Python của chúng ta sẽ cần kết nối sau này. Thông thường, không cần thay đổi. - Thư mục Models (Models folder): Đây là đường dẫn lưu trữ các mô hình LLM đã tải xuống. Ảnh chụp màn hình hiển thị
/Applications/ServBay/db/ollama/models
. Bạn có thể thay đổi điều này sang một vị trí khác có đủ dung lượng đĩa nếu cần, nhưng hãy đảm bảo đường dẫn tồn tại và ServBay có quyền ghi. Lưu ý đường dẫn này; mặc dù tập lệnh không sử dụng trực tiếp, việc biết các mô hình ở đâu là hữu ích. - Số luồng tải mô hình (Model Download Threads): Số lượng luồng đồng thời được sử dụng khi tải xuống mô hình. Nếu bạn có kết nối mạng tốt, bạn có thể tăng nhẹ con số này để tăng tốc độ tải xuống. Mặc định là 10.
- Các tùy chọn khác (ví dụ: GPU Overhead, Max loaded models, v.v.): Đây là các tùy chọn tinh chỉnh hiệu suất nâng cao hơn. Nếu bạn có GPU tương thích (NVIDIA hoặc Apple Silicon), Ollama thường tự động phát hiện và sử dụng nó.
Max loaded models
giới hạn số lượng mô hình được tải vào bộ nhớ/VRAM đồng thời, tùy thuộc vào kích thước RAM/VRAM của bạn. Đối với các tác vụ dịch hàng loạt, thường chỉ có một mô hình được tải tại một thời điểm, vì vậy giá trị mặc định thường là đủ. - Nguồn gốc (Origins): Đây là cài đặt CORS (Cross-Origin Resource Sharing), kiểm soát những trang web nào (nguồn gốc) có thể truy cập API Ollama. Mặc định bao gồm các biến thể khác nhau của
http://localhost
vàhttp://127.0.0.1
, thường đủ cho các tập lệnh cục bộ hoặc ứng dụng web cục bộ.
Lưu ý quan trọng: Nếu bạn sửa đổi bất kỳ cấu hình nào, hãy đảm bảo nhấp vào nút Save ở góc dưới bên phải của giao diện để áp dụng các thay đổi. Nếu bạn gặp sự cố, bạn có thể thử nhấp vào Reset để khôi phục cài đặt mặc định.
Bước 3: Điều hướng đến Giao diện Quản lý Mô hình
- Trong thanh điều hướng bên trái của ServBay, dưới danh mục AI, nhấp vào Models (Ollama).
- Bạn sẽ thấy một giao diện quản lý mô hình tương tự như ảnh chụp màn hình thứ hai. Giao diện này liệt kê các mô hình có sẵn để tải xuống và những mô hình đã được cài đặt cục bộ.
Bước 4: Tìm kiếm và Tải xuống Mô hình Dịch
Bây giờ chúng ta cần chọn và tải xuống một LLM phù hợp cho các tác vụ dịch. Khả năng dịch của LLM thường liên quan đến khả năng tuân theo chỉ dẫn chung và dữ liệu đào tạo đa ngôn ngữ của nó. Một số lựa chọn tốt có thể bao gồm (tại thời điểm viết bài):
- Dòng Llama 3 (ví dụ:
llama3:8b
): Mô hình mã nguồn mở mới nhất của Meta AI, với khả năng chung mạnh mẽ và khả năng tuân theo chỉ dẫn tốt, thường xử lý tốt các tác vụ dịch. Phiên bản 8B có yêu cầu phần cứng tương đối vừa phải. - Dòng Mistral (ví dụ:
mistral:7b
): Một mô hình mã nguồn mở hiệu suất cao rất phổ biến khác, nổi tiếng về hiệu quả. - Dòng DeepSeek Coder/LLM (ví dụ:
deepseek-llm:7b-chat
): Mặc dù DeepSeek nổi tiếng với khả năng viết mã, các mô hình trò chuyện chung của nó thường cũng có khả năng dịch.deepseek-r1
trong ảnh chụp màn hình có thể là một trong các biến thể hoặc một phiên bản cụ thể của nó. - Mô hình Dịch Chuyên dụng (nếu có trong thư viện Ollama): Đôi khi có những mô hình được tối ưu hóa đặc biệt cho dịch thuật, nhưng các mô hình tuân theo chỉ dẫn chung mạnh mẽ thường cũng hoạt động rất tốt.
Thực hiện Tìm kiếm và Tải xuống:
- Trong hộp tìm kiếm ở đầu giao diện quản lý mô hình, nhập tên mô hình bạn muốn tìm, ví dụ:
llama3
hoặcmistral
. - Giao diện sẽ hiển thị động danh sách các mô hình phù hợp, bao gồm các kích thước tham số khác nhau (như 7b, 8b, 70b, v.v.) và các thẻ (như
latest
,instruct
,chat
). - Những điều cần cân nhắc khi chọn mô hình:
- Tham số (Parameters): Chẳng hạn như
7b
(7 tỷ),8b
(8 tỷ),70b
(70 tỷ). Số lượng tham số lớn hơn thường có nghĩa là khả năng mạnh hơn nhưng cũng yêu cầu bộ nhớ (RAM) và bộ nhớ video (VRAM) cao hơn, và tốc độ suy luận chậm hơn. Đối với dịch hàng loạt, mô hình7b
hoặc8b
thường là điểm khởi đầu tốt, cân bằng giữa hiệu suất và tiêu thụ tài nguyên. - Thẻ (Tags): Các mô hình được gắn thẻ
instruct
hoặcchat
thường giỏi hơn trong việc tuân theo các chỉ dẫn (như "Vui lòng dịch văn bản sau sang..."). - Kích thước tệp (File Size): Lưu ý rằng các tệp mô hình có thể lớn (từ vài GB đến hàng chục GB). Đảm bảo bạn có đủ dung lượng đĩa.
- Tham số (Parameters): Chẳng hạn như
- Tìm phiên bản mô hình bạn muốn tải xuống (ví dụ:
llama3:8b
) và nhấp vào biểu tượng tải xuống bên cạnh nó (thường là một mũi tên hướng xuống). - ServBay sẽ bắt đầu tải xuống mô hình. Bạn có thể thấy tiến trình tải xuống. Thời gian tải xuống phụ thuộc vào tốc độ mạng của bạn và kích thước mô hình.
Bước 5: Xác minh Cài đặt Mô hình
Sau khi tải xuống mô hình hoàn tất, nó sẽ xuất hiện trong danh sách các mô hình đã cài đặt ở phía bên trái của giao diện Ollama Config
. Ngoài ra, trong giao diện Models (Ollama)
, nút hành động cho mô hình đó có thể thay đổi thành biểu tượng xóa (🗑️
).
Bước 6: Xác nhận Dịch vụ Ollama đang chạy
Đảm bảo chỉ báo trạng thái ở đầu giao diện Ollama Config
hiển thị màu xanh lá cây hoặc trạng thái đang chạy. ServBay thường tự động khởi động dịch vụ Ollama khi bạn khởi chạy ứng dụng hoặc bật các tính năng AI. Nếu dịch vụ không chạy, hãy tìm nút khởi động và kích hoạt nó.
Tại thời điểm này, môi trường ServBay của bạn đã được cấu hình dịch vụ Ollama và bạn đã tải xuống một LLM cục bộ sẵn sàng cho việc dịch. Tiếp theo, chúng ta sẽ viết tập lệnh Python để gọi dịch vụ AI cục bộ này.
Phần 3: Viết Tập lệnh Python để Dịch hàng loạt
Bây giờ chúng ta đã có một LLM đang chạy cục bộ và có thể truy cập thông qua API (http://127.0.0.1:11434
), hãy viết một tập lệnh Python để tự động hóa quy trình dịch: lặp qua tất cả các tệp Markdown trong thư mục docs
được chỉ định, gửi nội dung của chúng đến Ollama để dịch và lưu kết quả vào các tệp mới.
Điều kiện tiên quyết
- Môi trường Python: Đảm bảo Python đã được cài đặt trên hệ thống của bạn. Bạn có thể kiểm tra bằng cách chạy
python --version
hoặcpython3 --version
trong terminal của bạn. ServBay đi kèm với Python 3. Nếu chưa cài đặt, hãy cài đặt nó từPackages
->Python
của ServBay.
-
Thư viện
requests
: Chúng ta cần thư việnrequests
để gửi các yêu cầu HTTP đến API Ollama. Nếu chưa được cài đặt, hãy chạy lệnh này trong terminal của bạn:pip install requests # hoặc pip3 install requests
-
Tạo Cấu trúc Dự án:
- Tạo một thư mục dự án, ví dụ:
servbay_translator
. - Bên trong thư mục
servbay_translator
, tạo một thư mục con có têndocs
. Đặt các tệp Markdown (.md
) bạn cần dịch vào thư mụcdocs
và các thư mục con của nó. Ví dụ:servbay_translator/ ├── docs/ │ ├── introduction.md │ ├── chapter1/ │ │ └── setup.md │ └── chapter2/ │ └── usage.md └── translate_script.py (Chúng ta sẽ tạo tệp này)
- Tập lệnh sẽ tự động tạo một thư mục
translated_docs
để lưu trữ các tệp đã dịch, duy trì cấu trúc thư mục gốc.
- Tạo một thư mục dự án, ví dụ:
Tập lệnh Python (translate_script.py
)
import os
import requests
import json
import time # --- Hằng số Cấu hình --- # Địa chỉ và cổng API Ollama (nhất quán với cấu hình ServBay)
OLLAMA_API_URL = "http://127.0.0.1:11434/api/generate" # Tên mô hình bạn đã tải xuống trong ServBay và muốn sử dụng để dịch
# Đảm bảo nó khớp chính xác với tên mô hình trong Ollama
# Ví dụ: "llama3:8b", "mistral:7b", "deepseek-llm:7b-chat" v.v.
MODEL_NAME = "llama3:8b" # <--- Thay đổi thành tên mô hình bạn đã chọn! # Thư mục chứa các tệp Markdown nguồn
SOURCE_DIR = "docs" # Thư mục để lưu trữ các tệp đã dịch (tập lệnh sẽ tạo nó)
TARGET_DIR = "translated_docs" # Ngôn ngữ đích bạn muốn dịch tài liệu sang
TARGET_LANGUAGE = "Vietnamese" # Ví dụ: "English", "Simplified Chinese", "French", "German", "Japanese", "Spanish" # Tùy chọn: Thêm độ trễ (tính bằng giây) giữa các yêu cầu để tránh quá tải hoặc cho hệ thống thời gian phản hồi
REQUEST_DELAY = 1 # Độ trễ 1 giây, điều chỉnh nếu cần # --- Hàm Gọi API Ollama --- def translate_text_ollama(text_to_translate, model_name, target_language): """ Dịch văn bản đã cho bằng API Ollama. Args: text_to_translate (str): Văn bản gốc cần dịch. model_name (str): Tên của mô hình Ollama sẽ sử dụng. target_language (str): Ngôn ngữ đích để dịch. Returns: str: Văn bản đã dịch, hoặc None nếu xảy ra lỗi. """ # Xây dựng một prompt chỉ dẫn dịch rõ ràng prompt = f"""Translate the following Markdown text into {target_language}.
Preserve the original Markdown formatting (like headings, lists, bold text, code blocks, etc.).
Only output the translated text, without any introductory phrases like "Here is the translation:". Original Text:
---
{text_to_translate}
---
Translated Text ({target_language}):""" headers = {'Content-Type': 'application/json'} data = { "model": model_name, "prompt": prompt, "stream": False, # Đặt thành False để nhận toàn bộ phản hồi cùng một lúc, không phải streaming # Các tham số tùy chọn, điều chỉnh nếu cần, ví dụ: temperature kiểm soát sự sáng tạo (thấp hơn thì bảo thủ hơn) # "options": { # "temperature": 0.3 # } } try: print(f" Đang gửi yêu cầu đến Ollama (mô hình: {model_name})...") # Tăng thời gian chờ lên 300 giây cho các bản dịch có thể dài response = requests.post(OLLAMA_API_URL, headers=headers, json=data, timeout=300) response.raise_for_status() # Kiểm tra lỗi HTTP (ví dụ: 404, 500) response_data = response.json() # Trích xuất văn bản đã dịch từ phản hồi # Cấu trúc phản hồi /api/generate của Ollama thường chứa toàn bộ đầu ra trong trường 'response' if 'response' in response_data: translated_text = response_data['response'].strip() print(f" Đã nhận bản dịch (độ dài: {len(translated_text)} ký tự).") return translated_text else: print(f" Lỗi: Không tìm thấy khóa 'response' trong đầu ra Ollama: {response_data}") return None except requests.exceptions.RequestException as e: print(f" Lỗi khi gọi API Ollama: {e}") return None except json.JSONDecodeError: print(f" Lỗi giải mã phản hồi JSON từ Ollama: {response.text}") return None except Exception as e: print(f" Đã xảy ra lỗi không mong muốn trong quá trình dịch: {e}") return None # --- Logic Xử lý Chính --- def process_directory(source_base, target_base): """ Duyệt đệ quy thư mục nguồn, dịch các tệp .md, và lưu chúng vào thư mục đích, bảo toàn cấu trúc. """ print(f"\nĐang xử lý thư mục: {source_base}") for item in os.listdir(source_base): source_path = os.path.join(source_base, item) target_path = os.path.join(target_base, item) if os.path.isdir(source_path): # Nếu là thư mục con, xử lý đệ quy print(f"- Tìm thấy thư mục con: {item}") process_directory(source_path, target_path) elif os.path.isfile(source_path) and item.lower().endswith(".md"): # Nếu là tệp Markdown, dịch nó print(f"- Tìm thấy tệp Markdown: {item}") # Đảm bảo thư mục mẹ của tệp đích tồn tại target_file_dir = os.path.dirname(target_path) if not os.path.exists(target_file_dir): print(f" Đang tạo thư mục đích: {target_file_dir}") os.makedirs(target_file_dir) # Tùy chọn: Kiểm tra xem tệp đích đã tồn tại chưa và bỏ qua # if os.path.exists(target_path): # print(f" Bỏ qua, tệp đích đã tồn tại: {target_path}") # continue try: # Đọc nội dung tệp nguồn print(f" Đang đọc tệp nguồn: {source_path}") with open(source_path, 'r', encoding='utf-8') as f_in: original_content = f_in.read() if not original_content.strip(): print(" Bỏ qua tệp rỗng.") continue # Gọi Ollama để dịch translated_content = translate_text_ollama(original_content, MODEL_NAME, TARGET_LANGUAGE) if translated_content: # Ghi nội dung đã dịch vào tệp đích print(f" Đang ghi tệp đã dịch: {target_path}") with open(target_path, 'w', encoding='utf-8') as f_out: f_out.write(translated_content) print(" Hoàn tất dịch cho tệp này.") else: print(f" Không thể dịch tệp: {source_path}. Bỏ qua.") # Thêm độ trễ giữa các yêu cầu API if REQUEST_DELAY > 0: print(f" Đang chờ {REQUEST_DELAY} giây...") time.sleep(REQUEST_DELAY) except Exception as e: print(f" Lỗi khi xử lý tệp {source_path}: {e}") else: print(f"- Bỏ qua tệp không phải Markdown hoặc mục khác: {item}") # --- Điểm vào Tập lệnh --- if __name__ == "__main__": print("Bắt đầu quá trình Dịch hàng loạt Markdown...") print(f"Thư mục nguồn: {SOURCE_DIR}") print(f"Thư mục đích: {TARGET_DIR}") print(f"Ngôn ngữ đích: {TARGET_LANGUAGE}") print(f"Sử dụng Mô hình Ollama: {MODEL_NAME} tại {OLLAMA_API_URL}") print("-" * 30) # Kiểm tra xem thư mục nguồn có tồn tại không if not os.path.isdir(SOURCE_DIR): print(f"Lỗi: Không tìm thấy thư mục nguồn '{SOURCE_DIR}'.") print("Vui lòng tạo thư mục 'docs' và đặt các tệp Markdown của bạn vào bên trong.") exit(1) # Kiểm tra/Tạo thư mục đích if not os.path.exists(TARGET_DIR): print(f"Đang tạo thư mục đích: {TARGET_DIR}") os.makedirs(TARGET_DIR) # Bắt đầu xử lý try: process_directory(SOURCE_DIR, TARGET_DIR) print("\n" + "=" * 30) print("Quá trình dịch hàng loạt đã hoàn tất!") print(f"Các tệp đã dịch được lưu trong thư mục '{TARGET_DIR}'.") except Exception as e: print(f"\nĐã xảy ra lỗi trong quá trình xử lý: {e}")
Giải thích mã:
-
Nhập Thư viện (
import os, requests, json, time
):os
: Dùng cho các hoạt động với tệp và thư mục (duyệt thư mục, kiểm tra đường dẫn, tạo thư mục, v.v.).requests
: Dùng để gửi yêu cầu HTTP POST đến API Ollama.json
: Dùng để xử lý dữ liệu JSON trong yêu cầu/phản hồi API (mặc dùrequests
xử lý phần lớn việc này ở đây).time
: Dùng để thêm độ trễ giữa các yêu cầu (time.sleep
).
-
Hằng số Cấu hình:
OLLAMA_API_URL
: Điểm cuối cho API tạo của Ollama. Đảm bảo địa chỉ này khớp với IP và cổng trong cấu hình ServBay của bạn.MODEL_NAME
: Quan trọng! Phải khớp chính xác với tên (bao gồm cả thẻ) của mô hình bạn đã tải xuống trong ServBay và muốn sử dụng. Sửa đổi điều này theo mô hình bạn đã chọn.SOURCE_DIR
: Tên của thư mục chứa các tệp.md
gốc.TARGET_DIR
: Tên của thư mục nơi các tệp.md
đã dịch sẽ được lưu.TARGET_LANGUAGE
: Tên của ngôn ngữ bạn muốn dịch sang. Sử dụng tên ngôn ngữ rõ ràng như "Simplified Chinese", "French", "German", "English", "Vietnamese". LLM thường hiểu các chỉ dẫn ngôn ngữ tự nhiên này.REQUEST_DELAY
: Số giây chờ sau khi xử lý một tệp trước khi bắt đầu tệp tiếp theo. Điều này giúp ngăn chặn việc làm quá tải dịch vụ Ollama hoặc làm cạn kiệt tài nguyên máy cục bộ, đặc biệt khi xử lý nhiều tệp hoặc sử dụng các mô hình tốn nhiều tài nguyên.
-
Hàm
translate_text_ollama
:- Nhận văn bản gốc, tên mô hình và ngôn ngữ đích làm đầu vào.
- Xây dựng Prompt: Đây là chìa khóa để giao tiếp với LLM. Chúng ta xây dựng một chỉ dẫn rõ ràng cho mô hình biết:
- Nhiệm vụ là "Dịch văn bản Markdown sau sang [Ngôn ngữ đích]".
- Nhấn mạnh "Bảo toàn định dạng Markdown gốc". Điều này rất quan trọng đối với dịch tài liệu.
- Yêu cầu "Chỉ xuất văn bản đã dịch" để tránh các cụm từ giải thích thừa từ mô hình (như "Đây là bản dịch:").
- Sử dụng dấu phân cách
---
để đánh dấu rõ ràng văn bản gốc.
- Chuẩn bị Yêu cầu API: Đặt tiêu đề yêu cầu (
Content-Type: application/json
) và phần thân yêu cầu (data
).model
: Chỉ định mô hình sẽ sử dụng.prompt
: Chỉ dẫn được chế tạo cẩn thận của chúng ta.stream: False
: Chúng ta muốn nhận kết quả dịch hoàn chỉnh cùng một lúc, không phải các đoạn phát trực tuyến.options
(phần tùy chọn được chú thích): Bạn có thể chuyển các tham số Ollama bổ sung nhưtemperature
(kiểm soát tính ngẫu nhiên/sáng tạo; đối với dịch thuật, các giá trị thấp hơn như 0.2-0.5 thường tốt hơn).
- Gửi Yêu cầu: Sử dụng
requests.post
để gửi yêu cầu đến API Ollama. Đặttimeout
dài hơn (300 giây) để xử lý các tệp có thể lớn hoặc phản hồi mô hình chậm hơn. - Xử lý lỗi:
response.raise_for_status()
: Kiểm tra các lỗi cấp HTTP (như 404 Not Found, 500 Internal Server Error).- Khối
try...except
bắt các lỗi yêu cầu mạng (requests.exceptions.RequestException
), lỗi phân tích cú pháp JSON (json.JSONDecodeError
), và các lỗi không mong muốn khác.
- Phân tích Phản hồi: Nếu yêu cầu thành công, trích xuất trường
response
từ dữ liệu JSON trả về, trường này thường chứa văn bản hoàn chỉnh do LLM tạo ra (tức là kết quả dịch)..strip()
loại bỏ bất kỳ khoảng trắng nào ở đầu/cuối. - Trả về Kết quả: Trả về văn bản đã dịch, hoặc
None
nếu xảy ra lỗi.
-
Hàm
process_directory
:- Đây là một hàm đệ quy được thiết kế để xử lý cấu trúc thư mục.
- Nhận đường dẫn thư mục nguồn hiện tại (
source_base
) và đường dẫn thư mục đích tương ứng (target_base
). - Sử dụng
os.listdir
để lấy tất cả các tệp và thư mục con trong thư mục hiện tại. - Lặp:
- Nếu là thư mục con: In thông tin và gọi đệ quy
process_directory
cho thư mục con đó, chuyển các đường dẫn nguồn và đích đã cập nhật. - Nếu là tệp kết thúc bằng
.md
:- In thông tin.
- Tạo Thư mục Đích: Sử dụng
os.path.dirname
để lấy thư mục mẹ dự kiến của tệp đích. Nếu thư mục này không tồn tại,os.makedirs
sẽ tạo nó (bao gồm mọi thư mục trung gian cần thiết). - Đọc Tệp Nguồn: Sử dụng
with open(...)
để đọc nội dung tệp.md
bằng mã hóa UTF-8. - Bỏ qua Tệp Rỗng: Nếu nội dung tệp trống, bỏ qua nó.
- Gọi Hàm Dịch: Chuyển nội dung tệp đến hàm
translate_text_ollama
để dịch. - Ghi Tệp Đích: Nếu dịch thành công (trả về khác
None
), ghi kết quả đã dịch vào tệp đường dẫn đích tương ứng bằng mã hóa UTF-8. - Xử lý Thất bại: Nếu dịch không thành công, in thông báo lỗi và bỏ qua tệp đó.
- Áp dụng Độ trễ: Gọi
time.sleep(REQUEST_DELAY)
để đợi số giây được chỉ định.
- Nếu không phải tệp
.md
hoặc thư mục: In thông báo bỏ qua.
- Nếu là thư mục con: In thông tin và gọi đệ quy
-
Khối Thực thi Chính (
if __name__ == "__main__":
):- Đây là điểm vào của tập lệnh.
- In thông tin khởi động, hiển thị các tham số cấu hình.
- Kiểm tra Thư mục Nguồn: Đảm bảo
SOURCE_DIR
tồn tại; thoát với lỗi nếu không. - Tạo Thư mục Đích: Tạo
TARGET_DIR
nếu nó chưa tồn tại. - Bắt đầu Xử lý: Gọi hàm
process_directory
, bắt đầu từSOURCE_DIR
vàTARGET_DIR
cấp cao nhất. - Hoàn thành & Bắt lỗi: Sử dụng khối
try...except
để bắt các lỗi tiềm ẩn trong toàn bộ quá trình và in thông báo hoàn thành hoặc thông tin lỗi ở cuối.
Phần 4: Chạy Tập lệnh và Những Lưu ý
Cách Chạy Tập lệnh:
- Mở Terminal.
- Điều hướng đến Thư mục Dự án: Sử dụng lệnh
cd
để vào thư mụcservbay_translator
bạn đã tạo.cd /đường/dẫn/đến/servbay_translator_của_bạn # Ví dụ nếu sử dụng vị trí www mặc định của ServBay: # cd /Applications/ServBay/www/servbay_translator
- Đảm bảo Dịch vụ ServBay và Ollama đang chạy: Quay lại giao diện ServBay và xác nhận rằng dịch vụ AI -> Ollama đang hoạt động.
- Chạy Tập lệnh Python:
python translate_script.py # Hoặc sử dụng python3 nếu 'python' trỏ đến Python 2 trên hệ thống của bạn # python3 translate_script.py
- Quan sát Đầu ra: Tập lệnh sẽ bắt đầu chạy và in thông tin tiến trình trong terminal, bao gồm thư mục và tệp nào đang được xử lý, trạng thái của các yêu cầu đang được gửi và thông tin ngắn gọn về kết quả dịch hoặc lỗi.
- Kiểm tra Kết quả: Sau khi tập lệnh kết thúc, kiểm tra thư mục
translated_docs
. Bạn sẽ thấy một cấu trúc thư mục giống hệt thư mụcdocs
, chứa các tệp.md
đã dịch. Mở một vài tệp để kiểm tra chất lượng dịch và việc bảo toàn định dạng Markdown.
Những Lưu ý và Tối ưu hóa Tiềm năng:
-
Lựa chọn Mô hình và Chất lượng Dịch:
- Chất lượng dịch phụ thuộc rất nhiều vào LLM bạn chọn (
MODEL_NAME
). Các mô hình khác nhau có thể hoạt động khác nhau trên các cặp ngôn ngữ và loại văn bản khác nhau. - Thử nghiệm với các mô hình khác nhau (ví dụ: các phiên bản khác nhau của
llama3
,mistral
,qwen
,gemma3
, v.v.) và kích thước tham số để tìm ra mô hình phù hợp nhất với nhu cầu của bạn. - Đối với các cặp ngôn ngữ cụ thể, có thể có các mô hình được tinh chỉnh đặc biệt hoạt động tốt hơn; kiểm tra cộng đồng Ollama hoặc các nền tảng như Hugging Face.
- Chất lượng dịch phụ thuộc rất nhiều vào LLM bạn chọn (
-
Kỹ thuật Prompt (Prompt Engineering):
prompt
trong hàmtranslate_text_ollama
ảnh hưởng đáng kể đến kết quả dịch. Bạn có thể thử điều chỉnh các chỉ dẫn, ví dụ:- Chỉ định rõ ràng ngôn ngữ nguồn (nếu LLM cần).
- Đưa ra các yêu cầu cụ thể hơn về việc bảo toàn định dạng.
- Thử các giọng điệu khác nhau (trang trọng, không trang trọng).
- Nếu kết quả dịch không đạt yêu cầu, tinh chỉnh prompt thường là bước đầu tiên.
-
Bảo toàn Định dạng Markdown:
- Mặc dù prompt yêu cầu bảo toàn định dạng, LLM đôi khi vẫn có thể bỏ sót hoặc xử lý sai cú pháp Markdown phức tạp (như danh sách lồng nhau, bảng, mã định danh ngôn ngữ khối mã, v.v.).
- Luôn kiểm tra ngẫu nhiên các tệp đã dịch, đặc biệt là các phần có định dạng phức tạp. Có thể cần sửa chữa thủ công.
-
Hiệu suất và Tiêu thụ Tài nguyên:
- Chạy LLM là tác vụ tốn nhiều tài nguyên tính toán. Tốc độ dịch phụ thuộc vào CPU, bộ nhớ (RAM) của bạn và liệu có tăng tốc GPU hay không.
- Các mô hình lớn (ví dụ: 7B+) có thể rất chậm nếu không có GPU. Tích hợp Ollama của ServBay thường tự động sử dụng các GPU có sẵn (NVIDIA hoặc Apple Silicon). Bạn có thể kiểm tra các cài đặt liên quan trong cấu hình Ollama của ServBay.
- Nếu bạn gặp phải tắc nghẽn hiệu suất hoặc hệ thống bị lag:
- Tăng giá trị
REQUEST_DELAY
. - Thử sử dụng các mô hình nhỏ hơn (ví dụ: 3B hoặc 4B) hoặc các mô hình lượng tử hóa (thường được biểu thị bằng
q4
,q5
,q8
, v.v., trong tên mô hình). Các mô hình lượng tử hóa đánh đổi một lượng nhỏ độ chính xác để lấy tốc độ nhanh hơn và sử dụng tài nguyên thấp hơn. Giao diện quản lý mô hình của ServBay thường liệt kê các phiên bản lượng tử hóa này. - Trong cấu hình Ollama của ServBay, kiểm tra xem
Max loaded models
vàParallel Num.
có được đặt hợp lý không (đối với xử lý hàng loạt một tác vụ, chúng thường không cần phải cao).
- Tăng giá trị
-
Xử lý Tệp Lớn:
- Các tệp Markdown rất lớn có thể gây ra:
- Hết thời gian chờ xử lý của Ollama (tập lệnh đặt thời gian chờ 300 giây, có thể cần dài hơn).
- Vượt quá giới hạn cửa sổ ngữ cảnh của mô hình, dẫn đến nội dung bị cắt bớt hoặc bản dịch không đầy đủ.
- Tiêu thụ bộ nhớ cao.
- Đối với các tệp cực lớn, bạn có thể cần triển khai chiến lược Phân mảnh (Chunking): chia tệp lớn thành các đoạn nhỏ hơn (ví dụ: theo đoạn văn hoặc số lượng ký tự cố định), gửi từng đoạn đến Ollama để dịch riêng biệt, sau đó hợp nhất các kết quả. Điều này làm tăng độ phức tạp của tập lệnh.
- Các tệp Markdown rất lớn có thể gây ra:
-
Xử lý lỗi và Thử lại:
- Tập lệnh bao gồm xử lý lỗi cơ bản nhưng có thể được cải thiện. Ví dụ: triển khai cơ chế thử lại tự động: khi một lệnh gọi API thất bại (do sự cố mạng hoặc Ollama tạm thời không phản hồi), đợi một khoảng thời gian ngắn và tự động thử lại một vài lần.
- Ghi nhật ký lỗi chi tiết hơn để dễ dàng khắc phục sự cố.
-
Dịch Tăng cường (Incremental Translation):
- Tập lệnh hiện tại xử lý tất cả các tệp mỗi khi nó chạy (trừ khi bạn hủy thủ công). Nó có thể được sửa đổi để kiểm tra xem tệp đích có tồn tại không và thời gian sửa đổi của nó có mới hơn tệp nguồn không. Nếu có, bỏ qua nó, do đó triển khai dịch tăng cường (chỉ dịch các tệp mới hoặc đã sửa đổi).
-
Xử lý Đồng thời (Concurrent Processing):
- Nếu phần cứng của bạn đủ mạnh (đặc biệt là CPU đa lõi hoặc GPU mạnh) và cấu hình Ollama của bạn cho phép xử lý song song (
Parallel Num.
> 0), hãy cân nhắc sử dụng các thư việnmultiprocessing
hoặcthreading
của Python để xử lý đồng thời nhiều tệp. Điều này có thể tăng tốc đáng kể thời gian dịch tổng thể nhưng sẽ làm tăng mức tiêu thụ tài nguyên và độ phức tạp của mã.
- Nếu phần cứng của bạn đủ mạnh (đặc biệt là CPU đa lõi hoặc GPU mạnh) và cấu hình Ollama của bạn cho phép xử lý song song (
Kết luận: Bắt đầu Hành trình AI Cục bộ của Bạn
Chúc mừng! Bằng cách làm theo hướng dẫn này, bạn đã sử dụng thành công chức năng Ollama tích hợp của ServBay để thiết lập một quy trình dịch hàng loạt tự động, riêng tư và cục bộ cho các tài liệu Markdown. Bạn không chỉ tìm hiểu về khả năng tích hợp mạnh mẽ của ServBay trong không gian AI/LLM mà còn nắm vững cách tương tác với các mô hình ngôn ngữ lớn chạy cục bộ thông qua một tập lệnh Python đơn giản để giải quyết các vấn đề thực tế.
Lợi thế cốt lõi của giải pháp AI cục bộ này nằm ở việc giữ dữ liệu hoàn toàn trong tay bạn, loại bỏ các mối lo ngại về vi phạm quyền riêng tư hoặc chi phí API cao. Đồng thời, nó mang lại cho bạn sự linh hoạt và kiểm soát vô cùng lớn – bạn có thể tự do chọn mô hình, điều chỉnh tham số, tối ưu hóa quy trình làm việc và thậm chí làm việc ngoại tuyến.
ServBay, với tư cách là một môi trường phát triển tích hợp tuyệt vời, một lần nữa chứng tỏ bản chất đón đầu xu hướng của mình bằng cách nắm bắt Ollama, cung cấp cho các nhà phát triển và những người đam mê công nghệ một nền tảng thuận tiện để khám phá và áp dụng các công nghệ AI tiên tiến. Dịch tài liệu chỉ là phần nổi của tảng băng chìm. Dựa trên framework này, bạn có thể khám phá nhiều ứng dụng khác của AI cục bộ, chẳng hạn như:
- Tạo và Giải thích Mã: Sử dụng các mô hình như
codellama
hoặcdeepseek-coder
để hỗ trợ lập trình. - Tóm tắt Văn bản và Trích xuất Thông tin: Nhanh chóng hiểu nội dung cốt lõi của các tài liệu hoặc báo cáo dài.
- Sáng tạo và Chỉnh sửa Nội dung: Tạo bài đăng blog, bản nháp email, viết sáng tạo, v.v.
- Hỏi đáp Cơ sở Tri thức Cục bộ: Kết hợp các kỹ thuật RAG (Retrieval-Augmented Generation) để cho phép LLM trả lời các câu hỏi dựa trên tài liệu cục bộ của bạn.
Trong tương lai, khi công nghệ LLM cục bộ tiếp tục phát triển và các tính năng của ServBay lặp lại, chúng ta có mọi lý do để tin rằng việc chạy các ứng dụng AI mạnh mẽ, hiệu quả và an toàn trên máy tính cá nhân sẽ ngày càng trở nên phổ biến. Hãy bắt đầu ngay bây giờ với dự án dịch hàng loạt này và tự do khám phá những khả năng vô hạn mà ServBay và Ollama mang lại cho nỗ lực AI cục bộ của bạn!