🚀

ThinkResume — LLM対話を資産に変え、思考を整理・継続するAIエージェント

に公開

※ 本記事は、第4回 Agentic AI Hackathon with Google Cloud への参加記事です。

https://zenn.dev/hackathons/google-cloud-japan-ai-hackathon-vol4


ピッチ・デモ動画(必須要件③) 3分程度

リポジトリ:
https://github.com/mae616/ZennHackathon04

はじめに

LLMとの対話が日常になった今、ひとつの問題が浮かび上がっています。

💥 対話の中で生まれた重要な断片や仮説を、思考素材として再利用する仕組みがない

本記事では、この問題に対するアプローチとして開発した「ThinkResume」について紹介します。
技術的な構成や設計判断にも触れますので、同じ課題感を持つ方の参考になれば幸いです。

プロジェクト概要(必須要件①)

ThinkResumeは、LLMとの重要な対話を「保存して終わり」にせず、構造化することで、思考を再利用可能な形に変換するAIエージェントです

主な機能は3つあります。

  1. 対話キャプチャ — Chrome拡張でLLM対話をワンクリック保存
  2. 思考再開 — 構造化された対話をもとに、Geminiと再利用可能な形で議論を継続
  3. スペース — 複数の対話をグループ化し、統合コンテキストで横断的に思考を深める

キャッチコピーは「LLMとの対話を、資産に変える」です。


👤 対象ユーザー
LLM(ChatGPT / Claude / Gemini など)との対話を、思考や設計、学習のプロセスとして日常的に利用している個人ユーザー。

解決する課題
LLMとの重要な対話は履歴として「残す」ことはできても、対話の中で生まれた重要な洞察や仮説を、その場で整理・構造化するコストが高いという課題があります。
結果として、洞察や判断が断片化し、後から再利用しづらくなります。

💬 ソリューションの特徴
ThinkResumeは、「人が重要だと判断した対話」だけを起点に、AIが内容を要約・構造化し、再利用しやすい形に変換します。
全対話を自動保存するのではなく、人の判断とAIの処理を役割分担することで、対話を“資産”として再利用可能な形に変換する点が特徴です。

問題の整理: 対話は「残る」が「整理されない」

まず、現状を整理してみましょう。

LLMとの対話には、3つの特徴があります。

  1. 生成的 — 対話の中で新しいアイデアが生まれる
  2. 文脈依存的 — 前の発言を踏まえて議論が深まる
  3. 一過性 — 対話が終わると文脈は失われる

対話を保存する方法は、すでにいくつか存在します。

方法 🟢 できること ❌ できないこと
内蔵のチャット履歴 🟢 過去の対話を閲覧する ❌ 重要な対話を選び出す
メモ帳などに手動コピー 🟢 部分を切り出す ❌ 文脈を保持したまま使う
ノートツールに内容を出力する 🟢 テキストとして整理する ❌ 整理された形で再利用する

この表を眺めると、ひとつの構造が見えてきます。
「残す」ことと「整理し、再利用する」ことが、別の問題として分離している

これが、私が取り組んだ課題の核心です。

解決の方向性:人が選び、AIが構造化する

すべての対話を自動的に保存する、という考え方もあります。
本プロジェクトでは、それとは異なる選択をしました。

ThinkResumeでは、次のような役割分担を採用しています。

役割分担の流れ

  1. 人間 👤 → 「この対話は重要」と選ぶ
  2. AI 🤖 → 選ばれた対話を解釈・構造化する
  3. 人間 👤 → 後から思考を再開する

ユーザーの選択を起点に、後処理をAIが自律的に引き受けます。

具体的には、選択された対話に対して以下を実行します。

  • 文脈を引き継いだ思考再開
  • 洞察のうち、残したいものだけを抽出・保存する
  • 仮説・判断を残すための思考のメモ欄(編集可能)
  • タイトル自動生成・要点の要約・タグの提案 ※ハッカソン時点では未実装

何を保存するかは人間👤が決め、どう構造化するかはAI🤖が担う
これは「重要な部分を自分で整理する」という認知的負荷をAIに肩代わりさせる設計です
この役割分担がThinkResumeの設計思想です。

ThinkResumeの機能紹介

対話キャプチャ

Chrome拡張を使って、ブラウザ上のLLM対話(ChatGPT / Claude / Gemini)から、任意の対話を保存できます。 ※ハッカソン時点ではGeminiのみ実装

保存の流れ

  1. LLMと対話中に、Chrome拡張のアイコンをクリック
  2. 対話内容がキャプチャされ、ポップアップに表示される
  3. タイトル・メモ・タグを入力して保存

重要なのは、これが自動保存ではないという点です。
「今この対話が重要」という人間の判断がトリガーになります。

思考再開

保存した対話を、整理された文脈の上で再利用し、思考を継続できます。

画面は以下の4つのエリアで構成されています。

エリア 内容
保存した対話履歴 元のLLM対話がそのまま表示される
メモ・要件 ユーザー自身の結論や検討メモを追記
追加した洞察 Q&A形式で保存された重要なやり取り
Geminiとの対話 上記の文脈を引き継いだチャット

