「[[.NET 開発基盤部会 Wiki>http://dotnetdevelopmentinfrastructure.osscons.jp]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。

-[[戻る>LangFlow]]
--[[LangFlowのファースト・ステップ]]
--[[LangFlowのセカンド・ステップ]]
--LangFlowのサード・ステップ
--[[LangFlowの4thステップ]]

*目次 [#c402f1fc]
#contents

*概要 [#ta239c77]
やっぱ、カスタム・コンポーネントを作成してみたいよね♨

*詳細 [#gf2cc197]

**利用方法 [#s0cd3afd]

***新規作成 [#o3f2bb1e]
-コンポーネントサイドバーの「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」からコンポーネントを選択してキャンバスにドラッグして使用する。

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

***インポート [#e05eb1e1]
-以下のpathに配置して再起動すると、既存のdataカテゴリに追加される。
 ~/.venvのpath/lib/python3.12/site-packages/langflow/components/data

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

**テンプレ解説 [#r7b22d6b]

***メンバプロパティ [#v6e4e265]
 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:コンポーネント内部識別子

***入出力プロパティ [#zeb6cd26]
-入力プロパティ
     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のタイプ~
...

***メソッド [#p33472ab]
-出力1のメソッド~
既定では以下のような実装になっている。
 def build_output(self) -> Data:
     data = Data(value=self.input_value)
     self.status = data
     return data

***カスタマイズ [#g103dedb]
文字反転するように変更

-特に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]をクリックしてチャット セッションを開始、クエリを入力、ボットが応答することを確認。

***稼働確認 [#y8c17d5b]
-上記で単体テストが完了したので、運用テスト準備
--コンポーネントのdisplay_nameをReverse componentにリネーム後
--コンポーネントの「Save」をクリックして修正コードを保存。
--display_nameは、コードからもUIからも編集することが出来る。

-運用テストとして「Basic Prompting」テンプレートを新規作成して、OpenAIノードをReverse componentに置き換える。
--コンポーネントサイドバーの「Saved」からReverse componentコンポーネントを選択してキャンバスにドラッグ。
--ノードをInput Chat、Output Chatに接続し、[Playground]をクリックしてチャット セッションを開始、クエリを入力、ボットが応答することを確認。

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

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

***エージェント [#jf323506]
-ToolCallingAgentComponentを継承する。
-必要な、プロパティやメソッドを実装していく。
***Agent [#jf323506]
ToolCallingAgentComponentを継承したAgentコンポーネントに必要な、プロパティやメソッドを実装していく。

*参考 [#w6449ec2]
-Welcome to Langflow | Langflow Documentation~
https://docs.langflow.org/

--Components

---Create custom Python components~
https://docs.langflow.org/components-custom-components

-

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS