人工智能AI AgentAgent 框架大模型工具调用RAG提示工程强化学习【免费下载链接】agent-coreopenJiuwen agent-core可提供AI Agent开发、运行、调优与演进相关的全套SDK能力项目地址https://gitcode.com/openJiuwen/agent-core点击查看免费下载openjiuwen.core.retrieval.retriever是 openJiuwen agent-core 中负责文档检索这一核心能力的模块它通过Retriever抽象基类统一定义了单条检索、批量检索、原始搜索与资源释放四类接口并在此基础上提供了向量检索、稀疏检索BM25、混合检索、图检索与 Agentic 智能检索五种实现。本文将以 retriever 模块 API 文档 为骨架结合仓库源码与单元测试逐层剖析每一类检索器的工作原理、参数语义、调用链与适用场景帮助你在 RAG 应用或 Agent 工具编排中正确选型并落地使用。一、retriever 模块定位检索层的统一抽象在 openJiuwen agent-core 的检索体系openjiuwen.core.retrieval中自下而上分为四层向量存储VectorStore负责与具体数据库Chroma、Milvus、PGVector交互检索器Retriever负责把查询转化为检索行为并返回统一结构的结果上层知识库KnowledgeBase负责文档解析、分块、索引与检索的整体编排。retriever 模块正是中间这一层向下调用向量存储的search/sparse_search/hybrid_search能力向上为知识库提供一致的retrieve接口。该模块共定义 6 个类全部位于openjiuwen/core/retrieval/retriever/目录下CLASS描述详细 APIRetriever检索器抽象基类定义统一接口base.mdVectorRetriever向量检索器基于向量相似度vector_retriever.mdSparseRetriever稀疏检索器BM25基于文本匹配sparse_retriever.mdHybridRetriever混合检索器RRF 算法融合向量与稀疏结果hybrid_retriever.mdGraphRetriever图检索器支持三元组图扩展与多跳检索graph_retriever.mdAgenticRetriever智能检索器在任意检索器之上增加 LLM 查询重写与多轮融合agentic_retriever.md所有检索器返回的结果统一封装为RetrievalResult含text、score、metadata、doc_id、chunk_id五个字段原始搜索则返回SearchResult含id、text、score、metadata两者定义于 retrieval_result.py。统一的数据结构让上层无需关心底层是哪种检索策略也方便后续做结果融合与排序。二、Retriever 抽象基类四大核心接口Retriever继承自abc.ABC通过abstractmethod声明了两个必须实现的方法并提供两个带默认行为的可选方法。任何自定义检索器只需继承该类并实现抽象方法即可无缝接入上层知识库。2.1 retrieve单条查询检索抽象方法retrieve(query: str, top_k: int 5, score_threshold: Optional[float] None, mode: Literal[vector, sparse, hybrid] hybrid, **kwargs: Any) - List[RetrievalResult]参数说明querystr查询字符串即用户的问题或检索语句top_kint返回结果数量默认5score_thresholdfloat可选得分阈值低于该阈值的结果将被过滤默认None不过滤modevector | sparse | hybrid检索模式vector表示向量检索、sparse表示稀疏检索/BM25、hybrid表示混合检索默认hybridkwargsAny透传的额外配置参数各实现类可自行约定含义如alpha、graph_hops。返回值List[RetrievalResult]即按相关性排序的检索结果列表。2.2 batch_retrieve批量检索抽象方法batch_retrieve(queries: List[str], top_k: int 5, **kwargs: Any) - List[List[RetrievalResult]]接收一组查询字符串返回每个查询对应的结果列表。从各实现源码如 vector_retriever.py可以看出批量检索的内部实现是并发执行多条 retrieve通过asyncio.gather并行调度而不是串行循环因此在多查询场景下能显著降低整体耗时。2.3 retrieve_search_results返回原始 SearchResult可选方法retrieve_search_results(query: str, top_k: int 5, mode: Literal[vector, sparse, hybrid] hybrid, **kwargs: Any) - List[SearchResult]与retrieve的差别在于返回值类型为SearchResult多出id字段。这个接口的价值在 Agentic 检索器的三元组链接环节体现得很明显——当需要用结果id做去重时就必须拿到SearchResult而非RetrievalResult详见第五、六节。该方法在抽象基类中是可选实现的但五个具体实现类均已覆盖。2.4 close释放资源可选方法close() - None关闭检索器并释放底层资源。各实现类都遵循同一套关闭逻辑见 sparse_retriever.py先通过getattr探测底层vector_store是否暴露close方法再依据inspect.iscoroutinefunction判断是同步还是异步方法分别调用。GraphRetriever 的close则会同时关闭文档块检索器与三元组检索器。三、VectorRetriever向量检索与 BM25 回退VectorRetriever基于向量存储实现使用向量相似度通常为余弦距离完成检索。3.1 初始化VectorRetriever(vector_store: VectorStore, embed_model: Optional[Embedding] None, **kwargs: Any)vector_storeVectorStore向量存储实例必须传入embed_modelEmbedding可选嵌入模型实例向量检索必需默认None。源码中向量检索路径会严格校验embed_model如果为None会抛出RETRIEVAL_RETRIEVER_EMBED_MODEL_NOT_FOUND错误vector_retriever.py。同时该类只接受modevector传入其他模式会抛出RETRIEVAL_RETRIEVER_MODE_NOT_SUPPORT错误score_threshold也仅在vector模式下合法。3.2 检索流程与 BM25 回退机制retrieve的核心调用链如下vector_retriever.pyawait embed_model.embed_query(query)—— 把查询文本转为向量await vector_store.search(query_vectorquery_vector, top_ktop_k)—— 在向量存储中做最近邻搜索关键设计如果向量检索返回空结果自动回退到vector_store.sparse_search(query_textquery, ...)即 BM25 文本检索避免因查询向量冷门、索引覆盖不全而无结果可用对返回结果按score_threshold过滤再封装为RetrievalResultdoc_id、chunk_id从metadata中提取。3.3 完整可运行示例以下是文档中给出的完整示例Chroma APIEmbedding可直接套用 import asyncio from openjiuwen.core.retrieval.retriever.vector_retriever import VectorRetriever from openjiuwen.core.retrieval.vector_store.chroma_store import ChromaVectorStore from openjiuwen.core.retrieval.embedding.api_embedding import APIEmbedding from openjiuwen.core.retrieval.common.config import VectorStoreConfig, EmbeddingConfig, StoreType async def run(): ... # 创建向量存储 ... vs_config VectorStoreConfig(store_providerStoreType.Chroma, collection_nametest_collection) ... vector_store ChromaVectorStore(configvs_config, chroma_path./chroma_db) ... # 创建嵌入模型 ... embed_config EmbeddingConfig(model_nametext-embedding-ada-002, api_keyyour_api_key, base_urlyour_base_url) ... embed_model APIEmbedding(configembed_config) ... # 创建向量检索器 ... retriever VectorRetriever(vector_storevector_store, embed_modelembed_model) ... results await retriever.retrieve(测试查询, top_k5) ... print(fRetrieved {len(results)} results) asyncio.run(run()) Retrieved 5 results其中VectorStoreConfig的store_provider支持StoreType.Milvus、StoreType.Chroma、StoreType.PGVector三个枚举值配置项完整说明见 config.md。Chroma 本地模式的完整建库、写入、过滤检索示例可参考 chroma_query_expr.py。四、SparseRetriever 与 HybridRetrieverBM25 与 RRF 融合4.1 SparseRetriever纯 BM25 文本匹配SparseRetriever初始化只需一个参数SparseRetriever(vector_store: VectorStore, **kwargs: Any)vector_storeVectorStore需要支持稀疏搜索的向量存储实例。其retrieve只接受modesparse内部直接调用vector_store.sparse_search(query_textquery, top_ktop_k, filtersNone)按 BM25 得分排序返回结果sparse_retriever.py。文档特别注明score_threshold在稀疏检索中不受支持因为 BM25 得分的绝对值跨语料波动大不适合用固定阈值过滤。关于 BM25 的底层实现可查看向量存储层milvus_store.py 使用 Milvus 原生全文检索能力metric_typeBM25chroma_store.py 因 ChromaDB 不直接支持 BM25退化为文本查询。示例 import asyncio from openjiuwen.core.retrieval.retriever.sparse_retriever import SparseRetriever from openjiuwen.core.retrieval.vector_store.chroma_store import ChromaVectorStore from openjiuwen.core.retrieval.common.config import VectorStoreConfig, StoreType async def run(): ... vs_config VectorStoreConfig(store_providerStoreType.Chroma, collection_nametest_collection) ... vector_store ChromaVectorStore(configvs_config, chroma_path./chroma_db) ... retriever SparseRetriever(vector_storevector_store) ... results await retriever.retrieve(测试查询, top_k5) ... print(fRetrieved {len(results)} results) asyncio.run(run()) Retrieved 5 results4.2 HybridRetriever向量 稀疏的 RRF 混合HybridRetriever同时利用向量语义匹配与 BM25 关键词匹配通过RRFReciprocal Rank Fusion倒数排名融合算法融合两类结果。初始化参数HybridRetriever(vector_store: VectorStore, embed_model: Optional[Embedding] None, alpha: float 0.5, **kwargs: Any)alphafloat混合权重0表示纯稀疏检索、1表示纯向量检索、0.5表示平衡默认0.5。该权重在每次调用时还可以通过kwargs中的alpha覆盖默认值。retrieve支持三种模式源码见 hybrid_retriever.pymodehybrid先对查询做嵌入若提供了embed_model再调用vector_store.hybrid_search(query_text, query_vector, top_k, alpha, filters)由向量存储层完成融合打分Milvus 侧实现见 milvus_store.py同时发起 BM25 与向量两类检索请求modevector退化为纯向量检索同样带 BM25 空结果回退modesparse退化为纯 BM25 检索。score_threshold仅在modevector时合法否则抛出RETRIEVAL_RETRIEVER_SCORE_THRESHOLD_INVALID错误。文档给出的完整示例 import asyncio from openjiuwen.core.retrieval.retriever.hybrid_retriever import HybridRetriever from openjiuwen.core.retrieval.vector_store.chroma_store import ChromaVectorStore from openjiuwen.core.retrieval.embedding.api_embedding import APIEmbedding from openjiuwen.core.retrieval.common.config import VectorStoreConfig, EmbeddingConfig, StoreType async def run(): ... vs_config VectorStoreConfig(store_providerStoreType.Chroma, collection_nametest_collection) ... vector_store ChromaVectorStore(configvs_config, chroma_path./chroma_db) ... embed_config EmbeddingConfig(model_nametext-embedding-ada-002, api_keyyour_api_key, base_urlyour_base_url) ... embed_model APIEmbedding(configembed_config) ... # alpha0.5 表示向量与稀疏权重平衡 ... retriever HybridRetriever(vector_storevector_store, embed_modelembed_model, alpha0.5) ... results await retriever.retrieve(测试查询, top_k5, modehybrid) ... print(fRetrieved {len(results)} results) asyncio.run(run()) Retrieved 5 results4.3 RRF 融合算法实现RRF 的具体实现位于 fusion.pydef rrf_fusion(results_list: List[List[RetrievalResult]], k: int 60) - List[RetrievalResult]: # 对每路结果按排名 rank 累加得分score 1.0 / (k rank) # 以 text 为唯一标识去重按累加得分降序输出核心思想是不依赖各检索路线的原始得分不同算法得分不可直接比较只依据排名加分——排名越靠前贡献越大k默认 60用于平滑。该函数被 GraphRetriever 与 AgenticRetriever 复用是结果融合这一能力的公共底座。对应的单元测试见 test_hybrid_retriever.py其中用AsyncMock分别模拟了hybrid_search、search、sparse_search三条路径验证三种模式下对应存储接口被正确调用。五、GraphRetriever三元组图扩展与多跳检索GraphRetriever是检索器家族中最复杂的一类它同时维护文档块chunk与知识三元组triple两套索引先做常规文档块检索再借由三元组之间的实体关系做图扩展实现由点及面的多跳检索特别适合需要跨文档串联知识的问答场景如 GraphRAG 风格应用。5.1 初始化固定检索器与动态创建两种方式GraphRetriever(chunk_retriever: Optional[Retriever] None, triple_retriever: Optional[Retriever] None, vector_store: Optional[Any] None, embed_model: Optional[Any] None, chunk_collection: Optional[str] None, triple_collection: Optional[str] None, **kwargs: Any)参数分为两组显式提供组chunk_retriever文档块检索器、triple_retriever三元组检索器。如果传入将直接复用动态创建组vector_store、embed_model、chunk_collection文档块集合名、triple_collection三元组集合名。当某一侧的检索器未提供时get_retriever_for_mode会根据mode动态创建对应的VectorRetriever/SparseRetriever/HybridRetrievergraph_retriever.py并注入index_type属性用于模式校验。5.2 get_retriever_for_mode按模式取检索器get_retriever_for_mode(mode: Literal[vector, sparse, hybrid], is_chunk: bool True) - Retrievermode目标检索模式is_chunkTrue返回文档块检索器False返回三元组检索器。内部先做模式兼容性校验index_type与mode的合法组合关系定义在_allowed_modes中——vector索引只允许vector模式bm25索引只允许sparse模式hybrid索引三种模式皆可。若二者不兼容会抛出RETRIEVAL_RETRIEVER_MODE_INVALID错误。值得注意如果调用方预先注入了固定检索器但该检索器不支持目标模式例如VectorRetriever不支持sparse会抛出RETRIEVAL_RETRIEVER_CAPABILITY_NOT_SUPPORT错误_retriever_supports_mode通过isinstance判断三个内置实现的能力。5.3 retrieve图检索主流程retrieve(query: str, top_k: int 5, score_threshold: Optional[float] None, mode: Literal[vector, sparse, hybrid] hybrid, **kwargs: Any) - List[RetrievalResult]kwargs中可传两个图特有参数topk_triples三元组检索数量与graph_hops图扩展跳数默认 2。主流程graph_retriever.py校验score_threshold仅vector模式支持与mode兼容性取graph_hops默认 2作为图扩展深度用文档块检索器做首轮chunk_results检索调用graph_expansion基于三元组做图扩展最终返回top_k条扩展后的结果。5.4 graph_expansion三元组束搜索TripleBeamSearchgraph_expansion(query: str, chunks: List[RetrievalResult], triples: Optional[List[RetrievalResult]] None, topk: Optional[int] None, mode: Literal[vector, sparse, hybrid] hybrid, **kwargs: Any)chunks初始文档块检索结果triples预先获取的三元组结果为None时自动从文档块元数据关联的三元组索引中拉取_fetch_triples按chunk_id反查 Milvus/Chroma 的kb_{kb_id}_triples集合topk最终返回条数。扩展的核心是文件内定义的TripleBeamSearch类graph_retriever.py它实现了三元组束搜索把候选三元组与查询文本一起做嵌入计算查询向量与各三元组的余弦相似度_cosine_scores使用np.linalg.norm归一化选出num_beams默认 10个得分最高的三元组作为初始束对每个束提取束尾三元组的头/尾实体triple[0]、triple[-1]作为新查询串召回最多num_candidates_per_beam默认 100条候选三元组且要求候选三元组必须与当前束共享实体_search_candidates用_expand_beams对每条路径束内三元组序列重新打分、按得分保留 top-k 束重复max_length - 1次完成多跳扩展将扩展得到的全部三元组按chunk_id反查文档块_fetch_chunks并发执行最后用rrf_fusion([new_chunks, chunks], k60)把扩展出的新文档块与原始文档块融合得到最终的图检索结果。束搜索每一步只保留得分最高的若干路径控制了指数级膨胀的搜索空间同时通过去重exist_triples避免路径重复。若束搜索失败或无结果graph_expansion会安全回退为返回原始文档块源码中有多处falling back to chunks的日志与分支。5.5 完整示例 import asyncio from openjiuwen.core.retrieval.retriever.graph_retriever import GraphRetriever from openjiuwen.core.retrieval.vector_store.chroma_store import ChromaVectorStore from openjiuwen.core.retrieval.embedding.api_embedding import APIEmbedding from openjiuwen.core.retrieval.common.config import VectorStoreConfig, EmbeddingConfig, StoreType async def run(): ... vs_config VectorStoreConfig(store_providerStoreType.Chroma, collection_nametest_collection) ... vector_store ChromaVectorStore(configvs_config, chroma_path./chroma_db) ... embed_config EmbeddingConfig(model_nametext-embedding-ada-002, api_keyyour_api_key, base_urlyour_base_url) ... embed_model APIEmbedding(configembed_config) ... retriever GraphRetriever( ... vector_storevector_store, ... embed_modelembed_model, ... chunk_collectionkb_test_chunks, ... triple_collectionkb_test_triples ... ) ... retriever.index_type hybrid # 设置索引类型用于模式兼容性校验 ... results await retriever.retrieve(测试查询, top_k5, graph_hops2) ... print(fRetrieved {len(results)} results with graph expansion) asyncio.run(run()) Retrieved 5 results with graph expansionTripleBeam数据结构定义于 triple_beam.py封装束内三元组列表与累计得分并实现了__contains__/__iter__等协议以支持去重与遍历。六、AgenticRetrieverLLM 驱动的查询重写与多轮融合AgenticRetriever是检索器体系的能力天花板它不直接接触向量存储而是在任意Retriever之上叠加LLM 三元组抽取 查询重写 多轮迭代 RRF 融合通过让模型判断现有证据是否足够回答问题实现类似人的追问式检索。其设计思路与 GraphRAG 论文族如 GeAR-s 系列一脉相承源码注释中明确引用了相关研究思路。6.1 初始化AgenticRetriever(retriever: Retriever, llm_client: BaseModelClient, max_iter: int 2)retrieverRetriever底层检索器接受任意Retriever子类。当传入GraphRetriever时图扩展与三元组链接等图特有能力会自动启用对普通检索器则走通用迭代重写路径llm_clientBaseModelClientLLM 客户端实例用于三元组抽取与查询重写来自openjiuwen.core.foundation.llmmax_iterint最大迭代轮数默认 2传入非正整数时回退到默认值 2。构造时还会根据底层检索器的index_type推断默认检索模式vector索引 →vector模式bm25索引 →sparse模式其余 →hybrid模式。该默认模式可通过retrieve的mode参数覆盖。6.2 两类检索路径retrieve内部按底层检索器类型分派agentic_retriever.py路径一_retrieve_with_graphGraphRetriever——每轮迭代执行用文档块检索器做一次常规检索_read调用 LLM从检索到的段落中抽取知识三元组(subject, predicate, object)存入TripleMemory_link_triples把抽取的候选三元组作为查询去三元组索引中做 top-1 检索把文本三元组链接到知识库中真实存在的三元组用SearchResult.id去重graph_expansion基于链接后的三元组做图扩展_rewrite若证据不充分LLM 生成一个下一步追问进入下一轮最后一轮用_link_passages把记忆中的三元组链接回文档块与历轮结果一起rrf_fusion后截断top_k。路径二_retrieve_generic其他检索器——省略图特有步骤每轮为常规检索 →_read抽取三元组 →_rewrite决定是否追问最后对历轮结果做 RRF 融合。6.3 两条核心 Prompt_read使用的抽取提示词源码_READ_PROMPT要求模型把文档事实组织成 JSON 三元组数组例如[[Neville A. Stanton, employer, University of Southampton]]_rewrite使用的重写提示词_REWRITE_PROMPT则要求模型返回 JSON 对象{sufficient: true/false, next_question: ...}并给出两条关键引导规则追问必须区别于历史问题随着重写轮数增加追问应趋于更宽泛以尽量捞回与原始问题相关的证据。LLM 输出通过json_repair库容错解析repair_json(response, return_objectsTrue)解析失败时安全返回None结束迭代。所有 LLM 调用统一使用temperature0.0以保证输出稳定性agentic_retriever.py。6.4 完整示例 import asyncio from openjiuwen.core.retrieval.retriever.agentic_retriever import AgenticRetriever from openjiuwen.core.retrieval.retriever.graph_retriever import GraphRetriever from openjiuwen.core.retrieval.retriever.vector_retriever import VectorRetriever from openjiuwen.core.foundation.llm.model_clients.openai_model_client import OpenAIModelClient async def run(): ... # 创建LLM客户端 ... llm_client OpenAIModelClient(...) ... ... # 示例1使用GraphRetriever自动启用图特有功能 ... graph_retriever GraphRetriever(...) ... agentic AgenticRetriever( ... retrievergraph_retriever, ... llm_clientllm_client, ... max_iter2, ... ) ... results await agentic.retrieve(测试查询, top_k5) ... print(fRetrieved {len(results)} results with graph-agentic retrieval) ... ... # 示例2使用其他检索器如VectorRetriever ... vector_retriever VectorRetriever(...) ... agentic AgenticRetriever( ... retrievervector_retriever, ... llm_clientllm_client, ... max_iter2, ... ) ... results await agentic.retrieve(测试查询, top_k5) ... print(fRetrieved {len(results)} results with generic agentic retrieval) asyncio.run(run()) Retrieved 5 results with graph-agentic retrieval Retrieved 5 results with generic agentic retrieval七、与上层知识库的集成如何在实际应用中使用retriever 模块通常不直接面向最终应用而是被SimpleKnowledgeBase与GraphKnowledgeBase集成作为知识库检索入口的底层引擎。理解这层集成关系才能真正回答我该怎么选检索器。7.1 配置驱动的检索器自动装配在 simple_knowledge_base.py 中SimpleKnowledgeBase会根据KnowledgeBaseConfig.index_type自动创建对应检索器L142-L158index_typevector→ 自动装配VectorRetriever检索模式固定为vectorindex_typebm25→ 自动装配SparseRetriever检索模式固定为sparseindex_typehybrid默认→ 自动装配HybridRetriever检索模式固定为hybrid。GraphKnowledgeBase则在RetrievalConfig.use_graph为真时创建GraphRetriever并自动注入index_typegraph_knowledge_base.py。7.2 RetrievalConfig 检索控制参数检索行为由 RetrievalConfig 控制其核心参数与检索器的对应关系如下参数类型/默认值作用对应检索器能力top_kint默认 5返回结果数量透传给retrieve的top_kscore_thresholdfloat/None得分阈值过滤仅vector模式生效use_graphbool/None是否启用图检索决定使用GraphRetrieveragenticbool默认 False是否启用智能检索决定是否包一层AgenticRetrievergraph_expansionbool默认 False是否启用图扩展透传给GraphRetrieverfiltersDict/None元数据过滤条件如{category: tech}透传给向量存储的filters上层装配逻辑simple_knowledge_base.py展示了典型的组合方式agenticTrue时用AgenticRetriever(retrieverself.retriever, llm_clientself.llm_client)包装底层检索器并把top_k、score_threshold、filters、mode一并透传。也就是说底层用哪种检索器、上层是否叠加图/智能能力全部可以通过配置组合出来无需修改业务代码。八、选型指南与调用约定速查综合文档与源码六类检索器的定位可归纳如下检索器依赖检索模式适用场景Retriever无抽象基类全部自定义检索器的基础实现两个抽象方法即可接入知识库VectorRetriever向量存储 嵌入模型仅vector语义匹配为主空结果自动回退 BM25SparseRetriever支持稀疏搜索的向量存储仅sparse专有名词、代码片段、精确关键词命中HybridRetriever向量存储 可选嵌入模型hybrid/vector/sparse语义 关键词平衡alpha调节权重GraphRetriever双索引chunk triple须与index_type兼容多跳问答、实体关系串联graph_hops控制深度AgenticRetriever任意检索器 LLM 客户端由底层index_type推断复杂问题拆解、证据不足自动追问max_iter控制轮数几个容易踩坑的调用约定均可在源码中验证模式限制VectorRetriever传mode ! vector、SparseRetriever传mode ! sparse都会抛出RETRIEVAL_RETRIEVER_MODE_NOT_SUPPORT阈值限制score_threshold只在vector模式合法hybrid/sparse模式传入会抛出RETRIEVAL_RETRIEVER_SCORE_THRESHOLD_INVALID嵌入模型必填任何走向量检索的路径含HybridRetriever的vector模式都要求embed_model否则抛出RETRIEVAL_RETRIEVER_EMBED_MODEL_NOT_FOUND图模式兼容GraphRetriever的mode必须与注入的index_type兼容bm25索引不能用vector模式校验逻辑见_ensure_mode_allowed资源管理检索器用完应调用close()它会递归关闭底层向量存储。九、总结openjiuwen.core.retrieval.retriever以Retriever抽象基类为轴构建了一条从单路检索到融合检索再到图检索与智能检索的能力阶梯VectorRetriever/SparseRetriever解决基础召回HybridRetriever通过 RRF 融合兼顾语义与关键词GraphRetriever用三元组束搜索实现跨文档的多跳扩展AgenticRetriever则引入 LLM 判断证据充分性并自动追问重写。所有实现共享统一的结果结构与调用约定既可以独立使用也可以被SimpleKnowledgeBase/GraphKnowledgeBase按index_type、use_graph、agentic等配置自动装配。对于需要深度定制检索策略的开发者继承Retriever并实现retrieve与batch_retrieve两个抽象方法即可无缝融入这套体系。赞分享人工智能AI AgentAgent 框架大模型工具调用RAG提示工程强化学习【免费下载链接】agent-coreopenJiuwen agent-core可提供AI Agent开发、运行、调优与演进相关的全套SDK能力项目地址https://gitcode.com/openJiuwen/agent-core点击查看免费下载相关推荐openJiuwen agent-core 检索器统一抽象接口Retriever 基类深度解析与实战指南openJiuwen agent core 检索器统一抽象接口Retriever 基类深度解析与实战指南 导读 本文围绕 openJiuwen agent c人工智能AI AgentAgent 框架大模型工具调用RAG提示工程强化学习openJiuwen agent-core 检索器全解析统一 Retriever 接口与向量、稀疏、混合、图、智能体五种检索器实战openJiuwen agent core 检索器全解析统一 Retriever 接口与向量、稀疏、混合、图、智能体五种检索器实战 openjiuwen.co人工智能AI AgentAgent 框架大模型工具调用RAG提示工程强化学习openJiuwen agent-core 检索索引层抽象Indexer 统一索引接口的架构与实践openJiuwen agent core 检索索引层抽象Indexer 统一索引接口的架构与实践 导读 本文以 openjiuwen.core.retrie人工智能AI AgentAgent 框架大模型工具调用RAG提示工程强化学习创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考