BluePeriod Docs
System

内製AIエージェント 実装履歴

内製AIエージェントのPhase別実装履歴と技術的学び

12b. 内製AIエージェント 実装履歴

このドキュメントは、12_ai_agent_architecture で説明する内製AIエージェントの実装履歴(Phase 1〜8)を記録しています。アーキテクチャの現在の姿については本体ドキュメントを参照してください。


Phase 1: Assistant Agent (Chat) - 完了

  • LangGraph.jsの導入
  • ProxyChatModelの実装
  • Web検索ツールの実装(Tavily連携)
  • プロジェクトデータ参照ツールの実装
  • エージェントモードのUI統合
  • 思考プロセスの可視化
  • Session Artifactsの実装 (2026-01-27)
    • sessionArtifacts テーブルの追加(Dexie Version 20)
    • artifactWrapper.ts による自動保存
    • Context Injectionロジックの実装
    • UIコンポーネント(ArtifactCard、ArtifactsList)
    • ツールの保存制御(shouldPersist オプション)
  • メモリツールの実装 (2026-01-27)
    • list_memory_dates: 記憶が存在する日付の一覧取得
    • read_memories_by_date: 特定日付範囲の記憶取得
    • Multi-hop Retrieval の実装
  • Memory Nodesの実装 (2026-01-27)
    • memoryJudgeNode: 記憶判定ロジック
    • memoryRefinerNode: 記憶の要約・タグ付け
  • Router Nodeの実装 (2026-01-27)
    • routerNode.ts: 雑談/調査の分類
    • simpleChatNode.ts: ツールなしのシンプルチャット
  • SubModel/SubTaskModel (2026-01-27)
    • Router、Search Optimizer、Memory処理に軽量モデルを使用
    • useSubModelAtomsubLlmProviderAtomsubModelAtom による制御

Phase 1.5: 機能強化 - 完了

  • Web検索のBYOK(Bring Your Own Key)設定UI
  • Web検索プロンプトの改善 (2026-01-27)
    • SEARCH_AGENT_SYSTEM_PROMPT による回答フォーマットの統一
    • ツール使用時のみ厳格フォーマットを適用
    • SEARCH_OPTIMIZER_PROMPT による検索クエリ最適化
    • searchOptimizerNode の実装
    • report_progress ツールによる進捗報告
    • current_time ツールによる日時認識
  • プロジェクトリーダーの詳細データ取得対応
  • Tool Useの安定化 (2026-01-27)
    • Message Injectionの改善
    • ThoughtLogの重複排除
    • APIキー取得の強化
  • チャット中断機能 (2026-01-27)
    • AbortController による実行中断
    • chatAbortControllerAtom の実装
    • ChatInputに「Stop Generating」ボタンを追加
    • ProxyChatModelにsignal対応
  • LongTerm Memory制御 (2026-01-27)
    • memoryEnabled フラグによる制御
    • simpleChat経由でもメモリ判定へ
  • Artifact Editor Tool (2026-01-30)
    • artifact_editor ツールの実装(→のちに原子的ツール群に統合)
    • Adit編集ライブラリの統合
    • create, edit, overwrite, delete, list アクション
  • Atomic Artifact Tools (2026-03-24)
    • blueperiod_edit_artifact_structured 等の原子的ツール群に統合
    • Deep MCPパターンへの移行
  • Open URL Tool (2026-01-30)
    • open_url ツールの実装
    • /api/tools/open-url APIエンドポイント
    • cheerio + turndown によるHTML→Markdown変換
  • Record Thought Tool (2026-01-30)
    • record_thought ツールの実装
    • 段階的思考プロセスの記録
  • エージェント設定の管理UI

Phase 4: UI/UXのエージェント対応 - 一部完了

  • エージェントチャットモードの追加
  • ツール使用の可視化
  • 記憶の可視化
  • Artifact編集UI (2026-01-30)
    • ArtifactEditModal コンポーネント
    • 新規メモ作成ボタン
    • アクティブArtifact数のバッジ表示
  • 確認インラインUI(未実装)
  • エージェント設定の管理UI(未実装)

Phase 5: Progressive Thinking & Self-Evaluation - 完了

  • Record Thought Tool (2026-01-30)
    • ツールファイルの作成
    • グラフへの統合
  • システムプロンプトの更新 (2026-01-30)
    • 段階的思考ガイドラインの追加
    • 自己評価と修正ガイドラインの追加
    • ACTION OVER WORDS の強化
    • Context Management ガイドラインの追加

Phase 6: Context Management Optimization - 完了 (2026-02-08)

目的: エージェントの長期動作安定性を根本的に改善し、トークン消費を最適化する。

実施内容:

  • 履歴の再帰的増殖の解消

    • ProxyChatModel で送信前に history 引数を削除
    • ツール引数がステートに永続化される問題を解決
    • 効果: トークン消費を約 90% 削減
  • アーティファクトのインデックス化

    • 全文ではなく ID・タイトル・300文字スニペットのみ注入
    • AI には read ツールの使用を明示的に指示
    • 効果: 初期注入トークンを 70% 削減
  • 古い read 結果のパージング

    • ProxyChatModel で履歴を逆順スキャン
    • 同一アーティファクトの最新バージョン以外を自動削減
    • 効果: Read → Edit サイクルでもトークンが線形増大しない
  • ReThink ノードの強化

    • ツール呼び出し成功時に loopCount をリセット
    • デバッグログの大幅強化(折りたたみグループ、カラー表示)
    • プロンプトの命令形強化
  • Adit Hybrid Mode 実装

    • Structured Output と Delimiter Mode の自動フォールバック
    • プロンプトの強制力向上(会話禁止、厳格なフォーマット要求)
    • エラー時の具体的なフィードバック実装

