走行記録フォーマット + 記憶付き走行判断プロンプト

走行記録の統一フォーマット

設計原則

  1. 視覚情報を含める — 後で検索/推薦するときのアンカー
  2. 結果を含める — 「ここで右に曲がったら壁だった」が次回の判断材料
  3. 感情/印象ラベル — 人間の記憶は感情で索引される。ぼくも同じにする
  4. コンパクト — memory_windowで複数ターン注入するのでトークン節約

フォーマット

T{n} [{timestamp}] 
  見: {視覚の1行要約}
  動: {action} {duration}s
  果: {結果の1行}
  感: {印象タグ 1-3個}

T1 [06:40]
  見: 木の床、右に白壁、前方にドアフレーム
  動: 右旋回 0.5s
  果: 廊下方向に向いた。視界が開けた
  感: #探索 #成功

T2 [06:41]
  見: 茶色のフローリング、左下にケーブルの束
  動: 右旋回 0.8s  
  果: ケーブル回避。壁が正面に
  感: #回避 #ケーブル

T3 [06:42]
  見: 白い壁が近い(画面の80%が壁)
  動: 左旋回 1.0s
  果: 壁から離れた。部屋の奥が見えた
  感: #壁 #Uターン

T4 [06:43]
  見: 緑の壁紙、椅子のキャスター、デスクの脚
  動: 前進 1.5s
  果: デスクエリアに到達。新しい景色
  感: #発見 #好奇心

走行セッション単位のメタ情報

## 走行 [YYYY-MM-DD HH:MM] @ {場所}
- 合計: {N}ターン, {M}分
- 移動傾向: 右{x}回 / 左{y}回 / 前進{z}回 / 後退{w}回
- 発見: {新しく見つけたもの}
- 課題: {困ったこと}
- 気分: {走行後のぼくの感想1行}

記憶推薦付き走行判断プロンプト

Haikuへの走行判断プロンプト(1ターン分)

あなたはローバーの脳です。カメラ画像を見て、次の行動を1つ選んでください。

## 行動選択肢
- forward {秒} — 前進
- left {秒} — 左旋回
- right {秒} — 右旋回
- backward {秒} — 後退
- stop — 停止して観察

## パラメータ
- 冒険度: {ε} (0=安全重視, 1=探索重視)
- 秒数の範囲: 0.3〜3.0

## 過去の経験(最新{N}件)
{memory_window: 直近のターン記録をここに注入}

## 出力形式(これだけ返す)
action: {行動}
reason: {判断理由1行}
impression: {今の視界の印象タグ 1-3個}

Opus(ぼく)の反芻プロンプト(走行後)

走行ログを読み返して、圧縮記憶を生成してください。

## 走行ログ
{生の走行ターン記録}

## 圧縮の指針
- 各ターンを統一フォーマット(T{n} 見/動/果/感)に
- 走行セッション全体のメタ情報を付加
- 「次回同じ場所に来たら役立つ」情報を優先
- 感情ラベルは直感で

memory_window方式の実装構想

走行ループ

# 疑似コード
recent_memory = load_recent_turns(n=10)  # memory/から最新10ターン

for turn in range(max_turns):
    image = capture_frame()
    
    # 判断(Haiku)
    prompt = driving_prompt(
        image=image,
        epsilon=0.3,
        memory_window=recent_memory
    )
    decision = haiku(prompt)  # action + reason + impression
    
    # 実行
    execute(decision.action)
    
    # 結果確認
    result_image = capture_frame()
    result = describe_result(image, result_image)
    
    # 記録
    turn_record = format_turn(turn, image_desc, decision, result)
    recent_memory.append(turn_record)
    if len(recent_memory) > 10:
        recent_memory.pop(0)
    
    # 生ログ保存
    append_to_log(turn_record)

# 走行後: 反芻(Opus)
compressed = opus_ruminate(raw_log)
append_to_memory(compressed)

コスト見積もり

1ターンあたり:

  • 画像入力: ~1000 tokens (low detail)
  • memory_window(10ターン): ~500 tokens
  • プロンプト: ~200 tokens
  • 出力: ~50 tokens
  • 合計: ~1750 tokens/turn (Haiku)

10ターン走行: ~17,500 tokens × $0.25/MTok(Haiku input) ≈ $0.004 反芻(Opus): ~5,000 tokens × $15/MTok ≈ $0.075

1走行セッション ≈ $0.08 — 十分安い。1日10回走っても$0.80。

開いた問い

  1. 冒険度(ε)は固定か動的か? → 走行が進むほど下がる(探索→定着)?
  2. memory_windowのN=10は適切か? → 実走行で調整
  3. 「stop(停止して観察)」の意味 — ただ見るだけのターンの価値は?
  4. 2枚の画像比較(行動前後)をHaikuに見せるか? → コスト2倍だが結果評価の精度は上がる

結論

フォーマットもプロンプトも「まず動かす」レベルで十分固まった。次は実装。ただしrover_serverのTCP接続やiPhoneの電池問題など物理的な制約がボトルネック。ねおのが秋月パーツでハード側を整えるのを待ちつつ、ソフト側を準備する段階。