多智能体系统KIMAs
KIMAs即知识集成多智能体系统,具有组件可配置和利用多源知识的能力。它的特点是一个灵活的、可配置的系统,用于集成不同的知识来源:
- 上下文管理和查询重写机制,以提高检索精度和多回合会话一致性;
- 高效的知识路由和检索;
- 简单而有效的过滤和引用生成机制;
- 优化的可并行多代理管道执行。
KIMAs的代码开源在AgentScope的GitHub仓库中。KIMAs主要是由python代码和配置文件(主要在src/config文件夹下)组成。python代码提供了整个系统的骨架,主要包括了如何各个智能体内部的功能、路由算法和信息流处理等关键;而配置文件则为后续将该系统迁移到不同问答场景提供可很高的灵活性,包括了各个智能体的prompt和它们需要处理的的知识源,以及工作流的一些微调。
开源的代码配合其中的配置可以搭建一套针对AgentScope自身的问答系统。基于KIMAs搭建答疑机器人服务会有几个要点:准备好运行环境、准备好知识材料、启动服务以及服务透出。下面,会从开源代码的内置场景,AgentScope仓库答疑出发,先介绍如何跑通从运行环境搭建到服务透出的基础操作;然后也会简单介绍后续可以如何调整配置文件使系统适应到不同的答疑场景中。
在这里插入图片描述
Retrieval agents
:检索代理负责根据知识上下文消化查询。默认情况下,应用程序中设置了三个检索代理,帮助从教程、API和AgentScope repo中的示例中检索。Backup assistant
:此备份助手处理与知识领域无关的范围外问题(例如,此应用程序中的AgentScope repo)。Context Manager
:上下文管理器负责为检索代理和摘要器消化对话并提取有用的信息。Summarizer
:摘要器总结来自激活的检索代理(或备份助手)和上下文管理器的信息,并生成最终答案。
Agents配置(例如,名称、提示、模型、知识库)可以在这个文件中找到。代理将使用copilot_app.py中的这个文件进行初始化。
- 将查询路由到检索代理的子集:路由机制是基于嵌入相似度的。要了解更多细节,请参阅KIMAs论文和本文。 Talk to Right Specialists: Routing and Planning in Multi-agent System for Question Answering
在这里插入图片描述
主要工作流程和逻辑:High-level summary,当用户输入查询时,它首先由上下文管理器处理,上下文管理器将通过路由机制调用相关的retrieval agents。retrieval agents从上下文管理器获得会话上下文丰富的查询,用自己的知识上下文重写查询,然后执行检索。更详细的对话上下文分析和检索到的内容最终将传递给摘要器以生成最终答案。
作为前期准备,我们需要运行在 agentscope/applications/multisource_rag_app
目录下安装KIMAs额外需要的一个依赖 pip install -r requirements.txt
。另外,为了最大化应用的运行效率,这个应用用到DashScope提供的异步模型调用API,所以也需要大家提前准备好API key,并且添加到环境变量中 export DASHSCOPE_API_KEY='your_dash_key'
。最后,我们会假设有一份直接从Github 上clone的AgentScope仓库作为资料源,路径位于 ~/agentscope_clean
。
在这里插入图片描述
之后,我们切换到 src/目录下,运行启动服务的脚本 as_scripts/setup_server.sh
,这样这个问答服务就能启动起来了。作为第一次的启动,可能会需要一定的等待时间让系统处理文件以及生成便于检索的向量。
开源代码中附带了一个基于gradio改进的前端界面。要启动这个前端界面并且连接到后端服务器,我们需要用你的ip地址(本地是127.0.0.1)和端口(默认是6009)设定好 as_scripts/setup_gradio.sh
中的两个环境变量 MODEL_SERVICE_URL
和 FEEDBACK_SERVICE_URL
。之后,运行 as_scripts/setup_gradio.sh
就可以在本地打开一个gradio前端界面了。这个前端界面提供了一个让用户输入评价的系统,方便应用开发者在测试阶段收集反馈。
在这里插入图片描述
如果大家想基于KIMAs用上自己的知识库/信息源,可以参考 src/configs/as_config/as_knowledge_configs/knowledge_config.json
。这个配置文件中,每个knowledge_id对应一个知识源;input_dir参数是各个信息源文件夹的原始路径; required_exts则是目标文件的后缀。如果想要更加定制化的信息预处理,大家可以设定自己需要的chunk_sizechunk_overlap,以及基于llamaindex预处理机制的transformations等参数。
之后,我们需要更新智能体们的设定( src/configs/as_config/as_agent_configs/agent_config_dict.json
)。其中负责检索知识的智能体类型是LlamaIndexAgent,我们需要用我们新的knowledge_id来更新它们的 knowledge_id_list以及sys_prompt
。 当这些都调整完之后,我们就可以重复我们启动服务的步骤,部署一个属于你自己的答疑服务了!