关于 knowledge-base-injection
knowledge-base-injection 是一种按任务相关性向 Agent 上下文注入领域知识的技能,使用 TF-IDF 为查询匹配结构化模式。模式包含触发条件、建议、证据和置信度,可在不重新训练模型的情况下更新知识。
主要功能
- 01基于 TF-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确认已加载。
详细介绍
知识库注入
属于 Agent Skills™,由 googleadsagent.ai™ 提供
描述
知识库注入是一种技术,可在领域知识最相关的时刻,使用 TF-IDF 模式匹配和语义评分,将领域专业知识动态注入 Agent 的上下文中。通用大模型缺乏执行 Google Ads 优化、医学编码或金融合规等专业任务所需的深厚领域知识。与其进行微调(成本高、速度慢、容易失效),或在系统提示词中塞入模型可能需要的所有内容(浪费资源、分散注意力),不如检索并注入仅与当前任务相关的特定模式。
这项技能基于 Buddy™ 背后的生产级知识库系统,该系统由 googleadsagent.ai™ 提供,具体来说,是包含 1,000 多条精选 Google Ads 优化模式的 gads-knowledge.js 模块。每条模式都包含触发条件(何时应用)、建议(应采取什么措施)、依据(为何有效)和置信度分数。Buddy™ 分析广告系列时,知识库引擎会使用 TF-IDF,根据当前上下文为所有模式评分,并将最相关的前 K 条模式注入 Agent 的上下文中,从而将通用模型转变为领域专家。
该注入系统采用检索增强生成(RAG)范式,但有一个关键区别:它检索的不是原始文档,而是内置置信度分数和适用条件的结构化行动模式。与文档级 RAG 相比,这种方式能生成更具可操作性、更可靠的 Agent 输出。
适用场景
- Agent 需要通用模型所欠缺的领域专业知识
- 你拥有精选的模式、规则或最佳实践知识库
- 微调成本过高、耗时太长,或会造成模型版本锁定
- 不同的查询需要不同的领域知识子集
- 你希望在不重新训练或重新部署的情况下更新 Agent 的专业知识
- Agent 必须以经过验证的权威来源为依据提供建议
工作原理
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 条进行注入。选出的模式会被整理成格式清晰的结构化上下文块,并注入 Agent 的提示词中。执行完成后,引用追踪会将 Agent 的建议关联回提供依据的具体模式,以便审计。
实现
知识模式结构:
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]
将知识注入 Agent 上下文:
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)}
最佳实践
- 有信心地整理模式,并为其标注置信度分数 — 每个知识模式都应根据证据强度标注置信度分数;Agent 应更重视高置信度模式。
- 保持模式原子化 — 每个模式应针对一种特定情况;复合模式会降低检索精度。
- 持续更新知识库 — 领域知识不断演变;应定期审查,添加新模式、更新置信度分数,并淘汰过时模式。
- 仅注入排名前 K 的相关模式 — 注入过多模式会分散 Agent 的注意力;5-10 个高度相关的模式胜过 50 个相关性较低的模式。
- 要求跟踪引用 — 指示 Agent 在建议中引用模式 ID;这会形成审计线索,并让你衡量哪些模式带来了最大价值。
- 对模式分类,以便高效检索 — 在评分前按类别(出价、定向、创意)预筛选,可减少计算量并提高精度。
- 与不注入知识的基线进行基准测试 — 定期比较注入知识前后的 Agent 表现,以量化知识库的价值。
平台兼容性
| 功能 | 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 |
相关技能
- Token 优化 - 知识注入必须符合上下文窗口预算;排名前 K 的筛选可最大限度减少 Token 浪费
- 实体记忆管理 - 实体上下文与知识模式一起组装,形成全面的 Agent 上下文
- 持续学习 - 自动生成的技能会作为新的可注入模式反馈到知识库中
- 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