Try   HackMD

LangFlow 掛載 Custom Component

如何掛載 Custom Component 進 LangFlow

文件:https://docs.langflow.org/guidelines/custom-component#loading-custom-components

  1. 創建 custom_components 資料夾

    ​​​​cd ./src/backend/langflow
    ​​​​mkdir custom_components
    
  2. 將你寫好的 Custom Component 放進去 custom_components 資料夾

    • 例:專案/src/backend/langflow/custom_components/Redis.py

      ​​​​​​​​from typing import Optional, Union
      ​​​​​​​​from langflow import CustomComponent
      ​​​​​​​​
      ​​​​​​​​from langchain.vectorstores.redis import Redis
      ​​​​​​​​from langchain.schema import Document
      ​​​​​​​​from langchain.vectorstores.base import VectorStore
      ​​​​​​​​from langchain.schema import BaseRetriever
      ​​​​​​​​from langchain.embeddings.base import Embeddings
      ​​​​​​​​
      ​​​​​​​​class RedisComponent(CustomComponent):
      ​​​​​​​​    """
      ​​​​​​​​    A custom component for implementing a Vector Store using Redis.
      ​​​​​​​​    """
      ​​​​​​​​
      ​​​​​​​​    display_name: str = "Redis Vector Store"
      ​​​​​​​​    description: str = "Implementation of Vector Store using Redis"
      ​​​​​​​​    documentation = "https://python.langchain.com/docs/integrations/vectorstores/redis"
      ​​​​​​​​    beta = True
      ​​​​​​​​
      ​​​​​​​​    def build_config(self):
      ​​​​​​​​        """
      ​​​​​​​​        Builds the configuration for the component.
      
      ​​​​​​​​        Returns:
      ​​​​​​​​        - dict: A dictionary containing the configuration options for the component.
      ​​​​​​​​        """
      ​​​​​​​​        return {
      ​​​​​​​​            "index_name": {"display_name": "Index Name", "value": "your_index"},
      ​​​​​​​​            "code": {"show": True, "display_name": "Code"},
      ​​​​​​​​            "documents": {"display_name": "Documents", "is_list": True},
      ​​​​​​​​            "embedding": {"display_name": "Embedding"},
      ​​​​​​​​            "redis_server_url": {"display_name": "Redis Server Connection String", "advanced": False},
      ​​​​​​​​            "redis_index_name": {"display_name": "Redis Index", "advanced": False},
      ​​​​​​​​        }
      ​​​​​​​​
      ​​​​​​​​    def build(
      ​​​​​​​​        self,
      ​​​​​​​​        embedding: Embeddings,
      ​​​​​​​​        redis_server_url: str,
      ​​​​​​​​        redis_index_name: str,
      ​​​​​​​​        documents: Optional[Document] = None,
      ​​​​​​​​    ) -> VectorStore:
      ​​​​​​​​        """
      ​​​​​​​​        Builds the Vector Store or BaseRetriever object.
      ​​​​​​​​
      ​​​​​​​​        Args:
      ​​​​​​​​        - embedding (Embeddings): The embeddings to use for the Vector Store.
      ​​​​​​​​        - documents (Optional[Document]): The documents to use for the Vector Store.
      ​​​​​​​​        - redis_index_name (str): The name of the Redis index.
      ​​​​​​​​        - redis_server_url (str): The URL for the Redis server.
      ​​​​​​​​
      ​​​​​​​​        Returns:
      ​​​​​​​​        - VectorStore: The Vector Store object.
      ​​​​​​​​        """
      ​​​​​​​​
      ​​​​​​​​        # if not documents:    
      ​​​​​​​​        #     return Redis.from_existing_index(
      ​​​​​​​​        #         embedding=embedding,
      ​​​​​​​​        #         redis_url=redis_server_url,
      ​​​​​​​​        #         index_name=redis_index_name,
      ​​​​​​​​        #     )
      ​​​​​​​​
      ​​​​​​​​        return Redis.from_documents(
      ​​​​​​​​            documents=documents,  # type: ignore
      ​​​​​​​​            embedding=embedding,
      ​​​​​​​​            redis_url=redis_server_url,
      ​​​​​​​​            index_name=redis_index_name,
      ​​​​​​​​        )
      
  3. 修改專案根目錄的 MakeFile ,指定 custom component 掛載路徑

    在 backend 區段,poetry run 指令後面加入 --components-path src/backend/langflow/custom_components

    例:

    ​​​​backend:
    ​​​​	make install_backend
    ​​​​ifeq ($(login),1)
    ​​​​	@echo "Running backend without autologin";
    ​​​​	poetry run langflow run --backend-only --port 7860 --host 0.0.0.0 --no-open-browser --components-path src/backend/langflow/custom_components
    ​​​​else
    ​​​​	@echo "Running backend with autologin";
    ​​​​	LANGFLOW_AUTO_LOGIN=True poetry run langflow run --backend-only --port 7860 --host 0.0.0.0 --no-open-browser --components-path src/backend/langflow/custom_components
    ​​​​endif
    

如何啟動 LangFlow

回到專案根目錄,前後端要分別開啟

make backend

再啟動前端

make frontend

即可顯示剛剛掛載進去的 Custom Component 了

參考資源