Geminiは、保存された対話やメモを文脈として受け取った上で応答します。

Geminiとの対話の中で重要なやり取りがあれば、「洞察として保存」ボタンでQ&A形式で蓄積できます。

スペース

複数の対話をひとつのグループにまとめ、統合コンテキストで思考を深める機能です。

たとえば、「認証設計」についてChatGPTとClaudeで別々に議論した内容を、ひとつのスペースにまとめて、Geminiに横断的な質問ができます。

スペースの画面構成は思考再開と同様に、含まれる対話一覧・メモ・洞察・Geminiチャットの4エリアで構成されています。

システムアーキテクチャ(必須要件②)

全体のアーキテクチャは以下の通りです。

使用している技術スタックは以下の通りです。

領域 技術 選定理由
モノレポ pnpm workspaces 型共有が容易、ハッカソン規模に適切
Web Next.js 16 + React 19 App Routerによるシンプルなルーティング
拡張機能 WXT 0.20+ Manifest V3対応、開発体験が良好
共通型定義 Zod 3.24+ ランタイムバリデーションと型推論の両立
スタイル Tailwind CSS v4 ユーティリティファーストで高速なUI構築
AI Vertex AI (Gemini) Google Cloud統合、日本語性能
DB Firestore スキーマレス、リアルタイム同期
実行基盤 Cloud Run Next.jsをコンテナで運用、GCP統一

思考再開時は、保存済みの対話・メモ・洞察をコンテキストとしてVertex AI (Gemini) に送信し、ストリーミング(SSE)でレスポンスを返します。

開発手法

AI駆動開発

本プロジェクトは、Claude Code をペアプログラミングパートナーとして活用し、要件定義からデプロイまで一貫してAIと協働しました。

開発の進め方

人間が方向性を判断し、AIが実装を担う——という役割分担で、3スプリントに分けて段階的に機能を積み上げました。

スプリント 内容
Sprint 1 基盤構築:対話キャプチャ・保存API・一覧/詳細UI
Sprint 2 思考再開:Geminiチャット・洞察保存・メモ編集
Sprint 3 スペース機能・統合コンテキスト・デプロイ

タスク管理はGitHub IssueとPRで行い、各スプリントの履歴が追えるようにしています。

AIとの協働で工夫した点

自分がこれまで培ってきたエンジニアリングの知識や、現在学習・実験中の技術知見を、Claude Codeのカスタム指示やSkillsとして言語化しました。
これにより、AIが自分と同じ判断基準でコードを書き、レビューできる状態を作れます。

実際の開発フローは、人間のチームにディレクションするのと同じ感覚で、要件定義・デザイン → 設計 → 実装 → レビュー → 動作確認 → 修正、というサイクルをAIと回しました。

この仕組みはOSSとして公開しています。
https://github.com/mae616/ai-template

審査基準との対応

ハッカソンの審査基準に沿って、本プロジェクトの位置づけを整理します。

使用技術スタック

必須要件 使用技術 用途
Google Cloud アプリケーション実行プロダクト Cloud Run Next.js App Router(Web UI + API)をコンテナデプロイ
Google Cloud AI技術 Vertex AI (Gemini) 対話の自動要約・タグ生成、思考再開チャット、統合コンテキスト対話

その他のGoogle Cloudサービスとして、Firestore(データストア)、Secret Manager(APIキー管理)を使用しています。

課題の新規性

LLM対話が思考の中心になった現在、「重要な対話から洞察を抽出し、再利用可能な思考素材に変換する」という課題は、まだ体系的に整理されていません。
既存の履歴機能やノートツールは「残す」までを担いますが、「残す」と「整理し、続ける」を接続し、さらに複数の対話を横断して統合コンテキストで思考を深められる点がThinkResumeの新規性です。

解決策の有効性

段階 機能 解決する問題
選ぶ 対話キャプチャ 重要な対話を人間の判断で選別
蓄積する 洞察保存・メモ編集 対話から得た知見をQ&A形式で構造化
再開する 思考再開・スペース 蓄積した文脈の上でGeminiと対話を継続

対話 → 洞察抽出 → 仮説の固定 → 再利用、という循環構造を設計している点が、単なる保存ツールとの違いです。

実装品質と拡張性

実装済み機能

  • 対話キャプチャ(Gemini完全対応、ChatGPT/Claude拡張可能)
  • 対話一覧・詳細表示(検索・タグフィルタ対応)
  • 思考再開チャット(ストリーミング対応)
  • 洞察の保存・一覧表示
  • メモ編集機能
  • スペース機能(複数対話のグループ化・統合コンテキスト対話)

拡張性への配慮

  • DOMパーサーの定数化により、新しいLLMプラットフォームの追加が容易
  • Zodスキーマの共有による型安全なAPI境界
  • モノレポ構成(pnpm workspaces)による関心の分離
  • Cloud Runによるスケーラブルなデプロイ

おわりに

LLMとの対話は、「質問して答えをもらう」という単純な行為から、「AIと一緒に考える」という協働プロセスへと変化しています。

ThinkResumeは、重要な対話を選び、構造化し、思考を継続できる道具を目指しています。
ここまで読んでいただき、ありがとうございます。

Discussion