アリババエンジニアリング、AI 知識ベース体系構築の実践を公開
本文の状態
日本語全文を表示中
詳細モードで約59分の本文を読めます。
同じ出来事の情報源
この情報源を基点に整理
Alibaba Engineering
アリババエンジニアリングは、AI エージェントが複雑なバックエンドシステムで正しく行動するために必要不可欠な「AI 知識体系」の構築実践を公開し、単なるコード理解を超えた業務・アーキテクチャ理解と安全な自動実行の実現方法を詳述した。
AI深層分析を開く2026年8月1日 00:43
AI深層分析
キーポイント
AI フレンドリー化の本質的課題
コードの可読性向上だけでは不十分であり、システム境界や互換性制約などコード外に存在する暗黙知を如何に構造化して AI に提供できるかが真の課題である。
技術設計の決定力増大
AI エージェントは誤った指示に対して忠実に実行するため、人間が持つような批判的検討能力を持たず、設計段階での方向性ミスが即座に大規模な実装エラーとして拡大する。
知識の多層化と分類
新人教育用の Wiki とは異なり、サービス間影響分析や安全なコード修正にはそれぞれ異なる形態(サービス図譜、依存関係、制約ルールなど)の知識を明確に定義して提供しなければならない。
組織的記憶の補完
人間のエンジニアが経験や事故記録で補う文脈情報を AI が利用するには、分散したコード、設定、履歴 PR、口頭合意などを体系的に統合する必要がある。
AI Coding における知識の役割
AI は単にコードを読むだけでなく、システム設計と変更実行時に正確で検証可能な文脈を必要とする。
重要な引用
AI エージェントは誤った指示に対して忠実に実行するため、人間が持つような批判的検討能力を持たず、設計段階での方向性ミスが即座に大規模な実装エラーとして拡大する。
本質的な問題は、AI がシステムの境界や互換性制約などコード外に存在する暗黙知をどう理解するかである。
AI エージェントは誤った指示に対して忠実に実行するため、人間が持つような批判的検討能力を持たず、設計段階での方向性ミスが即座に大規模な実装エラーとして拡大する。
AI は単にコードを読むだけでなく、システム設計と変更実行時に正確で検証可能な文脈を必要とする
編集コメントを表示
編集コメント
本記事は、AI エージェントの実用化において最も懸念される「誤った実行」のリスクを、知識体系の設計段階でどう防ぐかという実践的な視点を提示している。技術者にとって、単なるコード生成ツールを超えたシステム全体の理解と制御をどう AI に委譲するかという重要な示唆を含んでいる。
Source Article
元記事を日本語で読む
本文に関係しない購読案内、埋め込み通知、サイト内プロモーションは除いています。
分解一座冰山:后端系统「AI 知识库体系」建设实践
系统化地构建后端架构知识库,让 AI 从理解代码进阶到理解业务与架构。
这是 2026 年第 41 篇文章(阅读时间约 20 分钟)
从「让 AI 看懂代码」到「让 AI 正确行动」
在上一篇讨论《后端系统 AI Friendly 设计》的文章中,我们开篇就强调过一个判断:后端系统要想真正进入 AI Friendly 状态,不能只停留在“代码写得清楚一点”、“README 多补一点”或“接口注释完整一点”这种层面。
这些当然重要,但它们解决的更多是“人和 AI 能不能读懂局部代码”的问题,而不是“AI 能否在一个复杂系统中做出正确的工程判断”。
真正的问题是:当 AI Agent 接到一个需求时,它到底知不知道这个系统的边界在哪里?知不知道哪些接口绝对不能破坏兼容?知不知道这张表的某个字段虽然看起来没人用,但其实是下游离线任务每天凌晨要扫描的?知不知道某个 MQ Topic 的 schema 不能随便改,因为还有三个历史服务在消费老格式?知不知道某个模块虽然代码很旧,但它是交易链路里的关键兜底逻辑,动了之后不是单测过了就能上线?
这就是后端系统 AI Friendly 化真正麻烦的地方。
AI 并非完全看不懂代码。恰恰相反,今天的大模型在读取、解释代码,以及补全测试、进行局部修改等方面的能力已经相当强了。
问题在于,后端系统里的很多关键知识并不直接存在于代码中;或者虽然存在于代码里,却分散在不同的仓库、不同的配置、不同的历史 PR 以及各种口头约定之中。
人类工程师靠长期经验、团队沟通和线上事故记忆来补全这些上下文;而 AI Agent 没有这些“组织记忆”,它只能读取你明确给它的东西。
「知識ベースをどう選ぶか」という問いは、一見するとツールの選定問題に見えますが、実はより根本的な課題です。つまり、「どのシステム知識を明示的に取り出すのか」、そして「それを AI が使える形にどう変換すべきか」が問われています。
新人のオンボーディングだけが目的なら、自動生成された Markdown Wiki で十分かもしれません。しかし、サービス間の影響分析や、特に跨サービスの技術設計を行うのであれば、サービス図譜、依存関係、上下流の呼び出しチェーンといった知識が必要です。
さらに、AI によるコードの安全な修正を実現するためには、明確な制約、レッドライン(絶対禁止事項)、タスクルーティング、検証基準が不可欠です。問題ごとに必要な知識の形態は異なり、混同して議論すべきではありません。「大規模で包括的な知識ベース」があれば全て解決できるという幻想に陥ってはいけません。
この記事で論じる核心は、後端システムを AI フレンドリーにする際、どのように知識ベースを設計し、その巨大な山から水面下の 90% を掘り起こすかです。そうして初めて、AI は単なる同僚(coworker)から、自律的に動作するオペレーター(agentic operator)へと進化します。
知識ベースから技術設計へ——決定的なポイント
2.1 なぜ技術設計がこれほど重要なのか
現場で繰り返し直面する課題です。AI コーディングを同僚として支援する「CoWorker」形式であれ、7x24 時間自律的に計画・実行する「Agentic Operator」形式であれ、開発プロセス全体において最も重要な环节は技術設計です。この設計の質が、その後のコーディング実行と成果物の正確性を直接決定します。
この判断は古風に見えるかもしれません。「AI が登場する以前から技術設計は重要だったのに、何が新しいのか?」と思うでしょう。しかし、AI 時代における真の新しさは、設計品質のレバレッジ効果(増幅効果)が飛躍的に高まっている点にあります。その増幅率は、直感を超えています。
一、AI の実行速度が誤りの伝播速度を加速させる
人間エンジニアが方向を間違えた場合、数時間かけて数百行のコードを書き、プルリクエストでレビューされる際に指摘されれば済みます。被害は限定的です。しかし、誤った設計の指示を受けた AI エージェントは、10 分もあれば 5 つのファイル、3 つの API、2 つのデータベーステーブルにまたがる完全な変更を完了してしまいます。方向が間違っていると気づいた時には、ロールバックにかかるコストは人間によるコーディング時の数倍に膨れ上がっています。
さらに厄介なのは、このようなエラーが単なる構文ミスやユニットテストで検出可能なバグではない点です。「業務理解の誤り」「境界条件の改変ミス」「互換性の破壊」「下流への影響の見落とし」といった、本質的な問題が含まれていることが多いのです。
二、AI のデフォルト動作は「忠実な実行」であって、「設計への疑問提示」ではない
経験豊富なシニアエンジニアに問題のある要件を渡せば、「ここに矛盾がある」「この設計では循環依存が発生する」「並行処理のケースを見落としている」「過去の仕様変更と整合しない」といった指摘が返ってきます。こうした批判的思考は、長年の経験によって培われたものです。
現在の AI も完全に疑問を呈できないわけではありません。形式的な論理矛盾については指摘しますが、「システム全体を理解しないと見抜けない問題」——例えば「この設計では下流サービスがタイムアウトする」「このフィールドは削除可能に見えるがオフライン照合に影響する」「この状態遷移には人手による承認プロセスが必要だ」といった事象——に対しては、多くの場合、AI は自ら停止して疑問を呈することなく、指示されたまま実行してしまいます。
三、AI コーディングの真価は「実行の詳細」を AI に任せることにある
しかし、この価値には重要な前提条件があります。それは「実行の方向性が正しいこと」です。もし、AI によって節約できたコーディング時間を、デバッグやロールバック、手戻り、オンライン上の異常説明に費やすのであれば、純粋な効率向上はゼロに近づいてしまいます。
多くのチームが「AI を使っても劇的に速くなった実感がない」と報告する背景には、AI のコーディング能力そのものの問題ではなく、技術設計の段階で何かが欠落しているケースが多々あります。AI は非常に効率的に「局所的には正しいが、全体としては誤った」コードを大量に生成してしまいます。結局、人間がその残りを片付けるために時間を費やす羽目になるのです。
技術設計は、知識ベースへの依存度が極めて高い
AI コーディングの時代において、技術設計とは単に「ドキュメントを作成する」作業ではありません。まずは AI に正確なシステムコンテキストを提供し、それを支えるための堅牢な知識基盤を構築することが不可欠です。
この知識基盤は、少なくとも以下の問いに答えられるものでなければなりません。
現在のシステムアーキテクチャはどのような構造か?モジュールの分割方法は?各モジュールの責任範囲はどこにあるのか?今回の要件に関連する上流・下流システムはどれか?API の契約仕様はどうなっているか?変更が及ぶ影響範囲は?データベーススキーマは?どのフィールドにビジネス制約があるのか?表間の暗黙的な依存関係は存在するか?類似した過去の事例から学べる点は何か?以前同様の機能を実装する際にどのような課題があったか?システム上の「レッドライン(絶対守るべきルール)」とは何か?いかなる状況下でも実行が禁止される操作は何か。
人間のエンジニアであれば、経験やコミュニケーション、そして過去の記憶を通じてこれらの情報を得ます。しかし AI にとって必要なのは、構造化され、正確で、かつ必要な時に柔軟に読み込める知識源です。
さらに重要なのが、「業務メタファ(ビジネスの概念)」に対応する既存の技術スタックや設計パターンです。これらを把握しておくことは、技術設計の効率と精度を飛躍的に高めます。私たちはこの層を「ビジネスレイヤー」と呼び、ビジネス要件とアーキテクチャの間の橋渡しやマッピングを担当します。
私たちが目指すべきは、単に AI にコードを読ませるだけではありません。「AI が設計を行い、変更を実行する際に、正確で完全かつ検証可能なシステムコンテキストを持っていること」を保障することです。
これにより、明確な 2 つの課題が浮き彫りになります。1. 知識基盤にはどのような要素を含めるべきか?2. その知識基盤をどのように構築し、ロードすべきか?
AI コーディング全体を貫く知識基盤
「知識基盤から技術設計へ」という議論に入る前に、一つ明確にしておく必要があります。知識基盤は、AI がコードを書く前の準備段階だけで使われるものではなく、また単なる検索対象の RAG ドキュメントとして片隅に置かれるべきものでもありません。AI コーディングにおいては、要件理解、現状分析、設計立案、コーディング実行、検証・テスト、そしてレビューと納品に至るまで、プロセス全体を通じて活用されるべきものです。
7x24 時間稼働する AI やエージェントによるコーディングを分解して見てみると、それは単に「AI が自動でコードを書く」という単純な話ではありません。少なくとも以下の連続した一連の動作を含んでいます。
まず要件を理解し、ビジネス概念を特定します。次に、その概念に対応するシステム、モジュール、インターフェース、テーブル、メッセージを探し出します。その後、変更範囲を分析し、上流・下流への影響を判断します。そして技術設計を策定し、「どこをどのように変更し、どこは変更しないか」を決定します。最後にようやくコーディング、テスト、レビュー、納品へと進みます。
このプロセスのどの段階でもコンテキストが欠落すれば、その後の実行は歪んでしまいます。
「AI コーディング」における知識ベースの役割は、単なる検索用データベースではありません。それは、開発プロセス全体を貫くシステムコンテキストとして機能します。
まず、要件理解フェーズでは、知識ベースが AI に「業務のメタ言語」を理解させる手助けをします。「リファウンド体験の最適化」「権限凍結」「履行異常への補償」「注文逆転フロー」といった用語は、ビジネス担当者にとっては自然な言葉ですが、AI にとっては単なる文字列に過ぎません。もし業務知識や業務からシステムへのマッピングがなければ、AI は字面だけで推測するしかありません。例えば「リファウンド(refund)」という言葉の意味は知っていても、そのチームにおける具体的なリファウンドが、注文ステータス、決済明細の状態、履行状態、財務照合、カスタマーサポートのチケット、あるいはリスク管理戦略のどれに関わるのかまでは把握できません。業務層知識の価値とは、こうした業務用語をシステムが認識できる技術オブジェクトやフローに変換することにあります。
次に、現状分析と影響分析フェーズでは、知識ベースが AI に「実際のシステム」への回帰を促します。一つのリクエストに対して、単一サービスを変更するだけで済むのか、それとも複数サービスにまたがるのか?インターフェースの変更か、ステートマシンの変更か?同期フローの修正か、非同期メッセージの調整か?下流のコンシューマーに影響はあるのか?旧バージョンのクライアントとの互換性を損なうリスクはないのか?これらの問いに対して、現在のリポジトリを AI が参照するだけでは不十分です。アーキテクチャ層の知識、サービス間の依存関係、上流・下流の呼び出しグラフ、過去のベストプラクティス、そして「なぜこのシステムは過去にこう設計されたのか」という背景知識が必要です。これらが欠如していると、AI は「単一リポジトリ内では理にかなっているように見えるが、全体的なフローで見れば不合理である」ような提案をしてしまうリスクが高まります。
さらに、技術ソリューション設計フェーズでは、知識ベースの価値はさらに増幅されます。なぜなら、この段階で重要なのはコードファイルを列挙することではなく、変更範囲、データフロー、ステートフロー、互換性戦略、例外処理、グレーリリースの方法、検証範囲を明確に定義することだからです。最も警戒すべきは、AI が「形式上は完璧だが文脈が間違っている」提案を行うことです。ドキュメントの体裁は技術仕様書のようであり、インターフェースやテーブル構造、フローチャート、テスト計画も含まれているのに、肝心のシステムの一部が抜け落ちている、重要な制約条件が言及されていない、下流への影響分析が不足している、過去の互換性対応が考慮されていないといったケースです。こうした提案は、一見すると完成度が高いため、かえって後続のコーディング実行に対して「方向性が確定した」という誤った安心感を与え、危険を招きます。
コーディング実行フェーズでは、知識ベースは AI にシステムを理解させるだけでなく、「どのように行動すべきか」を制約する役割も果たします。どのディレクトリを変更可能で、どのモジュールが層を超えた呼び出しを禁止されているのか。どのフィールドの削除が許されず、どのインターフェースは意味を変えずに追加のみ許可されるのか。どのステート遷移が冪等性を保つ必要があるのか。どのミドルウェアの利用方法がチームの規範に従うべきなのか。これらは事前に明示的に定義しておく必要があります。そうでなければ、機能としては動作するものの、システムルールに違反したコードを AI が生成してしまう恐れがあります。
検証・テストフェーズでは、知識ベースは「どのようにして今回の変更が安全であることを証明するか」を回答します。変更の種類によって、対応する検証方法は異なります。新しい API の追加にはインターフェース契約と互換性の確認が必要ですし、データベースの変更にはマイグレーション、ロールバック、履歴データの扱いに注力する必要があります。MQ メッセージの変更では、プロデューサー、コンシューマー、重複消費のリスクを確認します。ステートマシンの変更では、メインフロー、逆転フロー、例外ブランチの検証が不可欠です。知識ベースにこれらの検証ルールがなければ、AI は実行しやすい単体テストだけを実行し、「テスト通過」という結論を導き出しますが、その結論は実際のリスクをカバーしていない可能性が高いのです。
つまり、AI コーディングにおける知識ベースの役割は、単なる「答えを探す資料庫」ではなく、プロセス全体を貫くシステムコンテキストとして捉えるべきです。それは事実とマッピングを提供し、制約と検証基準を示します。AI が業務やシステムを理解するのを助けるだけでなく、実行時に境界線を越えないよう導くのです。
さらに重要なのは、知識ベースは一度きりの入力ではなく、継続的なクローズドループを形成すべきだという点です。技術ソリューションのレビューで見つかった抜け漏れ、コードレビューで指摘されたリスク、本番環境の問題で露呈した隠れた依存関係、過去の互換性対応による特殊な処理など、これらすべてが知識ベースへと逆方向に蓄積されるべきです。そうでなければ、知識ベースは「一見すると完全だが、実際には古くなった」ドキュメントになってしまいます。AI が最も恐れるのは、コンテキストがないことではなく、「誤ったコンテキスト」を与えられることです。
したがって、AI コーディングの観点からすれば、知識ベースの役割はプロセス全体に及んでいますが、その中で最も重要な増幅点は依然として「技術ソリューション設計」にあります。要件理解、現状分析、影響分析、コーディング実行、検証テストは、すべて最終的に「今回はどのように変更すべきか」という一つの問いに収束するからです。一度でも技術ソリューションが間違っていれば、その後のすべての効率的な実行は、効率的なやり直しへと転じてしまいます。
では、知識ベースを具体的にどう構築し、どのような目標を目指すべきなのでしょうか?
03 知識ベースの建設目標と階層化
3.1 建設目標
AI コーディングの全プロセスにおける「知識ベース(Knowledge Base)」構築の目標は、その核心的価値と影響範囲を踏まえて設定する必要があります。典型的なインターネットアーキテクチャの視点から評価すると、主に以下の指標が重要となります。
まず「内容の網羅性」です。技術設計や AI コーディングを行う際、知識ベースの内容が十分かどうかは極めて重要です。特に後端に数十ものマイクロサービスが存在する場合、知識ベースがシステム全体を正しく反映できているかが問われます。例えば、すでに緯度経度からユーザーの POI(地点情報)を取得できるマイクロサービスが存在しているのに、知識ベースにその情報が欠落していると、AI は同じ機能を持つ API をゼロから再設計・開発しようとしてしまいます。
次に「内容の正確性」です。AI 時代において、知識ベースの精度は飛躍的に向上しました。多くの知識が AI によって生成されており、人間の手作業による整理よりも効率的で正確になっています。しかし、「技術用語の定義が重複する」という課題は依然として残っています。例えば「注文(Order)」という概念一つをとっても、外食システムでは「ユーザーが作成した注文」も「配送担当者が受け取った配送依頼」もどちらも「注文」と呼ばれることがあります。これらは本質的に異なるエンティティですが、文脈によってどちらを指しているのか曖昧になりがちです。こうした誤解を招くシナリオへの対応や、コード変更時に知識ベースが即時に同期更新されるかどうかも、実装において特に注意すべき点です。
そして「検索の効率と品質」です。技術調査や設計段階では、複数のコードリポジトリから情報を引き出す必要があります。この際、検索精度はクエリの最適化や検索エンジン自体の性能に大きく依存します。大規模言語モデルのコンテキストウィンドウサイズが数百 KB、あるいは MB 単位であっても、実際には有効な注意(アテンション)が集中するのは最初の数十 KB に過ぎないことが多いためです。
つまり、知識ベースの構築はこれらの方向性に密接に連動して進める必要があります。
3.2 知識ベースの階層設計
調査とヒアリングを通じて、多くのチームが知識ベースの構築や、それを活用した技術設計において共通する課題を抱えていることがわかりました。
製品要件から技術実装への転換におけるボトルネック
製品の PRD(製品仕様書)は通常「ユーザーインターフェース」を起点に記述されます。しかし、UI から後端 API へ移行するには変換プロセスが必要です。「特定の画面リクエストがどの後端 API を呼び出し、その結果として画面のどの部分が描画されるのか」という知識が欠落していることが、「PRD から技術設計へ」移行する際の大きな障壁となっています。
多層・多システムにわたるシステムの事実と制約
大規模なインターネットプロジェクトでは、一つのユーザーリクエストが複数の後端マイクロサービスを横断し、各サービスで異なるロジックが処理されます。今回の要件において「どのレイヤーのどのマイクロサービスで実装すべきか」を決定するには、膨大なリンク知識やアーキテクチャ制約、システム制約に関する情報が必要です。
検索強化生成(RAG)の活用
大規模言語モデルの会話ウィンドウ(コンテキスト長)は有限です。すべての上流・下流システムの知識を一つのセッションに詰め込むことは不可能であり、「必要な時だけ読み込む」あるいは「最も関連性の高い文脈のみを読み込む」という仕組みが不可欠です。これが検索強化生成(RAG)が解決しようとしている課題であり、知識ベース構築において必須の機能の一つです。
単一システム内における知識の網羅性と抽象度
上記のような業務変換やリンク変換を経た後、実際のコーディング段階では、単一のマイクロサービス内の知識ベースの質がより重要になります。例えば、優れた知識ベースは、業界で標準的な DDD(ドメイン駆動設計)や「三色モデル」などの古典的アプローチに基づいてシステムコードを抽象化できます。これはコードの美しさだけでなく、アーキテクチャや制約、設計思想などを可視化する点でも AI コーディングを強力に支援します。
これらの課題と現状を踏まえ、私たちは知識ベースを以下のような 4 つの層に分割して設計・実践を行いました。
- ビジネス層
- アーキテクチャ層
- システム層
- インフラ層
青い背景枠で囲まれた部分は、投資対効果が高く、早期に導入して即効性を得られるモジュールです。
3.2.1 ビジネス層:AI に「なぜ変更するのか」「業務がどこに属するか」を教える
ビジネス層は、技術チームによって最も過小評価されやすい部分です。多くの人が AI コーディングについて議論する際、すぐにコードリポジトリや API ドキュメント、データベースのテーブルから話を始めがちですが、実際の開発プロセスはコードから始まるのではなく、業務課題から始まります。
ビジネス層には少なくとも 3 つの種類の知識が必要です。それは「业务知识(ビジネス知識)」「业务与架构映射(業務とアーキテクチャのマッピング)」「历史实践(過去の事例)」です。
ビジネス知識:これは「このシステムが実際に何の業務を支えているのか」を解決するものです。例えば、注文、決済、履行、特典管理、在庫、リスク管理、照合といった業務概念が何を意味するのか、その中核となるルールは何か、どのような状態遷移が正常なのか、どの操作が高リスクに分類されるのかを理解させる必要があります。AI がコードだけを見ていれば、「order_status」の列挙値をいくつ持っているかくらいは読み取れるかもしれませんが、「支払い済みだが履行されていない」という状態が業務上何を意味するのかまで理解できるとは限りません。また、なぜ特定の状態で直接遷移できないのかという理由も把握できていない可能性があります。
業務とアーキテクチャのマッピング:これは「業務概念が最終的にどのシステム、モジュール、API、テーブル、メッセージに紐づくか」を解決するものです。この部分は非常に重要であり、多くの知識ベースで欠落しがちな箇所です。「リフト体験の改善」というのは一見すると業務上の要望ですが、システムレベルで見ると、注文サービス、決済サービス、履行サービス、カスタマーサポートシステム、財務照合、通知メッセージ、リスク管理戦略など、リフトに関連する機能を持つシステムが多数関わってきます。リフト操作のビジネスフローを技術システムに落とし込んだ際、最初に呼び出される API は何か?同期 API とは何か?非同期 API とは何か?AI がこれらのマッピング関係を知らなければ、跨システムにまたがる要件を単一サービスの局所的な修正と誤判断してしまう恐れがあります。
過去の事例(歴史实践):これは「過去になぜそう設計したのか」を解決するものです。例えばプラットフォーム型システムにおいて、新しいカスタム機能を追加する際、開発コードは常に似たような階層構造やモジュール構成になります。こうした過去の事例を蓄積し、AI の学習データとして提供することで、同様の問題に対して効率的な技術ソリューションを導き出し、そのリスクを低減できます。また、多くのバックエンドシステムには一見すると不格好に見える設計が残っているものです。不要なフィールドや、古いロジックとの互換性を保つためのコード、特殊なデフォルト処理、削除できない MQ コンシューマーのブランチなどです。新人エンジニアはこれを「汚い」と感じますが、AI は「リファクタリングすべきだ」と判断しがちです。しかし、これらには過去のインシデント、グレーディング(段階的リリース)での互換性維持、旧バージョンクライアントへの対応、下流システムとの依存関係、コンプライアンス要件、あるいは業務上の妥協といった背景が隠されています。
そのため、「業務とアーキテクチャのマッピング」と「過去の事例」はビジネス層の中でも特に重点的に扱うべきだと私は考えます。これらはコード内にも、自動生成されたドキュメント内にも、API 定義書の中にも存在しません。しかし、技術ソリューションの設計が正しいかどうかを直接左右する要素なのです。
3.2.2 アーキテクチャ層:AI に「システム間での連携方法」を教える
アーキテクチャ層は、システム間の役割分担、呼び出し関係、依存関係、そしてガバナンスの問題を解決するものです。具体的には、「アーキテクチャ・階層・リンケージの事実」「アーキテクチャ制約」「サービスガバナンス」を含みます。
アーキテクチャ・階層・リンケージの事実:これは「システムがどのように組織化されているか」を回答するものです。例えば、ある業務フローがゲートウェイから入った後、どのサービスを経由するのか、各サービスはどのような役割を担っているのか、コアとなるフローとサイドラインのフローはどこで分かれるのか、どのモジュールがドメイン層に属し、どのモジュールがアプリケーション層に属し、どのモジュールがアダプター層に過ぎないのか、また、どの API が同期呼び出しで、どのメッセージが非同期処理なのか、どのデータが強い一貫性を保ち、どのデータが最終的な一貫性で許容されるのか、といった情報を把握する必要があります。
技術設計において、アーキテクチャに関する知識や事実は極めて重要です。AI が単に現在のリポジトリのみを参照すると、「局所的な最適解」に陥るリスクがあります。具体的には、特定のサービス内では実装がスムーズでも、システム全体の連携としては不合理なケースです。
例えば、本来は注文サービスで処理すべきロジックを AI がゲートウェイ層へ移してしまったり、ドメインオブジェクトで保証すべきバリデーションを複数のコントローラーに散在させてしまったり、非同期の MQ による疎結合化が必要なのに、AI が新たな同期 RPC 呼び出しを追加したりする問題です。これらはコード能力の問題ではなく、アーキテクチャの文脈(コンテキスト)が不足していることに起因します。
「アーキテクチャ制約」は、「システム設計上、どのようにしてはいけないか」を定義するものです。例えば、コアな処理フローに新たな依存関係を追加することは禁止されたり、取引フローで不安定な外部サービスを導入してはならなかったりします。また、特定のインターフェースはアグリゲーションサービスからのみ呼び出せるように制限されたり、あるサービスが上位層へ逆方向の依存を持つことは許されません。データ同期もドメインイベントを通じて行うべきであり、跨データベースでの直接照会を避ける必要があります。
アーキテクチャ制約とコード規約は異なります。前者はシステム間の関係や依存の方向性を拘束するものです。
「サービスガバナンス」は、よりランタイム時および組織的なガバナンスに焦点を当てています。ここでは、サービスのレベル(SLA)、タイムアウト設定、リトライ戦略、サーキットブレーカーとフェイルオーバー、レート制限ルール、インターフェースの責任者、依存関係のオーナー、グレーデーション戦略、監視・アラートなどが含まれます。
これらの情報は、コードの実装方法に直接影響を与えるわけではありませんが、提案された方案が実際にリリース可能かどうか、リスクは管理できるか、問題発生時に迅速な特定が可能かなどを決定づけます。
技術選定の観点からは、システム間の関係を理解するアーキテクチャ層が必要です。サービスグラフや上下流の依存関係、インターフェース呼び出し、プロジェクトメタデータなどを活用し、「このサービスを変更すると誰に影響するか」「既存の機能で流用できるものはないか」「このインターフェースをどの上位サービスが利用しているか」といった問いに、AI とエンジニアが答えられるように支援します。
このような知識は、単一リポジトリに限定された一般的な CodeWiki が得意とする領域を超えています。マイクロサービスの生態系全体から関係性を捉える必要があるためです。
したがって、アーキテクチャ層の核心的な価値は、コードを説明することではなく、AI による影響分析とサービス探索(サービスマッピング)を支援することにあります。これは、技術設計の前半部分、すなわち「どのシステムを変更すべきか」「上下流にどのような影響があるか」「境界線をどこで引くべきか」という判断が妥当かどうかを決定づけるものです。
3.2.3 システム層:AI に「このサービス内部をどのように変更すれば安全か」を教える
システム層は、単一サービス内部における最も核心的な AI フレンドリーな知識層です。ここには「システム事実」「システム制約」「検証・テスト」が含まれます。
システム事実は、「このサービス内部に何があるのか」を解決するものです。具体的には、モジュールの分割、主要なドメインオブジェクト、主要な API、データベーステーブル、キャッシュキー、MQ トピック、定期タスク、コアフロー、状態機械(ステートマシン)、設定項目などが該当します。
これらの情報は、AI が単一リポジトリを理解する基礎となります。システム事実が欠如していれば、AI はコード内でその場しのぎの検索を行うことになり、「見つけた箇所を修正する」という断片的な判断しかできず、全体像を把握することが困難になります。
システム制約は、「このサービス内部で、何を安易に変更してはいけないか」を解決するものです。例えば、パブリック API のフィールド削除禁止、データベースフィールドの追加のみ許可(意味の変更禁止)、特定の状態遷移には必ず検証プロセスを経る必要があること、過去の互換性ロジックの削除禁止、大規模なリファクタリングが禁じられたモジュール、特定のディレクトリへのアクセスはアダプター層を介することのみ許可、書き込み操作における冪等性の保証などが含まれます。
システム制約は、AI によるコーディングにおいて最も重要かつ、最も欠落しやすい知識です。
過去の事例(ヒストリー):単一システム内において、特定の類型の要件に対して過去にどのようなアプローチが採用されたかは、AI が技術設計を行う上で非常に大きな参考になります。事実面での意義は「ビジネス層」の歴史的事例と同じですが、適用範囲(スコープ)が異なります。
検証・テスト:これは、「どのように変更が正しかったことを証明するか」を解決するものです。多くの AI によるコード修正の問題点は、実行不能になることではなく、検証プロセスが脆弱である点にあります。
- 新規インターフェースには契約テストが必要か?
- データベースの変更にはマイグレーション検証が必要か?
- 状態機械の変更にはコアフローのユースケースを実行すべきか?
- MQ スキーマの変更には、プロデューサーとコンシューマーの互換性を検証すべきか?
- キャッシュロジックの変更には、キャッシュミス(パンク・ブラスト)や無効化戦略の検証が必要か?
これらを明確に定義しておく必要があります。そうでなければ、AI は単なるいくつかのユニットテストを実行しただけでタスク完了と誤認する可能性があります。
この層においては、CodeWiki と service-knowledge-generate の両方に価値がありますが、それぞれの側重点は異なります。
CodeWiki は、システム事実の生成と維持に特に適しています。プロジェクトの概要、モジュールの説明、API、データモデル、コアフローなどを低コストで自動的に整理し、人間と AI が素早くシステムを理解できるよう支援します。
システム制約や検証ルールを構造化するには、service-knowledge-generate がより適しています。これは単に AI に「このシステムが何であるか」を伝えるだけでなく、「特定のタスクに対してどの文脈を読み取る必要があるか」「どこを変更してはならないか」「完了後にどのように検証すべきか」といった指示も含まれます。つまり、CodeWiki の単純な代替ではなく、AI による実行段階における制約型知識ベースとして機能するものです。
そのため、図では「システム事実」と「システム制約」が重点的に強調されています。単一サービス内の AI フレンドリー化において最も重要なのは、すべてのコードを説明することではありません。「事実」「制約」「検証」の 3 つを適切に整理することです。AI はシステム事実を知ることで変更方法を理解し、制約を知ることで変更してはいけない範囲を知り、検証方法を知ることで変更が安全であることを証明できます。
3.2.4 インフラ層:AI に「基盤ルールとは何か」を教える
インフラ層は多くの記事で軽く触れられるに留まることが多いですが、バックエンドシステムにおいては非常に重要な役割を果たします。ここではミドルウェアの知識、コード規約、エンジニアリング規範などが含まれます。
ミドルウェアの知識:Redis や Kafka などの一般的なミドルウェアの基礎的な使用方法については、現在の大規模言語モデルがすでに内部化しているため、オープンソースや業界標準レベルの知識を知識ベースに追加する必要はあまりありません。ここで知識ベースに含めるべきなのは、チームやシステム固有の使用規約です。具体的には、データベース、Redis、Kafka、RocketMQ、Elasticsearch、設定管理センター、登録センター、タスクスケジューラー、オブジェクトストレージ、ログ監視などのインフラストラクチャをどう扱うかという点です。「Redis とは何か」「Kafka の使い方は」といった一般的な知識ではなく、「Redis のキー命名規則はどうするか」「キャッシュの有効期限はどのように設定するか」「キャッシュに空値を格納してもよいか」「MQ のトピック命名ルールは何か」「メッセージは冪等性を保証すべきか」「データベースのシャード化・パーティショニングのルールは何か」「大規模なフィールドは主テーブルに含めるべきか」「スロークエリの閾値はいくらか」といった、自チームや自システムでの運用ルールが対象となります。
コード規約:これは「コードをどのような構成で組織すべきか」を解決するものです。例えば、階層構造、命名規則、例外処理の方法、ログの記述方法、DTO/DO/Entity の境界線、依存注入の方式、トランザクションのスコープ、単体テストのディレクトリ構成、Mock の手法などが含まれます。これらの知識は地味に思えるかもしれませんが、AI が生成するコードがチームのスタイルに合致しているかどうかを直接決定づけます。この層での制約がない場合、AI は「機能としては動作するが、まるでこのチームが書いたようには見えない」コードを出力してしまいます。
エンジニアリング規範:内容はさらに広範で、依存関係管理、リリースプロセス、設定変更の扱い、グレーディング(段階的ロールアウト)の要件、セキュリティスキャン、監視ポイントの埋め込み、アラートルール、ロールバック戦略などが含まれます。これらは業務コードには直接現れないものの、コードが安全に本番環境へデプロイできるかどうかを決定づけます。この部分の構築については、企業の規模やソフトウェア開発の特性に応じて独自の適応基準を設定できます。大規模なインターネット企業は安定性と標準化への要求が高く、多少の反復効率の低下も許容できるため、規範に関する要件はより厳格で多くなります。一方、中小規模のインターネット企業では業務のイテレーション速度が最優先される傾向があり、安定性や標準化への要求が相対的に低くなるため、エンジニアリング規範に関する要件も少なくなる可能性があります。自社の状況と業務の複雑さに合った建設基準を選択すればよいのです。
インフラ層の価値は、AI に堅固なエンジニアリング基盤を提供することにあります。AI は単にビジネスロジックを記述すればそれで終わりではなく、生成したコードがチームのエンジニアリング習慣やミドルウェアの使用パターン、リリースおよび運用の要件に合致している必要があります。特に大規模なインターネットシステムでは、多くのオンライン上の問題がビジネスロジックそのものの誤りによるものではなく、タイムアウト、リトライ、キャッシュ、メッセージの冪等性、データベースのパフォーマンス、ログ監視といった基盤ルールの処理不足によって引き起こされています。
04
ソリューション調査
4.1 オントロジー(本体論)
知識ベースの構築方案を調査する際、まず業界で最も先端的な、あるいは AI 分野で先行している企業の事例を把握しました。
Palantir は Ontology(オントロジー/本体論)というアプローチを推奨しています。その概要は以下の図の通りです。
詳細については Palantir 公式サイトでのオントロジーに関する記述をご覧ください:https://www.palantir.com/docs/foundry/ontology/overview
注:此配图来自 Palantir 官网
「Ontology(本体)」这一概念并非新生事物,早在几十年前就已出现。它也不局限于软件工程领域,其核心用途在于对领域知识进行体系化的描述。在软件工程和 AI 领域,它指的是对特定领域的概念、属性及关系进行的“形式化、显式且可共享的规范说明”。这构成了构建知识图谱、实现机器推理与语义互操作的“语义骨架”;而在哲学中,本体论则是研究“存在本质”的分支学科。
核心定义与内涵
本质:共享概念模型的形式化规范说明(Formal explicit specification of a shared conceptualization)。
四大特征:概念化(抽象领域结构)、明确性(消除歧义)、形式化(机器可读)、共享性(群体共识)。
构成要素:类(Class)、属性(Property)、关系(Relation)、公理/约束(Axiom/Constraint)、实例(Instance)。
哲学与计算的区别:大写"Ontology"常指哲学的“本体论”;小写"ontology"在 IT 语境下则特指“知识本体”,更侧重于工程落地。
本体与知识图谱的关键区别
维度 | 本体 (Ontology) | 知识图谱 (Knowledge Graph)
---|---|---
层级 | 模式层 (Schema),定规则的骨架 | 实例层 (Data),存事实的血肉
内容 | 定义概念、关系、逻辑约束(不存具体业务数据) | 存储海量具体实体及其关系三元组
核心能力 | 语义消歧、逻辑推理、一致性校验 | 关联查询、路径分析、可视化检索
类比 | 建筑设计图/语法书 | 建成的大楼/词典例句
主要应用场景
- 语义网与数据集成:统一多源异构数据的标准,解决“同名异义”或“同义异名”的问题。
- AI 智能体与决策:为 LLM(大语言模型)提供可解释的业务逻辑框架,支撑从“概率猜测”到“确定性执行”的跨越(例如 Palantir Ontology 可直接连接业务系统并执行动作)。
- 知识工程:作为知识图谱的底层 Schema,指导数据抽取、清洗与推理规则的构建。
- 行业标准:用于自动驾驶(如 OpenX)、医疗、金融等领域的标准化描述与互操作。
主要定义
Ontology 常被描述为「企业数字孪生」,但这个说法过于宏大,也容易引起误解。更准确的理解是:Ontology 定义了一种协议,让系统能够以统一的方式暴露其业务对象、属性、关系、动作和权限。
它的核心要素可以拆分为以下四类。
一、Data(数据):每个系统贡献自己的数据,并将其映射为 Ontology 中的对象、属性和链接。例如,“订单”是对象,订单金额、支付状态、创建时间是属性,而订单与用户、商家、履约单之间的关系则是链接。
二、Logic(逻辑):业务规则、模型、算法和计算逻辑可以绑定到对象上。AI 不仅能看到“订单”这个对象,还能了解围绕该订单有哪些计算能力,例如风险评估、库存预测、履约优化等。
三、Action:将决策执行建模为原子化操作,支持模拟、审批和写回。这意味着 Ontology 不仅让 AI 读取系统,更让它知晓业务世界中“可以执行哪些动作”。
四、Security:权限并非事后打补丁,而是与对象、属性及动作紧密绑定。在不同人员、不同 Agent 或不同场景下,能够查看什么、修改什么、执行何种操作,都必须具备动态的权限控制能力。
Ontology 的本体思想十分经典:如果每个系统都按统一结构暴露自身能力,那么跨系统的发现、组合与编排,将从私有 API 适配问题转变为标准化建模问题。
传统 API 文档告诉 AI:“这个接口如何调用”。
而 Ontology 更进一步地告知 AI:“业务世界中存在哪些对象,对象间有何关联,允许对对象执行哪些动作,以及动作执行前需满足何种权限与约束。”这正是它与普通 Wiki 的最大区别。Wiki 侧重于解释系统,Ontology 则侧重于建模系统;Wiki 偏向阅读,而 Ontology 偏向行动。
4.2 KBase(Code Wiki)平台
KBase 是阿里集团内部的中心化代码知识 CodeWiki 平台。经调研,其核心能力在于:输入一个代码仓库,即可利用 AI 自动生成一份全面的 Markdown Wiki,并支持自定义生成时机与内容。
其运作流程大致如下:选择仓库和分支后触发生成,支持 monorepo 子目录;AI 分析代码后输出包含项目概览、模块划分、核心流程、API 说明及数据模型等内容的 Markdown 页面(即 LLM Wiki);代码推送后可进行增量更新,若变动较大则降级为全量更新;通过 MCP 工具提供 AI 访问能力;同时支持 BM25 和语义向量两种搜索方式。
从存储形态来看,CodeWiki 通常部署于云端平台,与代码仓库解耦。它独立生成、独立更新、独立存储。采用 Markdown 自然语言格式,兼顾人机使用:人类可读,AI 亦可理解利用。
此类工具的现实价值巨大,尤其适用于新人入职培训(onboarding)、跨团队协作、陌生系统理解及快速概念定位等场景。
新人入职首日,若能查看到一份自动生成的系统概览,便无需完全依赖“找人询问”或“翻阅代码猜测”。在跨团队协作中,若需了解陌生服务,也不必先预约对方团队开会,只需搜索 CodeWiki 即可获取基本答案。若要查找某业务概念的具体实现位置,语义搜索的效率通常远高于手动 grep。
CodeWiki 的最大优势在于零成本接入与自动维护。对许多团队而言,只要拥有代码仓库的读取权限,即可生成一份基本可用的系统 Wiki。无需额外组织人力,也无需工程师专门维护文档。对于“希望让系统变得 AI Friendly,但暂无额外人力投入”的团队来说,这是非常务实的第一步。
然而从 AI Coding 的角度审视,CodeWiki 默认的生成策略也存在一些结构性限制。
一、自然语言解析:在 AI 执行过程中,其确定性不如结构化数据。当 AI 需要进行判断而非仅仅理解时,从 Markdown 文本中提取隐含约束的准确率,通常低于直接从 YAML 字段中读取。例如,“该接口不可修改字段语义”若写在 Markdown 中仅是一句话,而写入结构化策略(policy)则可转化为明确的规则。
- クラウドストレージにおける整合性遅延のリスク
開発者が破壊的変更(breaking change)を直ちに反映させた場合でも、AI が更新ウィンドウ期間中に古い Wiki 情報を基に判断を下すと、問題が発生する可能性があります。通常の理解タスクでは深刻な影響は少ないかもしれませんが、コードの自動修正や生成案の作成においては、この遅延が AI コーディングの全工程を通じて評価される必要があります。もちろん、これはクラウド上のコード知識ベースが直面する現実的な課題の一つです。
- ビジネスカスタマイズへの対応力不足
現状の分析によると、CodeWiki の核となるコンセプトは「コードこそが事実」にあります。そのためコードの事実性を尊重する設計となっている反面、柔軟な業務カスタマイズ機能には限界があります。
4.3 知識検索プラットフォーム
実際の調査では、複数のチームが独自に「知識検索エンジン」を構築するか、kbase を基盤とした RAG(検索拡張生成)能力を活用したローカルエージェントによる検索強化を進めていました。主な活用事例は以下の通りです。
- 要件定義と調査:特に大規模なインターネット企業ではシステムアーキテクチャが複雑で、処理の深層も大きいため、「ある一つの要求が実際にどのシステムに関与しているのか」「既存の機能がどのシステムに既に備わっているのか」を把握する必要があります。例えば、配車アプリにおける「ドライバーが注文を受け付ける」という一連の流れにおいて、何層ものシステムやリスク管理(ファントム)を経由し、各レイヤーでどのような機能や戦略、あるいはブロック処理が行われているのかを理解することが重要です。また、新しい戦略を追加する際、どのシステムのどのレイヤーに実装するのが最適かといった判断にも役立ちます。新規採用者のシステム理解を深める上でも非常に価値があります。
- 技術的設計と工数見積もり:要件調査と同様に、製品要求に対する技術設計や工数見積もりを行う際も、上下流のシステム、処理フロー、パフォーマンスなどの詳細な把握が必要です。ある要求が引き起こすシステム改修の範囲、それに伴うリスク、そして必要な工数を評価するためには、関連する各システムの事実情報をチェーン全体で把握しておくことが不可欠です。
- 本番環境でのトラブルシューティング:前述の「後端システムにおける AI フレンドリーな設計」でも触れた通り、将来的に厳密な意味での 7x24 時間体制が求められる場面では、オンラインアラートの調査・分析・対応も AI が担うようになります。AI が処理や調査を行う際にも、ゲートウェイのエントリポイントから実際の API レベルのマイクロサービス、下流のドメインサービス、さらにはミドルウェアの応答時間(RT)に至るまで、システム全体を跨ぐ完全なチェーン知識が必要です。エージェントが具体的な問題分析や警告、介入処理を行うためには、包括的なシステムアーキテクチャの事実とランタイム環境の事実を前提としていなければなりません。
知識検索に必要なシステムチェーンやアーキテクチャの事実情報については、グループ内の Aone(CI/CD プラットフォーム)や監視アラートプラットフォームなどが MCP 機能を通じて対応可能です。さらに、「コードを Wiki として」「API を Wiki/SKILL として」「アーキテクチャを Wiki として」という知識体系を補完的に活用することで、明確なシステム現状の整理は比較的容易に実現できます。
より実用的なのは検索能力そのものをプラットフォーム化することです。実際、いくつかのチームが検索機能のカスタマイズに取り組んでおり、後述する aitom などがその一例です。
05
導入実践と選定基準
上記のような体系的な階層設計とソリューション調査を経て、次は各レイヤーにおける知識ベースの実装フェーズに入ります。
5.1 ビジネス層
前節の第 3 章で述べた業務層の主要な役割や設計思想については既にご説明済みです。では、実際の導入実践においては具体的にどのような姿になるのでしょうか?
ここでは参考として、当社の実装例をご紹介します。
業務知識ベースは単なる業務ドキュメントの集積であってはなりません。AI が製品要求やビジネスシナリオから技術チェーンへと変換を支援し、AI に業務メタ語彙を理解させ、ビジネス境界を認識させ、関連システムを特定させることを目指すべきです。さらに、技術設計のプロセスにおいて必要な過去の経験や設計上の制約も提供できる必要があります。
この目標を達成するため、各ビジネス(Business)の知識ベースは主に以下のセクションに分割されます:
ビジネス領域のドキュメント構造
├── index.md(ルート)
├── meta/
│ └── index.md
├── principle/
│ ├── index.md
│ ├── timeout.md
│ ├── idempotency.md
│ ├── consistency.md
│ ├── degradation.md
│ └── compatibility.md
├── scenario/
│ ├── index.md
│ └── scenario-*.md
├── practice/
│ ├── index.md
│ └── practice-*.md
└── history/
└── history-YYYYMMDD.md
ルートディレクトリの index.md は、全領域への入口兼インデックスとして機能します。ここでは全体の概要を説明し、関連コンテンツへの索引を提供します。
meta ディレクトリには、その分野におけるビジネスの元語(メタデータ)、中核となる業務オブジェクト、概念の境界線、そして重要な業務ルールが格納されます。例えば「注文」ドメインにおいて、「取引注文」「決済明細」「配送伝票」といった用語がそれぞれ何を指すのか、相互の関係性は何かを明確にする必要があります。また、日常会話では単に「注文」と呼ばれていても、技術設計の段階で混同してはならない概念についても区別を設けます。
ビジネス元語の数は通常多くないため、初期段階では meta/index.md 1 ファイルに集約して管理するのが現実的です。AI が正確に参照・検索できるよう、各元語には安定した名称または識別子を付与し、定義や別名、同義語ではない用語、業務の境界線、関連概念、そして中核ルールを明記します。ドメインが複雑化し、単一ファイルの容量が大きくなりすぎた段階で初めて、さらに細分化して分割することを検討してください。
principle ディレクトリには、特定のページや API 呼び出しチェーンに限定されず、その分野内で複数の業務シナリオに跨って再利用される中核的な設計原則が格納されます。これはアーキテクトがシステムを設計する際に長期的に堅持すべき重要な考慮事項を記述したものです。具体的には以下のような内容が含まれます。
- 全体的なタイムアウト予算の配分方法
- 複数システム間での整合性確保と補償戦略の選定基準
- どの処理パスでサービス低下(デグレード)を許容し、どこで確実に失敗させるべきか
- API、メッセージ、状態の意味をどのように保ちつつ後方互換性を維持するか
- コアとなる処理パスとバックスラッシュ(非コア)パスの境界線引き
- 状態の集約と表示における原則
例えば、注文一覧ページや注文詳細ページにおいて、商品画像やプロモーションタグなどの情報はサービス低下を許容できる一方、注文本体の情報はいかなる場合も低下させないコアデータです。もしこうした原則を各シナリオごとに個別に記述すると、記述の重複が生じるだけでなく、長期的なメンテナンスの中で内容が矛盾するリスクが高まります。そのため、これらを principle に抽象化して一元管理し、各シナリオ側で参照することで、ドメイン設計全体の一貫性を保つようにします。
ただし、principle ディレクトリに収めるのは「そのビジネス分野特有」かつ「複数シナリオで跨って再利用される」設計原則に限られます。データベース、Redis、メッセージキュー(MQ)、ログ管理、リリースフローなど、社やチームレベルの共通インフラに関する規範は、あくまで基盤層に蓄積すべきです。各ビジネス領域が重複して同じ知識を維持する必要はありません。
scenario ディレクトリは、業務シナリオと技術的な処理パスをつなぐ中核となるフォルダです。ここで扱う「シナリオ」とは、ユーザーや製品担当者、あるいは事業担当者の視点から定義されたものです。具体的には、注文一覧ページ、注文詳細ページ、返金詳細ページ、注文作成ページといった画面ベースのものもあれば、特定の画面に依存しない包括的な業務利用シーンも含まれます。
各シナリオのドキュメントでは、まずその業務目標、利用者、表示内容、そして業務の境界線を説明します。その後、シナリオ内の具体的な機能やユーザー操作へと分解していきます。例えば「注文一覧ページ」には以下のような要素が含まれる可能性があります。
- 注文リストの検索と表示
- 詳細ページへの遷移
- 注文の削除
- 再購入
- 返金申請
これらの各操作に対して、ドキュメントはさらに以下の点を記述する必要があります。
- 業務上の意味(セマンティクス)
- 実行前の前提条件
- クライアント側から送信される API の仕様
- ゲートウェイおよび集約サービスのエントリポイント
- 内部のドメインサービスが呼び出す処理チェーン
- 関与する外部システム
- データの変化内容
- 同期・非同期イベントの発生
- エラー、サービス低下、補償処置の方法
- 関連する meta、principle、および過去の実践事例
例えば、「注文削除」というボタンは製品画面では単なる操作ですが、ビジネスの文脈では注文データを物理的に削除するのではなく、現在のユーザーの注文リストから非表示にする意味を持つ場合があります。そのため、シナリオドキュメントには以下の点を明確に記述する必要があります。
- クライアントがどの API を呼び出すか
- 注文サービスが注文の所有権とステータスをどのように検証するか
- 返金や履行ステータスの照会が必要かどうか
- 最終的に修正するのは注文主テーブルなのか、それともユーザーと注文の表示関係なのか
- カスタマーサポート、精算処理、オフラインデータにおいてその注文を依然として参照できるか
このように整理することで、シナリオは製品画面やユーザー操作からバックエンドの実装に至るまでの変換ルートを構築します。
- 製品ページまたはビジネスシーン
- ページ機能とユーザー操作
- ビジネス意味と事前条件
- クライアント API
- ゲートウェイまたは集約サービス
- 内部ドメインサービス
- 外部システム、データ、メッセージ
scenario/index.md はシナリオの入口およびルーティングインデックスとして機能します。シナリオ数が少ない(例えば 20 未満)場合や内容が軽量な場合は、複数のシナリオを単一のファイルにまとめて管理できます。一方、シナリオ数が増加した場合や、特定のシナリオで頻繁な更新が必要になったり、独立して参照されたり、明確なオーナーが存在する場合は、個別のファイルに分割し、index.md でその名称、ビジネスキーワード、主要機能、およびドキュメントへのリンクを管理します。
「20 個のシナリオ」という数字は厳密な区分け基準として捉えるべきではありません。これは単なる参考値であり、より重要な判断基準となるのはファイルサイズ、コンテンツの複雑さ、更新頻度、そして独立参照の必要性です。
practice は過去の設計と実践を記録するセクションです。ここで重要なのは「過去に何をしたか」だけでなく、「なぜそのようにしたのか」「どの経験が再利用可能か」「どのような失敗は二度と繰り返してはいけないか」という点にあります。
実践内容には以下のような要素が含まれます:
- 特定タイプの要件に対する標準的な改修パターン
- 重要なアーキテクチャやビジネス上の意思決定の経緯
- 過去の互換性設計
- 本番環境でのインシデントから明らかになった隠れた制約条件
- 特定の要件が影響を及ぼすシステム範囲の傾向
- ある解決策が適用可能・不可能となる条件
例えば、新しい注文ステータスを追加する際、過去の記録は AI に対して「注文サービスの状態マシンを変更するだけでなく、クライアント側の状態マッピング、カスタマーサポートシステム、メッセージコンシューマー、オフラインデータウェアハウス、精算ロジックも確認する必要がある」と警告します。実践知識の価値は単に古い解決策をコピーできることではなく、現在のシナリオにおいて過去のどのアプローチが依然として有効かを AI が判断できるように支援することにあります。
history は、知識ベース自体の生成と変更履歴を記録するためのセクションです。具体的には、「いつ」「誰が」「どのスキルを用いて」「どのような資料に基づいて」特定のファイルを生成または更新したか、誰が承認したか、現在未確認事項が残っていないかなどを記録します。
practice と history は明確に区別する必要があります:
practiceは将来の技術的解決策にも示唆を与えるビジネスおよびアーキテクチャ知識を担うhistoryは知識ベース自体がいつ、誰によって、どのような方法で変更されたかを記録するのみである
history に保存すべきは具体的な知識そのものではなく、ログ情報です。
ファイル形式については、インデックス構造を持つ Markdown を採用しています。Markdown は製品担当者、ビジネス関係者、開発者、アーキテクチャのいずれにとっても親和性が高く、人的なレビューや継続的な修正が容易です。また、ファイルの先頭に YAML Front Matter を追加し、ドキュメント ID、タイプ、ドメイン、オーナー、ステータス、更新日時、関連するメタデータなどの構造化情報を記述します。
例:
id: scenario.order-list-page
type: business_scenario
domain: order
owner: order-domain-team
status: verified
related_meta:
- trade_order
related_principles:
- timeout
- degradation
updated_at: 2026-07-15
本文将继续以 Markdown 形式阐述业务背景、流程、调用链及设计考量。这种写法既保留了文档对人类的可读性,也为 AI 的检索、路由、过滤和按需加载提供了必要的结构化信息。
从整体架构来看,可以将上述目录理解为:
meta(元数据)
定义业务世界中存在哪些概念,以及这些概念的具体含义。
scenario(场景)
定义具体业务场景的运行逻辑,以及业务操作如何转化为技术链路。
practice(实践)
记录历史上类似问题的处理方式、决策原因及相关的经验教训。
principle(原则)
定义该领域跨场景需长期遵守的核心设计原则。
history(历史)
记录知识库自身的生成、审核与变更过程。
以上结构是我们结合业务层知识库建设实际提出的一种参考实践。其核心在于对业务知识、业务与架构的映射关系以及历史实践这三类内容的设计思考,但这并非要求所有团队强制遵守的标准。
各团队的业务复杂度、文档体系、系统架构及 AI Coding 工作流均不相同。有的团队可能更适合以页面场景来组织知识,有的则倾向于按用户旅程、业务流程或业务能力划分;有的团队会将 Markdown 文件存放在代码仓库中,而另一些团队则更适合作为集中式知识库管理。
因此,这里的目录结构、文件命名及拆分方式,更多是一种可落地、可讨论且可持续演进的实践示例。团队可直接参考,也可结合自身情况调整,并持续提出改进建议。真正重要的并非目录名称是否完全一致,而是业务层知识能否帮助 AI 准确回答以下问题:
- 需求中提到的业务概念具体指什么?
- 当前需求发生在哪个业务场景下?
- 页面功能和用户操作对应哪些后端 API 与系统链路?
- 技术方案需要遵守哪些跨场景的设计原则?
- 历史上类似问题是如何处理的,曾发生过哪些风险?
- 当前的知识是否经过确认,能否安全地作为 AI 的行动依据?
只要能够持续提升对这些问题的回答质量,业务层知识库的建设就产生了实际价值。
在平台化存储和检索能力的实现层面,我们目前使用 kbase 来承载。这主要是为了方便人工编辑、查看及干预。按照“分领域知识库”的维度进行组织和维护,例如将手车互联、驾车导航、停车推荐等关联度较低的场景分别维护各自的知识库。
5.2 架构层(aitom 平台)
这一层,我们采用的是 aitom 平台:https://aitom.amap-inc.com/
aitom 是高德出行后端团队面向 AI Native 时代打造的 AI 平台型基建。aitom 最关键的价值主要体现在三个方面(更多能力正在持续扩展中):
一、服务能力的 Skill 化
将每个后端服务的对外接口包装为 AI 技能(Skill)。每个 Skill 包含一组相关 API、接入指南及质检文档。AI Agent 安装技能后,即可通过自然语言调用对应的服务能力。这与 Ontology“将能力结构化暴露”的思路一致,只是粒度更接近于后端服务和接口,而非完整的企业级业务对象体系。
二、服务间调用图谱
通过 aitom graph <项目名> 可以查看任何项目的上下游依赖关系:谁调用了你,你调用了谁,使用的是什么协议(HTTP 还是 HSF),具体是哪个接口,超时时间设定为多久。这一点至关重要。许多技术方案设计中最怕的并非不知道如何修改代码,而是无法预判修改后的影响范围。有了服务图谱,影响分析就不再完全依赖人工询问同事。
三、架构约束
这部分是我们正在
原文を表示
原创 刘瑞洲 2026-07-24 18:18 浙江
image
系统化分解构建后端架构知识库体系,让AI 从理解代码到理解业务、理解架构
image
这是2026年的第 41 篇文章
( 本文阅读时间:约 20 分钟 )
01
从「让 AI 看懂代码」到「让 AI 正确行动」
在上一篇讨论《后端系统 AI Friendly 设计》时,文章开篇就强调过一个判断:后端系统要想真正进入 AI Friendly 状态,不能只停留在“代码写得清楚一点”、“README 多补一点”、“接口注释完整一点”这种层面。这些当然重要,但它们解决的更多是“人和 AI 能不能读懂局部代码”的问题,而不是“AI 能不能在一个复杂系统里做出正确的工程判断”。
真正的问题是:当 AI Agent 接到一个需求时,它到底知不知道这个系统的边界在哪里?知不知道哪些接口不能破坏兼容?知不知道这张表的某个字段虽然看起来没人用,但其实是下游离线任务每天凌晨要扫的?知不知道某个 MQ Topic 的 schema 不能随便改,因为三个历史服务还在消费老格式?知不知道某个模块虽然代码很旧,但它是交易链路里的关键兜底逻辑,动了之后不是单测过了就能上线?
这就是后端系统 AI Friendly 化真正麻烦的地方。
AI 不是完全看不懂代码,恰恰相反,今天的大模型读代码、解释代码、补测试、做局部修改,能力已经相当强了。问题在于,后端系统里的很多关键知识并不直接存在于代码中,或者虽然存在于代码中,但分散在不同仓库、不同配置、不同历史 PR、不同口头约定里。
人类工程师靠长期经验、团队沟通和线上事故记忆来补全这些上下文;AI Agent 没有这些“组织记忆”,它只能读取你明确给它的东西。
所以,“知识库怎么选”这个问题,表面上是工具选型,实际上是一个更底层的问题:我们到底要把哪些系统知识显式化,显式化之后又应该以什么形态交给 AI 使用?
如果只是为了新人 onboarding,一份自动生成的 Markdown Wiki 可能就够了。如果是为了跨服务影响分析、尤其是跨服务的技术方案设计,那就需要服务图谱、依赖关系、上下游调用链。
如果是为了让 AI 安全修改代码,那就还需要有明确的约束、红线、任务路由和验证标准。不同问题对应不同知识形态,不能混在一起讨论,更不能用一个“大而全知识库”幻想解决所有问题。
这也是本文想讨论的核心:后端系统 AI Friendly 化落地时,知识库怎么设计,如何有效利用这座知识的大山,挖出冰山藏在水下的 90% 部分,让 AI 从 coworker 真正走向 agentic operator。
02
知识库 to 技术方案—决胜环节
2.1 为什么技术方案设计如此重要
在实践中反复面对的问题:无论是 CoWorker 形式的 AI Coding,还是 7x24小时AI 全自动规划的 Agentic Operator Coding ,在完整的研发流程中,技术方案设计是最关键的一环。方案质量直接决定了后续编码执行和交付的正确性。
这个判断可能看起来很传统。技术方案设计在没有 AI 的年代就很重要,这有什么新鲜的?新鲜之处在于:AI 时代放大了方案质量的杠杆效应,而且放大的倍数远超直觉。
一. AI 的执行速度放大了错误的传播速度:
一个人类工程师方向走偏,可能半天才写了几百行代码,拉个 PR 被同事 review 时就能被拉回来。损失可控。但一个 AI Agent 在错误方案的指引下,10 分钟可以完成一个涉及 5 个文件、3 个接口、2 张数据库表的完整变更。等你发现方向错了,回滚成本已经是人工编码的好几倍。更麻烦的是,这种错误往往不是语法错误,也不是单测一定能抓住的错误,而是“业务理解错了”“边界改错了”“兼容性破坏了”“下游影响漏了”。
二. AI 的默认行为是“忠实执行”,不是“质疑方案”:
给一个 senior 工程师一份有问题的需求,他会说“这里有矛盾”“这个方案会引入循环依赖”“你少考虑了并发场景”“这个接口以前不能这么改”。这种质疑能力是经验积累的结果。AI 当前不是完全没有质疑能力,它会在形式上指出一些明显的逻辑冲突,但对于那些需要系统全局理解才能发现的问题,比如“这个设计会导致下游服务超时”“这个字段看起来可删但其实影响离线对账”“这个状态机不能绕过人工审核”,它往往直接执行,而不是主动停下来质疑。
三. AI Coding 的核心价值是让 AI 处理执行细节。
但这个价值有一个隐含前提:执行方向必须正确。如果你把大量节省下来的编码时间,又花在 debug、回滚、返工、解释线上异常上,净效率提升可能趋近于零。很多团队反馈“用了 AI 好像也没快多少”,细究原因,往往不是 AI 编码能力差,可能在技术方案设计环节就没做好。AI 很高效地写了很多“局部正确但整体错误”的代码,最后人还是要花时间收拾残局。
2.2 技术方案设计强依赖知识库
所以,AI Coding 时代的技术方案设计,不只是“写一份方案文档”,而是要先让 AI 拥有足够准确的系统上下文,这个上下文就是知识库—— 完善的知识库建设。
知识库至少要能回答这些问题:
当前系统架构长什么样?模块怎么分?职责边界在哪里?这个需求涉及哪些上下游系统?接口契约是什么?改了会影响谁?数据库 schema 是什么?哪些字段有业务约束?哪些表之间有隐含依赖?有没有类似历史变更可以参考?上次改类似功能时踩了什么坑?什么是红线?哪些操作在任何情况下都不允许?
人类工程师靠经验、沟通和历史记忆来获取这些信息。AI 呢?它需要一个结构化的、精确的、可按需加载的知识来源。
此外,“业务元语”对应的已有技术链路、技术方案是什么,也是能够极大提升技术方案设计效率、准确性的输。我们管这一层叫做“业务层”,主要做业务与架构之间的转换、映射;
我们要做的不只是“让 AI 能看懂代码”,更需要“让 AI 在设计方案和执行变更时拥有正确、完整、可验证的系统上下文”。
这样就有两个问题显而易见:1. 知识库应该包含哪些内容?2. 知识库如何承载和加载?
2.3 知识库贯穿 AI Coding 全流程
在讨论「知识库 to 技术方案」之前,需要先把一个问题讲清楚:知识库并不是只在 AI 写代码之前用一下,也不是一个放在旁边、需要时搜索几段内容的 RAG 文档库。对于 AI Coding 来说,知识库应该贯穿从需求理解、现状分析、方案设计、编码执行、验证测试到 Review 交付的整个流程。
如果把 7x24小时的 AI/Agentic Coding 拆开来看,它其实不是“AI 自动写代码”这么简单。它至少包含几个连续动作:先理解需求,再识别业务概念,再找到这些业务概念对应的系统、模块、接口、表和消息;然后分析改动范围,判断影响哪些上下游;再形成技术方案,确定怎么改、改哪里、不改哪里;最后才进入编码、测试、Review 和交付。任何一个环节缺上下文,后面的执行都会变形。
在需求理解阶段:知识库帮助 AI 理解“业务元语”。比如需求里说“退款体验优化”“权益冻结”“履约异常补偿”“订单逆向链路”,这些词对业务同学来说是自然语言,但对 AI 来说,如果没有业务知识和业务到系统的映射,它只能按字面猜。它可能知道 refund 是退款,却不知道这个团队里的退款到底涉及订单状态、支付单状态、履约状态、财务对账、客服工单还是风控策略。业务层知识的价值,就是把这些业务词翻译成系统可以识别的技术对象和链路。
在现状分析和影响分析阶段:知识库帮助 AI 回到真实系统。一个需求到底改一个服务,还是改多个服务?是改接口,还是改状态机?是改同步链路,还是改异步消息?是否影响下游消费方?是否会破坏老版本客户端兼容?这些问题不能只靠 AI 看当前仓库回答。它需要架构层知识,需要服务依赖关系,需要上下游调用图谱,需要历史实践,也需要知道这个系统过去为什么这样设计。没有这些知识,AI 很容易做出“单仓库内看起来合理,但放到全链路里不合理”的方案。
在技术方案设计阶段:知识库的价值会被进一步放大。因为方案设计不是简单地列几个代码文件,而是要确定改动边界、数据流、状态流、兼容策略、异常处理、灰度方式和验证范围。这个阶段最怕的是 AI 给出一个形式完整但上下文错误的方案:文档看起来很像技术方案,里面也有接口、表结构、流程图和测试计划,但关键系统漏了,核心约束没提,下游影响没分析,历史兼容没考虑。这样的方案越完整,反而越危险,因为它会给后续编码执行制造一种“方向已经确定”的错觉。
在编码执行阶段:知识库不再只是帮助 AI “理解系统”,更是需要开始约束 AI “如何行动”。哪些目录可以改,哪些模块不能跨层调用,哪些字段不能删,哪些接口只能新增不能改语义,哪些状态流转必须保持幂等,哪些中间件使用方式必须遵守团队规范,这些都需要提前显式化。否则 AI 很容易写出功能上能跑、工程上却不符合系统规则的代码。
在验证测试阶段:知识库还要回答“怎么证明这次修改是安全的”。不同类型的改动,对应的验证方式不一样。新增 API 需要关注接口契约和兼容性;修改数据库需要关注迁移、回滚和历史数据;修改 MQ 消息需要关注生产者、消费者和重复消费;修改状态机需要关注主流程、逆向流程和异常分支。如果知识库里没有这些验证规则,AI 往往只会跑最容易跑的单测,然后给出一个“测试通过”的结论,但这个结论未必覆盖真正的风险。
所以,知识库在 AI Coding 里的角色,不应该被理解成“给 AI 搜索答案的资料库”,而应该理解成一套贯穿全流程的系统上下文。它既提供事实,也提供映射;既提供约束,也提供验证标准;既帮助 AI 理解业务和系统,也帮助 AI 在执行时不要越界。
更重要的是,知识库不是一次性输入,而应该形成闭环。每一次技术方案评审中发现的遗漏,每一次 Code Review 中指出的风险,每一次线上问题暴露出的隐性依赖,每一次历史兼容带来的特殊处理,都应该反向沉淀回知识库。否则知识库会很快变成一份“看起来完整、实际上过期”的文档,而 AI 最怕的不是没有上下文,而是拿到了错误的上下文。
因此,从 AI Coding 的角度看,知识库的作用贯穿全流程,但其中最关键的放大点,仍然是技术方案设计。因为需求理解、现状分析、影响分析、编码执行和验证测试,最终都会收敛到一个问题上:这次到底应该怎么改。技术方案一旦错了,后面所有高效执行都会变成高效返工。
那么知识库具体应该如何建设呢 ?具体目标是什么呢?
03
知识库的建设目标与分层
3.1 建设目标
知识库(knowledge base)在整个AI Coding 全链路中的建设目标,主要是基于其核心价值、影响范围来思考的,如果从典型的互联网架构思维来衡量的话,我认为主要有以下几个方面的指标可以用来衡量:
内容全面性:在做技术方案设计、AI Coding 的时候,知识库的内容是否足够全面。尤其面对后端有几十个微服务的前提下,知识库是否能反馈系统全貌,对于技术方案设计有非常大的作用。比如本来已经存在了一个微服务可以根据经纬度获取用户POI,如果知识库里漏掉了这一点,可能AI 就会重新设计开发一个同样的API;
内容准确性:知识库的内容准确性,在AI 时代已经被大幅提高了—— 大量的知识库都是依赖AI 生成,比人类自己的梳理提效了很多,准确性也提高了很多。但是仍然有一些痛点就是“技术元语定义重复”,比如“订单”—— 比如对于外卖系统来讲,用户创建的外卖单叫做订单,骑手接单的“配送单”也可以叫订单,二者本质上是两个不同实体。在提及订单的时候,到底是指哪一个订单呢?类似的歧义场景如何处理,也是很多时候落地要额外关注的。此外,在代码有变更后,知识库内容是否及时联动更新了,也是一个很重要的事情。
内容召回效率和质量:这个召回主要是指在技术方案调研、技术方案设计阶段,经常会涉及到跨多个代码仓库的知识召回等,这个时候召回准确率也和query 优化、召回引擎有很大关系。比如大模型的上下文窗口size 虽然有几百KB 甚至MB 级别,但实际上很多时候有效注意力往往集中在前几十个KB。
所以,知识库建设的目标需要紧密围绕上面几个方向展开。
3.2 知识库的分层设计
经过调研走访,我们发现很多团队在知识库建设层面、知识库做技术方案设计层面都有一些共性的挑战:
产品需求 to 技术链路转换瓶颈:产品的PRD 需求文档往往是以“用户界面”为切入点进行描述的,但是用户界面到后端API 还是需要一个转换过程—— 某一个界面请求了哪几个后端的关键API,分别用于渲染界面中的哪部分内容,这部分知识的缺失是阻碍“产品PRD文档 to 技术方案设计” 非常大的一个拦路虎;
跨越多层多系统时的系统事实与约束:在大型互联网项目中,往往一个用户请求要穿透多层后端微服务、对应每个微服务中也处理不同的逻辑。具体到本次需求,需要在哪一层的哪一个微服务中开发 —— 这就依赖大量的链路知识检索、架构约束、系统约束等知识。
知识检索增强RAG:大模型会话窗口 context length 是有限的,不可能把所有上下游系统的所有知识都放到一个context window 或者 session 中,也需要“按需加载”或者“只加载最相关的上下文” —— 大家经常用的 RAG 就是解决这一个问题的主要思路。在知识库的建设过程中,这个能力是基本能力之一。
单一系统内的知识全面性、抽象程度:在经历了上面几层业务转化、链路转化等过程之后,在实际的coding 阶段更依赖单一微服务系统内的知识库的质量。比如一个高质量的知识库,能够按照业界经典的DDD 或者三色建模法等经典方法论,把系统代码进行抽象,这除了解决优雅性问题以外,也能够把系统代码架构和约束、设计理念等大幅度可见,对AI coding 是非常有帮助的。
针对这些大家遇到的现状和问题,我们在设计和实践过程中,把知识库进行了分层,倾向于拆成如下四层:业务层、架构层、系统层、基建层。
其中蓝色背景框部分,是性价比比较高的模块,适合越早投入见效越快的模块。其中蓝色背景框部分,是性价比比较高的模块,适合越早投入见效越快的模块。
3.2.1 业务层:让 AI 知道“为什么改”和“业务落在哪里”
业务层是最容易被技术团队低估的一层。很多人讨论 AI Coding,会直接从代码仓库、接口文档、数据库表开始,但真实的研发过程不是从代码开始的,而是从业务问题开始的。
业务层至少包含三类知识:业务知识、业务与架构映射、历史实践。
业务知识:解决的是“这个系统到底在服务什么业务”的问题。比如订单、支付、履约、权益、库存、风控、对账,这些业务概念分别是什么意思,有哪些核心规则,哪些状态变化是正常的,哪些操作是高风险的。如果 AI 只看代码,它也许能读懂 order_status 有几个枚举值,但它未必知道“已支付未履约”在业务上意味着什么,也未必知道某个状态为什么不能直接跳转。
业务与架构映射:解决的是“业务概念最终落在哪些系统、模块、接口、表和消息上”的问题。这一块非常关键,也是很多知识库最容易缺失的地方。一个需求说“优化退款体验”,听起来是业务需求,但落到系统上,可能涉及订单服务、支付服务、履约服务、客服系统、财务对账、消息通知、风控策略都有和退款相关的能力支持,退款操作的业务流程对应到技术系统,首先请求的API 是什么?对应的同步API 是什么?异步API 是什么?AI 如果不知道这些映射关系,就很容易把一个跨系统需求误判成单服务局部修改。
历史实践:解决的是“过去为什么这么做”的问题。比如对于一个平台化系统,每次做新的定制能力接入的时候,开发的代码基本都是类似的分层、类似的模块,用历史实践的方式沉淀技术方案,给AI 作为参考,针对同类问题就可以很高效的产出技术方案、降低技术方案的影响风险等。比如还有很多后端系统里都有一些看起来不优雅的设计:一个多余的字段、一段兼容老逻辑的代码、一个特殊的兜底判断、一个不能删除的 MQ 消费分支。新人容易觉得它脏,AI 更容易觉得它可以被重构掉。但这些东西背后可能是历史事故、灰度兼容、老版本客户端、下游依赖、合规要求或者业务妥协。
这也是为什么我觉得业务层里的“业务与架构映射”和“历史实践”值得重点标出来。它们往往不在代码里,不在自动生成文档里,也不在接口定义里,但它们直接影响技术方案设计是否正确。
3.2.2 架构层:让 AI 知道“系统之间怎么协作”
架构层解决的是系统之间的分工、调用、依赖和治理问题。它包括 架构 / 分层 / 链路事实、架构约束、服务治理。
架构 / 分层 / 链路事实,回答的是“系统怎么组织”的问题。比如一个业务链路从网关进入后,会经过哪些服务;每个服务负责什么;哪些是核心链路,哪些是旁路链路;哪些模块属于领域层,哪些属于应用层,哪些只是适配层;哪些接口是同步调用,哪些是异步消息;哪些数据是强一致,哪些数据允许最终一致。
架构知识/事实:对技术方案设计非常重要。因为 AI 如果只看当前仓库,很容易出现“局部最优”的方案:在当前服务里改起来很顺,但放到整体链路里就不合理。比如某个逻辑应该在订单服务里做,AI 却改到了网关层;某个校验应该靠领域对象保证,AI 却散落在多个 Controller 里;某个异步链路应该通过 MQ 解耦,AI 却新增了一个同步 RPC 调用。这些问题不是代码能力问题,而是架构上下文不足。
架构约束:回答的是“系统设计上不允许怎么做”的问题。比如核心链路不能新增强依赖,交易链路不能引入不稳定外部服务,某些接口只能由聚合服务调用,某些服务不能反向依赖上游,某些数据只能通过领域事件同步,不能跨库直查。架构约束和代码规范不一样,它约束的是系统之间的关系和依赖方向。
服务治理:更偏运行时和组织治理。比如服务等级、超时配置、重试策略、熔断降级、限流规则、接口负责人、依赖 owner、SLA、灰度策略、监控告警。这些信息不一定直接影响代码怎么写,但会影响方案能不能上线、风险是否可控、出了问题能不能快速定位。
从选型角度看,需要有一个架构层来理解系统之间的关系,比如通过服务图谱、上下游依赖、接口调用、项目元数据,帮助 AI 和工程师回答“改这个服务会影响谁”“有没有现成能力可以复用”“这个接口被哪些上游调用”。这类知识不是普通 CodeWiki 最擅长的,因为它跨越了单个仓库,需要从微服务生态里看关系。
所以,架构层的核心价值不是解释代码,而是帮助 AI 做影响分析和服务寻址。它决定了技术方案设计的前半段是否靠谱:需求到底应该改哪些系统,影响哪些上下游,边界应该切在哪里。
3.2.3 系统层:让 AI 知道“这个服务内部怎么改才安全”
系统层是单个服务内部最核心的 AI Friendly 知识层。它包括 系统事实、系统约束、验证 / 测试。
系统事实:解决的是“这个服务内部有什么”的问题。比如模块划分、核心领域对象、主要 API、数据库表、缓存 Key、MQ Topic、定时任务、核心流程、状态机、配置项。这些信息是 AI 理解单个仓库的基础。没有系统事实,AI 就只能在代码里临时搜索,看到哪改哪,很难形成完整判断。
系统约束:解决的是“这个服务内部什么不能随便改”的问题。比如 public API 字段不能删除,数据库字段只能新增不能改语义,某个状态机流转必须经过特定校验,某个历史兼容逻辑不能删除,某个模块禁止大规模重构,某些目录只能通过适配层访问,某些写操作必须保证幂等。系统约束是 AI Coding 中最关键、也最容易缺失的知识。
历史实践:在单个系统内,历史做某一类型的需求,主要使用什么方案,这对AI 做技术方案设计有非常大的参考意义。在事实层面,和“业务层”的历史实践是一样的意义,只是辐射的scope 不同;
验证 / 测试:解决的是“怎么证明改对了”的问题。很多 AI 修改代码的问题,不是完全不能跑,而是验证方式太弱。新增接口要不要契约测试?修改数据库要不要迁移验证?改状态机要不要跑核心流程用例?改 MQ schema 要不要验证生产者和消费者兼容?改缓存逻辑要不要验证穿透、击穿和失效策略?这些都需要明确。否则 AI 很可能只跑了几个单测,就以为任务完成了。
这一层里,CodeWiki 和 service-knowledge-generate 都有价值,但侧重点不同。
CodeWiki 更适合生成和维护系统事实。它能低成本把项目概览、模块说明、API、数据模型、核心流程自动整理出来,帮助人和 AI 快速理解系统。
service-knowledge-generate 更适合把系统约束和验证规则结构化。它不只是告诉 AI “这个系统是什么”,还要告诉 AI “面对某类任务必须读哪些上下文、哪些地方不能动、做完以后必须怎么验证”。所以它不是 CodeWiki 的简单替代,而是更偏 AI 执行阶段的约束型知识库。
这也是为什么图里把“系统事实”和“系统约束”放在一起重点标出来。单个服务内部的 AI Friendly 化,最关键的不是把所有代码都解释一遍,而是把“事实 + 约束 + 验证”这三件事组织好。AI 只有知道系统事实,才能理解怎么改;只有知道系统约束,才能知道不能怎么改;只有知道验证方式,才能证明改动是安全的。
3.2.4 基建层:让 AI 知道“底座规则是什么”
基建层是很多文章里容易被一笔带过的部分,但在后端系统里,它其实非常重要。它包括 中间件知识、代码规范约束、工程规范等。
中间件知识:对于常见的 Redis、Kafka 等中间件基础使用知识,当前很多大模型都已经进行了内化,所以这些开源或者行业标准级别的中间件知识不太需要放到知识库中。这里知识库中的中间件知识指的是团队如何使用数据库、Redis、Kafka、RocketMQ、ES、配置中心、注册中心、任务调度、对象存储、日志监控等基础设施。这里不只是“Redis 是什么”“Kafka 怎么用”这种通用知识,而是本团队、本系统里的使用约定。比如 Redis Key 怎么命名,缓存过期时间怎么设,是否允许缓存空值,MQ Topic 命名规则是什么,消息是否要求幂等,数据库分库分表规则是什么,大字段能不能进主表,慢查询阈值是多少。
代码规范约束:解决的是“代码应该按什么方式组织”的问题。比如分层结构、命名规范、异常处理方式、日志规范、DTO / DO / Entity 的边界、依赖注入方式、事务边界、单测目录、Mock 方式。这些知识看起来比较底层,但它直接影响 AI 生成代码是否符合团队风格。如果没有这层约束,AI 很容易写出“功能能跑,但不像这个团队写的代码”。
工程规范:内容更广,包括依赖管理、发布流程、配置变更、灰度要求、安全扫描、监控埋点、报警规则、回滚策略等。这些东西可能不在业务代码里,却决定了代码能不能安全上线。对于这部分建设,不同规模的互联网公司或者软件公司可以有自己的适配标准。大型互联网公司对于稳定性、标准化要求高并能够适度接受迭代效率的降低,则规范类要求会更强更多;而中小型互联网公司对于业务迭代效率要求更高,反而在稳定性、标准化要求可能会更低,则工程规范类要求可能相对偏少。选择适合自己企业、业务复杂度的建设标准即可。
基建层的价值在于,它给 AI 提供工程底座。AI 不是只要写出业务逻辑就算完成任务,它写出的代码还要符合团队工程习惯,符合中间件使用方式,符合发布和运维要求。尤其是在大型互联网系统里,很多线上问题并不是业务逻辑错了,而是超时、重试、缓存、消息幂等、数据库性能、日志监控这些底座规则没处理好。
04
方案调研
4.1 Ontology 本体论
在我们做知识库方案调研的时候,首先去了解了一下业界比较前沿或者在AI 领域比较领先的企业方案。
Palantir 推崇了 Ontology (本体论)的方法论,如下图。
更多内容可见 Palantir 官网对于 ontology 的一些论述设计: https://www.palantir.com/docs/foundry/ontology/overview
注:此配图来自 Palantir 官网
Ontology(本体)的概念并不新,几十年前就有了,也不是软件工程独有,主要是用来定义领域知识的体系化描述的。在软件工程/AI 领域指对特定领域概念、属性及关系的形式化、显式且可共享的规范说明,是构建知识图谱、实现机器推理与语义互操作的“语义骨架”;在哲学中则指研究“存在本质”的分支学科(本体论)。
核心定义与内涵
本质:共享概念模型的形式化规范说明(Formal explicit specification of a shared conceptualization)。
四大特征:概念化(抽象领域结构)、明确性(消除歧义)、形式化(机器可读)、共享性(群体共识)。
构成要素:类(Class)、属性(Property)、关系(Relation)、公理/约束(Axiom/Constraint)、实例(Instance)。
哲学 vs 计算:大写 Ontology 常指哲学“本体论”;小写 ontology 在 IT 语境下特指“知识本体”,侧重工程落地 。
本体与知识图谱的关键区别
维度
本体 (Ontology)
知识图谱 (Knowledge Graph)
层级
模式层 (Schema),定规则的骨架
实例层 (Data),存事实的血肉
内容
定义概念、关系、逻辑约束(不存具体业务数据)
存储海量具体实体及其关系三元组
核心能力
语义消歧、逻辑推理、一致性校验
关联查询、路径分析、可视化检索
类比
建筑设计图/语法书
建成的大楼/词典例句
主要应用场景
语义网与数据集成:统一多源异构数据标准,解决“同名异义”或“同义异名”问题 。
AI 智能体与决策:为 LLM 提供可解释的业务逻辑框架,支撑从“概率猜测”到“确定性执行”的跨越(如 Palantir Ontology 可直连业务系统执行动作)。
知识工程:作为知识图谱的底层schema,指导数据抽取、清洗与推理规则构建。
行业标准:用于自动驾驶(如 OpenX)、医疗、金融等领域的标准化描述与互操作 。
主要定义
Ontology 经常被描述为「企业数字孪生」,但这个说法太大,也太容易让人误解。更准确的理解是:Ontology 定义了一种协议,让系统把自己的业务对象、属性、关系、动作和权限,以统一方式暴露出来。
它的核心要素可以拆成四类。
一、 Data:每个系统贡献自己的数据,映射为 Ontology 中的对象、属性和链接。比如订单是对象,订单金额、支付状态、创建时间是属性,订单和用户、商家、履约单之间的关系是链接。
二、 Logic:业务规则、模型、算法、计算逻辑可以绑定到对象上。AI 不只是看到“订单”这个对象,还能知道围绕订单有哪些计算能力,比如风险评估、库存预测、履约优化等。
三、 Action:决策执行被建模为原子化操作,支持模拟、审批和写回。也就是说,Ontology 不只是让 AI 读系统,而是让 AI 知道这个业务世界里“可以做哪些动作”。
四、 Security:权限不是事后补丁,而是和对象、属性、动作绑定在一起。不同人、不同 Agent、不同场景下,能看到什么、能改什么、能执行什么动作,都应该有动态权限控制。
Ontology 的本体思想还是非常经典的思想:如果每个系统都按同一种结构暴露自己的能力,那么跨系统发现、组合、编排就从一个私有 API 适配问题,变成了标准化建模问题。
传统 API 文档告诉 AI:“这个接口怎么调”。
Ontology 更进一步告诉 AI:“这个业务世界里有哪些对象,对象之间有什么关系,对象上允许做哪些动作,动作执行前需要满足什么权限和约束。”这就是它和普通 Wiki 最大的不同。Wiki 偏解释系统,Ontology 偏建模系统;Wiki 偏阅读,Ontology 偏行动。
4.2 KBase ( Code Wiki )平台
KBase 是阿里集团内部的中心化代码知识 CodeWiki 平台。调研下来,它的核心能力:给一个代码仓库,用 AI 自动生成一份全面的 Markdown Wiki,并且可以自己定义生成时机、生成内容等。
它的运作方式大致是:选择仓库和分支,触发生成,支持 monorepo 子目录;AI 分析代码后输出 Markdown 页面(LLM Wiki),包括项目概览、模块划分、核心流程、API 说明、数据模型等;代码推送后可以增量更新,变动较大时降级为全量更新;通过 MCP 工具提供 AI 访问能力;同时支持 BM25 和语义向量两种搜索方式。
从存储形态看,CodeWiki 通常在云端平台,与代码仓库解耦。它独立生成、独立更新、独立存储。格式是 Markdown 自然语言,人机双用,人能读,AI 也能用。
这类工具的现实价值也比较大,尤其是在新人 onboarding、跨团队协作、陌生系统理解、快速概念定位这些场景里。
新人入职第一天,如果能看到一份自动生成的系统概览,至少不用完全靠“找人问”和“翻代码猜”。跨团队协作时,需要了解一个陌生服务,也不用先约对方团队开会,搜一下 CodeWiki 就能拿到基本答案。要找某个业务概念在哪实现,语义搜索通常比手动 grep 效率高得多。
CodeWiki 最大的优势是零成本接入和自动维护。对很多团队来说,只要仓库有代码可读权限,就可以生成一份基本可用的系统 Wiki。你不需要额外组织人力,也不需要工程师专门维护文档。对于“想让系统变得 AI Friendly,但暂时没有额外人力投入”的团队来说,这是非常现实的第一步。
但从 AI Coding 的角度看,CodeWiki 默认的生成策略也有一些结构性限制。
一、自然语言的解析:在AI 执行过程中确定性不如结构化数据。当 AI 需要做判断,而不只是理解时,从一段 Markdown 中提取隐含约束的准确率,通常低于从 YAML 字段里直接读取。比如“这个接口不能修改字段语义”,写在 Markdown 里是一句话,写在结构化 policy 里则可以变成明确规则。
二、云端存储可能存在一致性延迟:如果开发者刚提交了 breaking change,AI 在更新窗口内基于过期 Wiki 做决策,就可能产生问题。对于普通理解场景,这个问题不一定严重;但对于自动修改代码和生成方案,这个延迟需要拉齐到完整的AI coding 生产历程中进行评估。当然,这也是云端代码知识库都会遇到的一个现实挑战。
三、对业务定制支持偏弱: 从了解来看,CodeWiki 的核心定位是“代码即事实”,所以主要是尊重代码事实,因此开放的业务定制能力偏弱。
4.3 知识检索平台
在实际调研中,发现多个团队有独立建设自己的“知识检索引擎”、或基于 kbase 的 RAG 能力做了本地 agent 检索增强。主要用在以下几个方面比较多:
一、需求调研:尤其在大型互联网公司系统架构比较复杂,链路深度比较大的的时候,一个需求到底涉及到多少个系统,哪些能力在哪些系统里是已经具备的。比如针对一个打车系统,司机接单这个操作到底经过了几层系统、几层风控、每一层系统分别做了什么能力和策略或者拦截?如果想加一个新策略加到哪一层的哪个系统合适?对于新员工熟悉系统,也比较有价值。
二、技术方案设计和工作量评估:与需求调研类似,在针对产品需求的技术方案设计、工作量评估的时候也同样涉及到对上下游系统、链路、性能等进行了解和穿透调研。一个需求涉及到的系统改造半径,对应的改造风险、工作量评估,往往也需要链路上各种系统事实知识。
三、线上问题排查:如在前文《后端系统 AI Friendly 设计》提到,在将来严谨意义的 7x24 小时场景下,大部分的线上报警排查、分析、处理也都会AI 化。AI 处理和排查的时候同样需要跨系统、串通完整链路的系统知识,比如从网关入口、到实际的API 层微服务、到下游领域服务、到中间件RT 情况等等。对应的agent 需要在具有全面的系统架构事实、runtime 事实的前提下,才能做出具体的问题分析和预警干预处理。
针对知识检索需要的系统链路、架构事实部分,集团的Aone(CI/CD平台)、监控报警平台等都有对应的 MCP 能力可以支持调用,同时再以 Code as Wiki、 API as Wiki/SKILL、到 Architecture as Wiki 等知识进行辅助,梳理清晰的系统现状是相对简单的事情。
更实用的其实是检索能力平台化,我们也看到有一些不同的团队都针对检索能力做了自己的定制,比如下文的 aitom 等。
05
落地实践与选型
经过上面的系统性分层设计,以及解决方案调研,接下来就是各层知识库的落地阶段。
5.1 业务层
在上文第3节中已经聊到了业务层的主要作用、设计思考和思路,具体在落地实践的过程中,具体要落成什么样子呢?
这里提供一个我们的实现示例,可以供大家参考。
业务知识库不应只是业务文档的集合,而应该帮助 AI 完成从产品需求、业务场景到技术链路的转换,使 AI 能够理解业务元语、识别业务边界、定位相关系统,并在技术方案设计过程中获得必要的历史经验和设计约束。
围绕这一目标,我们将每个业务 Business 的知识库划分为几个主要部分:
business/
├── index.md
├── meta/
│ └── index.md
├── principle/
│ ├── index.md
│ ├── timeout.md
│ ├── idempotency.md
│ ├── consistency.md
│ ├── degradation.md
│ └── compatibility.md
├── scenario/
│ ├── index.md
│ └── scenario-*.md
├── practice/
│ ├── index.md
│ └── practice-*.md
└── history/
└── history-YYYYMMDD.md
根目录的 index.md
作为全局入口和索引文件,用来对内容进行 general 介绍和 indexing;meta 用于存储领域内的业务元语、核心业务对象、概念边界和关键业务规则。例如,在订单领域中,需要明确“交易订单”“支付单”“配送单”等概念分别代表什么,它们之间是什么关系,以及哪些概念虽然在日常沟通中可能都被简称为“订单”,但在技术设计中不能混用。
业务元语数量通常不会特别多,因此初期可以集中维护在 meta/index.md 中。为了便于 AI 精确引用和检索,每个业务元语应具有稳定的名称或标识,并说明其定义、别名、非同义词、业务边界、关联概念和核心规则。当领域逐渐复杂、单文件内容过大时,再进一步拆分即可。
principle 用于存放当前领域中跨多个业务场景复用的核心设计原则。它描述的不是某一个具体页面或接口的调用链,而是架构师在该领域设计系统时需要长期坚持的关键考虑,例如:
全链路超时预算如何分配;
多系统之间采用何种一致性与补偿策略;
哪些链路允许降级,哪些链路必须失败;
API、消息和状态语义如何保持向后兼容;
核心链路和旁路链路如何划分;
状态聚合和展示状态应遵循哪些原则。
例如,对于订单列表页和订单详情页,商品图片、营销标签等信息可能允许降级,而订单主体信息通常属于不可降级的核心数据。这类原则如果分别写在每个场景中,不仅会造成重复,也容易在长期维护中产生不一致。因此,将其抽象到 principle 中,再由不同场景进行引用,更有利于保持领域设计的一致性。
需要注意的是,principle 只承载当前业务领域特有、跨场景复用的设计原则。数据库、Redis、MQ、日志、发布流程等公司或团队级通用规范,仍应主要沉淀在基建层,避免每个业务 Business 重复维护一套相同知识。
scenario是业务场景与技术链路转换的核心目录。这里的场景主要从用户、产品或业务视角出发,例如订单列表页、订单详情页、退款详情页、提交订单页,或者一个不依赖具体页面的完整业务使用场景。
每个场景首先描述其业务目标、使用者、展示内容和业务边界,然后继续拆解场景中的具体功能和用户操作。例如,订单列表页可能包含:
查询和展示订单列表;
点击进入订单详情;
删除订单;
再次购买;
申请退款。
针对每一项操作,场景文档需要继续描述:
业务语义;
前置条件;
客户端请求的 API;
网关和聚合服务入口;
内部领域服务调用链路;
涉及的下游系统;
数据变化;
同步和异步事件;
异常、降级和补偿方式;
关联的 meta、principle 和历史实践。
例如,“删除订单”在产品界面上只是一个按钮,但在业务语义上可能并不代表物理删除订单数据,而是将订单从当前用户的订单列表中隐藏。因此场景文档需要明确:客户端请求哪个 API,订单服务如何校验订单归属和订单状态,是否需要查询退款及履约状态,最终修改的是订单主表还是用户与订单的展示关系,以及客服、对账和离线数据是否仍然可以查询该订单。
通过这种组织方式,scenario 实际上建立了一条从产品界面和用户操作到后端技术实现的转换链路:
产品页面或业务场景
↓
页面功能和用户操作
↓
业务语义与前置条件
↓
客户端 API
↓
网关或聚合服务
↓
内部领域服务
↓
下游系统、数据与消息
scenario/index.md 作为场景入口和路由索引。当场景数量较少(比如少于20个场景)、内容较轻时,可以将多个场景直接维护在一个文件中;当场景数量增加,或者某个场景需要频繁更新、被独立引用、具有独立 Owner 时,可以拆分为单独文件,由 index.md
维护场景名称、业务关键词、核心功能和文档链接。这里不建议将“20 个场景”理解为严格的拆分标准。数量可以作为一个简单参考,但更重要的判断依据是文件大小、内容复杂度、更新频率和独立引用需求。
practice 用于记录历史设计和历史实践。它关注的不只是“过去做过什么”,更重要的是解释“过去为什么这样做”“哪些经验可以复用”“哪些坑不能再踩”。
实践内容可以包括:
某类需求的标准改造模式;
某次重要架构或业务决策;
历史兼容设计;
线上事故暴露出的隐性约束;
某类需求通常会影响的系统范围;
某种方案适用和不适用的条件。
例如,在新增一种订单状态时,历史实践可能提醒 AI:除了修改订单服务状态机,还需要检查客户端状态映射、客服系统、消息消费者、离线数仓和对账逻辑。实践知识的价值不只是提供一个可以复制的旧方案,而是帮助 AI 判断某个历史方案在当前场景下是否仍然适用。
history 用于记录知识库自身的生成和变更历史,例如某一天由谁、通过哪个 Skill、基于哪些资料生成或更新了哪些文件,经过了谁的审核,以及当前还有哪些未确认事项。
需要明确区分 practice 和 history:
practice 承载对未来技术方案仍有指导意义的业务和架构知识;
history 只记录知识库本身何时、由谁、以什么方式发生了变化。
history 中保存的应该只是 log 而不是具体知识本身。
在具体文件格式上,我们倾向于使用带索引结构的 Markdown。Markdown 对产品、业务、研发和架构师都比较友好,也便于人工审核和持续修正。同时,可以在文件头部增加 YAML Front Matter,用于描述文档 ID、类型、领域、Owner、状态、更新时间和关联对象等结构化信息。
例如:
id: scenario.order-list-page
type: business_scenario
domain: order
owner: order-domain-team
status: verified
related_meta:
- trade_order
related_principles:
- timeout
- degradation
updated_at: 2026-07-15
正文继续采用 Markdown 描述业务背景、流程、调用链和设计考虑。这样既保留了文档对人类的可读性,也为 AI 检索、路由、过滤和按需加载提供了必要的结构化信息。从整体关系来看,可以将这几个目录理解为:
meta
定义业务世界中有哪些概念,这些概念分别是什么意思
scenario
定义具体业务场景如何运行,以及业务操作如何转换为技术链路
practice
定义历史上类似问题如何处理、为什么这样处理,以及有哪些经验教训
principle
定义该领域跨场景需要长期遵守的核心设计原则
history
记录知识库自身的生成、审核和变更过程
以上结构是我们结合实际业务层知识库建设过程,给出的一种参考实践。主要是对业务知识、业务与架构映射以及历史实践三类内容的设计思考,但并不意味着这是一套需要所有团队强制遵守的标准。
不同团队的业务复杂度、文档体系、系统架构和 AI Coding 工作流都不相同。有的团队可能更适合以页面场景组织知识,有的团队可能更适合以用户旅程、业务流程或业务能力组织;有的团队会将 Markdown 存放在代码仓库中,有的团队则更适合存放在中心化知识平台中。
因此,这里的目录结构、文件命名和拆分方式,更多是一种可落地、可讨论、可持续演进的实践示例。团队可以直接参考,也可以结合自身情况调整,并持续提出改进建议。真正重要的不是目录名称是否完全一致,而是业务层知识能否帮助 AI 准确回答以下问题:
需求中的业务概念是什么意思;
当前需求发生在哪个业务场景;
页面功能和用户操作对应哪些后端 API 与系统链路;
技术方案需要遵守哪些跨场景设计原则;
历史上类似问题如何处理,曾经发生过哪些风险;
当前知识是否经过确认,能否安全地作为 AI 行动依据。
只要能够持续提升这些问题的回答质量,业务层知识库的建设就产生了实际价值。
这一层知识在平台化存储和检索能力实现实现层面,我们目前使用 kbase 承载。主要是方便人为编辑、人工查看和干预。按照“分领域知识库”的维度来进行组织和维护,比如手车互联、驾车导航、停车推荐等等关联度比较低的场景,分别维护自己的知识库。
5.2 架构层 (aitom平台)
这一层,我们采用的是 aitom 平台:https://aitom.amap-inc.com/
aitom 是高德出行后端团队,面向AI Native 时代打造的 AI 平台型基建, aitom 最关键的价值有三个(更多能力持续扩展中):
一、服务能力的 Skill 化:
把每个后端服务的对外接口包装为 AI 技能。每个 Skill 包含一组相关 API、接入指南、质检文档。AI Agent 安装技能后,就可以通过自然语言调用对应服务能力。这和 Ontology “把能力结构化暴露”的思路是一致的,只是粒度更接近后端服务和接口,而不是完整企业级业务对象体系。
二、服务间调用图谱:
通过 aitom graph <项目名> 可以查看任何项目的上下游依赖:谁调了我,我调了谁,用什么协议,是 HTTP 还是 HSF,具体哪个接口,超时时间多久。这一点很关键。很多技术方案设计最怕的不是不知道怎么改代码,而是不知道改完影响谁。有了服务图谱,影响分析就不再完全依赖人肉问同事。
三、架构约束:
这部分是我们正在
関連記事
今日のまとめ
AIデイリーブリーフで今日の重要ニュースをまとめ読み