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