「[[.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 -