mcpField
K
knowledge-base-injection

knowledge-base-injection

github.com/itallstartedwithaideaAgent 工作流4477 次安装28 周前更新
代码仓库

关于 knowledge-base-injection

knowledge-base-injection 是一种按任务相关性向 Agent 上下文注入领域知识的技能,使用 TF-IDF 为查询匹配结构化模式。模式包含触发条件、建议、证据和置信度,可在不重新训练模型的情况下更新知识。

主要功能

  1. 01基于 TF-IDF 的模式检索
  2. 02按相关性选择并注入知识
  3. 03模式包含建议、证据与置信度
  4. 04为建议追踪引用来源
  5. 05无需重新训练即可更新知识

适用场景

  1. 01为通用模型补充特定领域经验
  2. 02按查询提供相关规则和最佳实践
  3. 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)}

最佳实践

  1. 有信心地整理模式,并为其标注置信度分数 — 每个知识模式都应根据证据强度标注置信度分数;Agent 应更重视高置信度模式。
  2. 保持模式原子化 — 每个模式应针对一种特定情况;复合模式会降低检索精度。
  3. 持续更新知识库 — 领域知识不断演变;应定期审查,添加新模式、更新置信度分数,并淘汰过时模式。
  4. 仅注入排名前 K 的相关模式 — 注入过多模式会分散 Agent 的注意力;5-10 个高度相关的模式胜过 50 个相关性较低的模式。
  5. 要求跟踪引用 — 指示 Agent 在建议中引用模式 ID;这会形成审计线索,并让你衡量哪些模式带来了最大价值。
  6. 对模式分类,以便高效检索 — 在评分前按类别(出价、定向、创意)预筛选,可减少计算量并提高精度。
  7. 与不注入知识的基线进行基准测试 — 定期比较注入知识前后的 Agent 表现,以量化知识库的价值。

平台兼容性

功能Claude CodeCursorCodexGemini 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

评论

支持 Markdown