多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

MemoryBear 知识库召回评测与检索压测实战指南:从快照生成到性能门禁的完整链路

MemoryBear 知识库召回评测与检索压测实战指南:从快照生成到性能门禁的完整链路 【免费下载链接】MemoryBearMemoryBear Equip AI with human-like memory capability项目地址https://gitcode.com/gh_mirrors/me/MemoryBear点击查看免费下载本文是 MemoryBear 开源仓库中 api/scripts/README_RAG_EVALUATION.md 的深度解读与实战扩充。它以仓库内置的两个独立脚本为主线——rag_recall_eval.py召回效果评测与 rag_retrieval_load_test.pyLocust 性能压测完整讲解「语料快照 → 评测数据集生成 → 数据集校验 → 召回评测 → 性能压测 → 中文报告」的端到端流程。读完本文你将能够独立为 MemoryBear 知识库建立召回基线、对比检索参数、定位召回质量与性能瓶颈并把整套流程接入 CI。1. 工具定位与评测范围1.1 两个独立脚本MemoryBear 在api/scripts/目录下提供了两个完全独立的评测工具rag_recall_eval.py负责语料快照snapshot、评测数据集生成generate、数据集校验validate和召回效果评测evaluaterag_retrieval_load_test.py基于 Locust 的检索接口性能压测smoke / baseline / staircase / soak 四种负载模式。两个脚本具有同样的架构约束可从脚本头注释与导入语句确认如 rag_recall_eval.py 顶部Standalone MemoryBear retrieval dataset generator and recall evaluator. The script intentionally imports no MemoryBear project modules.只通过 HTTP 调用已经运行的 MemoryBear 服务不导入app、service、model 或数据库代码也不读取项目.env可以把脚本单独复制到其他目录后运行都会生成中文report.htmlJSON/JSONL 产物保留英文键名方便 CI、jq和其他程序稳定读取。1.2 评测范围边界本工具只评测知识库的召回能力覆盖以下问题是否召回正确文档是否召回正确 chunk/context正确结果在返回列表中的位置排序质量单文档、多文档和无命中三种场景检索接口的成功率、延迟和实际吞吐量。它不生成或评测最终回答不计算 Faithfulness、Answer Correctness、Answer Relevancy 等答案类指标。首版只支持内部 JWT 路由POST /api/chunks/retrieval暂不支持/v1/chunks/retrieval、GraphRAG、Folder、Share target 和ex_ids。1.3 服务端接口速览被评测的接口在服务端位于 chunk_controller.py 的retrieve_chunks请求体模型为 chunk_schema.py 中的ChunkRetrieve。与评测脚本直接相关的几个服务端事实RetrieveType枚举支持participle/semantic/graph/hybrid见 chunk_schema.py评测脚本首版开放participle、semantic、hybrid三种top_k、top_n服务端约束为1..100且top_n top_kchunk_schema.py 与resolve_top_n校验器脚本侧的参数校验与服务端保持一致ChunkRetrieve配置了extraignore意味着未知字段会被服务端静默忽略——这正是召回脚本validate子命令要检查 target 中不存在未知字段的原因避免生成的数据集带着无效字段静默失效。2. 推荐运行方式uv 隔离依赖2.1 使用 uv 自动安装隔离依赖两个脚本都包含 PEP 723 内联依赖声明见 rag_recall_eval.py 与 rag_retrieval_load_test.py 文件头部的# /// script ... # ///块。推荐始终使用uv runuv run api/scripts/rag_recall_eval.py --help uv run api/scripts/rag_retrieval_load_test.py --helpuv会为每个脚本创建独立缓存环境不会把 Ragas 或 Locust 安装进 MemoryBear 的生产虚拟环境。召回脚本锁定的关键依赖ragas0.4.3 langchain-community0.3.31性能脚本锁定的关键依赖locust2.45.0 PyYAML6.0.2如果本机没有uv可以先安装pip install uv2.2 为什么直接 python 会提示缺少 Locust下面的命令不会读取 PEP 723 依赖因此当前 Python 环境没有安装 Locust 时会报ModuleNotFoundErrorpython api/scripts/rag_retrieval_load_test.py --help请改为uv run api/scripts/rag_retrieval_load_test.py --help如果必须使用普通python请为压测脚本单独创建环境python3 -m venv .venv-rag-load source .venv-rag-load/bin/activate pip install locust2.45.0 PyYAML6.0.2 python api/scripts/rag_retrieval_load_test.py --help不要为了运行压测而把 Locust 添加到 MemoryBear 的生产依赖。Ragas 同理手动安装时请使用脚本锁定的兼容版本不要只安装最新版langchain-community否则可能触发ragas_failure_count 0。3. 准备认证和工作目录脚本使用当前用户的 JWT 调用内部接口凭据只能通过环境变量传入export RAG_EVAL_BASE_URLhttp://127.0.0.1:8000 export RAG_EVAL_JWT_TOKENJWT推荐把语料快照、数据集和结果放在已忽略的临时目录mkdir -p api/tmp/rag_evaluation/datasets mkdir -p api/tmp/rag_evaluation/runs安全注意事项不要把 JWT 写进 YAML、JSONL、命令行参数或 Git快照包含完整 chunk 正文属于敏感文件生成的数据集通常包含 query 和 reference也应按知识库数据管理结果默认不保存完整召回正文但仍可能包含文档和 chunk ID。脚本侧对 token 的处理可在 rag_recall_eval.py 的require_token与ApiClient._requestL124-L166中确认token 从RAG_EVAL_JWT_TOKEN读取自动构造Authorization: Bearer token头因此不要在 token 值前后额外添加Bearer。4. 召回效果评测完整流程标准流程为四步流水线snapshot - generate - validate - evaluate4.1 第一步生成知识库快照snapshot指定一个知识库uv run api/scripts/rag_recall_eval.py snapshot \ --base-url $RAG_EVAL_BASE_URL \ --kb-id knowledge_id \ --output api/tmp/rag_evaluation/datasets/corpus.snapshot.json指定多个知识库时重复传入--kb-iduv run api/scripts/rag_recall_eval.py snapshot \ --base-url $RAG_EVAL_BASE_URL \ --kb-id knowledge_id_1 \ --kb-id knowledge_id_2 \ --output api/tmp/rag_evaluation/datasets/corpus.snapshot.json脚本通过以下只读接口获取数据见 rag_recall_eval.py 的snapshot_commandGET /api/knowledges/{knowledge_id} GET /api/documents/{knowledge_id}/documents GET /api/chunks/{knowledge_id}/{document_id}/chunks默认只接受active知识库status 1非 Folder知识库status 1的文档progress 1且run 0的已完成文档。如仅用于排查可以使用--include-unready跳过文档就绪检查但不建议用该快照生成正式评测数据集uv run api/scripts/rag_recall_eval.py snapshot \ --base-url $RAG_EVAL_BASE_URL \ --kb-id knowledge_id \ --include-unready \ --output api/tmp/rag_evaluation/datasets/corpus.snapshot.json快照包含知识库和文档信息chunk 正文与 metadataphysical_chunk_id父子块或 QA/source 规范化后的canonical_evidence_id每个 chunk 的内容 SHA256整体physical_corpus_sha256。实现细节快照规范化逻辑在 rag_recall_eval.py 的normalize_snapshot_chunkchunk_type child时canonical_evidence_id取parent_idchunk_type qa时取source_chunk_id普通 chunk 直接取doc_id物理 ID。这一规范化和评测时的canonical_result_idsL759-L777一一对应保证黄金 ID 与检索返回 ID 可比对。整体哈希physical_corpus_sha256由corpus_hash_payloadL249-L272对排序后的规范化行计算因此任何快照正文或 metadata 的改动都会导致校验失败。注意首版快照通过分页接口读取不是数据库事务或 Elasticsearch PIT 原子快照。生成快照期间应暂停目标知识库的上传、删除和重解析。4.2 第二步配置数据集生成模型生成器调用 OpenAI-compatiblechat/completions接口需要设置export RAG_EVAL_LLM_BASE_URLhttps://example.com/v1 export RAG_EVAL_LLM_API_KEYLLM_API_KEY export RAG_EVAL_LLM_MODELmodel_name如果RAG_EVAL_LLM_BASE_URL不是以/chat/completions结尾脚本会自动追加该路径见 rag_recall_eval.py 的OpenAICompatibleGenerator.__init__。提供方需要支持{response_format: {type: json_object}}生成时会把选中的 source chunk 正文发送给配置的模型--max-source-chars控制截断长度。敏感知识库应使用本地或私有部署模型不要直接发送给未经批准的外部服务。4.3 第三步生成评测数据集generate示例生成 100 条数据其中普通样本的 30% 为多文档问题全部样本的 10% 为 no-hit 问题uv run api/scripts/rag_recall_eval.py generate \ --snapshot api/tmp/rag_evaluation/datasets/corpus.snapshot.json \ --output api/tmp/rag_evaluation/datasets/retrieval.dataset.jsonl \ --count 100 \ --multi-ratio 0.30 \ --no-hit-ratio 0.10 \ --seed 20260715主要参数参数默认值说明--count50生成样本总数--multi-ratio0.3非 no-hit 样本中的多文档比例--no-hit-ratio0.1全部样本中的无命中比例--seed20260715source 选择和样本顺序的随机种子--max-source-chars6000每个 source 最多发送给 LLM 的字符数--temperature0.3LLM temperature--timeout90单次 LLM 请求超时秒数生成逻辑对应 rag_recall_eval.py 的generate_command从快照中排除 QA chunk 和空 chunkeligible_source_chunksL487-L504父子模式优先使用 child 正文生成问题但将 parent 作为规范化黄金 contextQA 模式使用 source 正文QA 返回结果通过source_chunk_id映射到 source evidence单文档样本只使用物理单文档知识库或文件名唯一的文档多文档样本从两个不同文档选择证据要求 LLM 生成需要组合两份证据的问题query 和黄金 document/context ID 一起写入 JSONL生成内容不会写回知识库。LLM 的三种任务提示在OpenAICompatibleGenerator.generateL409-L466中定义no-hit 场景要求生成一个与语料无关、无法被回答的问题并返回空 reference多文档场景要求组合每一份证据、避免复制长句单文档场景要求改写措辞、不提及文档或摘录。返回内容会经过parse_llm_jsonL362-L376做容错解析支持去掉 代码围栏、正则提取 JSON 对象并对重复 query 报错。数据质量说明每条生成数据包含quality_statusgenerated_unreviewed。首版的黄金 ID 是生成时选中的已知正确证据尚未自动穷举语料中所有可能的等价 chunk因此 Precision/nDCG 更适合相对比较不应直接当成绝对业务正确率。no-hit 样本会标记low-confidencetags 为[generated, no-hit, low-confidence]见 build_generated_case。它表示生成器预期目标语料无法回答不代表已经数学证明整个知识库不存在相关内容。4.4 第四步校验数据集validate只校验 JSONL 结构uv run api/scripts/rag_recall_eval.py validate \ --dataset api/tmp/rag_evaluation/datasets/retrieval.dataset.jsonl同时校验黄金 ID 和语料快照uv run api/scripts/rag_recall_eval.py validate \ --dataset api/tmp/rag_evaluation/datasets/retrieval.dataset.jsonl \ --snapshot api/tmp/rag_evaluation/datasets/corpus.snapshot.json校验内容包括对应 validate_cases 与 validate_snapshot_integrityJSONL 每行都是 objectcase_id存在且唯一query 非空target.kb_ids非空target 不包含服务端会静默忽略的未知字段仅允许kb_ids和file_names_filter常量ALLOWED_TARGET_FIELDS普通样本有黄金 contextno-hit 样本没有黄金 context数据集与快照的physical_corpus_sha256一致黄金 context ID 存在于快照。校验失败时以退出码 3 结束可直接在 CI 中echo $?判定。4.5 第五步执行召回评测evaluateuv run api/scripts/rag_recall_eval.py evaluate \ --base-url $RAG_EVAL_BASE_URL \ --dataset api/tmp/rag_evaluation/datasets/retrieval.dataset.jsonl \ --snapshot api/tmp/rag_evaluation/datasets/corpus.snapshot.json \ --output-dir api/tmp/rag_evaluation/runs/quality-hybrid-top10 \ --retrieve-type hybrid \ --top-k 10 \ --top-n 20 \ --similarity-threshold 0.2 \ --vector-similarity-weight 0.3默认计算K[1,3,5,10]。如需自定义重复传入--kuv run api/scripts/rag_recall_eval.py evaluate \ --base-url $RAG_EVAL_BASE_URL \ --dataset api/tmp/rag_evaluation/datasets/retrieval.dataset.jsonl \ --output-dir api/tmp/rag_evaluation/runs/quality-hybrid-custom-k \ --top-k 20 \ --top-n 30 \ --k 1 \ --k 5 \ --k 10 \ --k 20必须满足top_n top_k max(K) top_k--retrieve-type支持participle semantic hybrid如需设置重排阈值--rerank-score-threshold 0.3实现细节evaluate_commandL1104-L1277对每个 case 构造与压测脚本相同的 payload调用POST /api/chunks/retrieval然后通过canonical_result_idsL759-L777把返回项映射为document_result_id与context_result_id再按每个 K 截断计算指标。rerank_score_threshold为None时不会放入请求体payload 会过滤None值。no-hit 样本的判定是request_error is None and not response_items即请求成功且返回空列表。召回指标说明指标含义context_precisionK前 K 个规范化 context 中黄金 context 的占比context_recallK黄金 context 被前 K 个结果覆盖的比例context_hitK前 K 个结果是否至少命中一个黄金 contextcontext_mrrK第一个黄金 context 排名的倒数越靠前越高context_ndcgK多个黄金 context 按返回位置折损后的排序质量document_recallK正确文档被前 K 个唯一文档覆盖的比例document_hitK前 K 个唯一文档是否包含正确文档group_recallK多证据组在前 K 个结果中的最大覆盖程度complete_evidence_groupK是否完整召回一个证据组ragas_id_context_precisionKRagas IDBasedContextPrecision 结果ragas_id_context_recallKRagas IDBasedContextRecall 结果no_hit_accuracyno-hit 样本正确返回空列表的比例本地指标的计算实现均可直接在源码中验证precision/recallL780-L785、reciprocal_rankL788-L792、ndcgL795-L805按1/log2(rank1)折损、group_scoresL808-L818多证据组取最大覆盖率并判定是否完整命中。Ragas 指标通过ragas_id_scoresL821-L833在单次 asyncio Runner 中计算IDBasedContextPrecision与IDBasedContextRecall。召回评测输出指定的--output-dir中会生成case_results.jsonl summary.json report.htmlreport.html是中文人可读报告包含总体指标、单文档/多文档/no-hit 分组结果、逐 case 概要和指标解释报告渲染在 render_recall_report。可以直接打开open api/tmp/rag_evaluation/runs/quality-hybrid-top10/report.htmlcase_results.jsonl保存逐 case 的请求状态、耗时、返回 ID、指标和错误summary.json保存运行配置、数据集 hash、成功/失败数量和平均指标。这两个机器可读文件的字段名仍为英文不影响中文报告。Ragas 失败语义如果 Ragas 导入或计算失败逐 case 会出现ragas_errorsummary 的ragas_failure_count大于 0进程以退出码 3结束见 L1275-L1277避免只输出本地指标却被误认为 Ragas 已成功执行。5. Locust 性能压测性能脚本读取同一份评测 JSONL但只使用querytargetcorpus_modeload_weight单文档场景的黄金 document ID用于检查范围越界。它不在 Locust task 中计算 Ragas 指标也不调用 LLM。5.1 创建性能配置创建一个本地 YAML例如api/tmp/rag_evaluation/load-smoke.yaml内容seed: 20260715 endpoint: /api/chunks/retrieval retrieval: retrieve_type: hybrid top_k: 10 top_n: 20 similarity_threshold: 0.2 vector_similarity_weight: 0.3 rerank_score_threshold: 0.3 load: profile: smoke users: 2 spawn_rate: 1 run_time: 30s wait_seconds: 0 request_timeout_seconds: 60 gates: min_requests: 20 max_failure_ratio: 0.01 max_p95_ms: 2500 min_achieved_rps: 0.5配置说明字段说明seedquery 加权抽样随机种子endpoint首版必须为/api/chunks/retrievalretrieval每个请求共同使用的召回参数load.profilesmoke、baseline、staircase或soakusers非 staircase 模式的并发用户数spawn_rate每秒启动的用户数run_timeLocust 时长如30s、5m、1hwait_seconds同一用户两次请求间等待时间0 表示闭环持续请求request_timeout_seconds单次 HTTP 超时min_requests最少有效请求数量max_failure_ratio最大失败率0.01 表示 1%max_p95_ms最大 p95 延迟min_achieved_rps可选最小实际 RPS实现细节配置校验在 rag_retrieval_load_test.py 的validate_runtime中完成——retrieval字段白名单、top_k/top_n必须落在1..100且top_n top_k、profile 必须属于四个枚举值、staircase 的每个 stage 必须为正数、gates字段白名单、每个样本必须有非空 query、非空target.kb_ids、正整数load_weight。Runtime.choose_sampleL525-L526按load_weight加权随机抽取样本。示例阈值不是MemoryBear 的正式 SLA应根据测试环境和业务目标修改。5.2 运行 smoke、baseline 或 soakuv run api/scripts/rag_retrieval_load_test.py \ --dataset api/tmp/rag_evaluation/datasets/retrieval.dataset.jsonl \ --config api/tmp/rag_evaluation/load-smoke.yaml \ --base-url $RAG_EVAL_BASE_URL \ --output-dir api/tmp/rag_evaluation/runs/load-smoke-001--output-dir必须是尚不存在的目录避免覆盖以前的压测结果源码中output_dir.mkdir(parentsTrue, exist_okFalse)L722。baseline和soak使用相同结构只需要修改 profile、并发和时长load: profile: baseline users: 1 spawn_rate: 1 run_time: 2m wait_seconds: 0 request_timeout_seconds: 60load: profile: soak users: 10 spawn_rate: 2 run_time: 60m wait_seconds: 0 request_timeout_seconds: 605.3 运行 staircasestaircase不使用顶层users、spawn_rate和run_time而是逐阶段配置seed: 20260715 endpoint: /api/chunks/retrieval retrieval: retrieve_type: hybrid top_k: 10 top_n: 20 similarity_threshold: 0.2 vector_similarity_weight: 0.3 load: profile: staircase wait_seconds: 0 request_timeout_seconds: 60 stages: - users: 1 spawn_rate: 1 duration_seconds: 60 - users: 5 spawn_rate: 2 duration_seconds: 120 - users: 10 spawn_rate: 2 duration_seconds: 180 gates: min_requests: 200 max_failure_ratio: 0.01 max_p95_ms: 2500运行方式不变uv run api/scripts/rag_retrieval_load_test.py \ --dataset api/tmp/rag_evaluation/datasets/retrieval.dataset.jsonl \ --config api/tmp/rag_evaluation/load-staircase.yaml \ --base-url $RAG_EVAL_BASE_URL \ --output-dir api/tmp/rag_evaluation/runs/load-staircase-001实现细节父进程校验输入后以python -m locust --headless拉起一个使用当前脚本自身作为 Locust 文件的子进程通过RAG_LOAD_*环境变量传递数据集、配置、输出目录和 base URLrun_parent。staircase 的并发档位由ConfiguredStaircaseShapeL621-L632按累计时长逐档切换。报告中的阶梯分档统计stage_statisticsL235-L287对每档取秒级历史样本的 RPS / p50 / p95中位数避免把不同并发档聚合成一个值。注意Locust 是闭环用户模型——一个用户会在上一次请求结束后再发下一次请求。报告中的achieved_rps是实际达到的吞吐不代表开放到达模型下的系统硬 QPS 上限。5.4 Locust 成功和失败判定一次请求只有同时满足以下条件才计为成功对应RetrievalUser.retrieveL561-L617HTTP 状态码为 2xxbody 是 JSON objectcode 0data是 list单文档场景没有返回其他文档的 chunksingle_scope_violation。常见低基数错误类型http_401 http_429 http_500 invalid_json invalid_envelope business_code_nonzero invalid_data_schema single_scope_violation普通有答案 case 返回空列表时HTTP 请求仍可视为性能成功因为没有召回正确内容属于质量问题应由召回评测脚本判断。5.5 性能输出输出目录包含manifest.json summary.json locust.json locust_stats.csv locust_stats_history.csv locust_failures.csv locust_exceptions.csv report.html locust-report.htmlreport.html是脚本生成的中文主报告渲染在 render_performance_report包含请求数、失败率、RPS、延迟分位数、门禁结果、失败类型以及 staircase 的逐档并发统计。locust-report.html是 Locust 生成的原始英文页仅在需要查看 Locust 原生图表或诊断信息时使用。正常压测结束后直接打开中文报告open api/tmp/rag_evaluation/runs/load-smoke-001/report.htmlsummary.json包含由 build_summary 在 Locust 退出事件中生成request、success、failure 数量failure ratioachieved RPSp50、p90、p95、p99 和最大延迟门禁失败原因gate_failures最终passed状态。5.6 为已有压测结果生成中文报告如果旧的运行目录中只有 Locust 英文report.html不用重新压测执行uv run api/scripts/rag_retrieval_load_test.py \ --render-report-dir api/tmp/rag_evaluation/runs/load-smoke-001脚本会读取目录中的manifest.json、summary.json和 Locust CSV把原有 Locust 英文页保留为locust-report.html生成新的中文report.html。如果运行被中断、没有summary.json但locust_stats.csv仍可读中文页会标记运行未完整结束summary_from_statsL205-L232只展示诊断数据不判定门禁通过。6. 退出码退出码含义0输入有效运行完成且门禁通过2运行有效但请求失败或性能门禁未通过3配置、认证、数据集、快照、依赖或 Ragas 指标问题导致运行无效可在 shell 或 CI 中检查uv run api/scripts/rag_recall_eval.py validate \ --dataset api/tmp/rag_evaluation/datasets/retrieval.dataset.jsonl echo $?召回评测侧的退出码逻辑见 rag_recall_eval.pyragas_failures时返回 3、有请求失败返回 2、否则 0压测侧的门禁判定见 on_quittingenvironment.process_exit_code 2 if failures else 0而配置/输入错误统一在main中以退出码 3 结束。7. 常见问题7.1No module named locust原因使用了普通python当前解释器没有安装 Locust。解决uv run api/scripts/rag_retrieval_load_test.py --help7.2Missing authentication token设置 JWTexport RAG_EVAL_JWT_TOKENJWT不要在 token 值前后额外添加Bearer脚本会自动构造 Authorization header见ApiClient._request与RetrievalUser.on_start。7.3Document ... is not ready文档仍在解析、解析失败或任务状态没有结束。正式评测应等待status 1 progress 1 run 07.4Snapshot content does not match physical_corpus_sha256快照文件被修改或损坏。重新执行snapshot不要手动修改快照正文或 metadata。7.5gold context ids missing from snapshot数据集与快照不是同一语料版本或者文档已经重解析并重新生成doc_id。重新生成快照和数据集。7.6top_n must be greater than or equal to top_k调整参数例如--top-k 10 --top-n 207.7 Ragas 导入失败或ragas_failure_count 0必须通过uv run使用脚本锁定的依赖ragas0.4.3、langchain-community0.3.31。如果手动安装请使用 README 前述兼容版本不要只安装最新版langchain-community。7.8 LLM 不支持response_format首版生成器要求 OpenAI-compatible JSON object 输出。如果提供方不支持该字段需要更换兼容模型服务或后续扩展脚本适配器。7.9 401 不一定表示 JWT 本身失效低并发先执行 smoke。如果高并发才出现 401应同时检查服务端认证日志、数据库连接池和 session 生命周期不要仅凭 Locust 的 401 直接判断 token 失效。8. 推荐实践在测试或预发布环境执行正式压测生产环境默认只运行低并发 smoke。生成快照期间不要上传、删除或重解析目标文档。数据集生成后先运行validate再运行evaluate。对比检索参数时复用同一份 dataset 和 corpus hash每组参数单独创建 run 目录。不要把不同 retrieve type 或不同top_k的性能结果混成一个总体 p95。自动生成数据适合快速建立基线关键版本可对少量样本抽查但不要求人工逐条制作全部数据。快照、数据集、LLM 输入和结果都可能含敏感知识不要提交到 Git 或发送到未经批准的外部服务。9. 小结rag_recall_eval.py与rag_retrieval_load_test.py构成了 MemoryBear 知识库检索质量与性能的双通道评估体系前者以snapshot - generate - validate - evaluate四步流水线把语料、黄金证据、检索参数、召回指标完整串起来产出可复现、可对比的中文报告后者用 Locust 闭环模型对同一份数据集施加 smoke / baseline / staircase / soak 四种负载并通过可配置的性能门禁请求量、失败率、p95、RPS把性能是否达标变成 CI 里可判定的退出码。两个脚本均保持独立只走 HTTP、不导入项目模块、不读.env依赖通过 PEP 723 内联声明由uv run隔离管理因此可以安全地接入任何部署环境。要深入了解实现建议从 rag_recall_eval.py、rag_retrieval_load_test.py 以及服务端 chunk_controller.py 的retrieve_chunks与 chunk_schema.py 的ChunkRetrieve入手。赞分享【免费下载链接】MemoryBearMemoryBear Equip AI with human-like memory capability项目地址https://gitcode.com/gh_mirrors/me/MemoryBear点击查看免费下载相关推荐最完整Phoenix RAG评估实战从检索到生成的全链路质量优化指南最完整Phoenix RAG评估实战从检索到生成的全链路质量优化指南 你是否还在为RAG应用的输出质量波动而困扰是否经历过用户反馈回答与事实不符却难以定可观测性AI 评测LLMOpsAI 应用人工智能GoFrame 入门指南企业级 Go 框架从安装到生产的完整路径GoFrame 入门指南企业级 Go 框架从安装到生产的完整路径 GoFrame 是面向企业级 Go 应用开发的全功能 Go 框架把路由、数据库、配置、校验Web框架后端CLI最完整LLM知识库指南从理论到实战的零门槛路径最完整LLM知识库指南从理论到实战的零门槛路径 LLM Universe是一个全面的大型语言模型LLM应用开发学习项目旨在帮助新手和普通用户从零开始掌握教程大模型人工智能RAG上一篇【72小时攻坚】将Future-Diffusion封装为企业级API服务从本地部署到高并发架构全指南下一篇【限时免费】 maku-boot的安装与使用教程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表