knowledge-base-injection について
knowledge-base-injectionは、TF-IDFでクエリに合う構造化パターンを探し、関連するドメイン知識をエージェントのコンテキストに加えるスキルです。パターンには適用条件、推奨事項、根拠、信頼度が含まれ、モデルを再学習せずに知識を更新できます。
主な機能
- 01TF-IDFによるパターン検索
- 02関連度に基づく選択と注入
- 03推奨事項・根拠・信頼度を含むパターン
- 04推奨事項の引用追跡
- 05モデル再学習なしでの知識更新
活用シーン
- 01汎用モデルへのドメイン知識の追加
- 02クエリに応じたルールや実践例の提示
- 03推奨事項と監査可能な知識パターンの紐付け
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ itallstartedwithaidea/ agent-skills --skill knowledge-base-injectionインストール後、Claude Code で/knowledge-base-injectionを入力して読み込まれたか確認します。
詳細
ナレッジベースの注入
googleadsagent.ai™ による Agent Skills™ の一部です
説明
ナレッジベースの注入とは、TF-IDF によるパターンマッチングとセマンティックスコアリングを用いて、最も関連性の高いタイミングでドメインの専門知識をエージェントのコンテキストに動的に注入する手法です。汎用言語モデルには、Google Ads の最適化、医療コーディング、金融コンプライアンスなどの専門タスクに必要な深いドメイン知識が不足しています。ファインチューニング(高コスト、時間がかかる、脆弱)を行ったり、モデルが必要とする可能性のある情報をすべてシステムプロンプトに詰め込んだりする(非効率で、注意を分散させる)のではなく、ナレッジベースの注入では、現在のタスクに関連する特定のパターンのみを取得して注入します。
このスキルは、googleadsagent.ai™ の Buddy™ を支える本番環境のナレッジベースシステムを基盤としており、1,000 件を超える厳選された Google Ads 最適化パターンを含む gads-knowledge.js モジュールを使用します。各パターンには、適用条件、推奨事項、根拠、信頼度スコアが含まれます。Buddy™ がキャンペーンを分析する際、ナレッジベースエンジンは TF-IDF を使用して、現在のコンテキストとすべてのパターンの適合度をスコアリングし、最も関連性の高い上位 K 件のパターンをエージェントのコンテキストに注入することで、汎用モデルをドメインエキスパートへと変えます。
この注入システムは検索拡張生成(RAG)のパラダイムに基づいていますが、重要な違いがあります。生のドキュメントを取得するのではなく、信頼度スコアと適用条件が組み込まれた、構造化されたアクションパターンを取得します。これにより、ドキュメントレベルの RAG よりも、実行可能で信頼性の高いエージェントの出力が得られます。
使用する場面
- エージェントに、汎用モデルにはないドメインの専門知識が必要な場合
- パターン、ルール、ベストプラクティスを集めた厳選済みのナレッジベースがある場合
- ファインチューニングのコストや所要時間が過大な場合、またはモデルのバージョンに縛られる場合
- クエリごとに、必要なドメイン知識の一部が異なる場合
- 再トレーニングや再デプロイをせずに、エージェントの専門知識を更新したい場合
- エージェントの推奨事項を、検証済みの信頼できる情報源に基づかせる必要がある場合
仕組み
graph TD
A[Agent Task/Query] --> B[Query Analyzer]
B --> C[TF-IDF Scorer]
C --> D[Knowledge Base<br/>1,000+ Patterns]
D --> E[Ranked Results]
E --> F{Score > Threshold?}
F -->|Yes| G[Top-K Selection]
F -->|No| H[Fallback: Broader Search]
H --> G
G --> I[Context Assembly]
I --> J[Pattern Injection<br/>into Agent Context]
J --> K[Agent Execution]
K --> L[Citation Tracking]
L --> M[Response with Sources]
タスクを受け取ると、クエリアナライザーが重要な用語や概念を抽出します。TF-IDF スコアリングエンジンが、クエリとナレッジベース内のすべてのパターンとの関連度スコアを算出します。しきい値を超えたパターンを順位付けし、上位 K 件を注入対象として選択します。選択したパターンを明確な書式の構造化コンテキストブロックにまとめ、エージェントのプロンプトに注入します。実行後は、引用追跡によってエージェントの推奨事項と、その根拠となった特定のパターンを関連付け、監査可能性を確保します。
実装
ナレッジパターンの構造:
interface KnowledgePattern {
id: string;
category: "bidding" | "targeting" | "creative" | "budget" | "structure" | "general";
trigger: string;
recommendation: string;
evidence: string;
confidence: number;
terms: string[];
tf_idf_vector?: number[];
}
const SAMPLE_PATTERNS: KnowledgePattern[] = [
{
id: "bid-001",
category: "bidding",
trigger: "Campaign using manual CPC with more than 30 conversions/month",
recommendation: "Switch to Target CPA or Maximize Conversions bidding strategy",
evidence: "Campaigns with 30+ monthly conversions have sufficient data for Smart Bidding algorithms. Google's internal data shows 15-20% CPA improvement on average after switching.",
confidence: 0.92,
terms: ["manual", "cpc", "conversions", "bidding", "strategy", "target", "cpa"],
},
{
id: "budget-003",
category: "budget",
trigger: "Campaign limited by budget for more than 7 consecutive days",
recommendation: "Increase daily budget by 20-30% or reduce bids/targeting to fit within budget",
evidence: "Budget-limited campaigns miss high-value impressions during peak hours. Impression share lost to budget directly correlates with missed conversions.",
confidence: 0.88,
terms: ["budget", "limited", "daily", "impressions", "share", "lost"],
},
];
TF-IDF スコアリングエンジン:
import math
from collections import Counter
class TFIDFEngine:
def __init__(self, patterns: list[dict]):
self.patterns = patterns
self.idf = self.compute_idf()
def compute_idf(self) -> dict[str, float]:
n = len(self.patterns)
doc_freq = Counter()
for pattern in self.patterns:
unique_terms = set(pattern["terms"])
for term in unique_terms:
doc_freq[term] += 1
return {term: math.log(n / (1 + freq)) for term, freq in doc_freq.items()}
def score(self, query_terms: list[str], pattern: dict) -> float:
query_tf = Counter(query_terms)
pattern_terms = set(pattern["terms"])
score = 0.0
for term in query_terms:
if term in pattern_terms:
tf = query_tf[term] / len(query_terms)
idf = self.idf.get(term, 0)
score += tf * idf
return score * pattern.get("confidence", 1.0)
def search(self, query: str, top_k: int = 10, threshold: float = 0.1) -> list[dict]:
query_terms = self.tokenize(query)
scored = []
for pattern in self.patterns:
s = self.score(query_terms, pattern)
if s >= threshold:
scored.append({**pattern, "relevance_score": s})
scored.sort(key=lambda x: x["relevance_score"], reverse=True)
return scored[:top_k]
def tokenize(self, text: str) -> list[str]:
return [w.lower().strip(".,!?;:") for w in text.split() if len(w) > 2]
エージェントのコンテキストへのナレッジ注入:
def inject_knowledge(query: str, engine: TFIDFEngine, max_patterns: int = 8, max_tokens: int = 3000) -> str:
relevant = engine.search(query, top_k=max_patterns)
if not relevant:
return ""
sections = ["<domain_knowledge>"]
token_count = 0
for pattern in relevant:
entry = f"""[{pattern['id']}] (confidence: {pattern['confidence']:.0%}, relevance: {pattern['relevance_score']:.2f})
Trigger: {pattern['trigger']}
Recommendation: {pattern['recommendation']}
Evidence: {pattern['evidence']}"""
entry_tokens = len(entry.split()) * 1.3 # rough estimate
if token_count + entry_tokens > max_tokens:
break
sections.append(entry)
token_count += entry_tokens
sections.append("</domain_knowledge>")
sections.append("Use the patterns above to ground your analysis. Cite pattern IDs when making recommendations.")
return "\n\n".join(sections)
統合例全体:
async def analyze_with_knowledge(campaign_data: dict, user_query: str):
engine = TFIDFEngine(load_knowledge_base("gads-knowledge.js"))
context_query = f"{user_query} {campaign_data.get('strategy', '')} {campaign_data.get('status', '')}"
knowledge_block = inject_knowledge(context_query, engine)
messages = [
{"role": "system", "content": f"""You are Buddy™, a Google Ads expert agent by googleadsagent.ai™.
{knowledge_block}
Analyze the campaign data below and provide actionable recommendations.
Cite knowledge pattern IDs (e.g., [bid-001]) when your recommendations are based on domain patterns."""},
{"role": "user", "content": f"Campaign data:\n{json.dumps(campaign_data, indent=2)}\n\nQuery: {user_query}"},
]
response = await model.generate(messages)
citations = extract_citations(response, engine.patterns)
return {"analysis": response, "citations": citations, "patterns_used": len(citations)}
ベストプラクティス
- 確信度スコアを付けてパターンを精選する — すべてのナレッジパターンに、根拠の強さに基づく確信度スコアを付けます。エージェントは確信度の高いパターンをより重視する必要があります。
- パターンを単一の内容に絞る — 各パターンは特定の状況を1つだけ扱うようにします。複数の内容を含むパターンは、検索精度を低下させます。
- ナレッジベースを継続的に更新する — ドメイン知識は進化するため、新しいパターンの追加、確信度スコアの更新、古くなったパターンの廃止を行う定期的なレビューを予定に組み込みます。
- 注入するパターンを関連度の高い上位K件に絞る — パターンを注入しすぎると、エージェントの注意が分散します。関連度の低いパターンを50件使うより、関連度の高いパターンを5~10件使うほうが効果的です。
- 引用の追跡を必須にする — 推奨事項でパターン ID を引用するようエージェントに指示します。これにより監査証跡が作成され、どのパターンが最も価値をもたらしているかを測定できます。
- 効率的な検索のためにパターンを分類する — スコアリングの前にカテゴリ(入札、ターゲティング、クリエイティブ)で事前に絞り込むと、計算量が減り、精度が向上します。
- 注入なしのベースラインと比較してベンチマークする — ナレッジ注入の価値を定量化するために、ナレッジ注入ありとなしのエージェントのパフォーマンスを定期的に比較します。
プラットフォームの互換性
| 機能 | Claude Code | Cursor | Codex | Gemini CLI |
|---|---|---|---|---|
| 動的な注入 | ✅ Hooks/MCP | ✅ Skills/MCP | ✅ Custom | ✅ Custom |
| TF-IDF スコアリング | ✅ Full | ✅ Full | ✅ Full | ✅ Full |
| パターン検索 | ✅ Full | ✅ Full | ✅ Full | ✅ Full |
| 引用の追跡 | ✅ Full | ✅ Full | ✅ Full | ✅ Full |
| ナレッジの更新 | ✅ File reload | ✅ Skill reload | ✅ Restart | ✅ Restart |
関連スキル
- トークンの最適化 - ナレッジ注入ではコンテキストウィンドウの予算を守る必要があります。上位K件を選択することで、トークンの無駄を最小限に抑えられます
- エンティティメモリ管理 - 包括的なエージェントコンテキストを構成するため、ナレッジパターンとともにエンティティコンテキストも組み立てられます
- 継続的な学習 - 自動生成されたスキルは、新たに注入可能なパターンとしてナレッジベースにフィードバックされます
- Google Ads 監査 - 1,000件のパターンを含むナレッジベースが、監査のパターンマッチングエンジンを支えています
キーワード
knowledge-base, tf-idf, pattern-matching, domain-expertise, retrieval-augmented-generation, knowledge-injection, confidence-scoring, citation-tracking, gads-knowledge, agent-skills
© 2026 googleadsagent.ai™ | Agent Skills™ | MIT License