OpenAIが最近公開した安全性アップデートを読んで、正直「これ、自分がLLMをAPIで使うときにも関係あるな」と思った。
メンタルヘルスや自傷・他害に関わる会話でChatGPTが文脈を追跡できるようにする、というのが今回の内容だ。
表面上はChatGPTの話だけど、LLMアプリを設計するエンジニアとしては素通りできなかった。
OpenAIが指摘しているのは、単発のメッセージでは無害に見えても、会話の流れを通じてリスクが浮かび上がることがある、という話だ。
それを受けて彼らが導入したのが「safety summaries」という仕組み。
過去の会話で安全上重要なコンテキストを短い要約として保持しておき、別の会話でそのコンテキストが必要になった時だけ参照する、というものだ。
保持期間は限定的で、あくまで「リスクが高い状況に限って使う」という設計になっている。
これを読んで自分がすぐ思ったのは、自分が作ってるチャットアプリのcontext管理の話だった。
トークン数を節約したくて、会話履歴を数ターンしか渡していない実装があるんだよね。
コストと安全性がトレードオフになりうる場面って、OpenAIだけの問題じゃない。
OpenAIは今回、精神科医・心理士・法医学の専門家を含む「Global Physicians Network」と2年以上かけてこの仕組みを作ったと明かしている。
「どのタイミングでsummaryを生成するか」「どれだけ前の文脈を参照するか」「どのくらいの期間保持するか」を専門家と詰めたというわけだ。
自分のアプリでそこまで考えたかというと、正直あまり考えていなかった。
自分が今作っているのはセンシティブな領域ではないけど、「文脈をどう設計するか」は本質的な問いだと思う。
例えばサポートBot的なものを作るなら、ユーザーが前回言ったことを忘れた応答をされたらUXが壊れる。
逆に余計な情報を詰め込みすぎると、モデルが変な方向に引っ張られることもある。
感覚で決めていたところに、設計の軸を入れる必要があると感じた。
OpenAIはsafety summariesについて「general personalizationや長期記憶として使うものではない」と明示している。
これは設計思想として参考になる。「全部覚える」じゃなくて「必要な文脈だけ限定的に持つ」という切り分けだ。
LLMのメモリ設計でよく出てくる「なんでも記憶させればいい」という発想と真逆で、目的に対して最小限の情報だけ保持する考え方だ。
今回の記事で言いたいのは「センシティブなアプリを作る時は気をつけよう」という話じゃない。
むしろ「文脈をどう扱うか」という設計判断が、モデルの挙動に直結するという話だ。
OpenAIが専門家と2年かけて詰めた部分が、自分のアプリでは雑なpromptエンジニアリングで済ませていることと同じ問題構造を持っている可能性がある。
自分は来週、今のアプリのシステムプロンプトと会話履歴の渡し方を改めて見直してみるつもりだ。
「なぜそのターン数にしたのか」「どんなコンテキストが必要で、どれが不要か」をちゃんと言語化したドキュメントを書く。
感覚で決めていたところを、設計として残しておく作業だ。
メンタルヘルスや自傷・他害に関わる会話でChatGPTが文脈を追跡できるようにする、というのが今回の内容だ。
表面上はChatGPTの話だけど、LLMアプリを設計するエンジニアとしては素通りできなかった。
「1メッセージだけ見ても危険かどうかわからない」という問題
OpenAIが指摘しているのは、単発のメッセージでは無害に見えても、会話の流れを通じてリスクが浮かび上がることがある、という話だ。
それを受けて彼らが導入したのが「safety summaries」という仕組み。
過去の会話で安全上重要なコンテキストを短い要約として保持しておき、別の会話でそのコンテキストが必要になった時だけ参照する、というものだ。
保持期間は限定的で、あくまで「リスクが高い状況に限って使う」という設計になっている。
これを読んで自分がすぐ思ったのは、自分が作ってるチャットアプリのcontext管理の話だった。
トークン数を節約したくて、会話履歴を数ターンしか渡していない実装があるんだよね。
コストと安全性がトレードオフになりうる場面って、OpenAIだけの問題じゃない。
設計として「どこまでの文脈を渡すか」は意外とちゃんと決めていない
OpenAIは今回、精神科医・心理士・法医学の専門家を含む「Global Physicians Network」と2年以上かけてこの仕組みを作ったと明かしている。
「どのタイミングでsummaryを生成するか」「どれだけ前の文脈を参照するか」「どのくらいの期間保持するか」を専門家と詰めたというわけだ。
自分のアプリでそこまで考えたかというと、正直あまり考えていなかった。
自分が今作っているのはセンシティブな領域ではないけど、「文脈をどう設計するか」は本質的な問いだと思う。
例えばサポートBot的なものを作るなら、ユーザーが前回言ったことを忘れた応答をされたらUXが壊れる。
逆に余計な情報を詰め込みすぎると、モデルが変な方向に引っ張られることもある。
感覚で決めていたところに、設計の軸を入れる必要があると感じた。
OpenAIはsafety summariesについて「general personalizationや長期記憶として使うものではない」と明示している。
これは設計思想として参考になる。「全部覚える」じゃなくて「必要な文脈だけ限定的に持つ」という切り分けだ。
LLMのメモリ設計でよく出てくる「なんでも記憶させればいい」という発想と真逆で、目的に対して最小限の情報だけ保持する考え方だ。
LLMアプリのcontext設計を見直すきっかけになった
今回の記事で言いたいのは「センシティブなアプリを作る時は気をつけよう」という話じゃない。
むしろ「文脈をどう扱うか」という設計判断が、モデルの挙動に直結するという話だ。
OpenAIが専門家と2年かけて詰めた部分が、自分のアプリでは雑なpromptエンジニアリングで済ませていることと同じ問題構造を持っている可能性がある。
自分は来週、今のアプリのシステムプロンプトと会話履歴の渡し方を改めて見直してみるつもりだ。
「なぜそのターン数にしたのか」「どんなコンテキストが必要で、どれが不要か」をちゃんと言語化したドキュメントを書く。
感覚で決めていたところを、設計として残しておく作業だ。