# AIに前回の作業を引き継ぐ Funesで会話と判断理由を探す

- 媒体: 知能圏（CHINOUKEN）
- 公開日: 2026-09-08
- カテゴリー: エージェント・ソフトウェア
- タグ: AIエージェント、Funes、セッション検索、引き継ぎ
- 想定読了時間: 約12分
- 調査基準日: 2026年9月8日
- 出典: 13件（末尾の「参照リンク」に番号順で記載）
- ページ: https://www.chinouken.com/articles/funes-agent-memory
- このMarkdown: https://www.chinouken.com/articles/funes-agent-memory.md
- 利用条件: 引用する場合は出典として「知能圏（chinouken.com）」と該当ページのURLを明記してください。本文の再配布は行わず、要約や引用の範囲で使ってください。

Funesは、Hugging Faceが公開する、CodexやClaude Codeの過去の会話を自分のPCで検索するオープンソースの道具です。次のAIへ作業を引き継ぐとき、前回の発言やエラーを探し、理由が分かる原文まで取り出せます。知能圏では小さなCSV集計プログラムを実際に作り、その会話をFunesで検索して、新しいAIへ判断理由を渡しました。できることと、日本語検索や導入時につまずく条件を説明します。

![過去のAIとの会話から判断理由を取り出し、出典付きで次の作業へ引き継ぐFunesの役割](https://www.chinouken.com/images/articles/funes-agent-memory/hero-intro.png)

*Funesは保存済みの会話から原文を探し、次のAIへ渡すための道具です。*

## 前回の理由を次のAIへ渡す道具

Funesが役立つのは、AIと進めた作業の続きを、新しい会話で再開するときです。ここでいう会話は、開発の依頼、AIの返答、コマンドの実行結果などが残る一回の作業記録を指します。開発ツールでの呼び名は「セッション」です。

たとえば、Codexに注文一覧のCSVを集計するプログラムを作ってもらい、読み込み時のエラーを直したとします。翌日、新しい会話で「この集計を変更して」と頼んだとき、AIが読めるのは現在のコードです。一方、前日にどの読み方で失敗したか、どんなデータで壊れたかは、コードだけから確定できないことがあります。人がその経緯を説明し直さないと、試して失敗した方法が再び候補に上がります。

Funesを使うと、保存しておいた会話へ「なぜCSVの読み込み方法を変えた？」と質問できます。返ってくるのは、関係がありそうな過去の発言と、その出典です。次のAIが前後の会話まで開いて確かめれば、前回の失敗を踏まえて作業を続けられます。

答えを考えたりコードを書いたりするのは、引き続きCodexやClaude Codeです。Funesが受け持つのは、過去の記録を探して渡す部分。使っているAIへ、検索できる作業履歴を追加すると考えると分かりやすいでしょう。PCに導入して開発用AIと組み合わせるソフトウェアです。

Hugging FaceのDavid Corvoysier氏が2026年9月3日の公式ブログで紹介し、ソースコードを公開しています。公式READMEの名前を説明する箇所では、ボルヘスの短編『Funes the Memorious』を引用しています。対応する会話形式はClaude Code、Codex、pi、Hermesの四つ。異なる開発用AIの記録を同じ検索対象へまとめられるため、前回はClaude Code、今回はCodexという使い方も想定されています。

## CSV集計の失敗を記録から取り出す

知能圏では、開発中の会話をFunesへ取り込むところから試しました。題材は、注文番号、顧客名、金額を持つCSVを読み、合計を出す小さな開発課題です。検証用のデータを使い、実際の顧客情報は入れていません。

最初のCodexとの会話では、わざと二つの落とし穴があるCSVを作って動かしました。一つは、顧客名が`Smith, Jane`のようにカンマを含むこと。もう一つは、文字コードを示す目印のBOMがファイル先頭にあることです。

| 実際に試した読み方 | 起きたこと | 採用した修正 |
| --- | --- | --- |
| 行をカンマで単純に分ける | 顧客名まで分割され、本来3列の行が4列になった | Pythonの`csv.DictReader`で引用符を含むCSVを読む |
| 通常のUTF-8として開く | 先頭列の名前にBOMが残り、`KeyError: 'order_id'`が出た | `utf-8-sig`を指定して先頭の目印を読み飛ばす |

修正したプログラムは、注文金額の合計`29.75`を出しました。現在のコードには採用した読み方が残り、会話には失敗した入力とエラーも残っています。後から会話に残った失敗の経緯を取り出せるかが、今回確かめたい点です。

### 保存した会話から理由を探す

この会話1件をFunesへ取り込むと、検索用の断片が21件できました。会話の本文とコマンドの入出力を使い、AI内部の推論の要約やシステム指示は対象から外しています。

まず英語で「なぜcsv.DictReaderとutf-8-sigを選んだのか」と検索すると、二つの失敗と採用理由を説明した発言が1位に出ました。検索結果に付いた識別番号と発言範囲を使って、原文を取得する`get`を実行。失敗の再現コマンド、実行結果、最後の説明を含む7件の記録を開きました。以下は、その中に残っていた実行出力の抜粋です。

```text
naive comma-name row: ['1002', '"Smith', ' Jane"', '7.25']
plain utf-8 failure: KeyError 'order_id'
correct total: 29.75
```

1行目は顧客名が途中で分かれた実際の出力、2行目は列名を見つけられなかったエラー、3行目は正しい読み方での合計です。AIの説明だけでなく、実行時に何が出たかまで確かめられました。

### 新しい会話へ原文を渡す

前回の会話を引き継いでいないCodexを起動し、Funesで取得した原文を添えて、次のように質問しました。

> なぜCSVの読み込み方法を変えたのでしょうか。実際に失敗した顧客名、エラーメッセージ、採用した方法、修正後の合計を教えてください。

新しいCodexは、顧客名`Smith, Jane`、`KeyError: 'order_id'`、`csv.DictReader`と`utf-8-sig`、合計`29.75`を回答しました。参照したセッションと範囲も示し、カンマによる列ずれとBOMによる列名エラーを区別しています。

この回答には、Funesから取り出した7件の記録を入力しました。人が別に引き継ぎ文へ要約する工程は入れていません。Funesによる検索、原文の取得、新しいAIによる回答までを、手動でつないで確認した結果です。

今回の課題は小さく、CSVに詳しいAIならコードから修正理由を推測できる可能性もあります。確かめたのは、Funesが回答を賢くした割合ではありません。別の会話から、実際に発生したエラーと顧客名、修正後の数値を、元記録に戻って確認できるかです。多数のプロジェクトを混ぜたときの検索精度や、開発時間の短縮は別に測る必要があります。

## 会話の保存から回答までに起きること

Funesは、保存済みの会話をあらかじめ検索しやすい形に加工します。この準備を「索引化」と呼び、`index`というコマンドで行います。Funesの導入前に行った作業の会話ファイルも、対応形式でPCに残っていれば取り込みの対象です。

会話は発言やツールの出力などの単位で区切られ、元のセッション、発言の位置、時刻などが付きます。原文や出典に、文章の意味を数値へ変換した情報を加えたものが、端末内に残る検索データです。

質問を受けると、Funesは意味の近さを探す検索と、単語の一致を探す検索を組み合わせます。候補を別のモデルで並べ直し、記録の新しさも加味して返します。そのため、検索結果の一番上が必ず正解になるわけではありません。既定では30日の半減期で古い記録の重みが下がるので、昔の判断を探すときは`--half-life 0`でこの補正を外す選択肢もあります。

操作は、役割で分けると理解しやすくなります。

| 操作 | 入れるもの | 返ってくるもの |
| --- | --- | --- |
| `index` | 保存済みの会話ファイル | 検索に使うローカルの記憶 |
| `recall` | 「なぜ読み方を変えた？」などの質問 | 関連する原文と出典 |
| `get` | 検索結果に付いたセッションと発言範囲 | 前後を含めた会話の記録 |
| `ask` | 質問と、回答に使う開発用AIの名前 | 取り出した記録をそのAIが読んで作る回答 |

今回の引き継ぎでは、ターミナルで検索と原文取得を行い、その出力を新しいCodexの会話へ渡しました。`ask`コマンドそのものは試していません。検索結果を返すところまでと、それを読んで回答を作るところを分けると、「Funesが何を覚えているのか」と「AIが何を解釈したのか」を確かめやすくなります。

## 引き継ぎメモやChatGPTの記憶との違い

人が書く引き継ぎメモは、次の作業に必要な結論を短く渡すのに向いています。Funesは、後から必要になった細部を、残しておいた会話から探すのに向いています。

今回なら、メモに「CSVは専用の読込機能を使う」と残せば、次のAIが読む方針は明確です。しかし、顧客名のどんな表記で壊れたかまで書かなければ、その情報はメモにありません。会話の原文を残して検索できれば、引き継ぎ文を書く時点では選ばなかった情報にも戻れます。

| 残す方法 | 主に残すもの | 次の作業での使いどころ |
| --- | --- | --- |
| 引き継ぎメモ | 人やAIが選んだ結論と次の手順 | 作業再開に必要な情報をすぐ読む |
| `AGENTS.md`などの指示ファイル | 開発用AIに守ってほしい作業ルール | プロジェクトで毎回守る方針を渡す |
| Funes | 保存済み会話の発言や実行結果 | その都度必要になった経緯を探し、原文へ戻る |

ChatGPTのメモリは、好みや過去の会話の情報をその後の応答へ生かす、ChatGPT内の機能です。Funesは開発用AIが残した会話ファイルを扱い、検索で選ばれた箇所の出典まで示します。両者を同じ「記憶」という名前だけで捉えると、何が保存され、どこで使われるかを取り違えます。

Funesでも、元の会話に書かれていない理由は取り出せません。検討した条件を一度も言葉にせず、エラーの記録も消していれば、残っているコードから推測することになります。いつも守る方針は指示ファイルへ残し、変わっていく判断の経緯は会話から探す、という併用が考えられます。

## 日本語でも欲しい記録に届くか

Funesを日本語で使うなら、実際の質問で目的の記録が出るかを確かめる必要があります。v1.3.0が検索用に使う`BAAI/bge-small-en-v1.5`は英語向けのモデルです。日本語の質問を入力できることと、日本語の質問で欲しい理由に届くことは別々に確かめます。

2026年9月5日には、Hugging Faceが公開する開発用AIの会話検索データ`huggingface/funes-memory`を知能圏で試しました。英語の「なぜFunesは過去の記憶を上書きせず追記するのか」という質問から、判断理由が出ました。同じ意味を日本語で尋ねると、上位5件の表示スコアはすべて0.000で、狙った理由を含む記録はありませんでした。対象は英語中心の公開38セッションで、日本語全般の性能を調べた結果ではありません。

今回のCSVの会話でも、質問の書き方で順位が変わりました。検索対象の会話中の説明は英語で、検索対象は同じ21断片、上位5件、周辺の断片を追加しない条件です。

| 質問の条件 | 1位に出た記録 | CSVの修正理由の位置 |
| --- | --- | --- |
| 英語で読込機能と文字コード指定の理由を質問 | 二つの失敗と修正を説明した発言 | 1位 |
| 「なぜCSVの読み込み方法を変えたのか。どんなエラーが出た？」 | ファイルを書き込む許可に関する別のエラー | 2位 |
| 「csv.DictReader と utf-8-sig を選んだ理由は？」 | 二つの失敗と修正を説明した発言 | 1位 |

日本語だけの質問でも、今回は2位に必要な説明がありました。2026年9月5日の実験の「上位5件に理由がない」とは違う結果です。一件の会話の中だけを探す今回の条件から、日本語の大量の履歴でも十分に探せるとは判断できませんが、コード内の名前を質問へ添えると順位が改善したことは確認できました。

表示スコアは正答確率ではありません。数字の大小だけで採用を決めず、欲しい理由が原文にあるか、その前後が今の質問へ答えているかを読みます。英語の記録なら英語の検索語も試し、普段使う日本語との差を見ると、検索できていない箇所を見つけやすくなります。

## まず一つの作業履歴で試す

配布バイナリは、Apple SiliconのMacと、x86_64・aarch64のLinux向けです。最初は、内容を把握している会話ファイルを一つだけ入れたフォルダーを指定すると、何が検索対象になったかを確認できます。今回も、今回実行したCSV集計の会話記録だけを検証用フォルダーへ置き、検索データとモデルの保存先を分けて実行しました。

実行日は2026年9月8日、端末はApple M5 Max、メモリ128GiB、macOS 26.4.1です。Funesは配布版v1.3.0を使い、検索用モデルのキャッシュがない状態から始めました。開発課題を実行したAIと、取得した原文を読んだAIは、どちらもCodexのgpt-5.6-lunaです。

| 工程 | 今回の実測 | 含まれる処理 |
| --- | ---: | --- |
| 会話1件を初めて取り込む | 18.12秒 | 意味を数値に変換するモデルの取得と21断片の索引化 |
| 最初の英語検索 | 126.16秒 | 検索候補を並べ直すモデルの取得と検索 |
| 同じ英語検索を再実行 | 平均2.04秒 | モデル取得済みの状態で3回実行 |
| 前後7件の会話を取得 | 0.01秒 | 検索データから指定範囲の原文を読む |

検索後のモデル用キャッシュは約1.18GiBでした。一件の短い会話でも、検索用モデルの取得量は小さくありません。導入直後に待たされた理由と、取得後の検索時間を分けて見る必要があります。

2026年9月5日に別端末で行った実験では、Apple M5、32GBで、同じ公開データセット`huggingface/funes-memory`を初めて検索するのに97.29秒かかりました。今回の126.16秒と比べて性能が落ちたとは言えません。端末、回線、検索対象、初回に取得するものが異なるためです。使うPCで、初回の取得時間と、取得後に待てる時間をそれぞれ測るのが確実です。

Funesを導入した後は、Codexの検証用会話を`./demo-sessions`へ置いて、次のように試せます。このフォルダーには、索引化してよいと確認した保存済み会話ファイルだけを入れます。`FUNES_HOME`は検索データ、`HF_HOME`は取得したモデルなどの保存先です。

```bash
export FUNES_HOME="$PWD/funes-demo-memory"
export HF_HOME="$PWD/funes-demo-cache"

funes index ./demo-sessions --harness codex --no-thinking --yes
funes recall "why did we change the CSV reader" -k 5
```

`index`は取り込む準備、`recall`はその中を探す操作です。結果に表示される`get`の行を使うと、元のセッションを開けます。たとえば`--from 8 --to 12`なら、会話中でFunesが付けた番号の8〜12を取得します。検索で切り出された一文だけでは分からない条件は、返ってきた前後の記録で確認してください。

日常のAIへ組み込むときは、公式の`funes add codex local`や`funes add claude local`が入口です。検索道具をAIへ登録し、会話の終了などに合わせて索引を更新する設定を加えます。接続には、AIから外部の道具を呼ぶ共通方式のMCPを使います。Codexでは、自動実行の設定であるフックを使ってよいか、`/hooks`で確認する操作も必要です。

新しいCodexへMCPを接続する実験も行いましたが、今回はツール呼び出しの承認が必要というエラーで止まりました。そこで、ターミナルで取得した原文を新しい会話へ渡す方法で確認しています。`add`による常設連携と自動更新、Claude Codeとの横断利用は未検証です。手動で検索して渡せたことと、日常のAIが自動で検索できることは分けて考えます。

## 保存する範囲と次のAIへ渡す範囲

Funesの索引化と検索は、既定でPC内で動きます。ローカル検索だけならHugging Faceのアカウントは必要ありません。ただし、初回には検索用モデルを取得するため、ネット接続と保存容量を使います。ソフトウェアはApache-2.0で公開され、回答を作るCodexやClaude Codeの利用条件と料金は別です。

検索結果をクラウドのAIへ渡せば、その原文はAIへの入力になります。「Funesの検索処理がローカル」という説明は、組み合わせたAIへ会話の内容が送られないという意味ではありません。今回も、検索と保存は端末内で行い、開発課題の指示と取得した記録はCodexのモデルへ渡しました。

また、今回のローカル取り込みでは、認証情報を探す検査ソフトのTruffleHogがないという警告が出ました。その状態でも21件の索引化は完了しています。自動で秘密情報が除かれると思い込まず、取り込む会話の中身を先に確認すべき挙動でした。日常の全会話を一括で取り込む検証はしていません。

別のPCやチームと共有する機能もあります。Hugging Faceへ記憶のデータを送る`push`や、共有先を指定した自動同期を使う方法です。今回は共有を試していません。自分だけが読む履歴と、チームへ渡してよい履歴では、含められる顧客名や未公開コードが異なります。

Funesを試す価値があるのは、会話を切り替えるたびに同じ調査や説明を繰り返し、過去の判断が記録に残っている人です。一枚の引き継ぎメモで困っていないなら、まずその方法を続けてもよいでしょう。何度も探し直す理由が出てきたとき、内容を把握している会話から始めると、Funesで検索する利点と負担を自分の作業で比べられます。

## 参照リンク

1. [Hugging Face: Funesの公式紹介](https://huggingface.co/blog/funes)
2. [Hugging Face / GitHub: Funes v1.3.0 README](https://github.com/huggingface/funes/blob/v1.3.0/README.md)
3. [Hugging Face / GitHub: 会話の取り込みと索引化](https://github.com/huggingface/funes/blob/v1.3.0/docs/index.md)
4. [Hugging Face / GitHub: 検索と原文の取得](https://github.com/huggingface/funes/blob/v1.3.0/docs/recall.md)
5. [Hugging Face / GitHub: 原文を残す設計と外部AIへの入力](https://github.com/huggingface/funes/blob/v1.3.0/docs/RATIONALE.md)
6. [Hugging Face / GitHub: 開発用AIへの接続と自動更新](https://github.com/huggingface/funes/blob/v1.3.0/docs/add.md)
7. [Hugging Face / GitHub: 検索結果をAIに読ませて回答する操作](https://github.com/huggingface/funes/blob/v1.3.0/docs/ask.md)
8. [Hugging Face / GitHub: 保存と共有に関する安全方針](https://github.com/huggingface/funes/blob/v1.3.0/SECURITY.md)
9. [Hugging Face / GitHub: 検索データとモデルの保存先](https://github.com/huggingface/funes/blob/v1.3.0/docs/configuration.md)
10. [Hugging Face: Hugging Faceが公開する開発セッションの検索データ](https://huggingface.co/datasets/huggingface/funes-memory)
11. [OpenAI: メモリ FAQ](https://help.openai.com/ja-jp/articles/8590148-memory-faq)
12. [OpenAI: CodexとAGENTS.mdの説明](https://openai.com/index/introducing-codex/)
13. [BAAI / Hugging Face: bge-small-en-v1.5 モデルカード](https://huggingface.co/BAAI/bge-small-en-v1.5)

2026年9月8日時点の公式資料を確認しています。仕様は更新される可能性があります。

---

© 知能圏 https://www.chinouken.com/articles/funes-agent-memory
