ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

agno 知识库如何配置混合搜索并用 Cohere reranker 做两阶段重排提升检索质量?

agno 知识库如何配置混合搜索并用 Cohere reranker 做两阶段重排提升检索质量? agno 知识库如何配置混合搜索并用 Cohere reranker 做两阶段重排提升检索质量【免费下载链接】agnoBuild, run, and manage agent platforms.项目地址: https://gitcode.com/GitHub_Trending/ag/agno如果你用 agno 的 Knowledge 组件给 Agent 接入文档检索会遇到两类典型问题纯向量搜索在关键词精确匹配场景下容易漏掉相关分片纯关键词搜索又抓不住语义相近但用词不同的内容另外首轮召回的候选集里常混入不相关的分片直接影响最终回答质量。agno 的 knowledge cookbook 给出的操作路径是先用SearchType.hybrid向量 关键词做第一阶段召回再挂一个CohereReranker对候选结果做第二阶段重排。本文按 building blocks 目录 中的前置要求把这条完整路径从环境准备、配置、运行到结果判断走一遍。准备条件building blocks 的 README 明确列出了三项前置条件缺一不可启动 Qdrant 向量数据库运行./cookbook/scripts/run_qdrant.sh。该脚本见 run_qdrant.sh的实际内容是docker run -d \ --name qdrant \ -p 6333:6333 \ -p 6334:6334 \ -v $(pwd)/tmp/qdrant_storage:/qdrant/storage:z \ qdrant/qdrant注意两个副作用容器名固定为qdrant重复执行前需要自行处理同名容器数据持久化到仓库目录下的tmp/qdrant_storage。设置OPENAI_API_KEY环境变量示例中的 embedder 和 Agent 模型都用 OpenAIexport OPENAI_API_KEYyour-key如果要跑 reranking 示例额外设置COHERE_API_KEY环境变量。第一步确认三种搜索类型选定 hybrid先理解 hybrid 搜索在 agno 中的定位。02_hybrid_search.py 的文档字符串说明 Knowledge 支持三种搜索类型Vector语义相似度搜索能找概念相关但用词不匹配的内容Keyword全文搜索快速、精确匹配术语Hybrid向量 关键词结合被标注为 Recommended default推荐默认。该示例把同一份 PDF 分别灌入三个不同 collection逐一对比三种搜索类型的回答效果from agno.agent import Agent from agno.knowledge.embedder.openai import OpenAIEmbedder from agno.knowledge.knowledge import Knowledge from agno.models.openai import OpenAIResponses from agno.vectordb.qdrant import Qdrant from agno.vectordb.search import SearchType qdrant_url http://localhost:6333 pdf_url https://agno-public.s3.amazonaws.com/recipes/ThaiRecipes.pdf def create_knowledge(search_type: SearchType) - Knowledge: return Knowledge( vector_dbQdrant( collectionsearch_types_%s % search_type.value, urlqdrant_url, search_typesearch_type, embedderOpenAIEmbedder(idtext-embedding-3-small), ), )if __name__ __main__: async def main(): search_types [ (SearchType.vector, Vector (semantic similarity)), (SearchType.keyword, Keyword (full-text search)), (SearchType.hybrid, Hybrid (vector keyword)), ] for search_type, description in search_types: knowledge create_knowledge(search_type) # skip_if_existsTrue avoids re-processing if run multiple times await knowledge.ainsert(urlpdf_url, skip_if_existsTrue) agent Agent( modelOpenAIResponses(idgpt-5.2), knowledgeknowledge, search_knowledgeTrue, markdownTrue, ) agent.print_response(How do I make pad thai?, streamTrue) asyncio.run(main())几个要点search_type参数直接传给Qdrant构造函数取值来自agno.vectordb.search.SearchType三个搜索类型用不同的 collection 名search_types_vector、search_types_keyword、search_types_hybrid保证同一文档在三种模式下各自独立建索引便于对照skip_if_existsTrue避免重复运行时重复处理同一 URL多次实验时保留这个参数Agent 侧用search_knowledgeTrue启用 agentic RAG 模式。07_knowledge 的 README 区分了两种模式add_knowledge_to_contextTrue上下文自动注入和search_knowledgeTrueAgent 持有搜索工具、自行决定何时搜索后者是默认且推荐的方式。运行方式与 README 给出的示例一致.venvs/demo/bin/python cookbook/07_knowledge/02_building_blocks/02_hybrid_search.py运行后终端会按顺序打印三段输出每段以SEARCH TYPE: ...分隔分别展示 vector、keyword、hybrid 三种模式下对 How do I make pad thai? 的回答。你可以直接对比三段回答确认 hybrid 模式在精确术语问题上的表现再进入重排配置。第二步在 hybrid 召回之上挂 Cohere rerankerhybrid 解决的是召回得更全重排解决的是排得更准。03_reranking.py 的文档字符串定义了 reranking 就是两阶段检索流程第一阶段用 vector/hybrid 搜索召回候选结果第二阶段由 reranker 模型按相关性对结果打分并重新排序。文档说明这especially for complex queries能显著提升结果质量。目前支持四类 rerankerCohereReranker标注 recommended、SentenceTransformerReranker本地 BAAI/bge 模型、InfinityReranker自托管、BedrockRerankerAWS Bedrock。本文按标题主线使用 Cohere。完整配置只有几行核心差异——在Qdrant构造里加reranker参数搜索类型保持SearchType.hybridfrom agno.agent import Agent from agno.knowledge.embedder.openai import OpenAIEmbedder from agno.knowledge.knowledge import Knowledge from agno.knowledge.reranker.cohere import CohereReranker from agno.models.openai import OpenAIResponses from agno.vectordb.qdrant import Qdrant from agno.vectordb.search import SearchType qdrant_url http://localhost:6333 # Knowledge with hybrid search Cohere reranking knowledge Knowledge( vector_dbQdrant( collectionreranking_demo, urlqdrant_url, search_typeSearchType.hybrid, embedderOpenAIEmbedder(idtext-embedding-3-small), rerankerCohereReranker(modelrerank-multilingual-v3.0), ), ) agent Agent( modelOpenAIResponses(idgpt-5.2), knowledgeknowledge, search_knowledgeTrue, instructions[ Always search your knowledge base before answering., Include sources in your response., ], markdownTrue, ) if __name__ __main__: async def main(): await knowledge.ainsert( urlhttps://agno-public.s3.amazonaws.com/recipes/ThaiRecipes.pdf ) agent.print_response( What are some good Thai dessert recipes?, streamTrue, ) asyncio.run(main())配置说明rerankerCohereReranker(modelrerank-multilingual-v3.0)与search_typeSearchType.hybrid配合构成hybrid 召回 → Cohere 重排的两阶段链路reranker 类从agno.knowledge.reranker.cohere导入这一步依赖第二步之外的COHERE_API_KEY环境变量没设置会导致重排调用失败Agent 的instructions明确要求回答前先搜索知识库并在回答中包含来源这是示例自带的行为约束便于在验证时观察 Agent 是否真的走了检索链路。运行.venvs/demo/bin/python cookbook/07_knowledge/02_building_blocks/03_reranking.py结果如何判断这两个示例没有断言式的自动校验验证方式是观察终端流式输出02 示例三段SEARCH TYPE: ...分隔的回答依次出现重点看 hybrid 段对 How do I make pad thai? 的回答是否覆盖了具体做法步骤03 示例终端打印Hybrid search Cohere reranking标题后Agent 流式输出对 What are some good Thai dessert recipes? 的回答。由于 instructions 要求包含来源可以从回答中附带的来源信息确认检索链路生效。示例输出内容依赖所用模型的实际回答文档未给出固定期望文本不要以某段具体措辞作为成功标准。限制与可选分支示例数据源是固定的公开 PDFThaiRecipes.pdfcollection 名reranking_demo等和 embeddertext-embedding-3-small沿用了示例原值换成自己的文档时替换ainsert的 URL 和 collection 名即可其余链路不变。如果不想依赖 Cohere 服务03 示例的文档字符串列出了替代 rerankerSentenceTransformerReranker本地 BAAI/bge 模型无需外部 API key、InfinityReranker自托管、BedrockRerankerAWS可对照 09_archive 中的 redis_db_with_cohere_reranker.py 等存档示例了解其他向量库上挂 reranker 的写法。除搜索类型与 reranker 外chunking、embedder 的调优分别在同目录的 01_chunking_strategies.py 和 06_embedders.py 中属于独立的调优任务不在本文范围内。【免费下载链接】agnoBuild, run, and manage agent platforms.项目地址: https://gitcode.com/GitHub_Trending/ag/agno创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表