Giới thiệu Daggr- Lập chuỗi ứng dụng theo chương trình, kiểm tra trực quan
Daggr cho phép bạn tạo và quản lý các chuỗi ứng dụng AI phức tạp một cách trực quan.
- 9 min read
Giới thiệu Daggr: Kết nối ứng dụng một cách lập trình, kiểm tra trực quan
Tóm tắt: Daggr là thư viện Python mã nguồn mở mới, giúp kết nối các ứng dụng Gradio, mô hình ML và hàm tùy chỉnh. Nó tự động tạo một bảng điều khiển trực quan để bạn có thể kiểm tra kết quả trung gian, chạy lại các bước riêng lẻ và quản lý trạng thái cho các quy trình phức tạp, tất cả chỉ với vài dòng code Python!
Mục lục
- Giới thiệu
- Bắt đầu
- Chia sẻ quy trình làm việc của bạn
- Ví dụ End-to-End với các nút khác nhau
- Các bước tiếp theo
Giới thiệu
Nếu bạn đã từng xây dựng các ứng dụng AI kết hợp nhiều mô hình hoặc các bước xử lý, bạn sẽ hiểu sự phiền toái: nối chuỗi các lệnh gọi API, gỡ lỗi quy trình và mất dấu các kết quả trung gian. Khi có lỗi xảy ra ở bước 5 của quy trình 10 bước, bạn thường phải chạy lại mọi thứ chỉ để xem điều gì đã xảy ra.
Hầu hết các nhà phát triển hoặc là xây dựng các tập lệnh mong manh, khó gỡ lỗi hoặc là sử dụng các nền tảng điều phối nặng nề được thiết kế cho quy trình sản xuất — chứ không phải cho thử nghiệm nhanh.
Chúng tôi đã làm việc với Daggr để giải quyết các vấn đề mà chúng tôi liên tục gặp phải khi xây dựng các bản demo và quy trình làm việc AI:
- Trực quan hóa luồng code của bạn: Không giống như các trình chỉnh sửa dựa trên nút kéo-thả, nơi bạn kéo và kết nối các nút trực quan, Daggr áp dụng phương pháp tiếp cận code-đầu tiên. Bạn định nghĩa quy trình làm việc bằng Python, và một bảng điều khiển trực quan sẽ được tạo tự động. Điều này có nghĩa là bạn có được những lợi ích tốt nhất của cả hai: code có thể kiểm soát phiên bản và kiểm tra trực quan các kết quả trung gian.
- Kiểm tra và Chạy lại bất kỳ Bước nào: Bảng điều khiển trực quan không chỉ để hiển thị. Bạn có thể kiểm tra kết quả của bất kỳ nút nào, sửa đổi đầu vào và chạy lại các bước riêng lẻ mà không cần thực thi toàn bộ quy trình. Điều này vô cùng giá trị khi bạn đang gỡ lỗi một quy trình 10 bước và chỉ bước 7 gặp sự cố. Bạn thậm chí có thể cung cấp các “nút sao lưu” — thay thế một mô hình hoặc Không gian bằng một mô hình khác — để xây dựng các quy trình làm việc bền vững.
- Tích hợp Gradio Hạng nhất: Vì Daggr được xây dựng bởi đội ngũ Gradio, nó hoạt động liền mạch với các Không gian Gradio. Chỉ cần trỏ đến bất kỳ Không gian công khai (hoặc riêng tư) nào và bạn có thể sử dụng nó làm nút trong quy trình làm việc của mình. Không cần bộ điều hợp, không cần trình bao bọc — chỉ cần tham chiếu tên Không gian và điểm cuối API.
- Lưu trữ Trạng thái: Daggr tự động lưu trạng thái quy trình làm việc của bạn, giá trị đầu vào, kết quả đã lưu trong bộ nhớ cache — vì vậy bạn có thể tiếp tục công việc của mình. Sử dụng “bảng tính” để duy trì nhiều không gian làm việc trong cùng một ứng dụng.
Bắt đầu
Cài đặt daggr bằng pip hoặc uv, nó chỉ yêu cầu Python 3.10 trở lên:
shell pip install daggr uv pip install daggr
Đây là một ví dụ đơn giản tạo hình ảnh và xóa nền của nó. Hãy xem tham khảo API của Không gian này từ cuối Không gian để xem nó nhận những đầu vào nào và tạo ra những đầu ra nào. Trong ví dụ này, Không gian trả về cả hình ảnh gốc và hình ảnh đã chỉnh sửa, vì vậy chúng tôi chỉ trả về hình ảnh đã chỉnh sửa.
python import random import gradio as gr from daggr import GradioNode, Graph
Tạo ảnh bằng Không gian Gradio
image_gen = GradioNode( “hf-applications/Z-Image-Turbo”, api_name="/generate_image", inputs={ “prompt”: gr.Textbox( label=“Prompt”, value=“A cheetah sprints across the grassy savanna.”, lines=3, ), “height”: 1024, “width”: 1024, “seed”: random.random, }, outputs={ “image”: gr.Image(label=“Generated Image”), }, )
Xóa nền bằng một Không gian Gradio khác
bg_remover = GradioNode( “hf-applications/background-removal”, api_name="/image", inputs={ “image”: image_gen.image, # Kết nối với đầu ra của nút trước đó }, outputs={ “original_image”: None, # Ẩn đầu ra này “final_image”: gr.Image(label=“Final Image”), }, )
graph = Graph( name=“Transparent Background Generator”, nodes=[image_gen, bg_remover] ) graph.launch()
Xong. Chạy tập lệnh này và bạn sẽ có một bảng điều khiển trực quan được phục vụ trên cổng 7860 tự động khởi chạy, cũng như một liên kết trực tiếp có thể chia sẻ, hiển thị cả hai nút được kết nối, với các đầu vào bạn có thể sửa đổi và các đầu ra bạn có thể kiểm tra ở mỗi bước.
Các loại nút
Daggr hỗ trợ ba loại nút:
-
GradioNode: Gọi một điểm cuối API Không gian Gradio hoặc ứng dụng Gradio được phục vụ cục bộ. Khi truyền
run_locally=True, Daggr tự động sao chép Không gian, tạo một môi trường ảo biệt lập và khởi chạy ứng dụng. Nếu thực thi cục bộ thất bại, nó sẽ quay lại API từ xa một cách duyên dáng.python node = GradioNode( “username/space-name”, api_name="/predict", inputs={“text”: gr.Textbox(label=“Input”)}, outputs={“result”: gr.Textbox(label=“Output”)}, )
sao chép một Không gian cục bộ và phục vụ
node = GradioNode( “hf-applications/background-removal”, api_name="/image", run_locally=True, inputs={“image”: gr.Image(label=“Input”)}, outputs={“final_image”: gr.Image(label=“Output”)},
-
FnNode — chạy một hàm Python tùy chỉnh:
python def process(text: str) -> str: return text.upper()
node = FnNode( fn=process, inputs={“text”: gr.Textbox(label=“Input”)}, outputs={“result”: gr.Textbox(label=“Output”)}, )
-
InferenceNode — gọi một mô hình thông qua các Nhà cung cấp Suy luận Hugging Face:
python node = InferenceNode( model=“moonshotai/Kimi-K2.5:novita”, inputs={“prompt”: gr.Textbox(label=“Prompt”)}, outputs={“response”: gr.Textbox(label=“Response”)}, )
Chia sẻ quy trình làm việc của bạn
Tạo một URL công khai bằng tính năng đường hầm của Gradio:
python graph.launch(share=True)
Để lưu trữ vĩnh viễn, hãy triển khai trên Hugging Face Spaces bằng Gradio SDK — chỉ cần thêm daggr vào requirements.txt của bạn.
Ví dụ End-to-End với các nút khác nhau
Bây giờ chúng ta sẽ phát triển một ứng dụng nhận hình ảnh và tạo tài sản 3D. Bản demo này có thể chạy trên Daggr 0.4.3. Các bước như sau:
- Lấy ảnh, xóa nền: Để làm điều này, chúng ta sẽ sao chép Không gian BiRefNet và chạy nó cục bộ.
- Giảm kích thước ảnh để tiết kiệm hiệu quả: Chúng ta sẽ viết một hàm đơn giản cho việc này với FnNode.
- Tạo ảnh theo phong cách tài sản 3D để có kết quả tốt hơn: Chúng ta sẽ sử dụng InferenceNode với mô hình Flux.2-klein-4B trên các Nhà cung cấp Suy luận.
- Truyền ảnh đầu ra cho trình tạo 3D: Chúng ta sẽ gửi ảnh đầu ra đến Trellis.2 Space được lưu trữ trên Spaces.
Mẹo Các Không gian chạy cục bộ có thể lấy mô hình đến CUDA (với
to.(“cuda”)) hoặc ZeroGPU trong tệp ứng dụng. Để tắt hành vi này nhằm chạy mô hình trên CPU (hữu ích nếu bạn có thiết bị không có GPU NVIDIA), hãy sao chép Không gian bạn muốn sử dụng và sao chép nó.
Đồ thị kết quả trông như sau.
Chúng ta hãy viết bước đầu tiên, đó là trình xóa nền. Chúng ta sẽ sao chép và chạy Không gian này cục bộ. Không gian này chạy trên CPU và mất khoảng 13 giây để chạy. Bạn có thể thay thế bằng ứng dụng này nếu bạn có GPU NVIDIA.
python from daggr import FnNode, GradioNode, InferenceNode, Graph
background_remover = GradioNode( “merve/background-removal”, api_name="/image", run_locally=True, inputs={ “image”: gr.Image(), }, outputs={ “original_image”: None, “final_image”: gr.Image( label=“Final Image” ), }, )
Đối với bước thứ hai, chúng ta cần viết một hàm trợ giúp để giảm kích thước ảnh và truyền nó cho FnNode.
python from PIL import Image from daggr.state import get_daggr_files_dir import uuid # Import uuid module
def downscale_image_to_file(image: Any, scale: float = 0.25) -> str | None: pil_img = Image.open(image) scale_f = max(0.05, min(1.0, float(scale))) w, h = pil_img.size new_w = max(1, int(w * scale_f)) new_h = max(1, int(h * scale_f)) resized = pil_img.resize((new_w, new_h), resample=Image.Resampling.LANCZOS) # Use Resampling.LANCZOS out_path = get_daggr_files_dir() / f"{uuid.uuid4()}.png"
resized.save(out_path) return str(out_path)
Bây giờ chúng ta có thể truyền hàm vào để khởi tạo FnNode.
python downscaler = FnNode( downscale_image_to_file, name=“Downscale image for Inference”, inputs={ “image”: background_remover.final_image, “scale”: gr.Slider( label=“Downscale factor”, minimum=0.25, maximum=0.75, step=0.05, value=0.25, ), }, outputs={ “image”: gr.Image(label=“Downscaled Image”, type=“filepath”), }, )
Chúng ta sẽ viết InferenceNode với mô hình Flux.
python flux_enhancer = InferenceNode( model=“black-forest-labs/FLUX.2-klein-4B:fal-ai”, inputs={ “image”: downscaler.image, “prompt”: gr.Textbox( label=“prompt”, value=(“Transform this into a clean 3D asset render”), lines=3, ), }, outputs={ “image”: gr.Image(label=“3D-Ready Enhanced Image”), }, )
Mẹo Khi triển khai ứng dụng với InferenceNode lên Hugging Face Spaces, hãy sử dụng mã thông báo truy cập Hugging Face chi tiết với tùy chọn chỉ “Thực hiện các lệnh gọi đến Nhà cung cấp Suy luận”.
Nút cuối cùng là tạo 3D bằng cách truy vấn Không gian Trellis.2 trên Hugging Face.
python trellis_3d = GradioNode( “microsoft/TRELLIS.2”, api_name="/image_to_3d", inputs={ “image”: flux_enhancer.image, “ss_guidance_strength”: 7.5, “ss_sampling_steps”: 12, }, outputs={ “glb”: gr.HTML(label=“3D Asset (GLB preview)”), }, )
Chaining chúng lại với nhau và khởi chạy ứng dụng rất đơn giản.
python graph = Graph( name=“Image to 3D Asset Pipeline”, nodes=[background_remover, downscaler, flux_enhancer, trellis_3d], )
if name == “main”: graph.launch()
Bạn có thể tìm thấy ví dụ hoàn chỉnh đang chạy trong Không gian này, để chạy cục bộ bạn chỉ cần lấy tệp app.py, cài đặt các yêu cầu và đăng nhập vào Hugging Face Hub.
Các bước tiếp theo
Daggr đang trong giai đoạn thử nghiệm và cố tình nhẹ nhàng. API có thể thay đổi giữa các phiên bản và mặc dù chúng tôi lưu trữ trạng thái quy trình làm việc cục bộ, dữ liệu có thể bị mất trong quá trình cập nhật. Nếu bạn có yêu cầu tính năng hoặc tìm thấy lỗi, vui lòng mở một vấn đề ở đây. Chúng tôi mong nhận được phản hồi của bạn! Chia sẻ quy trình làm việc daggr của bạn trên mạng xã hội với Gradio để có cơ hội được giới thiệu. Xem tất cả các tác phẩm nổi bật ở đây.
Link bài viết gốc
- Tags:
- Ai
- 29 January 2026
- Huggingface.co