Devin を日常的に使っていると、あるあるなのが「セッションが勝手に終了してしまう問題」。一定時間操作しないとセッションが自動でクローズされてしまい、それまでのやり取りがすべて失われたように感じてしまいます。
ですが、Devin には過去のコンテキストを引き継ぐ方法が存在します。今回はその方法について、公式ドキュメントをもとにわかりやすく解説していきます。
Devin のセッションとは
Devinにおけるセッションとは、ある一連の作業や会話の単位を指します。ユーザーが Devin に何かを依頼し、それに応じて Devin がコードを書いたり、調査をしたり、提案を返したりする一連の流れが、ひとつのセッションとして管理されます。
セッションの中では以下のような状態が保持されます:
- ユーザーとの過去のやり取り(プロンプトと応答の履歴)
- Devin が生成したコードやファイル
- 作業中のコンテキスト(タスクの目的や進捗状況)
- 使用されている仮想の開発環境(ファイル構成など)
このため、セッションを継続することで、Devinは「前回の続きから作業を進める」ことが可能になります。
Devin セッションの自動クローズとは?
Devin ではセッション(作業単位)に アイドルタイム制限 があり、一定時間操作がないとセッションが自動的にクローズされます。
例えば、夜に作業を中断して翌朝再開しようとすると、セッションが既に終了している…というケースはよくあるはずです。
セッションが一度クローズされると、そのセッションを再開することは現時点では不可能です。新しくセッションを作成するしかありません。
問題:コンテキストが引き継がれない
新しいセッションを作成したとき、過去の会話や作業ログなどの文脈(コンテキスト)は初期化されてしまいます。
これでは、途中まで進めたタスクや会話の流れを一から説明し直す必要が出てきて、とても非効率です。
Devin のセッションのコンテキストを引き継ぐ方法
snapshot_id を使ってコンテキストを引き継ぐ
Devin ではセッションの状態を保存した「スナップショット」という仕組みがあり、その ID(snapshot_id
)を使うことで、新しいセッションに前回のコンテキストを引き継ぐことができます。
公式ドキュメントにも以下のような記述があります。
You can optionally pass
snapshot_id
when creating a new session to resume the previous context.
📄 公式ドキュメント
実際の使い方(API リクエスト例)
ここでは、Devin の API を使って snapshot_id
を指定して新しいセッションを作成する方法を紹介します。
① セッション情報の取得
まず、過去のセッション一覧やスナップショットの情報を API 経由で取得します。
curl https://api.devin.ai/v1/sessions \
-H "Authorization: Bearer YOUR_API_KEY"
結果は以下の様な JSON が返ってきます。
{
"session_id": "devin-xxx",
"status": "finished",
"title": "Review PR #123",
"snapshot_id": "snapshot-xxxxxxxxxxxxxxxx",
以下省略...
}
各セッションのレスポンスには、snapshot_id
が含まれているはずです(含まれていない場合は別途スナップショットを作成する必要があります)。
② snapshot_id
を使って新しいセッションを作成
取得した snapshot_id
を使用して、新しいセッションを開始します。
curl -X POST https://api.devin.ai/v1/sessions \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"snapshot_id": "snapshot-xxxxxxxxxxxxxxxx"
}'
これにより、新しく作られるセッションには、指定したスナップショットの文脈が引き継がれた状態になります。
注意点と補足
これでセッションのコンテキストを引き継いだ新しいセッションが作成されることは確認でき、また Devin を動かした感じも問題なく過去のコンテキストを持っている様でした。
ただスナップショットがいつ取得されたものであるかに対しては詳細がわからず、タイミングによっては思っていたコンテキストが完全な状態で引き継がれていない可能性もある感じがしました。
ですので、自分は完全な引き継ぎではなく大体の引き継ぎができる、と思ってほどほどの期待値を込めて使っています。
まとめ
snapshot_id
を活用することで、Devin のセッションがクローズしてしまってもある程度スムーズに Devin とのやりとりの再開が可能なことがわかりました。
自分はセッションのコンテキストを少しでも引き継ぐことができたおかげて、かなり Devin が使いやすくなりました。
みなさまの役に立つと幸いです。
コメント