Khám phá và Cài đặt LinaGora OpenRAG trên local

Nội dung

    Gần đây, tôi đã tìm hiểu kho lưu trữ GitHub của LinaGora cho dự án OpenRAG. Khi gặp một dự án mã nguồn mở đầy hứa hẹn, sự tò mò của tôi ngay lập tức được khơi dậy. Điều này thúc đẩy mong muốn thiết lập và thử nghiệm dự án này cục bộ trên máy của tôi.

    Đề xuất giá trị của OpenRAG

    Trước khi thực hiện các bước kỹ thuật cài đặt và thử nghiệm giải pháp, việc hiểu rõ những gì LinaGora OpenRAG tuyên bố cung cấp là rất quan trọng.

    • OpenRAG được thiết kế để cung cấp một khung làm việc mã nguồn mở hoàn chỉnh.
    • Nó dùng để triển khai hệ thống Tạo sinh Tăng cường Truy xuất (RAG).
    • Khung làm việc này nhằm mục đích tăng cường độ chính xác về dữ kiện.
    • Nó cũng nâng cao mức độ liên quan của các phản hồi từ mô hình ngôn ngữ lớn (LLM).
    • Việc này được thực hiện bằng cách tích hợp nguồn kiến thức bên ngoài (truy xuất).
    • Nó kết hợp với khả năng tạo sinh của LLM (tạo sinh).
    • LinaGora OpenRAG đặc biệt tuyên bố cung cấp một giải pháp sẵn sàng sử dụng.
    • Giải pháp này có tính mô-đun và có thể tùy chỉnh.
    • Nó dùng để xây dựng các ứng dụng RAG hiệu quả cao.
    • Các tính năng được hứa hẹn bao gồm:
      • Dễ dàng tích hợp với nhiều nguồn dữ liệu khác nhau.
      • Các phương pháp truy xuất được tối ưu hóa để tìm kiếm ngữ cảnh tốt hơn.
      • Triển khai toàn bộ ngăn xếp từ nạp dữ liệu đến tạo sinh.

    Dự án GitHub

    Trang dự án GitHub giải thích dự án như sau:

    Khám phá và Cài đặt LinaGora OpenRAG trên local

    • OpenRag là một khung làm việc RAG nhẹ, theo mô-đun và có thể mở rộng.
    • Nó được thiết kế để khám phá và thử nghiệm các kỹ thuật RAG tiên tiến.
    • Dự án này là 100% mã nguồn mở.
    • Nó tập trung vào thử nghiệm, không phải khóa chặt vào một nhà cung cấp.
    • OpenRag được xây dựng bởi Linagora.
    • Nó cung cấp một giải pháp thay thế “thiết kế theo chủ quyền” cho các nền tảng RAG phổ biến.

    Các tính năng chính

    Hỗ trợ định dạng tệp phong phú

    OpenRag hỗ trợ một loạt các định dạng tệp toàn diện để nạp tài liệu liền mạch:

    • Tệp văn bản: txt, md.
    • Tệp tài liệu: pdf, docx, doc, pptx.
      • Phân tích cú pháp PDF nâng cao với hỗ trợ OCR.
      • Xử lý tài liệu Office.
    • Tệp âm thanh: wav, mp3, mp4, ogg, flv, wma, aac.
      • Chuyển đổi âm thanh thành văn bản.
      • Trích xuất nội dung.
    • Hình ảnh: png, jpeg, jpg, svg.
      • Chú thích và phân tích hình ảnh được hỗ trợ bởi Mô hình Ngôn ngữ Thị giác (VLM).
    • Tất cả các tệp được chuyển đổi thông minh sang định dạng Markdown.
    • Hình ảnh được thay thế bằng các chú thích do AI tạo ra.
    • Điều này đảm bảo xử lý nhất quán trên tất cả các loại tài liệu.

    Giao diện người dùng lập chỉ mục dựa trên web gốc

    Trải nghiệm quản lý tài liệu trực quan thông qua giao diện web tích hợp của chúng tôi.

    Các tính năng của Giao diện người dùng lập chỉ mục:

    • Tải tệp bằng cách kéo và thả với khả năng xử lý hàng loạt.
    • Giám sát tiến độ lập chỉ mục và cập nhật trạng thái theo thời gian thực.
    • Bảng điều khiển quản trị để giám sát các thành phần RAG (Indexer, VectorDB, TaskStateManager, v.v.).
    • Quản lý phân vùng: tổ chức tài liệu thành các bộ sưu tập logic.
    • Xem trước tài liệu trực quan và kiểm tra siêu dữ liệu.
    • Khả năng tìm kiếm và lọc nội dung đã được lập chỉ mục.

    Kiến trúc dựa trên phân vùng

    Tổ chức cơ sở kiến thức của bạn với quản lý phân vùng linh hoạt:

    • Hỗ trợ đa người thuê: cách ly các bộ sưu tập tài liệu khác nhau.

    Giao diện trò chuyện tương tác với ghi nhận nguồn

    Tương tác với tài liệu của bạn thông qua giao diện trò chuyện tinh vi của chúng tôi:

    Các tính năng của Giao diện người dùng trò chuyện:

    • Giao diện người dùng được cung cấp bởi Chainlit: trải nghiệm trò chuyện hiện đại, phản hồi nhanh.
    • Minh bạch nguồn: mọi phản hồi đều bao gồm các tham chiếu tài liệu liên quan.

    Khả năng tương thích API OpenAI

    API OpenRag được thiết kế để tương thích với định dạng OpenAI. (Xem phần openai-compatibility để biết thêm chi tiết).

    Điều này cho phép tích hợp liền mạch RAG đã triển khai của bạn vào các giao diện người dùng và quy trình làm việc phổ biến.

    Các ví dụ bao gồm OpenWebUI, LangChain, N8N và nhiều hơn nữa.

    Điều này đảm bảo tính linh hoạt và dễ dàng áp dụng mà không yêu cầu bộ điều hợp tùy chỉnh.

    Tóm tắt các tính năng:

    • Thay thế trực tiếp cho các điểm cuối API OpenAI.
    • Tương thích với các giao diện người dùng phổ biến như OpenWebUI, LangChain, N8N, v.v.
    • Hỗ trợ xác thực: bảo mật API của bạn bằng xác thực dựa trên mã thông báo.

    Triển khai Ray phân tán

    Mở rộng quy mô đường ống RAG của bạn trên nhiều máy và GPU.

    Các tính năng triển khai Ray phân tán:

    • Mở rộng theo chiều ngang: phân phối xử lý trên các nút worker.
    • Tăng tốc GPU: tối ưu hóa suy luận trên phần cứng có sẵn.
    • Quản lý tài nguyên: phân bổ tài nguyên tính toán thông minh.
    • Bảng điều khiển giám sát: trạng thái cụm và số liệu hiệu suất theo thời gian thực.

    Xem phần về triển khai phân tán trong cụm Ray để biết thêm chi tiết.

    Truy xuất & Xếp hạng lại nâng cao

    OpenRag tận dụng các kỹ thuật truy xuất hiện đại để đạt độ chính xác vượt trội.

    Các kỹ thuật truy xuất nâng cao đã triển khai:

    • Tìm kiếm lai: kết hợp tương đồng ngữ nghĩa với đối sánh từ khóa BM25.
    • Truy xuất theo ngữ cảnh: kỹ thuật của Anthropic để tăng cường mức độ liên quan của các đoạn.
    • Xếp hạng lại đa ngôn ngữ: sử dụng Alibaba-NLP/gte-multilingual-reranker-base.

    Sắp ra mắt

    • Hỗ trợ định dạng mở rộng: Các bản cập nhật trong tương lai sẽ giới thiệu khả năng tương thích với các định dạng bổ sung như csv, odt, html và các loại tài liệu mã nguồn mở được sử dụng rộng rãi khác.
    • Chuyển đổi Markdown thống nhất: Tất cả các tệp sẽ tiếp tục được chuyển đổi sang markdown bằng một công cụ phân đoạn nhất quán. Các công cụ phân đoạn dành riêng cho định dạng (ví dụ: cho CSV, HTML) đang được lên kế hoạch để xử lý nâng cao.
    • Các tính năng nâng cao: Các bản phát hành sắp tới sẽ bao gồm Gọi công cụ (Tool Calling), RAG tác tử (Agentic RAG) và MCP để nâng cao quy trình làm việc RAG của bạn.
    • Bảo mật nâng cao: Đảm bảo mã hóa dữ liệu cả khi truyền và khi lưu trữ.

    Bạn muốn thử nghiệm?

    Nếu bạn muốn tự mình thử nghiệm điều này, dưới đây là các bước tôi đã thực hiện với Podman/Podman desktop và Ollama cục bộ của mình.

    1. Sao chép kho lưu trữ

    • Chạy lệnh: git clone //github.com/linagora/openrag.git
    • Sau đó, điều hướng vào thư mục: cd openrag

    2. Cài đặt “docker-compose”

    • Chạy lệnh: brew install docker-compose

    3. Tạo bản sao của tệp mẫu môi trường

    • Sử dụng lệnh: cp .env.example .env
    • Điều này tạo một tệp .env cho các cài đặt riêng của bạn.

    4. Chỉnh sửa tệp “.env”

    Từ thời điểm này, tôi đã thực hiện các thay đổi theo cấu hình của riêng mình:

    • Cấu hình LLM (sử dụng Ollama):
      • BASE_URL=//host.docker.internal:11434/v1
      • API_KEY=
      • MODEL=granite4
    • Cấu hình VLM (Mô hình Ngôn ngữ Thị giác):
      • VLM_BASE_URL=
      • VLM_API_KEY=
      • VLM_MODEL=
    • Cấu hình ứng dụng FastAPI (không cần thay đổi):
      • # APP_PORT=8080 (đây là cổng được chuyển tiếp)
      • # API_NUM_WORKERS=1 (số lượng worker uvicorn cho ứng dụng FastAPI)
    • Để bật xác thực API HTTP qua HTTPBearer:
      • # AUTH_TOKEN=sk-openrag-1234
    • Lưu tệp đã tải lên:
      • # SAVE_UPLOADED_FILES=true (hữu ích cho việc xem nguồn giao diện trò chuyện chainlit)
    • Bật giao diện người dùng trò chuyện Chainlit:
      • # WITH_CHAINLIT_UI=true (đặt thành true, nó sẽ gắn giao diện người dùng trò chuyện chainlit vào ứng dụng fastapi, mặc định là true)
    • Cấu hình Embedder (sử dụng Ollama):
      • EMBEDDER_MODEL_NAME=granite-embedding:latest (hoặc embedder khác từ huggingface tương thích với vllm)
      • EMBEDDER_BASE_URL=//host.docker.internal:11434/v1
      • EMBEDDER_API_KEY=EMPTY
    • Cấu hình Retriever:
      • # RETRIEVER_TOP_K=20 (số lượng tài liệu hàng đầu để truy xuất, trước khi xếp hạng lại; giá trị thấp hơn (~10) nhanh hơn trên CPU; trên GPU, bạn có thể thử tăng giá trị (~40)).
    • Cấu hình Reranker:
      • #RERANKER_ENABLED=true (tắt reranker nếu CPU của bạn không đủ mạnh)
      • RERANKER_ENABLED=false (người dùng đã đặt thành false)
      • RERANKER_MODEL=Alibaba-NLP/gte-multilingual-reranker-base (hoặc jinaai/jina-reranker-v2-base-multilingual)
    • Cấu hình Prompts:
      • PROMPTS_DIR=../prompts/example1
    • Cấu hình Ray:
      • RAY_DEDUP_LOGS=0 (tắt tính năng khử trùng lặp nhật ký ray xuất hiện trên nhiều quy trình)
      • RAY_ENABLE_RECORD_ACTOR_TASK_LOGGING=1 (để bật nhật ký ở cấp độ tác vụ trong bảng điều khiển ray)
      • RAY_task_retry_delay_ms=3000
      • RAY_ENABLE_UV_RUN_RUNTIME_ENV=0 (quan trọng với phiên bản UV mới nhất)
    • Cấu hình Giao diện người dùng lập chỉ mục:
      • INCLUDE_CREDENTIALS=false (đặt thành true nếu xác thực fastapi được bật, tức là AUTH_TOKEN được đặt)
      • INDEXERUI_PORT=8060 (cổng để hiển thị Giao diện người dùng lập chỉ mục, mặc định là 3042)
      • # INDEXERUI_URL='//localhost:8060/' (Bạn có thể giữ nguyên hoặc điều chỉnh thành //localhost:8060/ nếu có lỗi)
      • # API_BASE_URL='//localhost:8080' (Cập nhật X.X.X.X thành localhostAPP_PORT thành 8080)
      • INDEXERUI_URL='//X.X.X.X:INDEXERUI_PORT' (thay thế X.X.X.X bằng localhost nếu khởi chạy cục bộ hoặc bằng IP máy chủ của bạn)
      • API_BASE_URL='//X.X.X.X:APP_PORT' (URL cơ sở của backend FastAPI của bạn; thay thế X.X.X.X bằng localhostAPP_PORT bằng số cổng thực tế của backend FastAPI của bạn)
    • Cấu hình ghi nhật ký:

    5. Điều chỉnh tệp “extern/infinity.yaml” cho môi trường của bạn (CPU đối với tôi)

    • Mẫu reranker:
      • x-reranker: &reranker_template
      • networks:
        • default:
          • aliases:
            • - reranker
      • volumes:
        • - ${VLLM_CACHE:-/root/.cache/huggingface}:/app/.cache/huggingface (Trọng số mô hình cho RAG)
      • # ports:
        • # - ${RERANKER_PORT:-7997}:${RERANKER_PORT:-7997}
    • Dịch vụ reranker (GPU):
      • services:
        • reranker:
          • <<: *reranker_template
          • image: michaelf34/infinity
          • runtime: nvidia
          • deploy:
            • resources:
              • reservations:
                • devices:
                  • - driver: nvidia
                  • count: all
                  • capabilities: [gpu]
          • command: >
            • v2
            • --model-id ${RERANKER_MODEL:-Alibaba-NLP/gte-multilingual-reranker-base}
            • --port ${RERANKER_PORT:-7997}
          • profiles:
            • - ''
    • Dịch vụ reranker-cpu (cho CPU):
      • reranker-cpu:
        • <<: *reranker_template
        • image: michaelf34/infinity:latest-cpu
        • platform: linux/amd64
        • deploy: {}
        • command: >
          • v2
          • --engine torch
          • --model-id ${RERANKER_MODEL:-Alibaba-NLP/gte-multilingual-reranker-base}
          • --port ${RERANKER_PORT:-7997}
        • profiles:
          • - 'cpu'

    6. Chạy toàn bộ cấu hình cho CPU

    Sau khi hoàn thành các tác vụ này, hãy chạy toàn bộ cấu hình cho CPU (một lần nữa, đây là cấu hình của tôi):

    • Để triển khai CPU: docker compose --profile cpu up -d
    • Để dừng ứng dụng: docker compose --profile cpu down

    URL truy cập là: //localhost:8060Khám phá và Cài đặt LinaGora OpenRAG trên local

    Kết luận

    Các bước ban đầu này thể hiện sự tương tác thực tế đầu tiên của tôi với khung làm việc OpenRAG của LinaGora.

    Toàn bộ lĩnh vực này – phát triển các giải pháp RAG độc lập với LLM và có chủ quyền – đang phát triển với tốc độ đáng kinh ngạc.

    Tôi duy trì sự tập trung rõ ràng vào việc thử nghiệm mã và công cụ.

    Mục tiêu là để có được sự hiểu biết thực tế về bối cảnh này.

    Việc khám phá này hoàn toàn dành cho mục đích giám sát và học hỏi.

    Nó cung cấp cái nhìn sâu sắc về các phương pháp hay nhất hiện tại và xu hướng kiến trúc.

    Nó không cấu thành sự chứng thực ngay lập tức hoặc cam kết triển khai sản xuất.

    Việc thực hành đảm bảo rằng tôi luôn cập nhật các khả năng mạnh mẽ đang nổi lên trong lĩnh vực tiến bộ nhanh chóng này.

    Tham khảo: medium.com

    Tìm hiểu thêm Xây dựng hệ thống RAG tự cải thiện

    Để lại một bình luận

    Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

    Chat with us
    Hello! How can I help you today?