Skip to content

チャット再生成 - #235

Draft
na-trium-144 wants to merge 7 commits into
mainfrom
regenerate-chat
Draft

チャット再生成#235
na-trium-144 wants to merge 7 commits into
mainfrom
regenerate-chat

Conversation

@na-trium-144

@na-trium-144 na-trium-144 commented Aug 8, 2026

Copy link
Copy Markdown
Contributor
  • diff適用処理をpage.tsxに移動 → さらにchatHistory.tsに移動された
  • 再生成ボタンを追加
    • チャットを再生成する際、対象チャットよりも前のdiffのみを適用したドキュメント状態に戻し、その状態でChatFormを呼び出す。
  • そのうえで、 diffの適用に失敗した場合のエラーハンドリングをする #193 を実装
    • alertの見た目が変なことを除けば動いていそう
193の要件

[lang]/[pageId]/page.tsx から chatHistory.tsx のapplyChatDiff()が呼ばれた際の、 TODO: md5ハッシュを参照し過去バージョンのドキュメントへ適用を試みる の部分の実装をしたい。
それぞれのセクションはmd5ハッシュでバージョン管理されており、現在のsectionデータのハッシュがsection.md5, それぞれのdiffが作られた当時のハッシュがdiff.targetMD5で得られるはずです。
もしあるdiffの適用に失敗し、かつsection.md5とdiff.targetMD5が異なる場合、targetMD5が指す当時のセクションをgetRevisionOfMarkdownSection()で取得し、それに対してchatDiff全体を再度適用します。その場合は、そのセクションの内容の前に
このドキュメントは最新ではない、最新にするにはチャットを再生成してください、というalertと、再生成ボタンを表示し、再生成ボタンを押したらそのセクションの全chatを作成日順に再作成&削除します。既存のchatのdiffを無視して最新のcontentを渡して1つ目のchatを生成→そのdiffを適用したcontentに対して2つ目のchatを作成→その2つのdiffを適用したcontentに対して3つ目のchat... というように順番に作成する必要があります。
section.md5とtargetMD5が同じなのにdiffの適用に失敗したら、諦めます。
section.md5とtargetMD5が違うのにdiffの適用に成功したら、それ以降も現在のバージョンを対象にすることができるので、diff.targetMD5を現在のバージョンに更新します。ただし、revalidateChat()のコメントに書いたように、chatを更新した後のrevalidateはserverActionから呼ばないと動作しないというNextjsのバグがあるため、serverコンポーネントの中では行わず、clientコンポーネントからactionを呼ぶ形にする必要がある。
chat/[chatId]/page.tsx からもapplyChatDiffが呼ばれますが、こちらでは過去バージョンへのフォールバックは不要。(これは結局再生成に使うためのものであるため)

これからエラーハンドリングをサーバー側で書くため
1. **`applyChatDiff` / `getChatFromCache` の共通化** ([`app/lib/chatHistory.ts`](file:///Users/kou/projects/my-code/app/lib/chatHistory.ts))
   - `applyChatDiff` および `getChatFromCache` を共通ライブラリ `chatHistory.ts` に配置・export し、Server Component から安全に再利用できるように整備しました。

2. **対象チャットより前の diff のみを適用したドキュメント状態の算出**
   - チャットページ表示時(Server Component)にて、対象ページの全チャット履歴を取得。
   - 再生成対象のチャットの作成日時 (`createdAt`) よりも**古い**チャットの履歴のみを抽出 (`priorChatHistories`)。
   - `applyChatDiff(sections, priorChatHistories)` を実行し、**「そのチャットが作成された時点のドキュメント内容」**(=対象チャット以降の diff は適用されていない過去状態)を正確に復元した `priorSectionContent` を計算・生成しました。

3. **再生成リクエスト時のプロンプト適用**
   - 「再生成」ボタン押下時に、復元された `priorSectionContent` をそのまま `/api/chat` へ送信するように更新しました。

これにより、チャット再生成時に「対象チャットより前の時刻に作られた diff だけが適用された正確なドキュメントテキスト」に基づいて AI 回答・差分生成が行われます。
@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Aug 8, 2026

Copy link
Copy Markdown

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

Status Name Latest Commit Preview URL Updated (UTC)
✅ Deployment successful!
View logs
my-code 83f70f0 Commit Preview URL

Branch Preview URL
Aug 09 2026, 05:21 AM

Comment thread tests/chatHistory.test.ts Dismissed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants