問題の背景
私はDifyワークフローに基づくカスタムコード解析ツール(Zig言語向け)を開発しています。より正確なRAG効果を実現するため、システムによる自動セグメンテーションを廃止し、**コードノード(Node.js/Python)**内で手動で「親子ブロック」ロジックを実装しています:
- 親ブロック (Parent Chunk):完全な関数実装または型定義。
- 子ブロック (Child Chunk):親ブロックを細粒度の意味単位(例:コメント、関数シグネチャ)に分割したもの。
主要な課題
私が直面している最大の障害は、コードノードが出力するJSONオブジェクトが、ナレッジベースノードで認識されない、または Output parent_child_structure is missing というエラーが表示されることです。 ツールノードの出力形式を模倣してみましたが、公式ドキュメントに (multimodal)parent_child_structure 型のSchema定義が存在しないため、変数マッピングが頻繁に失敗します。
既に試した対策
- データ構造の再構成:単純な配列を返す試み、および
parent_modeとparent_child_chunksを含むオブジェクトを返す試みを行いました。 - 出力変数の定義:コードノードの「出力変数」で
resultをObject型として手動で宣言しましたが、下流のナレッジベースノードの変数セレクターは依然としてその内部サブプロパティを正しく解析できません。 - 環境の確認:Embeddingモデルが正常に動作していること、および
child_contentsがすべて空でない文字列配列であることを確認しました。
ご質問
- 公式Schema定義:
parent_child_structureという強力な型変数の完全なJSON Schemaはどのようなものですか?parent_modeとparent_child_chunks以外に、隠れたメタデータや特定の$schema識別子の要件はありますか? - 変数認識ロジック:なぜコードノードが出力する
Objectがナレッジベースノードの変数セレクターで頻繁にフィルタリングされ(表示されない)のでしょうか?特定の変数命名規則や「出力変数」の宣言方法を満たす必要がありますか? - 手動ブロッキングのベストプラクティス:Difyのデフォルトのクリーニングロジックをスキップし、事前処理済みの親子ブロックを直接ナレッジベースに保存したい場合、「コードノード → ナレッジベースノード」以外に、より成熟したAPIやプラグインの経路はありますか?
付録:現在の出力形式の例
{
"parent_child_structure": {
"parent_mode": "paragraph",
"parent_child_chunks": [
{
"parent_content": "pub fn main() void { ... }",
"child_contents": ["pub fn main()", "void { ... }"]
}
]
}
}
公式または関連経験のある方からのご助言をお願いいたします。ありがとうございます!