# 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)