agent.tools.rag

RAG 检索引擎:BM25 全文检索。

扫描 docs/*.md + README.md,按 ## 标题切块后建立 BM25 索引。 分词策略:中文用 jieba 分词,英文按空白拆分。

Attributes

_PROJECT_ROOT

_DOC_DIR

_STOP_WORDS

_engine

Classes

RagEngine

零依赖 BM25 检索引擎,惰性初始化。

Functions

_tokenize(→ list[str])

中英文混合分词:中文用 jieba,英文按空白分割,过滤停用词。

search_rag(→ list[dict])

全局接口:检索 RAG 文档库,惰性初始化。

Module Contents

agent.tools.rag._PROJECT_ROOT = b'.'
agent.tools.rag._DOC_DIR
agent.tools.rag._STOP_WORDS
agent.tools.rag._tokenize(text: str) list[str]

中英文混合分词:中文用 jieba,英文按空白分割,过滤停用词。

class agent.tools.rag.RagEngine

零依赖 BM25 检索引擎,惰性初始化。

_docs: list[dict] = []
_avgdl = 0.0
_idf: dict[str, float]
_initialized = False
init() None

惰性初始化:扫描文档 → 切块 → 建立 BM25 索引。幂等,多次调用仅执行一次。

_load_docs() None

扫描 docs/*.md + README.md,按 ## 标题切块后存入 self._docs。

_build_index() None

计算文档平均长度 + 每个词的 IDF,供 BM25 打分使用。

_bm25_score(q_tokens: list[str]) list[tuple[float, dict]]

计算 BM25 分数(k1=1.5, b=0.75),返回 (分数, 文档) 列表,按分数降序排列。

search(query: str, k: int = 3) list[dict]

BM25 检索,返回 top-k 条结果。低分时自动提取关键词重试。

agent.tools.rag._engine
agent.tools.rag.search_rag(query: str, k: int = 3) list[dict]

全局接口:检索 RAG 文档库,惰性初始化。

Args:

query: 用户查询文本。 k: 返回 top-k 条结果,默认 3。

Returns:

list[dict]: 每项含 score/source/heading/text,按 BM25 分数降序。