Hướng dẫn đóng góp

Vậy bạn đang muốn đóng góp cho ChatX - thật tuyệt vời, chúng tôi rất mong chờ những gì bạn sẽ làm. Là một startup với nguồn nhân lực và kinh phí hạn chế, chúng tôi có những tham vọng lớn để thiết kế quy trình làm việc trực quan nhất cho việc xây dựng và quản lý các ứng dụng LLM. Mọi sự giúp đỡ từ cộng đồng đều rất quý giá, thật sự.

Chúng tôi cần phải linh hoạt và phát hành nhanh chóng dựa trên tình hình hiện tại, nhưng chúng tôi cũng muốn đảm bảo rằng những người đóng góp như bạn có trải nghiệm mượt mà nhất có thể khi đóng góp. Chúng tôi đã tập hợp hướng dẫn đóng góp này với mục đích giúp bạn làm quen với mã nguồn và cách chúng tôi làm việc với những người đóng góp, để bạn có thể nhanh chóng bắt đầu với phần thú vị.

Hướng dẫn này, giống như ChatX, luôn là một công trình đang trong quá trình hoàn thiện. Chúng tôi rất cảm kích sự thông cảm của bạn nếu đôi khi nó chưa kịp cập nhật với dự án thực tế, và hoan nghênh bất kỳ phản hồi nào để chúng tôi cải thiện.

Về mặt cấp phép, vui lòng dành một chút thời gian để đọc giấy phép và thỏa thuận đóng góp ngắn của chúng tôi. Cộng đồng cũng tuân thủ quy tắc ứng xử.

Trước khi bạn bắt đầu

Tìm một vấn đề hiện có, hoặc mở một vấn đề mới. Chúng tôi phân loại vấn đề thành 2 loại:

Yêu cầu tính năng:

  • Nếu bạn mở một yêu cầu tính năng mới, chúng tôi muốn bạn giải thích tính năng được đề xuất đạt được những gì và bao gồm càng nhiều bối cảnh càng tốt. @perzeusss đã tạo ra một Feature Request Copilot mạnh mẽ giúp bạn soạn thảo yêu cầu của mình. Hãy thoải mái thử nó.

  • Nếu bạn muốn chọn một yêu cầu từ các vấn đề hiện có, chỉ cần để lại một bình luận bên dưới.

    Một thành viên trong nhóm làm việc trong hướng liên quan sẽ được đưa vào vòng. Nếu mọi thứ đều ổn, họ sẽ cho phép bạn bắt đầu viết mã. Chúng tôi yêu cầu bạn tạm dừng công việc cho đến khi nhận được sự chấp thuận, để tránh lãng phí công sức của bạn trong trường hợp chúng tôi đề xuất thay đổi.

    Tùy thuộc vào lĩnh vực mà tính năng đề xuất thuộc về, bạn có thể trò chuyện với các thành viên khác nhau trong nhóm. Dưới đây là bản tóm tắt về các lĩnh vực mà các thành viên trong nhóm của chúng tôi đang làm việc vào lúc này:

    Thành viên
    Phạm vi

    Kiến trúc các tác nhân

    Thiết kế đường dẫn RAG

    Xây dựng điều phối quy trình

    Tạo frontend dễ sử dụng

    Trải nghiệm nhà phát triển, liên hệ cho bất kỳ vấn đề gì

    Hướng dẫn và kiến trúc sản phẩm tổng thể

    Cách chúng tôi ưu tiên:

    Loại Tính năng
    Ưu tiên

    Tính năng ưu tiên cao do thành viên đánh dấu

    Ưu tiên cao

    Yêu cầu tính năng phổ biến từ phản hồi cộng đồng

    Ưu tiên trung bình

    Tính năng không cốt lõi và cải tiến nhỏ

    Ưu tiên thấp

    Tính năng có giá trị nhưng không cấp bách

    Tính năng tương lai

Bất kỳ vấn đề nào khác (ví dụ: báo cáo lỗi, tối ưu hóa hiệu suất, sửa lỗi chính tả):

  • Bắt đầu viết mã ngay lập tức.

    Cách chúng tôi ưu tiên:

    Loại Lỗi
    Ưu tiên

    Lỗi trong các chức năng cốt lõi (không thể đăng nhập, ứng dụng không hoạt động, lỗ hổng bảo mật)

    Quan trọng

    Lỗi không quan trọng, tăng hiệu suất

    Ưu tiên trung bình

    Sửa lỗi nhỏ (lỗi chính tả, giao diện gây nhầm lẫn nhưng vẫn hoạt động)

    Ưu tiên thấp

