
AgentScope 如何把 KnowledgeBase 接入 Agentstatic 自动注入与 agentic 工具驱动两种模式【免费下载链接】agentscopeBuild and run agents you can see, understand and trust.项目地址: https://gitcode.com/GitHub_Trending/ag/agentscope如果你已经用agentscope.rag的组件parser、chunker、embedding 模型、向量库建好了一个KnowledgeBase但还不知道怎么让它真正进入Agent的推理循环这篇文章给出完整的接线方式通过RAGMiddleware把知识库挂到 Agent 上并分别跑通static每轮自动检索、注入上下文和agentic暴露search_knowledge工具、由模型决定何时检索两种模式。适用环境是库模式library mode单进程内手动驱动不起 FastAPI 服务、不依赖 manager 和 message bus。示例使用 DashScope 的text-embedding-v4embedding 模型与qwen-plus对话模型向量库默认用内存版 Qdrantlocation:memory:不需要外部服务。准备条件安装与 API Key安装 RAG 扩展README 给出的方式二选一# From PyPI uv pip install agentscope[rag] # Or from source (repo root) uv pip install -e .[rag]agentscope[rag]extra 装的是文档解析依赖pypdf、python-pptx、python-docx、openpyxl、xlrd、pandas见 pyproject.toml向量库通过vdb-*extras 选择默认示例用 Qdrantagentscope[vdb-qdrant]qdrant-client。运行前必须设置 DashScope 的 API Key示例脚本检测到缺失会直接抛RuntimeErrorexport DASHSCOPE_API_KEYsk-... # 替换为你的 DashScope API Keyintegrate_with_agent.py还用到DashScopeChatModelREADME 说明它已在基础agentscope依赖里无需额外安装。构建 KnowledgeBase 句柄并建索引KnowledgeBase是 Agent 侧消费的运行时句柄它把 embedding 模型、向量库连接和 collection 三者绑定在一起对外提供insert_document/search/list_documents/delete_document。文档索引解析、切块、embedding、插入不属于中间件的职责由调用方在构造KnowledgeBase之后完成见 _knowledge.py 的模块说明。以下代码取自 integrate_with_agent.py 的main()演示了从模型凭证到索引完成的完整路径import asyncio import os from agentscope.credential import DashScopeCredential from agentscope.embedding import DashScopeEmbeddingModel from agentscope.rag import ( ApproxTokenChunker, KnowledgeBase, QdrantStore, TextParser, ) COLLECTION demo-kb credential DashScopeCredential(api_keyos.environ[DASHSCOPE_API_KEY]) embedding_model DashScopeEmbeddingModel( credentialcredential, modeltext-embedding-v4, dimensions1024, ) store QdrantStore(location:memory:) async with store: knowledge KnowledgeBase( nameacme-handbook, descriptionAcme HR policies and AgentScope 3.0 release notes., embedding_modelembedding_model, vector_storestore, collectionCOLLECTION, ) await index_corpus(knowledge)要点QdrantStore是异步上下文管理器进入时打开客户端连接、退出时关闭所有KnowledgeBase操作都要在async with store:块内执行底层 collection 是惰性创建的——第一次操作时自动调用ensure_collection按 embedding 模型的dimensions建集合无需手动初始化name和description会出现在 agentic 模式工具描述里供模型判断这个知识库装了什么、什么时候该查所以要写成对 Agent 有用的说明embedding 模型必须在索引时和检索时保持一致否则向量不可比_knowledge.py 对embedding_model的约束说明整个KnowledgeBase生命周期内向量库连接必须保持打开。索引管道沿用 index_and_search.py 的三步TextParser.parsebytes →Section[]→ApproxTokenChunker(chunk_size256, overlap32).chunkSection[]→Chunk[]→knowledge.insert_document(chunks, document_metadata{filename: filename})。insert_document内部完成 embedding 与写入返回的document_id可用于后续delete_document。模式一agentic 工具驱动检索agentic是RAGMiddleware.Parameters的默认mode。中间件通过list_tools()向 Agent 暴露一个名为search_knowledge的只读工具模型像决定其他工具调用一样自行决定何时检索、检索什么见 _rag.py 的RAGMiddleware.list_toolsfrom agentscope.middleware import RAGMiddleware agentic_mw RAGMiddleware( knowledge_bases[knowledge], parametersRAGMiddleware.Parameters(modeagentic, top_k3), )该工具的两个参数_SearchParams定义query自然语言查询。工具描述明确要求写成自包含的陈述句避免he/today/here这类指代因为检索是纯语义的没有对话上下文knowledge_bases可选的知识库名字符串列表用于把检索限定到某几个库省略或为null时搜索全部已装备的知识库。工具 schema 会把该项的enum收窄到当前装备的知识库名模型无法编造不存在的名字。工具描述中还会列出每个知识库的name与description如果没有装备任何知识库描述会明确提示不要调用该工具。检索无结果时工具返回No relevant content found.检索异常时返回Search failed: {e}且状态为ERROR。工具是只读的check_permissions直接返回 ALLOW不需要人工确认。模式二static 自动注入static模式下中间件不暴露任何工具而是在每次回复的第一步推理agent.state.cur_iter 0时用本轮用户输入作为查询执行检索把合并后的结果格式化后包进一个HintBlock注入agent.state.context让模型看见匹配片段但它从不主动发起检索_rag.py 的on_reasoning实现static_mw RAGMiddleware( knowledge_bases[knowledge], parametersRAGMiddleware.Parameters( modestatic, top_k3, emit_hint_eventFalse, ), )static 模式的行为细节注入是一次性的默认persist_hintFalseHintBlock在参与完那次模型调用后立刻从上下文中移除按 block id 精确定位不会污染后续轮次后续的推理迭代工具调用轮不再重复检索避免每一轮都重新 embedding 和注入emit_hint_event默认为True会额外 yield 一个HintBlockEvent前端可据此把匹配片段展示给用户示例中设为False关闭检索本身失败时不会中断回复——中间件记录异常日志后以空结果继续proceeding without matched context注入内容的模板由hint_template控制必须且只能含一个{context}占位符默认模板是一段system-reminder包裹文本。把中间件挂到 Agent 上两种模式的中间件都只是 Agent 构造参数里middlewares列表中的一员与其他中间件tool offload、mem0 等自由组合。完整示例见 integrate_with_agent.py 的build_agentfrom agentscope.agent import Agent from agentscope.model import DashScopeChatModel from agentscope.tool import Toolkit from agentscope.message import UserMsg chat_model DashScopeChatModel( credentialcredential, modelqwen-plus, streamFalse, ) agent Agent( namerag-agent, system_prompt( You are a concise assistant. Use matched context when available; if you dont know, say so. ), modelchat_model, toolkitToolkit(), middlewares[agentic_mw], # 或 static_mw )两个模式的KnowledgeBase可以分别绑定给两个 Agent 实例互不影响单个中间件也支持传入多个KnowledgeBase且它们可以使用不同的 embedding 模型中间件只负责编排检索不拥有这些资源。运行与验证示例脚本在仓库根目录运行sk-...替换为你的 KeyDASHSCOPE_API_KEYsk-... python examples/rag/integrate_with_agent.py脚本会先打印索引过程每个文件一行indexed xxx as document_id... (N chunk(s))然后对两个 Agent 各发一个问题终端输出形如文档示例格式[rag-static-agent] user: How many remote days per week does Acme allow? [rag-static-agent] assistant: ... [rag-agentic-agent] user: Summarise whats new in the AgentScope 3.0 release notes. [rag-agentic-agent] assistant: ...判断方法static Agent 的问题对应内置语料company-policy.md每至多三天远程、周三必须到岗回答应基于该政策内容验证自动注入生效agentic Agent 的问题对应release-notes.md回答基于该文档内容由于是模型行为回复措辞不固定以内容是否命中语料为准想单独验证检索质量可以先跑 index_and_search.py它会打印每条结果的score、source与片段直接核对KnowledgeBase.search的原始行为。可调整参数与边界限制RAGMiddleware.Parameters暴露的检索参数_rag.py 中通过 pydantic 校验JSON Schema 自动供前端渲染参数默认值说明modeagenticagentic或static见上文两种模式top_k5范围 1–50跨所有知识库合并后返回的最大 chunk 数score_thresholdNone保留命中的最低相似度分留空即不过滤rerank_candidate_kNone默认取2 * top_k上限 50交给 rerank 模型判断的候选数必须不小于top_kemit_hint_eventTruestatic 模式下向前端发HintBlockEvent展示匹配片段persist_hintFalsestatic 模式下是否把注入的 HintBlock 保留在上下文中rerank 通过构造参数rerank_model一个 chat 模型启用属尽力而为模型失败时保留向量排序结果继续falling back to vector order。几条需要知道的限制QdrantStore(location:memory:)不持久化进程退出后索引丢失。需要本地持久化时装agentscope[vdb-milvus]并改用MilvusLiteStore(uri./rag_demo.db)已有 MongoDB7.0 副本集或 Atlas需开启 Vector Search或 Elasticsearch8.12的团队README 分别给出了MongoDBStore/ElasticsearchStore的构造方式与对应 extrasagentscope[vdb-mongodb]、agentscope[vdb-elasticsearch]这两个是外部服务运行前必须先有可达的集群并相应导出MONGODB_URI或ELASTICSEARCH_URL等环境变量MongoDB 后端要求把计划用于过滤的字段预先声明在filter_fields默认只有[document_id]否则metadata_filter检索会查不到Elasticsearch 后端则不需要声明过滤字段多个知识库使用不同 embedding 模型时跨库合并按原始 score 排序分数并不严格可比——这是 README 与源码共同的说明混合部署需要时可改用基于排名的融合metadata_filter在构造KnowledgeBase时设定后始终生效检索和列表都限制在匹配范围内插入时还会强制写入该字段适合多租户把多个逻辑库放进同一物理 collection 的场景。如果需要 FastAPI 端点管理知识库 CRUD、文档上传、索引 worker 和检索的服务化部署README 指引到 examples/agent_service 的后端与 examples/web_ui 的会话式界面本文的库模式接线路径与之独立。【免费下载链接】agentscopeBuild and run agents you can see, understand and trust.项目地址: https://gitcode.com/GitHub_Trending/ag/agentscope创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考