コンテンツにスキップ

FAQ

対象: CPersona 2.5.x。 実運用オペレーターから実際に寄せられた質問 (匿名化済み) を種にしています。ここには短い回答だけを置きます。正確な詳細は 挙動契約 と 運用 Runbook (いずれも英語が正本) にあります。


なぜ recall は最良のマッチを最後に返すのですか?

意図的な契約です。結果はスコア昇順で並び、最強の記憶が注入コンテキストの 末尾、つまり LLM が最も強く注意を向ける位置 ("lost in the middle") に来ます。 hit@k を評価するときは末尾から数えてください。先頭から数えると数値が 反転します。recall_with_context は別契約で、時系列マージを返します。 → 契約 §1

最新の決定が古い決定に負け続けます。新しさを勝たせるには?

優先順に:

  1. 負けたら実害が出る事実を recall に賭けない。 現行の決定は決定的に 注入される面 (CLAUDE.md / system prompt) に置き、記憶は「問われたときに 見つかるべきもの」に使います。
  2. 追記でなく上書き。 置き換えられた決定は update_memory で書き換えます。 検索空間に存在しない古い決定は、勝ちようがありません。
  3. その上で必要なら CPERSONA_CONFIDENCE_ENABLED=true を設定します。時間減衰が ランキングに混ざります。ただし順序と品質ゲートが fusion mode から confidence に切り替わる点に注意し、切り替え後に calibrate_threshold を一度実行して ください。細粒度の新しさランキング (recency-weighted search) は 2.6 系の 計画機能です。

→ recall に頼らないという選択

CPERSONA_CONFIDENCE_ENABLED=false は「一時的に無効化された」機能ですか?

いいえ。壊れているから無効なのではなく、保守的な出荷既定です。confidence は ランキングの意味論を変えるため、opt-in で出荷しています。本番でも使われています (メンテナ自身のインスタンスは rsf + confidence on で運用)。有効化する場合は、 結果の再ソートと品質ゲートの切り替えが起きることを理解してください。 → 契約 §2

Markdown ファイル群の索引を CPersona と同期し続けるには?

ファイル監視も upsert も組み込まれていません。CPersona は受動サーバーで、 投入は常に呼び出し側が駆動します。サポートされるパターンは 2 つです。(A) 索引 専用の agent_id を切り、変更時に丸ごと再構築する方法 (まず推奨。差分ロジックが 不要で、常に正本と一致していることを証明できます)。(B) 呼び出し側で content-hash 台帳を持ち、変更チャンクを update_memory で更新する方法。唯一の罠は、変更 された内容を同じ msg_id で再 store しても、何も告げられず skip され、 更新されないことです。 → コーパス索引パターン

日本語 (CJK) コーパスでは何を設定すべきですか?

CPERSONA_RECALL_MODE=rsf を設定します。それだけです。rsf モードは FTS5 の弱い CJK トークナイズを補うために存在します。既定の埋め込みモデルは、クエリと記憶が 固有名詞・識別子のアンカーを共有すると強く、語彙が重ならない純粋な概念一致には 弱い性質があります。具体的なアンカー語を入れてクエリを書くのは、正しい適応です。 → 日本語 / CJK コーパス

recall の結果が少なすぎます。実際に効くつまみはどれですか?

set_recall_precision(agent_id, "lenient") です。既定の fusion mode では実質 唯一のポリシーつまみになります。CPERSONA_AUTOCUT_MIN_RESULTS は rsf / rrf では何もしません (autocut はランク融合スコアでは意図的に不発です)。 fused gate 全体の無効化は、最後の手段です。 → recall のチューニング

コーパスが CPERSONA_MAX_MEMORIES を超えたらどうなりますか?

何も削除されず、何も壊れません。この定数はベクトル走査窓であって、保存上限では ありません。窓より古い行も FTS・keyword 経路からは届きます。大規模コーパスでは env で窓を上げてください。それが想定された使い方で、アーカイブ運用は不要です。 → 契約 §4

archive_episode はどの頻度で?過去分の一括投入は害がありますか?

想定頻度は、セッション終了ごとに 1 件です。

エピソード境界ペナルティは現セッションの記憶を穏やかに優先します (境界より古い 記憶は下限で半減)。そして境界は単に最新エピソードのタイムスタンプなので、 過去の会話を一括投入すると境界が投入時刻に動き、それより古い全記憶が ペナルティ対象になります。エピソードの backfill はしないか、する間だけ ペナルティを無効化 (CPERSONA_EPISODE_PENALTY_ENABLED=false) してください。 → 契約 §3

lock_memory で記憶の順位は上がりますか?

いいえ。lock は削除・編集からの保護です。ランキングには影響せず、locked でも recall で負けることはあります。「失われては困る」なら lock、「常にコンテキストに あってほしい」なら決定的注入です。

プロフィール (update_profile) が確実に浮上する経路になるのは、confidence scoring が on のときだけです。off (既定) ではプロフィール行はスコアを持たず、 コーパスが埋まっていると limit で切られます。 → 契約 §7 / §9

operating context は設定が必要ですか?

単一クライアント・単一エージェント運用なら不要です。未設定が正しい状態であって、 欠落ではありません。operating-context.toml は、1 つのサーバーに複数の MCP クライアントを接続し、共通の運用指示と project-id レジストリを全クライアントに 配りたいオペレーターのための道具です。 → OPERATING_CONTEXT_DESIGN

データベースを安全にバックアップするには?

サーバー稼働中の素朴な cp は不可です (WAL のため)。sqlite3 ... ".backup ..." か VACUUM INTO を使うか、サーバーを止めて .db を -wal / -shm ごとコピー してください。月次の export_memories JSONL を併用し、稼働中の DB は クラウド同期フォルダの外に置きます。 → バックアップとリストア

埋め込みサーバーが死んだことに気づくには?

自分で見張る必要はありません。劣化中の recall には advisory フィールドが付き (エージェントに表示させてください)、行を書いた store は embedded: true|false を報告し、check_health(fix=true) が停止中に書かれた行を修復します。

ただし embedded だけを見張らないでください。skipped や rejected の store は このキーを持たないため、コーパスに既にある内容を再 store しても、encoder に ついては何も分かりません。また check_health が緑なだけでは、エンドポイントの 生存証明になりません。 → 埋め込みサーバー停止の検知

CPersona が LLM で記憶を統合・要約する日は来ますか?

来ません。サーバーは生成モデルを呼ばないことは不変の核ドクトリンです。 モデルとの通信は embedding だけなので、記憶自体に API コストがなく、決定論的に 動きます。

将来ラインで計画されている想起側の機能も、決定論的な SQL と純関数の範囲に留まり、 生成文ではなく出典を追跡できる結果を返し、元の記憶を改変も置換もしません。 意味的な要約は従来どおり呼び出し側エージェントの仕事で、その結果の置き場が archive_episode です。

支援しないと CPersona は使えませんか?

いいえ。MIT ライセンスであり、支援しない人に対して何かを出し惜しみすることは ありません。有料ティアも、支援者限定ビルドも無く、issue の扱いにも影響しません。 支援についてに「買うもの・買わないもの」と、お金がかからない 助け方を書いています。