Skip to content

DNET_LangFlowThirdStep

nishi_74322014 edited this page Sep 11, 2026 · 1 revision

LangFlowのサード・ステップ

概要

やっぱ、カスタム・コンポーネントを作成してみたいよね♨

詳細

利用方法

新規作成

  • コンポーネントサイドバーの「New Custom Component」の「+」ボタンを押下。

  • キャンバス上に新しいコンポーネントが生成される。

  • コンポーネントの「Code」をクリックして以下コードを修正

    # from langflow.field_typing import Data
    from langflow.custom import Component
    from langflow.io import MessageTextInput, Output
    from langflow.schema import Data
    
    class CustomComponent(Component):
        display_name = "Custom Component"
        description = "Use as a template to create your own component."
        documentation: str = "https://docs.langflow.org/components-custom-components"
        icon = "code"
        name = "CustomComponent"
    
        inputs = [
            MessageTextInput(
                name="input_value",
                display_name="Input Value",
                info="This is a custom component Input",
                value="Hello, World!",
                tool_mode=True,
            ),
        ]
    
        outputs = [
            Output(display_name="Output", name="output", method="build_output"),
        ]
    
        def build_output(self) -> Data:
            data = Data(value=self.input_value)
            self.status = data
            return data
    
  • コンポーネントの「Save」をクリックして修正コードを保存

  • コンポーネントサイドバーの「Saved」からコンポーネントを選択してキャンバスにドラッグして使用する。

エクスポート

  • エクスポート機能はないので、手動で*.pyファイルに保存する。
  • 現時点でJSONダウンロード機能があるのでアップロード機能(インポート相当)が実装されるかも?

インポート

  • 以下のpathに配置して再起動すると、既存のdataカテゴリに追加される。

    ~/.venvのpath/lib/python3.12/site-packages/langflow/components/data
    
  • カテゴリを新設する場合は、格納するフォルダを新設すれば良い!

    ~/.venvのpath/lib/python3.12/site-packages/langflow/components/mycomponent
    

テンプレ解説

メンバプロパティ

display_name = "Custom Component"
description = "Use as a template to create your own component."
documentation: str = "https://docs.langflow.org/components-custom-components"
icon = "code"
name = "CustomComponent"
  • display_name:UIに表示される名前
  • description:ツールチップで表示される説明文
  • documentation:ドキュメントへのリンク
  • icon:アイコン識別子(ここでは "code")
  • name:コンポーネント内部識別子

入出力プロパティ

  • 入力プロパティ

        inputs = [
            MessageTextInput(
                name="input_value",
                display_name="Input Value",
                info="This is a custom component Input",
                value="Hello, World!",
                tool_mode=True,
            ),
        ]
    
    • 入力1のタイプ
      ココでは、MessageTextInput:ユーザー入力テキストフィールド

      • name:プログラム内部で参照する変数名
      • display_name:UIに表示されるラベル
      • info:ユーザー向け説明
      • value:デフォルト値
      • tool_mode=True:ツールモード利用可否
    • 入力2のタイプ
      ...

  • 出力プロパティ

        outputs = [
            Output(display_name="Output", name="output", method="build_output"),
        ]
    
    • 出力1のタイプ
      ココでは、Output:Output

      • name:プログラム内部で参照する変数名
      • display_name:UIに表示されるラベル
      • method:関数名
    • 出力2のタイプ
      ...

メソッド

  • 出力1のメソッド
    既定では以下のような実装になっている。

    def build_output(self) -> Data:
        data = Data(value=self.input_value)
        self.status = data
        return data
    

カスタマイズ

文字反転するように変更

  • 特にOutput Chatに出力したいので、Output周りを変更する必要がある。

    • name系を変更

    • 型をDataからMessageに変更

      outputs = [
          Output(display_name="Message", name="message", method="build_output"),
      ]
      
      def build_output(self) -> Message:
          reversed_text = self.input_value[::-1]
          message = Message(text=reversed_text)
          self.status = message
          return message
      
  • 上記のノードを「Basic Prompting」のInput Chat、Output Chatに接続、

  • [Playground]をクリックしてチャット セッションを開始、クエリを入力、ボットが応答することを確認。

稼働確認

  • 上記で単体テストが完了したので、運用テスト準備

    • コンポーネントのdisplay_nameをReverse componentにリネーム後
    • コンポーネントの「Save」をクリックして修正コードを保存。
    • display_nameは、コードからもUIからも編集することが出来る。
  • 運用テストとして「Basic Prompting」テンプレートを新規作成して、OpenAIノードをReverse componentに置き換える。

    • コンポーネントサイドバーの「Saved」からReverse componentコンポーネントを選択してキャンバスにドラッグ。
    • ノードをInput Chat、Output Chatに接続し、[Playground]をクリックしてチャット セッションを開始、クエリを入力、ボットが応答することを確認。

様々なコンポーネント

  • 基本的に、カスタマイズ対象のベース・コンポーネントを改修していけば良い。
  • 該当する機能を提供するクラスを継承し、必要なプロパティやメソッドを実装していく。

RAG(VDB)

LCVectorStoreComponentを継承したRAG(VDB)コンポーネントに必要な、プロパティやメソッドを実装していく。

Agent

ToolCallingAgentComponentを継承したAgentコンポーネントに必要な、プロパティやメソッドを実装していく。

参考

移行メモ

  • 「戻る」の並びにある自ページは、元 Wiki では自動リンクを避けるために HTML 実体参照(LangFlow…)で書かれていたが、 その旨を補ってプレーン・テキストとした。
  • PukiWiki のページ内アンカ(#xxxxxxxx)は GitHub Wiki では再現できないため、 同一ページ内のアンカは見出しから生成されるアンカに張り替えた。
  • 元 Wiki の行頭空白によるプレフォーマット・ブロックは、 フェンス付きコードブロックにした。

Tags: 移行, LangFlow, カスタム・コンポーネント, テンプレート, RAG, Agent, Python

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki

(未着手)

開発基盤部会 Wiki

移行管理: DONETODO

Clone this wiki locally