Bỏ qua tới nội dung chính
Quay lại tin tức

Xây dựng quy trình làm việc đa phương thức với LLM cục bộ

Towards Data Science· Shuai Guo· 12/8/2026general

Đầu vào hình ảnh và đầu ra có cấu trúc với Gemma 4 và Ollama Bài viết Xây dựng quy trình làm việc đa phương thức với LLM cục bộ xuất hiện lần đầu trên Towards Data Science.

Ứng dụng LLM Xây dựng quy trình làm việc đa phương thức với LLM cục bộ Đầu vào hình ảnh và đầu ra có cấu trúc với Gemma 4 và Ollama Shuai Guo Ngày 12/8/2026 9 phút đọc Được tạo bởi GPT-Image 2 Việc chạy một LLM cục bộ trở nên hấp dẫn khi làm việc với dữ liệu riêng tư hoặc xây dựng các quy trình làm việc cần chạy trên máy tính của chúng ta. Và những quy trình làm việc đó không còn cần phải giới hạn ở văn bản. Trong bài viết này, chúng ta sẽ xây dựng một quy trình làm việc như vậy với Gemma 4 và Ollama. Chúng ta sẽ đặt khả năng đa phương thức của Gemma 4 vào một quy trình lớn hơn, nơi các bước tiếp theo có thể sử dụng đầu ra có cấu trúc của nó. Gần đây, tôi đã có một chuyến đi đến Phần Lan và chụp khá nhiều ảnh trong suốt hành trình. Trong bài viết này, tôi sẽ chỉ cho bạn cách tôi sử dụng quy trình làm việc để phân tích chúng, sau đó chỉ ra cách quy trình làm việc tương tự có thể cung cấp năng lượng cho một ứng dụng nhỏ. 1. Quy trình làm việc đa phương thức Có hai ý tưởng liên quan đến thuật ngữ "quy trình làm việc đa phương thức". Đầu tiên, đa phương thức. Điều này có nghĩa là thay vì chỉ làm việc với văn bản, LLM cũng nhận các đầu vào thuộc loại khác, chẳng hạn như hình ảnh. Trong bài viết này, chúng ta xem xét LLM cục bộ thuộc dòng Gemma 4 từ Google. Dòng mô hình này có khả năng xử lý cả hình ảnh và văn bản. Sau đó, quy trình làm việc. Điều này có nghĩa là thay vì tự động quyết định bước tiếp theo như trong một vòng lặp tác nhân, LLM hoạt động bên trong một chuỗi được xác định trước, trong đó mỗi giai đoạn nhận một đầu vào và tạo ra một đầu ra cho giai đoạn tiếp theo. LLM đóng vai trò là một hàm thực hiện các phép biến đổi ngữ nghĩa. Đối với trường hợp nghiên cứu của chúng ta, chúng ta muốn biến một thư mục ảnh chuyến đi thành các bản ghi kỷ niệm được sắp xếp. Để đạt được điều đó, chúng ta cần phân tích từng bức ảnh và dịch nội dung của nó thành một bản ghi có cấu trúc, nhất quán. Khi các bản ghi đó có sẵn, chúng ta có thể kết hợp chúng để hiểu toàn bộ bộ sưu tập. Điều này tự nhiên mang lại cho chúng ta một quy trình làm việc ba giai đoạn: photos = prepare_photos("Finland_trip") photo_memories = [ analyze_photo( image=photo.image, metadata=photo.metadata, ) for photo in photos ] trip_memory = synthesize_trip(photo_memories) Đầu tiên, Python chuẩn bị các hình ảnh riêng lẻ và trích xuất siêu dữ liệu hữu ích như thời gian chụp và tọa độ GPS của chúng. Sau đó, LLM cục bộ Gemma 4 của chúng ta có thể phân tích từng bức ảnh và trả về một bản ghi có cấu trúc về nội dung hình ảnh của bức ảnh. Cuối cùng, chúng ta chuyển các bản ghi riêng lẻ một lần nữa cho Gemma 4 để tạo ra một bản tóm tắt có cấu trúc của toàn bộ bộ sưu tập. Trong phần tiếp theo, chúng ta sẽ xây dựng các giai đoạn riêng lẻ. 2. Xây dựng quy trình làm việc với Gemma 4 2.1 Chạy Gemma 4 cục bộ Trước hết, chúng ta cần làm cho Gemma 4 có sẵn cục bộ. Để làm được điều đó, chúng ta sử dụng Ollama, cung cấp cho chúng ta một môi trường chạy cục bộ và giao diện để tương tác với mô hình. Trong bài viết này, chúng ta sử dụng biến thể E4B của Gemma, một trong những mô hình thân thiện với thiết bị biên trong dòng sản phẩm. Trên Windows và macOS, bạn có thể tải xuống và chạy trình cài đặt từ trang web của Ollama. Trên Linux, bạn có thể cài đặt từ terminal: "curl -fsSL https://ollama.com/install.sh | sh" Sau khi Ollama được cài đặt, chúng ta có thể kéo mô hình Gemma: ollama pull gemma4:e4b Chúng ta cũng cần cài đặt các gói Python cần thiết cho quy trình làm việc: pip install ollama pillow pydantic Ở đây, ollama cần thiết để kết nối mã Python của chúng ta với LLM cục bộ, pillow xử lý việc xử lý hình ảnh và pydantic dùng cho đầu ra có cấu trúc. 2.2 Từ ảnh đến bản ghi có cấu trúc Đối với mỗi bức ảnh, chúng ta muốn tạo ra một bản ghi có cấu trúc mô tả những gì mô hình nhìn thấy. Trước khi các hình ảnh đến được Gemma 4, chúng ta cần tiền xử lý chúng. Trong quy trình làm việc của chúng tôi, chúng tôi đã triển khai logic xác định để thay đổi kích thước hình ảnh và trích xuất siêu dữ liệu EXIF có sẵn, sau đó đóng gói chúng trong hàm `prepare_photo()`. Từ góc độ quy trình làm việc, chúng ta chỉ cần các đầu ra của hàm này: ```python from pathlib import Path image, metadata = prepare_photo( Path("Finland_trip/photo.jpg") ) ``` Tại đây, `image` chứa các byte hình ảnh đã được chuẩn bị, trong khi `metadata` là một từ điển chứa thông tin được trích xuất từ tệp. Bạn có thể tìm thấy chi tiết triển khai đầy đủ trong kho lưu trữ được đính kèm ở cuối bài viết. Tiếp theo, chúng ta định nghĩa bản ghi có cấu trúc mà chúng ta muốn Gemma 4 trả về: ```python from pydantic import BaseModel, Field class PhotoMemoryAnalysis(BaseModel): scene_summary: str memory_caption: str place_type: str visible_activities: list[str] visible_objects: list[str] inferred_interest_signals: list[str] mood: str uncertainty_notes: list[str] confidence: float = Field(ge=0, le=1) ``` Đây là điều chúng tôi gọi là đầu ra có cấu trúc (structured output). Về cơ bản, chúng tôi định nghĩa trước lược đồ này và yêu cầu LLM xuất ra theo hình dạng này. Bằng cách này, mã nguồn tiếp theo có thể truy cập kết quả thông qua các thuộc tính đã được định kiểu hoặc chuyển đổi nó thành một từ điển bằng `model_dump()`. Sau đó, chúng ta xây dựng hướng dẫn và lời nhắc: ```python import json PHOTO_ANALYSIS_INSTRUCTION = """ Analyze the supplied travel photo and its metadata. Return a structured record grounded in the provided inputs. """ def build_photo_prompt(metadata: dict) -> str: return f"""Photo metadata: {json.dumps(metadata, indent=2)} """ ``` Bây giờ chúng ta có thể kết hợp mọi thứ lại với nhau: ```python import ollama MODEL = "gemma4:e4b" def analyze_photo( image: bytes, metadata: dict, ) -> PhotoMemoryAnalysis: response = ollama.chat( model=MODEL, messages=[ { "role": "system", "content": PHOTO_ANALYSIS_INSTRUCTION, }, { "role": "user", "content": build_photo_prompt(metadata), "images": [image], }, ], format=PhotoMemoryAnalysis.model_json_schema(), options={"temperature": 0}, ) return PhotoMemoryAnalysis.model_validate_json( response.message.content ) ``` Lưu ý rằng chúng tôi đã sử dụng trường `images` để cung cấp đầu vào hình ảnh và sử dụng `format` để yêu cầu Ollama tuân theo lược đồ đã định nghĩa. Sau đó, chúng ta có thể phân tích phản hồi thành một đối tượng Python thông thường: ```python photo_analysis = analyze_photo( image=image, metadata=metadata, ) ``` Bằng cách này, chúng ta có quy trình để chuyển đổi một bức ảnh thành một bản ghi bộ nhớ có cấu trúc. 2.3 Một vấn đề tương thích với đầu vào hình ảnh Một lưu ý đáng đề cập: với thiết lập hiện tại của tôi cho Ollama (phiên bản 0.32.5) trên

Nguồn tin: Towards Data Science — Tác giả: Shuai Guo. Bản dịch tiếng Việt do AI thực hiện, có thể có sai sót.