gl287
1
コミュニティの皆さん、以下の問題についてご協力いただけると幸いです。私はDifyのオンライン版を使用しています。
Difyのループノードと変数アサイナーで重大な問題が発生しています。変数(例:research_history)は各イテレーション中に正しく更新され、追加されているにもかかわらず、ループが終了するとこれらの変更が失われます。内部ログではデータが正常に処理されたことが確認されているにもかかわらず、ループノードの最終出力は空の状態を返します。
試した回避策(いずれも機能しませんでした)
-
直接変数マッピング: ダウンストリームノードを{{Loop.research_history}}に直接マッピングしました。結果:初期の空の配列[]を受け取りました。
-
内部テンプレートノード: ループ内にテンプレートノードを最終ステップとして追加し、変数を「出力」しようとしました。結果:テンプレートノードの出力は、ループのスコープ外からはアクセスも表示もできませんでした。
-
変数と定数の初期化: ループ変数を「Variable」(Invalid valueエラーが発生)と「Constant」(永続的な空の配列になった)の間で切り替えました。
-
グローバルアンカーのアイデア: ループ前のノードで変数を初期化し、ループ内で更新しようとしました。結果:ループ内の変数アサイナーは、ループ自身のヘッダー内で定義された変数のみをターゲットに制限されていました。
-
名前変更/リセット: 変数の名前を変更し、潜在的なキャッシュの問題を解消するためにワークフローを再公開しました。結果:動作に変化はありませんでした。
@gl287 こんにちは。問題の明確化のため、DSLファイルをこちらで共有していただけますでしょうか?
gl287
3
こんにちは、この形式はアップロードとしてここでは受け付けられません。このファイルホスティングリンクをご利用ください。
よろしくお願いいたします!
gl287
4
投稿が承認されましたので、@kurokobo さん、ぜひご意見をお聞かせください。ありがとうございます!
@gl287
DSLファイルをご提供いただきありがとうございます。
私のセルフホスト型Dify 1.12.1にインポートし、以下の2点を修正したところ、正常に動作しているようです。
ループ(Schleife)ノード
Loop Termination Conditionのis_saturatedオプションについて、一度Falseに設定してフローを保存し、その後Trueに戻して再度フローを保存しました。
- 内部的には、あなたのDSLで、値がブール値ではなく文字列として保存されていました(911行目)。このため、ループが実質的にスキップされていました。True/Falseを切り替えて保存することで、無効な内部値を上書きすることができました。
ループ(Schleife)ノードに続くコード(検索結果フォーマット)ノード
Output Variablesでsearch_resultsが指定されていましたが、コードブロックのreturnがfinal_research_contextを返していました。これらは一致する必要があるため、コード内のfinal_research_contextの3つのインスタンスすべてをsearch_resultsに置き換えました。
結局のところ、「ループノードが常に空のリストを返す」というあなたが言及された問題は再現できませんでした。
しかし、簡単な検索でいくつかの同様の報告が見つかりました。これは既知のバグである可能性があり、もしそうであれば、Difyをアップグレードすることで解決するかもしれません。