Langflow 視覺化 AI 工作流程

使用 Langflow 透過拖放介面建構 LLM 應用程式,支援 RAG、Agent、API 部署

專案簡介

Langflow 是一個視覺化的 AI 工作流程建構平台,基於 LangChain 開發。透過拖放介面設計複雜的 LLM 應用,無需編寫大量程式碼。

GitHub Stars: 144K+

主要功能

  • 視覺化設計 - 拖放建構工作流程
  • LangChain 整合 - 完整元件支援
  • 即時預覽 - 立即測試流程
  • API 匯出 - 一鍵部署為 API
  • 多模型 - 支援各種 LLM 提供者

安裝

pip 安裝

1
2
pip install langflow
langflow run

訪問 http://localhost:7860

Docker 部署

1
2
3
docker run -d -p 7860:7860 \
  --name langflow \
  langflowai/langflow:latest

Docker Compose

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
version: '3.8'
services:
  langflow:
    image: langflowai/langflow:latest
    ports:
      - "7860:7860"
    environment:
      - LANGFLOW_DATABASE_URL=sqlite:///./langflow.db
      - LANGFLOW_CONFIG_DIR=/app/langflow
    volumes:
      - ./langflow-data:/app/langflow

基本操作

建立流程

  1. 點擊「New Project」
  2. 從側邊欄拖入元件
  3. 連接元件之間的節點
  4. 設定各元件參數
  5. 點擊「Run」測試

核心元件

類別元件
LLMsOpenAI、Anthropic、Ollama
PromptsChatPromptTemplate、PromptTemplate
ChainsLLMChain、ConversationChain
AgentsZeroShotAgent、ReActAgent
RetrieversVectorStoreRetriever
Vector StoresChroma、FAISS、Pinecone

建構 RAG 應用

流程架構

1
2
3
[Document Loader] → [Text Splitter] → [Embeddings] → [Vector Store]
[User Input] → [Retriever] → [Prompt Template] → [LLM] → [Output]

步驟

  1. 載入文件 - 加入 File Loader
  2. 切割文字 - 加入 RecursiveCharacterTextSplitter
  3. 向量化 - 加入 OpenAI Embeddings
  4. 儲存 - 加入 Chroma Vector Store
  5. 檢索 - 加入 VectorStoreRetriever
  6. 生成 - 加入 ChatOpenAI + Prompt

建構 Agent

ReAct Agent 流程

1
2
3
[Tools] → [Agent] → [Agent Executor] → [Output]
         [LLM]

自訂工具

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# 在 Custom Component 中定義
from langflow import CustomComponent

class WebSearchTool(CustomComponent):
    display_name = "Web Search"
    description = "Search the web"

    def build(self, query: str) -> str:
        # 實作搜尋邏輯
        return search_results

API 部署

匯出 API

  1. 完成流程設計
  2. 點擊「API」按鈕
  3. 取得 API 端點

呼叫 API

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
import requests

response = requests.post(
    "http://localhost:7860/api/v1/run/flow-id",
    json={
        "input_value": "What is SQL injection?",
        "output_type": "chat"
    }
)

print(response.json())

cURL 範例

1
2
3
curl -X POST "http://localhost:7860/api/v1/run/flow-id" \
  -H "Content-Type: application/json" \
  -d '{"input_value": "Explain XSS attacks"}'

進階功能

變數和條件

1
2
3
[Conditional Router] - 根據條件選擇路徑
[Text Input] - 使用者輸入變數
[Pass] - 傳遞資料不處理

迴圈處理

1
2
[Loop] - 迭代處理列表
[Aggregator] - 合併多個結果

記憶功能

1
2
[ConversationBufferMemory] - 對話歷史
[ConversationSummaryMemory] - 摘要記憶

範本庫

內建範本

  • Basic RAG - 文件問答
  • Chat with PDF - PDF 對話
  • Web Scraper - 網頁擷取
  • Code Assistant - 程式助手

匯入範本

  1. 下載 JSON 範本
  2. 點擊「Import」
  3. 選擇範本檔案

自訂元件

建立元件

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
from langflow.custom import CustomComponent
from langchain.schema import Document

class SecurityScanner(CustomComponent):
    display_name = "Security Scanner"
    description = "Scan for vulnerabilities"

    def build_config(self):
        return {
            "target": {"display_name": "Target URL"},
            "scan_type": {
                "display_name": "Scan Type",
                "options": ["quick", "full"]
            }
        }

    def build(self, target: str, scan_type: str) -> Document:
        # 實作掃描邏輯
        results = scan(target, scan_type)
        return Document(page_content=results)

環境變數

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
environment:
  # OpenAI
  - OPENAI_API_KEY=sk-xxx

  # 資料庫
  - LANGFLOW_DATABASE_URL=postgresql://user:pass@db:5432/langflow

  # 認證
  - LANGFLOW_SUPERUSER=admin
  - LANGFLOW_SUPERUSER_PASSWORD=password

相關連結

延伸閱讀

comments powered by Disqus
Built with Hugo
Theme Stack designed by Jimmy