Cài đặt

Dưới đây là các bước để thiết lập ChatX cho phát triển:

1. Fork kho lưu trữ này

2. Clone kho lưu trữ

Clone kho lưu trữ đã fork từ terminal của bạn:

git clone [email protected]:<github_username>/dify.git

3. Xác minh các phụ thuộc

ChatX yêu cầu các phụ thuộc sau để xây dựng, đảm bảo chúng đã được cài đặt trên hệ thống của bạn:

4. Cài đặt

ChatX bao gồm backend và frontend. Điều hướng đến thư mục backend bằng lệnh cd api/, sau đó làm theo README của Backend để cài đặt. Trong một terminal khác, điều hướng đến thư mục frontend bằng lệnh cd web/, sau đó làm theo README của Frontend để cài đặt.

Kiểm tra FAQ cài đặt để biết danh sách các vấn đề phổ biến và các bước khắc phục sự cố.

5. Truy cập ChatX trong trình duyệt của bạn

Để xác nhận thiết lập của bạn, truy cập vào http://localhost:3000 (mặc định, hoặc URL và cổng bạn tự cấu hình) trong trình duyệt của bạn. Bạn sẽ thấy ChatX hoạt động.

Phát triển

Nếu bạn đang thêm nhà cung cấp mô hình, hướng dẫn này dành cho bạn.

Để giúp bạn nhanh chóng điều hướng và tìm nơi đóng góp của bạn, dưới đây là một bản phác thảo ngắn gọn về backend & frontend của ChatX:

Backend

Backend của ChatX được viết bằng Python sử dụng Flask. Nó sử dụng SQLAlchemy cho ORM và Celery cho hàng đợi nhiệm vụ. Logic ủy quyền đi qua Flask-login.

[api/]
├── constants             // Constant settings used throughout code base.
├── controllers           // API route definitions and request handling logic.           
├── core                  // Core application orchestration, model integrations, and tools.
├── docker                // Docker & containerization related configurations.
├── events                // Event handling and processing
├── extensions            // Extensions with 3rd party frameworks/platforms.
├── fields                // field definitions for serialization/marshalling.
├── libs                  // Reusable libraries and helpers.
├── migrations            // Scripts for database migration.
├── models                // Database models & schema definitions.
├── services              // Specifies business logic.
├── storage               // Private key storage.      
├── tasks                 // Handling of async tasks and background jobs.
└── tests

Frontend

Trang web được khởi tạo trên Next.js boilerplate bằng Typescript và sử dụng Tailwind CSS để tạo kiểu. React-i18next được sử dụng để quốc tế hóa.

[web/]
├── app                   // layouts, pages, and components
│   ├── (commonLayout)    // common layout used throughout the app
│   ├── (shareLayout)     // layouts specifically shared across token-specific sessions 
│   ├── activate          // activate page
│   ├── components        // shared by pages and layouts
│   ├── install           // install page
│   ├── signin            // signin page
│   └── styles            // globally shared styles
├── assets                // Static assets
├── bin                   // scripts ran at build step
├── config                // adjustable settings and options 
├── context               // shared contexts used by different portions of the app
├── dictionaries          // Language-specific translate files 
├── docker                // container configurations
├── hooks                 // Reusable hooks
├── i18n                  // Internationalization configuration
├── models                // describes data models & shapes of API responses
├── public                // meta assets like favicon
├── service               // specifies shapes of API actions
├── test                  
├── types                 // descriptions of function params and return values
└── utils                 // Shared utility functions

Gửi PR của bạn

Cuối cùng, đã đến lúc mở một pull request (PR) đến kho lưu trữ của chúng tôi. Đối với các tính năng lớn, trước tiên chúng tôi sẽ gộp chúng vào nhánh deploy/dev để kiểm tra, trước khi đưa chúng vào nhánh chính. Nếu bạn gặp phải các vấn đề như xung đột merge hoặc không biết cách mở pull request, hãy xem hướng dẫn pull request của GitHub.

Và đó là tất cả! Khi PR của bạn được gộp, bạn sẽ được xuất hiện như một người đóng góp trong README của chúng tôi.

Nhận trợ giúp

Nếu bạn gặp bất kỳ khó khăn nào hoặc có câu hỏi trong quá trình đóng góp, hãy gửi câu hỏi của bạn qua vấn đề liên quan trên GitHub, hoặc tham gia vào Discord của chúng tôi để trò chuyện nhanh.