# LangFlow 掛載 Custom Component ### 如何掛載 Custom Component 進 LangFlow 文件:[https://docs.langflow.org/guidelines/custom-component#loading-custom-components](https://docs.langflow.org/guidelines/custom-component) 1. 創建 `custom_components` 資料夾 ```bash cd ./src/backend/langflow mkdir custom_components ``` 2. 將你寫好的 Custom Component 放進去 `custom_components` 資料夾 - 例:`專案/src/backend/langflow/custom_components/Redis.py` ```bash 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` 例: ```bash 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 回到專案根目錄,前後端要分別開啟 ```bash make backend ``` 再啟動前端 ```bash make frontend ``` 即可顯示剛剛掛載進去的 Custom Component 了 ### 參考資源 - Redis on LangChain - https://python.langchain.com/docs/integrations/vectorstores/redis#redis-connection-url-examples - https://github.com/langchain-ai/langchain/blob/master/libs/langchain/langchain/vectorstores/redis/base.py - LangFlow - Custom Component - doc : https://docs.langflow.org/components/custom - example: https://github.com/logspace-ai/langflow/blob/dev/src/backend/langflow/components/vectorstores/Chroma.py - load from mounting folder (without changing source code) : [https://docs.langflow.org/guidelines/custom-component#loading-custom-components](https://docs.langflow.org/guidelines/custom-component) - test data - iEMS問答集需量空調_用電異常_問題調整: [http://172.16.9.155/openai-copilot/ifps-lang-api/-/blob/main/data/iEMS問答集需量空調_用電異常_問題調整_231018E.txt](http://172.16.9.155/openai-copilot/ifps-lang-api/-/blob/main/data/iEMS%E5%95%8F%E7%AD%94%E9%9B%86%E9%9C%80%E9%87%8F%E7%A9%BA%E8%AA%BF_%E7%94%A8%E9%9B%BB%E7%95%B0%E5%B8%B8_%E5%95%8F%E9%A1%8C%E8%AA%BF%E6%95%B4_231018E.txt)