はじめに
メール、Slack、X、ブログ。
仕事でも発信でも、毎日かなりの量の文章を書いています。
AIが出てきてからは減ったものの、人間らしさというか自分らしさを反映させようとするとまだ難しいところがあります。
そこでエンジニアならカスタムして「自分っぽく文章を書いてくれるAI」を作ろうとすると、最初に思いつくのはRAGだと思います。過去の発言やメモを突っ込んで、似ているものを検索して、LLMに渡して書かせる。
ただ、実際に作ってみると、すぐに限界が見えました。
たとえば、こんな依頼です。
CloudPaperの件、いまどう考えてるかも踏まえて、社内向けに短く整理して
このとき欲しいのは、単に CloudPaper という単語を含む過去文書ではありません。
- その案件の直近の状況
- その人の今の関心や判断軸
- 半年前と今で見方が変わっていないか
- 社外向けではなく、社内向けとしてどう言うか
ここまで必要になります。
つまり、自分AIで本当に必要なのは「似た文を探すこと」ではなく、
- 本人らしさ
- 時系列の変化
- トピックごとの見解
- 今回だけの案件文脈
を分けて扱うことでした。
そこで今回は、RAG を主役にせず、Claude Code を実行エンジンにしながら、Self Pack と Task Pack を組み立てる構成で「自分AI」を作ってみました。
https://me.lancers-ai.com/
まず結論: これはRAG中心の設計ではない
今回やっていることを一言でいうと
過去データをそのまま検索して渡すのではなく、
先に「その人」を構造化し、生成時は Claude Code が必要な文脈だけを取りにいく。
比較するとわかりやすいです。
| 観点 | 典型的なRAG | 今回の構成 |
|---|---|---|
| 中心発想 | 類似文書検索 | 人格と状況の構造化 |
| 主な入力 | chunk化した過去文書 | Self Pack + Task Pack + 必要時のraw検索 |
| 強いもの | 事実検索、類似文脈取得 | 本人らしさ、時系列変化、テーマごとの現在地 |
| 弱くなりやすいもの | 古い情報混入、文体の不安定さ | 初期設計の手間 |
| 検索の主体 | retrieval pipeline | Claude Code のエージェント的探索 |
| 向いている用途 | FAQ、知識検索 | 自分AI、文章生成、発信支援 |
RAG が悪いわけではありません。
ただ、自分AIでは「何を知っているか」以上に「どう考えるか」と「今どこにいるか」が重要でした。
全体像
全体の流れはこうです。
この構成のポイントは、学習と生成を分けていることです。
- 学習時は
Self Packを作る - 生成時は
Task Packを作る - 足りないときだけ Claude Code が raw を見にいく
これで、毎回すべてを検索して考え直す不安定さを避けています。
Self Pack: 「その人」を1枚に潰さない
自分AIを作るとき、最初は「プロフィール要約を1個作れば足りるのでは」と思っていました。でも実際には、それでは全然足りませんでした。
このプロダクトでは Self Pack をざっくり次の層に分けています。
| 層 | 役割 | 例 |
|---|---|---|
stable_identity |
変わりにくい人格や判断傾向 | 性格、好み、意思決定の癖 |
current_state |
直近の関心や状況 | 最近の出来事、今のストーリー |
history |
長い時間軸の変化 | プロフィール時系列、成功パターン、学び |
modes |
出力先ごとの文体 | メール、Slack、SNS |
topics |
テーマごとの現在地 | 公開向けの見解、内部向けの見解、変化 |
この分解をすると、たとえば同じ人でも
- 普段の口調
- 今まさに気にしていること
- 過去から見た変化
- 公開で言うことと内輪で言うこと
を混ぜずに扱えます。
時系列プロフィールを持たせる
ここで特に効いたのが profile_timeline です。
単に「こういう人です」と要約するだけだと、時間の変化が消えます。
でも実際の人間は、過去と今でフェーズが違います。
たとえば、
- 以前は受託中心だった
- 途中で個人開発中心に寄った
- そこから売却経験を得た
- 今はAIを使った開発と発信に軸足がある
こういう流れがあるなら、それは検索用メタデータではなく、生成に直接効く文脈です。
コード上でも、細かな作業ログではなく「転機」だけを拾うようにしていて、この判断はかなり良かったです。
トピックごとの現在地を持たせる
もうひとつ面白かったのが topics です。
各トピックについて、
- 概要
- 現在の見方
- 公開向け
- 内部向け
- 知識メモ
- 変化
を持たせています。
これがあると、たとえば「AIエージェント」や「個人開発」について、
- SNS向けに話すときの見せ方
- 社内で話すときの本音寄りの整理
- 過去から今への変化
を分けられます。
これはベクトル検索だけではかなりやりづらいです。
似た文章が見つかっても、「今の立場」を保証してくれないからです。
Claude Code をどう使っているか
今回のもうひとつの要点が Claude Code です。
これも単に API を叩いているだけではありません。
役割は大きく2つあります。
1. Self Pack の蒸留エンジン
raw データをそのまま生成に使うとノイズが多すぎます。
なので Claude Code に読ませて、
- 性格
- 好み
- 判断傾向
- 最近の関心
- 時系列の転機
- トピックごとの見解
を蒸留させています。
ここで重要なのは、自由な要約ではなく、保存先の構造を先に決めていることです。
Claude Code は賢いですが、何を残すかはアプリ側が決めています。
2. 生成時のエージェント
生成時には Task Pack を作り、その中に
- 今回の入力
- 会話履歴
- 今回の案件文脈
- 本人らしさの抜粋
- 過去から蒸留した学び
を入れます。
そのうえで、必要なら Claude Code 自身が raw ディレクトリを探して読みます。
ここがかなり重要です。
retrieval を固定のパイプラインにせず、Claude Code に「必要なら探しにいく」役割を持たせています。
つまり今回は、
embeddings で全部検索する設計
ではなく
先に構造化し、最後の探索は Claude Code に委ねる設計
にしています。ClaudeCodeのような賢いAIエージェントができたからこそで、まるでツールを使うかの如く動いてくれます。
具体例1: 社内向けの短文を作るとき
たとえば入力がこれだとします。
CloudPaperの件、いまどう考えてるかも踏まえて、社内向けに短く整理して
このとき内部では、ざっくりこういう流れになります。
Step 1. まず Task Pack を作る
まず今回の入力から、直近の案件文脈を集めます。
- 最近の Slack
- 直近の Notion メモ
- 最近の会話履歴
- current_state の story
- topic の
CloudPaper関連メモ
ここで大事なのは、古い archive を最優先にしないことです。
直近 60 日や 180 日を優先し、いまの状況を重く見ています。
Step 2. Self Pack から本人らしさを足す
次に、本人らしさとして
- 判断傾向
- 文体の好み
- 最近重視していること
を加えます。
たとえば、本人が
- 実用性を重視する
- 曖昧に濁しすぎない
- 相手が次に動ける形で返す
傾向なら、その癖がここで効きます。
Step 3. Claude Code が raw を読みにいく
その後、Claude Code が必要に応じて raw を検索します。
検索候補:
- CloudPaper
- cloud paper
- 関連するプロジェクト名
- 関係者名
- 最近のSlackチャンネル名
ここで見つかったファイルを読んで、最終的にこういう文が出せます。
現状、CloudPaperはまだ前に進める価値はあると思っています。
ただ、今の優先順位でいうと最上位ではなく、先に片付けるべき論点がいくつかあります。
特に、
- 誰のどの課題を一番強く解くのか
- 今の導線で最初の反応が取れるか
- 継続運用まで含めて回る形にできるか
この3点が整理できないままだと、作っても伸びにくいです。
なので、完全にやめるというより、一段解像度を上げて判断したいです。
これは単なる似た文の継ぎはぎではなく、
- いまの案件状況
- 本人の判断軸
- 社内向けのトーン
が合成された結果です。
具体例2: ブログ記事を書くとき
次は公開向けです。
たとえばテーマがこれだとします。
Claude Codeで自分AIを作る設計
このとき必要なのは、社内メモの生々しい言い回しではありません。
必要なのは、
- 公開向けのトピック整理
- その人の経歴や文脈
- 最近の問題意識
- ブログとして読める構成
です。
ここで効くのが次の組み合わせです。
| 使うもの | 役割 |
|---|---|
profile_timeline |
なぜこの人がこのテーマを書くのかを支える |
topics/publicView |
公開向けの見せ方を安定させる |
stable_identity |
口調や強調ポイントを揃える |
lessons |
記事のまとめや学びに厚みを出す |
| Claude Code の検索 | raw にある具体エピソードを拾う |
この構成にすると、記事がただの一般論になりにくいです。
「その人がなぜそう考えるのか」という筋が通ります。
なぜこの構成が効いたのか
実際に作ってみて効いたのは、次の3点でした。
1. 人格と案件文脈を分けたこと
自分AIで壊れやすいのは、人格データと案件データが混ざることです。
- 普段の口調
- 今回だけの事情
は分けたほうが圧倒的に安定します。
2. 時間を扱えるようにしたこと
人は変わります。
だから過去の発言をそのまま今の正解として使うと、わりと簡単にズレます。
current / recent / archive の層を持たせたのは、地味ですがかなり効きました。
3. Claude Code に全部丸投げしなかったこと
Claude Code は強いです。
でも強いからこそ、前段の構造がないと出力が散ります。
今回うまくいったのは、
- 先に Self Pack を作る
- 毎回 Task Pack を作る
- 足りないところだけ Claude Code に探させる
という分担にしたからです。
Claude Code を使うこと自体が価値なのではなく、
Claude Code がうまく働ける土台を作ったことが価値でした。
まとめ
今回の自分AIは、RAG を中心にした設計ではありません。
- 先に人格や履歴を構造化する
- 時系列プロフィールを持つ
- トピックごとの現在地を持つ
- 生成時は Task Pack で今回の文脈をまとめる
- 必要なら Claude Code が raw を検索して読む
この構成にしたことで、単なる「似た文章を出すAI」ではなく、
「その人っぽく、しかも今の状況に合った文章を書くAI」に近づけました。
ブログ下書き、X投稿、Slack返信、メール返信。
こういう日常の文面は、想像以上に「本人らしさ」と「今の状況」の掛け算でできています。
もし自分AIに興味があるなら、RAGだけで考えず、
人格 時間 トピック 案件文脈 をどう分けるかから設計してみると、一気に見え方が変わるはずです。
このプロダクトも、まさにそこを掘っている最中です。
単なるAIライティングではなく、自分を構造化して使えるようにするソフトウェア として、かなり面白くなってきています。
興味を持っていただけた方はぜひ!
https://me.lancers-ai.com/