Private LLM Integration with RAGFlow: A Step-by-Step Guide

  sonic0002        2024-11-12 08:40:29       864        0          English  简体中文  Tiếng Việt 

Nếu bạn đã tìm thấy đường đến đây, có lẽ bạn đã rất hào hứng với tiềm năng của dự án RAGFlow và háo hức được thấy nó hoạt động. Tôi cũng ở trong cùng vị trí đó, vì vậy tôi đã tìm hiểu sâu vào mã nguồn để xem nó có thể hoạt động như thế nào với các mô hình ngôn ngữ lớn (LLM) tùy chỉnh. Bài viết này sẽ hướng dẫn bạn qua những phát hiện của tôi và chỉ cho bạn cách chạy RAGFlow với LLM của riêng bạn.

Tính đến thời điểm hiện tại (ngày 8 tháng 11 năm 2024), RAGFlow chỉ hỗ trợ hạn chế đối với các LLM cục bộ, và vLLM chưa tương thích. Trong trường hợp của chúng tôi, chúng tôi cần kiểm tra nó trên một dự án công ty với các yêu cầu bảo mật dữ liệu nghiêm ngặt, trong đó các lời nhắc không được gửi đến bất kỳ điểm cuối LLM của bên thứ ba nào. Nhu cầu về bảo mật này là động lực đằng sau hướng dẫn này, vì vậy hãy cùng tìm hiểu các bước để làm cho RAGFlow hoạt động an toàn với thiết lập LLM tùy chỉnh của bạn.

1. Làm theo hướng dẫn chính thức để khởi chạy ragflow từ mã nguồn 

Liên kết đến hướng dẫn chính thức có thể được tìm thấy tại https://ragflow.io/docs/dev/launch_ragflow_from_source

2. Thêm logo cho LLM của riêng bạn ở giao diện người dùng

  • thêm logo svg của bạn vào web/src/assets/svg/llm(ví dụ: web/src/assets/svg/llm/myownllm.svg)
  • liên kết svg đến nhà máy LLM bằng cách thêm một mục trong web/src/constants/setting.ts.
// web/src/constants/setting.ts
export const IconMap = {
  MyOwnLLM: 'myownllm', // Tên tập tin logo [MyOwnLLM]
  'Tongyi-Qianwen': 'tongyi',
  //...
}

3. Thêm LLM của bạn vào LocalLLMFactories cho giao diện người dùng

  • thêm một mục để đăng ký trong LocalLlmFactories trong web/src/pages/user-setting/constants.tsx
    //`web/src/pages/user-setting/constants.tsx`
    export const LocalLlmFactories = [
      'MyOwnLLM', //[MyOwnLLM]
      'Ollama',
      'Xinference',
      'LocalAI',
    ]
  • thêm một mục vào optionsMap trong web/src/pages/user-setting/setting-model/ollama-modal/index.tsx
    // web/src/pages/user-setting/setting-model/ollama-modal/index.tsx
    const optionsMap = {
        MyOwnLLM: [
          // [MyOwnLLM]
          { value: 'chat', label: 'chat' },
        ],
        HuggingFace: [
          { value: 'embedding', label: 'embedding' },
          { value: 'chat', label: 'chat' },]
        // ...
    }

4. Thêm thông tin LLM của bạn vào factory_llm_infos trong conf/llm_factories.json

{
    "factory_llm_infos": [
        {
            "name": "MyOwnLLM",
            "logo": "",
            "tags": "LLM",
            "status": "1",
            "llm": [
                {
                    "llm_name": "myownllm",
                    "tags": "LLM,CHAT,128K",
                    "max_tokens": 128000,
                    "model_type": "chat"
                }]
        },]
    //...
}

5. Truyền llm_name và api_key của LLM của bạn vào phương thức add_llm trong api/apps/llm_app.py

Điều này không quan trọng nếu api_key không được sử dụng trong LLM của riêng bạn.

def add_llm():
    # ....
    elif factory == "MyOwnLLM": #[MyOwnLLM]
        print("setting myownllm")
        print(req)
        llm_name = req["llm_name"]
        api_key = req["api_key"]
    # ...

6. Đăng ký LLM của bạn trong rag/llm

  • rag/llm/__init__.py
    ChatModel = {
        "MyOwnLLM": MyOwnLLM,
        # ...
    }​
  • rag/llm/chat_model.py

Nếu bạn muốn thêm một mô hình trò chuyện. hãy thêm một lớp mới MyOwnLLM để định nghĩa LLM của riêng bạn. Trong ví dụ sau, tôi đã định nghĩa LLM echo đơn giản cho các phương thức chat và chat_streamly. Ở đây tôi chỉ thêm LLM cho mô hình trò chuyện. Điều tương tự cũng áp dụng cho các mô hình khác.

class MyOwnLLM(Base): # [MyOwnLLM]
    def __init__(self, key, model_name, base_url):
        self.client = None
        self.model_name = model_name
        self.api_key = key
        self.base_url = base_url

    def chat(self, system, history, gen_conf):
        prompt = history[-1]['content']
        response = "Echo: bạn đã nhập " + prompt
        token_usage = len(prompt + response)
        return response, token_usage
    
    def chat_streamly(self, system, history, gen_conf):
        prompt = history[-1]['content']
        response = "Echo: bạn đã nhập " + prompt
        ans = ""
        for i in response:
            ans += i
            yield ans
        token_usage = len(prompt + response)
        yield token_usage

7. Khởi động phía backend

bash docker/entrypoint.sh

8. Khởi động phía frontend

Trong một thiết bị đầu cuối khác, khởi chạy giao diện người dùng

cd web
npm run dev

Nếu mọi thứ được thiết lập chính xác, bạn sẽ thấy LLM của riêng bạn được thêm vào danh sách các tùy chọn LLM. Bật LLM của riêng bạn bằng cách truyền api_keymodel_name, có thể là bất cứ thứ gì nếu bạn không sử dụng chúng cho LLM của riêng mình.

Sau khi xác nhận, bạn sẽ thấy LLM của riêng bạn đã được thêm vào và sẵn sàng để sử dụng.

Đặt LLM của riêng bạn làm LLM toàn hệ thống và bạn đã sẵn sàng.

Hãy đến trò chuyện để gửi một lời nhắc đơn giản để kiểm tra nó. Như bạn thấy, bot đã trả lời cùng một tin nhắn mà chúng ta đã gửi, như mong đợi.

Chúc mừng, bạn có thể thoải mái sử dụng RAGFlow hoàn toàn ngoại tuyến một cách an toàn!

Lưu ý: Bài đăng này được tác giả gốc Chaoran Liu cho phép xuất bản lại trên trang web của chúng tôi. 

AI  LLM  RAGFLOW  RAG 

       

  RELATED


  0 COMMENT


No comment for this article.



  RANDOM FUN

Factory mode is open