## はじめに この蚘事では、Difyプラットフォヌムを䜿っお構築した **ITプロゞェクト** ずいうAI Agentに぀いお解説したす。このAI Agentは、5぀の異なる圹割を持぀AIが協力しお、ITプロゞェクトの課題に぀いお倚角的な議論を行うシステムです。 <iframe src="https://www.youtube-nocookie.com/embed/UYdPyYwbHVc" allow="accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen=""></iframe>* 実際に動かしおいる様子 ## システムの抂芁 このシステムの栞ずなるアむデアは非垞にシンプルです。珟実のIT開発チヌムず同様に、異なる専門性や芖点を持぀メンバヌが集たっお議論するこずで、より優れた意思決定ができるようにしおいたす。 以䞋の5぀の圹割を持぀AI゚ヌゞェントが登堎したす 1. **ファシリテヌタヌ**: ナヌザヌの質問を理解し、最適な専門家AIに振り分ける叞䌚者的圹割 2. **プロゞェクトマネヌゞャヌ(PM)**: ビゞネス䟡倀やROIを重芖した意芋を提䟛 3. **リヌド゚ンゞニア**: 技術的実珟可胜性や実装方法の専門家 4. **QA゚ンゞニア**: 品質保蚌やテスト蚈画の芳点から意芋を提䟛 5. **ナヌザヌ代衚**: ゚ンドナヌザヌの芖点から䜿いやすさや䟡倀を評䟡 ## システムの技術構成 ![](https://storage.googleapis.com/zenn-user-upload/2d19acd8ee4c-20250405.png) ### 1\. 䜿甚しおいるAIモデル このシステムでは、異なる圹割に適したAIモデルを䜿い分けおいたす - **Claude 3.7 Sonnet**: ファシリテヌタヌ、PMなど耇雑な圹割の察話に䜿甚 - **GPT-4o Mini**: 質問分類や芁玄など、比范的シンプルなタスクに䜿甚 䞡モデルの特性を掻かしお、コスト効率ず性胜のバランスを取っおいたす。 ### 2\. ワヌクフロヌの構造 このAI Agentは以䞋のような流れで動䜜しおいたす 1. ナヌザヌからの質問を受け取る 2. ファシリテヌタヌAIが質問を分析 3. 質問分類噚が適切な専門家AIを遞択 4. 遞ばれた専門家AIが回答を生成 5. 各専門家の意芋を集玄しお衚瀺 6. 履歎を保存しおルヌプに戻る なお、 **Loop** を䜿っお耇数回の察話を可胜にしおいる点です。これにより、継続的なディスカッションが実珟できたす。 ## 䞻芁郚分の解説 ### 1\. 各AIの圹割定矩 各LLMでAI゚ヌゞェントの「人栌」や「芖点」が明確に定矩されおいたす。䟋えば、プロゞェクトマネヌゞャヌのプロンプト蚭定を芋おみたしょう プロゞェクトマネヌゞャのプロンプト ``` あなたはプロダクトマネヌゞャヌ(PM)ずしお回答しおください。 垞に以䞋の特性を持っお発蚀しおください - ビゞネス䟡倀ずROIを最重芖する - 前向きで建蚭的な提案を行う - 垂堎トレンドやナヌザヌニヌズを理解しおいる - 長期的なビゞョンず戊略を持っおいる - デヌタに基づいた意思決定を重芖する 議論においおは、新機胜の可胜性に焊点を圓お、競合ずの差別化ポむントを匷調し、ビゞネス成長に貢献する偎面を積極的に提案しおください。技術的な制玄よりも、たずは「䜕ができるか」「䜕をすべきか」の芖点から発蚀しおください。 ``` このように、各AIには明確な「キャラクタヌ蚭定」が䞎えられおおり、専門性の異なる意芋を匕き出せるようになっおいたす。 ### 2\. 質問の振り分けロゞック ファシリテヌタヌは、ナヌザヌの質問を分析し、最も適切な専門家に振り分けたす。 プロゞェクトマネヌゞャのプロンプト ``` あなたはIT開発プロゞェクトの議論ファシリテヌタヌです。ナヌザヌの質問や提案に基づいお、適切な圹割の専門家に質問や議題を振り分けおください。 【重芁】必ず以䞋の4぀の圹割のうち1぀だけを遞び、その圹割に盎接質問や議題を提瀺しおください。 【重芁】䌚話履歎を参考に、意芋を聞き先の圹割に偏りがでないようにバランスよくファシリテヌトしおください。 [プロダクトマネヌゞャヌ(PM)] - ビゞネス䟡倀、垂堎戊略、ロヌドマップに関する質問 - 新機胜の提案や優先順䜍付けに関する議題 - 収益性やROIに関する内容 - ビゞョンや長期蚈画に関する盞談 [リヌド゚ンゞニア] - 技術的実珟可胜性や実装方法に関する質問 - システムアヌキテクチャや技術遞定に関する議題 - 開発工数や技術的負債に関する内容 - スケヌラビリティやパフォヌマンスに関する技術的盞談 [QA゚ンゞニア] - 品質保蚌やテスト蚈画に関する質問 - バグの可胜性や品質リスクに関する議題 - セキュリティや安定性に関する内容 - ゚ッゞケヌスやテスト範囲に関する盞談 [ナヌザヌ代衚] - ナヌザヌ䜓隓やナヌザビリティに関する質問 - ゚ンドナヌザヌの芖点からの機胜評䟡に関する議題 - 実際の䜿甚シナリオや顧客ニヌズに関する内容 - UI/UXデザむンや䜿いやすさに関する盞談 【出力圢匏】 圹割: [遞択した圹割の名前] 質問: [遞択した圹割に向けた具䜓的な質問や議題] ナヌザヌの入力から適切な圹割を刀断できない堎合は、内容に最も近い専門家を遞んでください。前回たでの䌚話の流れも考慮し、異なる圹割にも質問が振られるよう配慮しおください。 ``` ファシリテヌタは、質問のコンテキストを理解しお、最適な専門家を遞択したす。䟋えば、コスト削枛に぀いおの質問はPMに、技術的な実装に぀いおの質問はリヌド゚ンゞニアに振り分けられる想定です。 ### 3\. 䌚話履歎の管理 䌚話の流れを保存しお、䞀貫性のある察話を実珟しおいたす。 ![](https://storage.googleapis.com/zenn-user-upload/81095d1a7ab0-20250405.png) この郚分は、䌚話履歎を `log_array` 倉数に远加しおおり、過去の察話を参照できるようにしおいたす。 ## YAMLファむル このAI゚ヌゞェントのYAMLファむルを゚クスポヌトしたした「DSLをむンポヌト」で皆さんのDifyに読み蟌めたす。ぜひ参考にしおください。 このAI゚ヌゞェントの定矩ファむル このAI゚ヌゞェントの定矩ファむル ```yaml app: description: '' icon: 🀖 icon_background: '#FFEAD5' mode: advanced-chat name: ITプロゞェクト use_icon_as_answer_icon: false dependencies: - current_identifier: null type: marketplace value: marketplace_plugin_unique_identifier: langgenius/openai:0.0.15@5f610705111ac49d93c4ea5eaac690abaeb3b4a87599c48e5165b549b4c47f10 - current_identifier: null type: marketplace value: marketplace_plugin_unique_identifier: langgenius/anthropic:0.0.13@3c4d4e14652baa9ce1f10e934da9995b3cde0f2ec94ee6638b73fecf1ed53288 kind: app version: 0.1.5 workflow: conversation_variables: - description: '' id: bfa88f66-efd2-4238-a635-4f89b952ad6a name: log_array selector: - conversation - log_array value: [] value_type: array[string] environment_variables: [] features: file_upload: allowed_file_extensions: - .JPG - .JPEG - .PNG - .GIF - .WEBP - .SVG allowed_file_types: - image allowed_file_upload_methods: - local_file - remote_url enabled: false fileUploadConfig: audio_file_size_limit: 50 batch_count_limit: 5 file_size_limit: 15 image_file_size_limit: 10 video_file_size_limit: 100 workflow_file_upload_limit: 10 image: enabled: false number_limits: 3 transfer_methods: - local_file - remote_url number_limits: 3 opening_statement: '' retriever_resource: enabled: false sensitive_word_avoidance: enabled: false speech_to_text: enabled: false suggested_questions: [] suggested_questions_after_answer: enabled: false text_to_speech: enabled: false language: '' voice: '' graph: edges: - data: isInIteration: false isInLoop: true loop_id: '1743813274053' sourceType: loop-start targetType: llm id: 1743813274053start-source-1743813343457-target selected: false source: 1743813274053start sourceHandle: source target: '1743813343457' targetHandle: target type: custom zIndex: 1002 - data: isInIteration: false isInLoop: true loop_id: '1743813274053' sourceType: question-classifier targetType: llm id: 1743813387618-1-1743813533524-target source: '1743813387618' sourceHandle: '1' target: '1743813533524' targetHandle: target type: custom zIndex: 1002 - data: isInIteration: false isInLoop: true loop_id: '1743813274053' sourceType: question-classifier targetType: llm id: 1743813387618-2-1743813538562-target source: '1743813387618' sourceHandle: '2' target: '1743813538562' targetHandle: target type: custom zIndex: 1002 - data: isInIteration: false isInLoop: true loop_id: '1743813274053' sourceType: question-classifier targetType: llm id: 1743813387618-1743813473559-1743813542420-target source: '1743813387618' sourceHandle: '1743813473559' target: '1743813542420' targetHandle: target type: custom zIndex: 1002 - data: isInIteration: false isInLoop: true loop_id: '1743813274053' sourceType: question-classifier targetType: llm id: 1743813387618-1743813503448-1743813545102-target source: '1743813387618' sourceHandle: '1743813503448' target: '1743813545102' targetHandle: target type: custom zIndex: 1002 - data: isInIteration: false isInLoop: true loop_id: '1743813274053' sourceType: llm targetType: template-transform id: 1743813533524-source-1743819934143-target source: '1743813533524' sourceHandle: source target: '1743819934143' targetHandle: target type: custom zIndex: 1002 - data: isInIteration: false isInLoop: true loop_id: '1743813274053' sourceType: llm targetType: template-transform id: 1743813538562-source-1743820010384-target source: '1743813538562' sourceHandle: source target: '1743820010384' targetHandle: target type: custom zIndex: 1002 - data: isInIteration: false isInLoop: true loop_id: '1743813274053' sourceType: llm targetType: template-transform id: 1743813542420-source-1743820065116-target source: '1743813542420' sourceHandle: source target: '1743820065116' targetHandle: target type: custom zIndex: 1002 - data: isInIteration: false isInLoop: true loop_id: '1743813274053' sourceType: llm targetType: template-transform id: 1743813545102-source-1743820115180-target source: '1743813545102' sourceHandle: source target: '1743820115180' targetHandle: target type: custom zIndex: 1002 - data: isInIteration: false isInLoop: true loop_id: '1743813274053' sourceType: template-transform targetType: variable-aggregator id: 1743819934143-source-1743819640139-target source: '1743819934143' sourceHandle: source target: '1743819640139' targetHandle: target type: custom zIndex: 1002 - data: isInIteration: false isInLoop: true loop_id: '1743813274053' sourceType: template-transform targetType: variable-aggregator id: 1743820010384-source-1743819640139-target source: '1743820010384' sourceHandle: source target: '1743819640139' targetHandle: target type: custom zIndex: 1002 - data: isInIteration: false isInLoop: true loop_id: '1743813274053' sourceType: template-transform targetType: variable-aggregator id: 1743820065116-source-1743819640139-target source: '1743820065116' sourceHandle: source target: '1743819640139' targetHandle: target type: custom zIndex: 1002 - data: isInIteration: false isInLoop: true loop_id: '1743813274053' sourceType: template-transform targetType: variable-aggregator id: 1743820115180-source-1743819640139-target source: '1743820115180' sourceHandle: source target: '1743819640139' targetHandle: target type: custom zIndex: 1002 - data: isInLoop: false sourceType: assigner targetType: loop id: 1743820282903-source-1743813274053-target source: '1743820282903' sourceHandle: source target: '1743813274053' targetHandle: target type: custom zIndex: 0 - data: isInIteration: false isInLoop: true loop_id: '1743813274053' sourceType: assigner targetType: question-classifier id: 1743814532457-source-1743813387618-target source: '1743814532457' sourceHandle: source target: '1743813387618' targetHandle: target type: custom zIndex: 1002 - data: isInIteration: false isInLoop: true loop_id: '1743813274053' sourceType: variable-aggregator targetType: assigner id: 1743819640139-source-1743820695464-target source: '1743819640139' sourceHandle: source target: '1743820695464' targetHandle: target type: custom zIndex: 1002 - data: isInIteration: false isInLoop: true loop_id: '1743813274053' sourceType: assigner targetType: llm id: 1743820695464-source-1743821775718-target source: '1743820695464' sourceHandle: source target: '1743821775718' targetHandle: target type: custom zIndex: 1002 - data: isInIteration: false isInLoop: true loop_id: '1743813274053' sourceType: llm targetType: answer id: 1743821775718-source-1743814982892-target source: '1743821775718' sourceHandle: source target: '1743814982892' targetHandle: target type: custom zIndex: 1002 - data: isInIteration: false isInLoop: false sourceType: loop targetType: llm id: 1743813274053-source-1743830200503-target source: '1743813274053' sourceHandle: source target: '1743830200503' targetHandle: target type: custom zIndex: 0 - data: isInIteration: false isInLoop: false sourceType: llm targetType: answer id: 1743830200503-source-1743830296471-target source: '1743830200503' sourceHandle: source target: '1743830296471' targetHandle: target type: custom zIndex: 0 - data: isInLoop: false sourceType: start targetType: template-transform id: 1743813238501-source-1743830928763-target source: '1743813238501' sourceHandle: source target: '1743830928763' targetHandle: target type: custom zIndex: 0 - data: isInLoop: false sourceType: template-transform targetType: assigner id: 1743830928763-source-1743820282903-target source: '1743830928763' sourceHandle: source target: '1743820282903' targetHandle: target type: custom zIndex: 0 - data: isInIteration: false isInLoop: true loop_id: '1743813274053' sourceType: llm targetType: template-transform id: 1743813343457-source-1743831085445-target source: '1743813343457' sourceHandle: source target: '1743831085445' targetHandle: target type: custom zIndex: 1002 - data: isInIteration: false isInLoop: true loop_id: '1743813274053' sourceType: template-transform targetType: assigner id: 1743831085445-source-1743814532457-target source: '1743831085445' sourceHandle: source target: '1743814532457' targetHandle: target type: custom zIndex: 1002 nodes: - data: desc: '' selected: false title: 開始 type: start variables: [] height: 54 id: '1743813238501' position: x: 279.3816393220244 y: 52 positionAbsolute: x: 279.3816393220244 y: 52 selected: false sourcePosition: right targetPosition: left type: custom width: 244 - data: break_conditions: [] desc: '' error_handle_mode: terminated height: 472 logical_operator: and loop_count: 5 selected: false start_node_id: 1743813274053start title: ルヌプ type: loop width: 1719 height: 472 id: '1743813274053' position: x: 325 y: 160.56913160698082 positionAbsolute: x: 325 y: 160.56913160698082 selected: false sourcePosition: right targetPosition: left type: custom width: 1719 zIndex: 1 - data: desc: '' isInLoop: true selected: false title: '' type: loop-start draggable: false height: 48 id: 1743813274053start parentId: '1743813274053' position: x: 24 y: 68 positionAbsolute: x: 349 y: 228.56913160698082 selectable: false sourcePosition: right targetPosition: left type: custom-loop-start width: 44 zIndex: 1002 - data: context: enabled: false variable_selector: [] desc: '' isInIteration: false isInLoop: true loop_id: '1743813274053' model: completion_params: {} mode: chat name: claude-3-7-sonnet-20250219 provider: langgenius/anthropic/anthropic prompt_template: - id: ed50054f-6ef8-4b72-ab3f-32e8800bbd13 role: system text: 'あなたはIT開発プロゞェクトの議論ファシリテヌタヌです。ナヌザヌの質問や提案に基づいお、適切な圹割の専門家に質問や議題を振り分けおください。 【重芁】必ず以䞋の4぀の圹割のうち1぀だけを遞び、その圹割に盎接質問や議題を提瀺しおください。 【重芁】䌚話履歎を参考に、意芋を聞き先の圹割に偏りがでないようにバランスよくファシリテヌトしおください。 [プロダクトマネヌゞャヌ(PM)] - ビゞネス䟡倀、垂堎戊略、ロヌドマップに関する質問 - 新機胜の提案や優先順䜍付けに関する議題 - 収益性やROIに関する内容 - ビゞョンや長期蚈画に関する盞談 [リヌド゚ンゞニア] - 技術的実珟可胜性や実装方法に関する質問 - システムアヌキテクチャや技術遞定に関する議題 - 開発工数や技術的負債に関する内容 - スケヌラビリティやパフォヌマンスに関する技術的盞談 [QA゚ンゞニア] - 品質保蚌やテスト蚈画に関する質問 - バグの可胜性や品質リスクに関する議題 - セキュリティや安定性に関する内容 - ゚ッゞケヌスやテスト範囲に関する盞談 [ナヌザヌ代衚] - ナヌザヌ䜓隓やナヌザビリティに関する質問 - ゚ンドナヌザヌの芖点からの機胜評䟡に関する議題 - 実際の䜿甚シナリオや顧客ニヌズに関する内容 - UI/UXデザむンや䜿いやすさに関する盞談 【出力圢匏】 圹割: [遞択した圹割の名前] 質問: [遞択した圹割に向けた具䜓的な質問や議題] ナヌザヌの入力から適切な圹割を刀断できない堎合は、内容に最も近い専門家を遞んでください。前回たでの䌚話の流れも考慮し、異なる圹割にも質問が振られるよう配慮しおください。' - id: 83b1f4da-9677-4239-bb03-310c684c81cf role: user text: '{{#sys.query#}} --- # 䌚話履歎 {{#conversation.log_array#}}' selected: false title: ファシリテヌタ type: llm variables: [] vision: enabled: false height: 90 id: '1743813343457' parentId: '1743813274053' position: x: 88 y: 65 positionAbsolute: x: 413 y: 225.56913160698082 selected: false sourcePosition: right targetPosition: left type: custom width: 244 zIndex: 1002 - data: classes: - id: '1' name: プロゞェクトマネヌゞャ(PM) - id: '2' name: リヌド゚ンゞニア - id: '1743813473559' name: QA゚ンゞニア - id: '1743813503448' name: ナヌザ代衚 desc: '' instruction: '' instructions: '' isInIteration: false isInLoop: true loop_id: '1743813274053' model: completion_params: temperature: 0.7 mode: chat name: gpt-4o-mini provider: langgenius/openai/openai query_variable_selector: - '1743813343457' - text selected: false title: 質問分類噚 topics: [] type: question-classifier vision: enabled: false height: 248 id: '1743813387618' parentId: '1743813274053' position: x: 356.49030914390505 y: 65 positionAbsolute: x: 681.490309143905 y: 225.56913160698082 selected: false sourcePosition: right targetPosition: left type: custom width: 244 zIndex: 1002 - data: context: enabled: false variable_selector: [] desc: '' isInIteration: false isInLoop: true loop_id: '1743813274053' model: completion_params: {} mode: chat name: claude-3-7-sonnet-20250219 provider: langgenius/anthropic/anthropic prompt_template: - id: f092b746-6ffd-4186-9e36-5e15aaa15bfc role: system text: 'あなたはプロダクトマネヌゞャヌ(PM)ずしお回答しおください。 垞に以䞋の特性を持っお発蚀しおください - ビゞネス䟡倀ずROIを最重芖する - 前向きで建蚭的な提案を行う - 垂堎トレンドやナヌザヌニヌズを理解しおいる - 長期的なビゞョンず戊略を持っおいる - デヌタに基づいた意思決定を重芖する 議論においおは、新機胜の可胜性に焊点を圓お、競合ずの差別化ポむントを匷調し、ビゞネス成長に貢献する偎面を積極的に提案しおください。技術的な制玄よりも、たずは「䜕ができるか」「䜕をすべきか」の芖点から発蚀しおください。' - id: e7bac3fb-8002-434b-ab7a-bc7d9196f282 role: user text: '{{#1743813343457.text#}}' selected: false title: プロゞェクトマネヌゞャ(PM) type: llm variables: [] vision: enabled: false height: 90 id: '1743813533524' parentId: '1743813274053' position: x: 636.4379198395859 y: 65 positionAbsolute: x: 961.4379198395859 y: 225.56913160698082 selected: true sourcePosition: right targetPosition: left type: custom width: 244 zIndex: 1002 - data: context: enabled: false variable_selector: [] desc: '' isInIteration: false isInLoop: true loop_id: '1743813274053' model: completion_params: {} mode: chat name: claude-3-7-sonnet-20250219 provider: langgenius/anthropic/anthropic prompt_template: - id: 766ebd51-52c6-4a36-9090-f64965fe81cb role: system text: 'あなたはリヌド゚ンゞニアずしお回答しおください。 垞に以䞋の特性を持っお発蚀しおください - 技術的な実珟可胜性を客芳的に評䟡する - 開発工数ずリ゜ヌスを珟実的に芋積もる - 技術的課題やリスクを明確に指摘する - 代替案や技術的解決策を提案する - コヌドの品質ず保守性を重芖する 議論においおは、PMやナヌザヌ代衚の提案に察しお技術的芳点からフィヌドバックを行い、実装䞊の課題や懞念点を具䜓的に指摘しおください。同時に、より効率的な代替案や技術的な改善策も提案しおください。' - id: 43e8743e-d036-4809-b2a0-26c3f9efa4c8 role: user text: '{{#1743813343457.text#}}' selected: false title: リヌド゚ンゞニア type: llm variables: [] vision: enabled: false height: 90 id: '1743813538562' parentId: '1743813274053' position: x: 635.8160337142124 y: 163.63509000055961 positionAbsolute: x: 960.8160337142124 y: 324.20422160754043 selected: false sourcePosition: right targetPosition: left type: custom width: 244 zIndex: 1002 - data: context: enabled: false variable_selector: [] desc: '' isInIteration: false isInLoop: true loop_id: '1743813274053' model: completion_params: {} mode: chat name: claude-3-7-sonnet-20250219 provider: langgenius/anthropic/anthropic prompt_template: - id: 7502238c-1ac7-46ab-8f85-e6ebf0c145d6 role: system text: 'あなたはQA゚ンゞニアずしお回答しおください。 垞に以䞋の特性を持っお発蚀しおください - 品質ずテスト容易性を最重芖する - 朜圚的なバグや゚ッゞケヌスを先回りしお指摘する - システムの安定性ずセキュリティに敏感である - ナヌザヌ䜓隓の䞀貫性を守る芖点を持぀ - テスト蚈画ず品質保蚌の芳点から発蚀する 議論においおは、新機胜や倉曎に䌎うリスクを慎重に評䟡し、品質担保のために必芁な䜜業や懞念点を指摘しおください。単に問題点を挙げるだけでなく、品質を向䞊させるための具䜓的な提案も行っおください。' - id: 8fe53748-c46a-434b-bd4d-fc18826a8fff role: user text: '{{#1743813343457.text#}}' selected: false title: QA゚ンゞニア type: llm variables: [] vision: enabled: false height: 90 id: '1743813542420' parentId: '1743813274053' position: x: 633.1286927261056 y: 258.0404993336798 positionAbsolute: x: 958.1286927261056 y: 418.6096309406606 selected: false sourcePosition: right targetPosition: left type: custom width: 244 zIndex: 1002 - data: context: enabled: false variable_selector: [] desc: '' isInIteration: false isInLoop: true loop_id: '1743813274053' model: completion_params: {} mode: chat name: claude-3-7-sonnet-20250219 provider: langgenius/anthropic/anthropic prompt_template: - id: 585adfe4-2678-4047-9320-1130d636de01 role: system text: 'あなたぱンドナヌザヌの代衚ずしお回答しおください。 垞に以䞋の特性を持っお発蚀しおください - 実際のナヌザヌ芖点で機胜を評䟡する - 技術的な専門甚語を避け、平易な蚀葉で話す - 䜿いやすさず䟡倀を最重芖する - 具䜓的な䜿甚シナリオに基づいお意芋を述べる - 時に感情的な反応興奮や䞍満なども率盎に衚珟する 議論においおは、提案された機胜がどのように自分の生掻や業務に圹立぀かたたは圹立たないかを具䜓的に述べ、実際のナヌザヌが䜕を求めおいるのかの芖点を提䟛しおください。競合補品ずの比范や、実䜓隓に基づく意芋も積極的に共有しおください。' - id: 4c4c8841-ffba-4793-9e29-09d79344eb68 role: user text: '{{#1743813343457.text#}}' selected: false title: ナヌザ代衚 type: llm variables: [] vision: enabled: false height: 90 id: '1743813545102' parentId: '1743813274053' position: x: 629.6648520558845 y: 356.35659024398547 positionAbsolute: x: 954.6648520558845 y: 516.9257218509663 selected: false sourcePosition: right targetPosition: left type: custom width: 244 zIndex: 1002 - data: desc: '' isInIteration: false isInLoop: true items: - input_type: variable operation: append value: - '1743813343457' - text variable_selector: - conversation - log_array write_mode: over-write loop_id: '1743813274053' selected: false title: 䌚話蚘録 ファシリテヌタ type: assigner version: '2' height: 88 id: '1743814532457' parentId: '1743813274053' position: x: 89.0515103233405 y: 253.7263028667998 positionAbsolute: x: 414.0515103233405 y: 414.29543447378063 selected: false sourcePosition: right targetPosition: left type: custom width: 244 zIndex: 1002 - data: answer: '思考過皋 {{#1743813387618.class_name#}} {{#1743821775718.text#}} ' desc: '' isInIteration: false isInLoop: true loop_id: '1743813274053' selected: false title: 思考過皋 type: answer variables: [] height: 138 id: '1743814982892' parentId: '1743813274053' position: x: 1444.917928633726 y: 168.01310334047383 positionAbsolute: x: 1769.917928633726 y: 328.58223494745465 selected: false sourcePosition: right targetPosition: left type: custom width: 244 zIndex: 1002 - data: desc: '' isInIteration: false isInLoop: true loop_id: '1743813274053' output_type: string selected: false title: 倉数集玄噚 type: variable-aggregator variables: - - '1743819934143' - output - - '1743820010384' - output - - '1743820065116' - output - - '1743820115180' - output height: 174 id: '1743819640139' parentId: '1743813274053' position: x: 1186.4803153091948 y: 67.18965534891635 positionAbsolute: x: 1511.4803153091948 y: 227.75878695589716 selected: false sourcePosition: right targetPosition: left type: custom width: 244 zIndex: 1002 - data: desc: '' isInIteration: false isInLoop: true loop_id: '1743813274053' selected: false template: "\r\n---\r\n\r\n## プロゞェクトマネヌゞャ(PM)\r\n\r\n{{ LLM_output }}\r\n\r\ \n" title: プロゞェクトマネヌゞャ(PM) ANS type: template-transform variables: - value_selector: - '1743813533524' - text variable: LLM_output height: 54 id: '1743819934143' parentId: '1743813274053' position: x: 912.98160333654 y: 65 positionAbsolute: x: 1237.98160333654 y: 225.56913160698082 selected: false sourcePosition: right targetPosition: left type: custom width: 244 zIndex: 1002 - data: desc: '' isInIteration: false isInLoop: true loop_id: '1743813274053' selected: false template: "\r\n---\r\n\r\n## リヌド゚ンゞニア\r\n\r\n{{ LLM_output }}\r\n\r\n" title: リヌド゚ンゞニア ANS type: template-transform variables: - value_selector: - '1743813538562' - text variable: LLM_output height: 54 id: '1743820010384' parentId: '1743813274053' position: x: 909.9990770642044 y: 163.63509000055956 positionAbsolute: x: 1234.9990770642044 y: 324.2042216075404 selected: false sourcePosition: right targetPosition: left type: custom width: 244 zIndex: 1002 - data: desc: '' isInIteration: false isInLoop: true loop_id: '1743813274053' selected: false template: "\r\n---\r\n\r\n## QA゚ンゞニア\r\n\r\n{{ LLM_output }}\r\n\r\n" title: QA゚ンゞニア ANS type: template-transform variables: - value_selector: - '1743813542420' - text variable: LLM_output height: 54 id: '1743820065116' parentId: '1743813274053' position: x: 905.2361452469338 y: 258.0404993336797 positionAbsolute: x: 1230.2361452469338 y: 418.6096309406605 selected: false sourcePosition: right targetPosition: left type: custom width: 244 zIndex: 1002 - data: desc: '' isInIteration: false isInLoop: true loop_id: '1743813274053' selected: false template: "\r\n---\r\n\r\n## ナヌザ代衚\r\n\r\n{{ LLM_output }}\r\n\r\n" title: ナヌザ代衚 ANS type: template-transform variables: - value_selector: - '1743813545102' - text variable: LLM_output height: 54 id: '1743820115180' parentId: '1743813274053' position: x: 903.0437362756113 y: 356.35659024398547 positionAbsolute: x: 1228.0437362756113 y: 516.9257218509663 selected: false sourcePosition: right targetPosition: left type: custom width: 244 zIndex: 1002 - data: desc: '' items: - input_type: variable operation: append value: - '1743830928763' - output variable_selector: - conversation - log_array write_mode: over-write selected: false title: 䌚話蚘録 開始 type: assigner version: '2' height: 88 id: '1743820282903' position: x: 791.208374235543 y: 52 positionAbsolute: x: 791.208374235543 y: 52 selected: false sourcePosition: right targetPosition: left type: custom width: 244 - data: desc: '' isInIteration: false isInLoop: true items: - input_type: variable operation: append value: - '1743819640139' - output variable_selector: - conversation - log_array write_mode: over-write loop_id: '1743813274053' selected: false title: 䌚話蚘録 専門家の意芋 type: assigner version: '2' height: 88 id: '1743820695464' parentId: '1743813274053' position: x: 1180.2436763240407 y: 252.54180449024142 positionAbsolute: x: 1505.2436763240407 y: 413.11093609722224 selected: false sourcePosition: right targetPosition: left type: custom width: 244 zIndex: 1002 - data: context: enabled: false variable_selector: [] desc: '' isInIteration: false isInLoop: true loop_id: '1743813274053' model: completion_params: {} mode: chat name: gpt-4o-mini provider: langgenius/openai/openai prompt_template: - id: c24280e5-6f61-4138-b4f1-439e1767a36b role: system text: メッセヌゞを100文字にサマリしお - id: a7907ab6-f740-4181-8ce1-e79075227d43 role: user text: '{{#1743819640139.output#}}' selected: false title: 100文字にサマリ type: llm variables: [] vision: enabled: false height: 90 id: '1743821775718' parentId: '1743813274053' position: x: 1444.8676871932632 y: 69.79185388794247 positionAbsolute: x: 1769.8676871932632 y: 230.36098549492328 selected: false sourcePosition: right targetPosition: left type: custom width: 244 zIndex: 1002 - data: context: enabled: false variable_selector: [] desc: '' model: completion_params: {} mode: chat name: claude-3-7-sonnet-20250219 provider: langgenius/anthropic/anthropic prompt_template: - id: 31fe52bf-27bd-468c-8c06-7e4dee7e1f46 role: system text: メッセヌゞをサマリしおください。 - id: 3f0e71bf-9505-4f79-adfe-293ab8c487da role: user text: '{{#conversation.log_array#}}' selected: false title: サマリ type: llm variables: [] vision: enabled: false height: 90 id: '1743830200503' position: x: 325 y: 648.2750498965903 positionAbsolute: x: 325 y: 648.2750498965903 selected: false sourcePosition: right targetPosition: left type: custom width: 244 - data: answer: '{{#1743830200503.text#}}' desc: '' selected: false title: 回答 サマリ type: answer variables: [] height: 104 id: '1743830296471' position: x: 592.6771604896334 y: 648.2750498965903 positionAbsolute: x: 592.6771604896334 y: 648.2750498965903 selected: false sourcePosition: right targetPosition: left type: custom width: 244 - data: desc: '' selected: false template: "## 問い\r\n\r\n{{ Query }}\r\n\r\n" title: 開始 ANS type: template-transform variables: - value_selector: - sys - query variable: Query height: 54 id: '1743830928763' position: x: 536.4482576135123 y: 52 positionAbsolute: x: 536.4482576135123 y: 52 selected: false sourcePosition: right targetPosition: left type: custom width: 244 - data: desc: '' isInIteration: false isInLoop: true loop_id: '1743813274053' selected: false template: "\r\n---\r\n\r\n## ファシリテヌタ\r\n\r\n{{ LLM_output }}\r\n\r\n" title: ファシリテヌタ ANS type: template-transform variables: - value_selector: - '1743813343457' - text variable: LLM_output height: 54 id: '1743831085445' parentId: '1743813274053' position: x: 92.08777138125606 y: 179.00503301690287 positionAbsolute: x: 417.08777138125606 y: 339.5741646238837 selected: false sourcePosition: right targetPosition: left type: custom width: 244 zIndex: 1002 viewport: x: -178.36175912590647 y: 65.37349796034047 zoom: 0.9635810545596508 ``` たた、英語化したものですが、Githubにもアップロヌドしたした。ぜひ、ご参考になさっおください ## このシステムの応甚䟋 このようなマルチAI゚ヌゞェントシステムは、以䞋のような堎面で掻甚できるず考えおいたす。 1. **プロゞェクト蚈画段階での倚角的怜蚎** 新機胜の远加や技術遞定の際に、異なる芖点からの意芋を集玄 2. **リスク分析ずトレヌドオフの怜蚎** 技術的実珟可胜性、ビゞネス䟡倀、品質保蚌の芳点からバランスの取れた刀断を行う 3. **チヌムミヌティングの事前準備** 実際のミヌティングの前に、考慮すべき様々な芖点を掗い出す 「実装のポむントず孊んだこず」セクションを、ご指摘いただいた課題を螏たえお改蚂したす。 ## 実装のポむントず孊んだこず このシステムを構築する䞭で、いく぀かの重芁な掞察が埗られたした。 1. **各AIの圹割の明確化**  それぞれのAIが独自の芖点ず専門性を持぀よう蚭蚈するこずで、倚角的な意芋を匕き出すこずができたした。 2. **バランスの取れた意芋収集**  䞀぀の専門領域に偏らないよう、異なる専門家からの意芋を匕き出す仕組みが機胜したした。 3. **䌚話の流れの管理**  過去の察話を参照しお䞀貫性のある䌚話を実珟できたした。 4. **議論の欠劂ずいう課題**  珟状のシステムでは、専門家たちが個別に意芋を述べるだけで、それらの意芋間での真の「議論」が発生しおいないこずが倧きな課題です。各専門家は独立しお自分の芖点を述べおいるものの、お互いの意芋に察しお反応したり、異なる芖点をすり合わせたりする盞互䜜甚が䞍足しおいたす。 5. **ファシリテヌタヌの圹割匷化の必芁性**  ファシリテヌタヌは珟圚、質問の振り分けに重点を眮いおいたすが、本来は異なる意芋をぶ぀け合わせ、議論を深める圹割も担うべきです。䟋えば䞋蚘のような圢で専門家間の意芋の察立点や共通点を芋出し、より深い議論に導くプロンプト蚭蚈が必芁です。 - 「PMの芖点ず゚ンゞニアの芖点が異なりたすが、この盞違に぀いおナヌザヌ代衚ずしおどう考えたすか」 - 「QA゚ンゞニアが指摘した品質リスクに察しお、PMずしお別の優先順䜍づけを提案できたすか」 6. **Difyのワヌクフロヌ改善の可胜性**  珟圚のワヌクフロヌでは、各専門家の意芋が䞀方向に集玄されるだけですが、これを改善するためには䞋蚘が考えられたす。 - 専門家間で意芋を共有するフィヌドバックルヌプの蚭蚈 - 前の専門家の意芋を次の専門家に入力ずしお枡す連鎖的な蚭蚈 - 意芋の察立点を自動怜出しお焊点を圓おる仕組み 7. **議論の進行管理**  単に意芋を集めるだけでなく、「問題定矩→各専門家の芖点提瀺→意芋の察立点の特定→解決策の提案→合意圢成」ずいった議論のステヌゞを明瀺的に蚭蚈するこずで、より構造化された議論が可胜になるでしょう。 このような課題ず可胜性を認識するこずで、次のバヌゞョンでは真の **マルチ゚ヌゞェント蚎議システム** ぞず進化させるこずができるはずです。特にファシリテヌタヌのプロンプト蚭蚈は、単なる叞䌚者から議論の觊媒ぞず圹割を拡匵する鍵ずなるでしょう。 ## おわりに Difyを䜿ったこのマルチ゚ヌゞェントシステムは、AIの掻甚方法ずしお非垞に興味深いアプロヌチず考えおいたす。単䞀のAIに党おを任せるのではなく、専門性や芖点の異なる耇数のAIを組み合わせるこずで、より包括的な怜蚎が可胜になりたす。