みなさん、こんにちは!
「ALPHA FORGE 開発秘話」の第25話です。
ぜんぜん違う4つの大企業の株価指標が、小数点まで同じ。PERは12.5、PBRは1.1、配当利回りは2.8🤨
偶然なわけがありません。犯人は、ナレッジベースを作る別のプロジェクトに潜んでいた「失敗したら、それっぽい数字で埋める」1行でした。
日本株のAI銘柄スクリーニング&継続学習端末「ALPHA FORGE(アルファフォージ)」を、Claude Code と二人三脚で個人開発しています。今回は【プロンプト】【ハーネス】回。Claude Code が別のAIエージェントへの指示書を書き、その仕事をレビューした話です📮
【要約:この記事で伝えたいこと】
- 「AIが参照しているナレッジベースはどれ?」の一言から、4,629件の銘柄ノートのうち4件に、そっくり同じ偽の数字が入っていると分かった
- 直す場所は、別のAI(Antigravity)が担当する別プロジェクト。Claude Code が指示書を書き、Antigravity が直し、Claude Code がレビューして退行を1件見つけた。全部の橋渡しをしたのは人間
- 持ち帰り:AIからAIへの仕事は、指示書(原因・直し方・テスト)と、別の目によるレビューのセットで回す。そして「失敗したら、それっぽい値で埋める」コードは書かない
※本記事はnote連載[ALPHA FORGE 開発秘話 #25] の技術的な部分を、エンジニア向けに再構成したものです。
🔍 「参照しているナレッジベースはどれ?」
ALPHA FORGE は、Obsidian で作った銘柄ノート(ナレッジベース)を判断材料の1つにしています。ノートを作っているのは、別のプロジェクト。そちらは Google の AIエージェント「Antigravity」と一緒に作っています。
9月14日の夕方、1日の振り返りのついでに、私はAI(Claude Code)に聞きました。
現在のClaudeやGeminiでのAIピック、判断において参照しているObsidianのナレッジベースはどれですか
AIは参照の経路を表にして返してくれました。プロンプトに入れるのは、ノート冒頭の項目欄(frontmatter)だけ。本文は入れない、という第9話の約束も守られていました👍
続けて私は「Tickers/フォルダのfrontmatter項目を見せて」、そして「詳しく調べましょう」。
🤨 4社そろって「PER 12.5」
AIが実際のノートを開いて比べると、出てきました。超大型株の4銘柄で、PERが12.5、PBRが1.1、配当利回りが2.8。まったく違う会社なのに、寸分違わず同じ値です。SNSの言及数まで、4銘柄そろって1250😑
AIの調べでは、こうでした(要旨)。
- 影響は4,629件中のわずか4件(0.09%)。でも全部、超大型株
- 今は実害は限定的。ALPHA FORGE は別の取得元の値を優先し、取れなかった項目だけノートで補う作りだから
- ただし、別の取得元が落ちた日には、この架空の値がそのまま分析に使われてしまう(その日の朝、実際に取得元が落ちていました😱)
📝 Claude Code が、Antigravity への指示書を書く
直すべき場所は、ALPHA FORGE の外です。そこで私は頼みました。
ナレッジベースの管理はAntigravityで作成したプロジェクトで行っています。Antigravityに具体的な指示をMD形式で出力してください。
AIは向こうのコードまで読んで、原因を突き止めました。ある株式情報サイトの画面から指標を読む部品が、読み取りに失敗すると0のまま。そこにこう書いてあったんです(抜粋)。
"per": per or 12.5,
Python の or は、「取れなかった」と「本当に0」を区別できません。失敗すると、決め打ちの値にすり替わる。しかも成功扱いのまま記録されるので、受け取る側からは本物と見分けがつかない🎭
ハマりどころ
value or default は「値が無いとき」だけでなく、0 や空文字のような「偽と評価される正しい値」も置き換えます。さらに、置き換えたことを記録しないと、下流からは本物の値と区別できません。失敗は「値なし」のまま返し、埋めるかどうかは使う側で決めます。
さらに私は追加で頼みました。
情報の精度や粒度をあげるために必要な改善点やデータソースなどを追加する余地がある場合はそのことについても追記してください。
AIが掘ると、もっと大きな構図が見えました。向こうのプロジェクトには、公式のデータを使う高品質な作り方がすでにあった。なのに、監視用の簡易な作り方が同じ4銘柄のノートを上から書きつぶし、情報を劣化させていたんです。指示書には、原因の修正に加えて、次の改善案が並びました📋
- 既存の高品質な部品を使い回す
- 出典を記録する
- 偽の値を品質チェックで止める
- ノートを丸ごと上書きせず、部分だけ混ぜる
🔎 Claude Code が、Antigravity の仕事をレビューする
指示書を Antigravity に渡して約1時間。私は「Antigravityが修正したみたいなので、レビューをしてあげてください」と頼みました。
Claude Code の総評は「良好。ただし1件の退行あり」。
| 区分 | 中身 |
|---|---|
| 直っていた | 決め打ちの値は撤去され、失敗は「値なし」として残るように。高品質なノートを丸ごと上書きせず、必要な部分だけ混ぜる方式に。偽の値の組み合わせを品質チェックで止めるガードも追加。テストは93件すべて通過 |
| 退行が1件 | 企業の概要を取る処理が消えていて、全銘柄に同じ定型文が入ってしまう |
| 軽い指摘が2件 | 価格を更新しても日付が古いまま、など |
私は「私の方で直してください」と返しました。Claude Code は実際のページの構造をブラウザで確かめ、実は元の作りも間違った場所を読んでいたことまで見つけて、正しい場所から取るように直しました。取れなかったときの文言も「取得できませんでした」と、失敗を隠さない書き方に。テストは全155件が通りました✅
⚖️ やったこと/やらなかったこと
- やったこと:直す場所の持ち主(Antigravity 側)に、指示書で直してもらう。レビューは別のAIが行う
- やらなかったこと:ALPHA FORGE 側に「同じ値が並んだら信じない」という防御だけを足して済ませる案。偽の値を作る元を直さない限り、ほかの使い道で同じ事故が起きるから
- やらなかったこと:レビューを省いてそのまま使う案。実際に退行が1件見つかりました
- 決めたのは人間:指示書にすること、改善案まで書かせること、レビューさせること、最後の修正を Claude Code に任せること
🧰 今回のプロンプト/ハーネス術:AIからAIへの「指示書」
人間がAIに頼むときと同じで、AIからAIへの仕事も、指示書の質で決まります。今回の指示書に入っていたのは、この4つでした📮
- 何が起きているか(症状と、影響の範囲)
- なぜ起きているか(コードの場所つきの原因)
- どう直すか(直し方の方針と、追加するテスト)
- ついでに良くできること(精度を上げる改善案)
そしてもう1つ大事なのが、書く役・直す役・確かめる役を分けること。直した本人は、自分の退行に気づきにくい。だから別の目でレビューします。人間のチームと、まったく同じですね👥
📌 保存用チェックリスト
- 「失敗したら、それっぽい値で埋める」コードを書かない。失敗は「値なし」で残す
- 違う対象で値がそっくり同じなら、まず偽データを疑う
- 持ち場の違う直しは、原因・直し方・テストを書いた指示書で渡す
- 直した本人とは別の目で、レビューする
- AIとAIの間の受け渡しと、最後の判断は人間がやる
☕ note.comで開発秘話と毎朝の検証ログを連載中
note.comでは、「ALPHA FORGE」の開発秘話と、毎朝のアルゴリズム検証ログを公開しています。
👉 元記事(note連載第25話):
https://note.com/featured_stocks/n/n376bb605f445
AIに任せる範囲と、止める仕組みの全体像は第19話にまとめています。
エンジニアでない方向けに「AIへの仕事の頼み方」をまとめた連載(メンバーシップ「AIとつくるラボ」)もやっています。第0話は無料で読めます。
免責事項
本記事は個人開発およびAIエージェントを活用したシステム開発の技術記録です。特定の銘柄の売買推奨や投資助言を行うものではありません。記事中のナレッジベースの不具合と修正は、2026年9月14日時点の開発時の記録にもとづくものです。株価指標の値は不具合の例として示したもので、特定の銘柄の評価ではありません。AIの発言は要旨です。
⚠️ 【システム検証記録に関する免責事項・注意事項】
- 本記事は、独自開発アルゴリズム「ALPHA FORGE」の動作検証およびデータ分析過程を公開する技術・運用の個人的な記録ログです。
- 掲載されているすべてのデータ(各スコア、基準観測値、統計的変動上限、シナリオ無効化水準など)は、過去の市場データに基づき数式(ATR等)により機械的に算出されたバックテスト・シミュレーション用のパラメータであり、特定の有価証券の売買勧誘、取引の推奨、投資助言・代理行為を目的としたものではありません。
- また、将来の株価変動や運用成果を保証するものではありません。実際の投資判断および最終決定は、必ずご自身の責任と判断において行っていただけますようお願いいたします。