成果:

  • 45+ ステップの長時間タスクでトークン消費を 124,823 → 約 15,000 に削減
  • Adit 失敗率を 87% 改善(軽量モデルでも安定動作)
  • エージェント強制終了をほぼゼロ化

技術的学び:

  • LangGraph のステート内のツール引数は永続化されるため、送信直前でのサニタイジングが必須
  • コンテキスト最適化の原則: 最小注入 + オンデマンド取得 + 履歴のパージング
  • AI の自己修正には具体的な行動指示(「ツールを呼べ」)が必須

詳細: 2026-02-08_0150_report_adit-agent-comprehensive-optimization

Phase 7: Autonomous Loop Control & UI - 完了 (2026-02-10) → Phase 8で刷新

目的: ユーザーへの主要な回答(執筆本文等)と思考ログを UI 上で明確に分離し、AI が自身の回答プロセスを自律的に制御できるようにする。

  • 戦略的ルーター (routerNode.ts) の強化: 執筆タスクにおいて「まず回答し、その後に裏側で作業する」戦略を自律選択可能に。
  • 先行・事後回答ノードの実装: firstResponse, finalResponse ノードを追加し、LangGraph による動的なフロー制御を実現。
  • サンドイッチ・レイアウト UI (ChatMessageCard.tsx): firstResponse → thoughtLog → finalResponse の順序で描画するレイアウトを導入。
  • ノード識別ロジックの導入: latestNodeName に基づき、ストリーミング中の各メッセージを正しい表示レイヤーに自動振り分け。

注意: Phase 7 のサンドイッチ構造は Phase 8 で廃止され、「思考のストリーミング」モデルに移行した。

詳細: 2026-02-10_1630_report_autonomous-agent-loop-control

Phase 8: Graph設計リファクタリング — 思考のストリーミング - 完了 (2026-03-29)

目的: サンドイッチ構造を廃止し、Claude Code的なフロンティアエージェントモデルに近いUXを実現する。

  • グラフ構造の簡素化: firstResponse/finalResponse ノードを削除。ルーティング戦略を3択に簡素化
  • ツールセットの用途別分割: generalTools(軽量 + artifact_tools)と writingToolsFull(フル + editorial tools)に分離
  • 新規ツールの作成: response(メイン回答送信), plan_task(リッチなロードマップ提示)。record_thoughtthought のみに簡略化
  • ストリーミングロジックの全面的再構築 (agent.ts): フェーズ依存ロジックを廃止し、メッセージ構造に基づく完全再構築に移行 → その後アキュムレータ方式に移行(Phase 2.8参照)
  • セマンティック・レンダリング (MarkdownRenderer.tsx): 特殊コードブロック(thought/plan/progress/call)を専用UIコンポーネントに変換
  • ChatMessageCard の大幅簡素化: 約150行の複雑な表示ロジックを単一の MarkdownRenderer に集約
  • 脚注スコープ問題の解決: suffixFootnotes + rehypePrefixIds による脚注ID衝突の完全防止
  • Debounced DB書き込み: 500ms間隔でのIndexedDB書き込みによるI/O負荷軽減

詳細: 2026-03-29_1600_report_agent-graph-refactoring

Phase 2.8: ストリーミングのアキュムレータ移行 - 完了 (2026-04-08)

フルリビルド方式を廃止し、アキュムレータ(追加専用)方式に移行。LangGraphノードのメッセージ改変による内容消失を根本的に解決。

  • アキュムレータ方式への移行 (agent.ts): rebuiltContent = "" のチャンクごとリセットを廃止。processedToolCallKeys / processedMsgRawLength による差分検出で追加のみ行う
  • memoryRefinerのメッセージ置換廃止 (memoryNodes.ts): AIMessageの同ID置換(tool_calls消失の原因)を廃止。memorizedFacts をAgentStateのカスタムフィールドで渡す
  • AgentState拡張 (state.ts): memorizedFacts フィールドを追加
  • finish_taskのUI隠蔽: ツール呼び出し分岐で finish_task をスキップ
  • コンテキスト注入チェック修正 (assistantGraph.ts): isContextInjected の検索文字列を実際の注入内容に一致
  • 過去ツール履歴の可読フォーマット化 (formatters.ts): call / progress ブロックを人間可読なリスト形式に変換
  • エラーハンドリング強化 (agent.ts): finally ブロックで全エージェント関連アトムをリセット
  • セマンティックブロックの4バッククォート化 (agent.ts, formatters.ts): ネストされたコードブロックによるレンダリング崩れを防止。フェンスを ``````` に変更し、CommonMark仕様で内側の3バッククォートを安全に含める

詳細: 2026-04-08_0100_report_agent-streaming-accumulator-migration

Phase 3: Tauri V2 & Editorial Agent (Writing) - 完了 (2026-03-12)

  • Editorial Agentの実装
    • assistantGraph.ts への writingAgent ルートの追加
    • 執筆専用システムプロンプトの統合
    • プロット・原稿操作ツールの実装(Writing Tools)
  • UI/UXの統合
    • AgentStatusIndicator, AgentConfirmationCard の共通化と執筆画面への配置
    • 執筆画面でのエージェントモード有効化

関連ドキュメント:

On this page