feat: 第三优先级完善 — CI/CD、PyPI、pre-commit、CHANGELOG、贡献指南、基准测试、ADR
CI / Test (Python 3.13) (push) Has been cancelled
CI / Test (Python 3.13) (push) Has been cancelled
This commit is contained in:
@@ -0,0 +1,41 @@
|
||||
"""基准测试共享 fixture."""
|
||||
import pytest
|
||||
|
||||
from src.core.config import ChunkConfig, EmbedConfig
|
||||
from src.core.db import VectorDB
|
||||
from src.core.embedder import create_embedder
|
||||
from src.core.ingest import DocumentIngestor
|
||||
from src.core.search import Searcher
|
||||
|
||||
|
||||
@pytest.fixture(scope="module")
|
||||
def benchmark_db(tmp_path_factory):
|
||||
"""模块级共享 ChromaDB 实例."""
|
||||
persist_dir = tmp_path_factory.mktemp("bench_data")
|
||||
return VectorDB(persist_dir=str(persist_dir))
|
||||
|
||||
|
||||
@pytest.fixture(scope="module")
|
||||
def benchmark_embedder():
|
||||
"""模块级共享 LocalEmbedder."""
|
||||
config = EmbedConfig(mode="local", local_model="BAAI/bge-small-zh-v1.5")
|
||||
return create_embedder(config)
|
||||
|
||||
|
||||
@pytest.fixture(scope="module")
|
||||
def benchmark_searcher(benchmark_db, benchmark_embedder):
|
||||
"""预填充数据的 Searcher."""
|
||||
ingestor = DocumentIngestor(
|
||||
benchmark_db, benchmark_embedder, "bench_collection",
|
||||
chunk_config=ChunkConfig(max_size=1000, overlap=100),
|
||||
)
|
||||
for i in range(100):
|
||||
content = (
|
||||
f"# 文档{i}\n\n"
|
||||
+ "\n\n".join(
|
||||
f"第{j}段用于基准测试。关键词: Python, Rust, GPU, 向量数据库。"
|
||||
for j in range(5)
|
||||
)
|
||||
)
|
||||
ingestor.ingest_content(content, f"bench_{i}.md")
|
||||
return Searcher(benchmark_db, benchmark_embedder, "bench_collection")
|
||||
@@ -0,0 +1,23 @@
|
||||
"""嵌入性能基准测试."""
|
||||
import pytest
|
||||
|
||||
|
||||
def test_bench_embed_single(benchmark, benchmark_embedder):
|
||||
"""单文本嵌入耗时."""
|
||||
text = "这是一段测试文本,用于测量嵌入速度。"
|
||||
benchmark(benchmark_embedder.embed, [text])
|
||||
|
||||
|
||||
def test_bench_embed_batch_32(benchmark, benchmark_embedder):
|
||||
"""批量 32 文本嵌入耗时."""
|
||||
texts = [f"测试文本第{i}条,模拟真实文档内容。" for i in range(32)]
|
||||
benchmark(benchmark_embedder.embed, texts)
|
||||
|
||||
|
||||
def test_bench_embed_batch_100(benchmark, benchmark_embedder):
|
||||
"""批量 100 文本嵌入耗时(GPU 优势显著)."""
|
||||
texts = [
|
||||
f"测试文本第{i}条。Python 通用编程语言,用于数据科学和 AI。"
|
||||
for i in range(100)
|
||||
]
|
||||
benchmark(benchmark_embedder.embed, texts)
|
||||
@@ -0,0 +1,17 @@
|
||||
"""检索性能基准测试."""
|
||||
import pytest
|
||||
|
||||
|
||||
def test_bench_search_top5(benchmark, benchmark_searcher):
|
||||
"""top_k=5 检索耗时."""
|
||||
benchmark(benchmark_searcher.search, "Python 向量数据库", top_k=5)
|
||||
|
||||
|
||||
def test_bench_search_top20(benchmark, benchmark_searcher):
|
||||
"""top_k=20 检索耗时."""
|
||||
benchmark(benchmark_searcher.search, "Rust 编程语言 GPU", top_k=20)
|
||||
|
||||
|
||||
def test_bench_search_cold_start(benchmark, benchmark_searcher):
|
||||
"""冷启动检索耗时."""
|
||||
benchmark(benchmark_searcher.search, "GPU 加速 深度学习 嵌入", top_k=10)
|
||||
Reference in New Issue
Block a user