纯 MoonBit 零 FFI 的本地全文检索与 RAG 检索库:中英日分词、BM25 倒排索引、向量索引、RRF 混合检索与 LLM 上下文组装,可编译为 wasm / wasm-gc / js / native 多后端。
Dependencies
# 添加依赖
moon add niuniu513-ask/MoonRetrievelet engine = @lib.Engine::new()
engine.add_document("guide", "MoonBit 是面向云边计算的编程语言。")
engine.add_document("faq", "RAG 是检索增强生成。")
let results = engine.search("RAG 是什么", top_k=3)
let cb = @lib.ContextBuilder::new(max_tokens=500)
println(cb.build("RAG 是什么", results))# 建索引
moon run cmd/main --target native -- index examples/notes demo-index.json
# 导入带稳定 ID 的 JSONL(每行包含 id 或 _id、text,可选 title)
moon run cmd/main --target native -- index-jsonl documents.jsonl demo-index.json
# 检索
moon run cmd/main --target native -- query demo-index.json "MoonBit 黑客松" -k 3
# 生成 LLM 上下文
moon run cmd/main --target native -- context demo-index.json "黑客松奖励" -k 3
# 输出可供应用读取的提示词、引用清单与预算信息
moon run cmd/main --target native -- context demo-index.json "MoonBit" -k 3 --tokens 2000 --diverse --json
# 用标注查询集评测文档级检索,JSON 含每题排名与汇总指标
moon run cmd/main --target native -- evaluate demo-index.json examples/evaluation-cases.json -k 3 --json
# 检查一次查询的排名和词项匹配证据
moon run cmd/main --target native -- trace demo-index.json "MoonBit RAG" -k 3 --json
# 索引统计
moon run cmd/main --target native -- stats demo-index.json
# 短语检索(可加 --highlight)
moon run cmd/main --target native -- phrase demo-index.json "MoonBit 黑客松" -k 3
# 布尔检索 / 前缀检索
moon run cmd/main --target native -- boolean demo-index.json "MoonBit AND RAG" -k 3
moon run cmd/main --target native -- prefix demo-index.json "moon" -k 3MoonRetrieve.mbt 包说明
jsonl.mbt 带稳定 ID 的文档批量导入校验
tokenizer.mbt 分词器
chunker.mbt 分块器
index.mbt BM25 倒排索引
vector.mbt 向量索引与 RRF 融合
context.mbt LLM 上下文组装
engine.mbt 一站式引擎
evaluation.mbt Precision/Recall/MRR/MAP 等检索评估指标
trace.mbt 可导出的检索诊断轨迹
suggest.mbt Unicode 查询纠错、推荐与前缀补全
query.mbt 必选/排除/短语/前缀结构化查询
result_ops.mbt 融合、去重、分组与多样化
summary.mbt 关键词、摘要与命中片段
cmd/main/ CLI
examples/notes/ 示例文档
examples/evaluation-cases.json 小型检索评测样例
docs/ 使用教程、申报书、差异化说明与自查清单moon test # native / wasm-gc / js 由 CI 覆盖
moon check
moon build --target wasm-gc
moon bench # 5 项基准(分词 / 建索引 / 小集合与 2,000 文档检索)moon run examples/quickstart --target wasm-gcfn ContextBuilder::build(self : ContextBuilder, query : String, results : Array[SearchResult]) -> Stringfn ContextBuilder::build_diverse(self : ContextBuilder, query : String, results : Array[SearchResult], max_sources? : Int) -> Stringfn ContextBuilder::build_diverse_report(self : ContextBuilder, query : String, results : Array[SearchResult], max_sources? : Int) -> ContextReportfn ContextBuilder::build_report(self : ContextBuilder, query : String, results : Array[SearchResult]) -> ContextReportpub struct ContextCitation {
number : Int
doc_id : String
score : Double
text : String
estimated_tokens : Int
} derive(ToJson)pub struct ContextReport {
prompt : String
citations : Array[ContextCitation]
used_content_tokens : Int
estimated_prompt_tokens : Int
skipped_results : Int
} derive(ToJson)fn Engine::build_context_report(self : Engine, query : String, top_k? : Int, max_tokens? : Int) -> ContextReportfn Engine::build_diverse_context_report(self : Engine, query : String, top_k? : Int, max_tokens? : Int) -> ContextReportfn Engine::evaluate_queries(self : Engine, cases : Array[EvaluationCase], cutoff? : Int) -> EvaluationReportfn Engine::search_explained(self : Engine, query : String, top_k? : Int) -> Array[ResultExplanation]fn Engine::search_snippets(self : Engine, query : String, top_k? : Int, max_chars? : Int) -> Array[SearchResult]pub struct EvaluatedQuery {
query : String
ranked_doc_ids : Array[String]
metrics : RetrievalMetrics
} derive(ToJson)pub struct EvaluationReport {
cutoff : Int
queries : Array[EvaluatedQuery]
summary : EvaluationSummary
} derive(ToJson)fn IndexStats::new(doc_count : Int, term_count : Int, total_tokens : Int, avg_doc_len : Double) -> IndexStatspub struct ResultGroup {
doc_id : String
best_score : Double
total_score : Double
chunk_count : Int
chunks : Array[SearchResult]
} derive(Debug)fn SearchIndex::search_boolean(self : SearchIndex, query : String, top_k? : Int) -> Array[SearchResult]fn SearchIndex::search_phrase(self : SearchIndex, query : String, top_k? : Int) -> Array[SearchResult]fn SearchIndex::search_prefix(self : SearchIndex, prefix : String, top_k? : Int) -> Array[SearchResult]fn diversify_results(results : Array[SearchResult], similarity_threshold? : Double, limit? : Int, tokenizer? : Tokenizer) -> Array[SearchResult]fn edit_distance(left : String, right : String) -> Intfn evaluate_ranking(ranked : Array[String], relevant : Array[String], cutoff? : Int) -> RetrievalMetricsfn evaluate_results(results : Array[SearchResult], relevant : Array[String], cutoff? : Int) -> RetrievalMetricsfn explain_result(query : String, result : SearchResult, tokenizer? : Tokenizer) -> ResultExplanationfn explain_results(query : String, results : Array[SearchResult], tokenizer? : Tokenizer) -> Array[ResultExplanation]fn filter_results(results : Array[SearchResult], min_score? : Double, max_results? : Int) -> Array[SearchResult]fn filter_with_query_plan(results : Array[SearchResult], plan : QueryPlan, tokenizer? : Tokenizer) -> Array[SearchResult]fn paginate_results(results : Array[SearchResult], offset? : Int, limit? : Int) -> Array[SearchResult]fn result_snippet(text : String, query : String, max_chars? : Int, tokenizer? : Tokenizer) -> Stringfn shared_prefix_length(left : String, right : String) -> Intfn snippets_for_results(results : Array[SearchResult], query : String, max_chars? : Int, tokenizer? : Tokenizer) -> Array[SearchResult]fn suggest_terms(query : String, vocabulary : Array[String], max_distance? : Int, limit? : Int) -> Array[QuerySuggestion]fn summarize_text(text : String, query? : String, max_sentences? : Int, tokenizer? : Tokenizer) -> TextSummaryfn transposition_distance(left : String, right : String) -> Intfn weighted_fuse_results(left : Array[SearchResult], right : Array[SearchResult], left_weight? : Double, right_weight? : Double, limit? : Int) -> Array[SearchResult]Install
Download zip纯 MoonBit 零 FFI 的本地全文检索与 RAG 检索库:中英日分词、BM25 倒排索引、向量索引、RRF 混合检索与 LLM 上下文组装,可编译为 wasm / wasm-gc / js / native 多后端。
Dependencies