
AutoAgent Agentic RAG 实战从智能检索决策到 MultiHopRAG 端到端评测【免费下载链接】AutoAgentAutoAgent: Fully-Automated and Zero-Code LLM Agent Framework项目地址: https://gitcode.com/GitHub_Trending/au/AutoAgentAgentic RAG检索增强生成是 AutoAgent 提供的一种能自主决定是否检索、如何检索的智能问答实现它将知识库存储、检索与作答的决策权交给 LLM Agent 而非固定的流水线从而克服传统 RAG 只能按预设流程机械检索、无法判断是否已获得足够知识的局限。本文以 starter-projects-agentic-rag.md 为骨架结合仓库内 evaluation/multihoprag/run_rag.py、evaluation/multihoprag/scripts/run_rag.sh、autoagent/core.py 与 autoagent/environment/docker_env.py 等源码完整讲解 Agentic RAG 的架构、环境配置、查询流程与 MultiHopRAG 评测帮助你从零复现并二次开发自己的智能检索系统。一、Agentic RAG 与传统 RAG 的本质区别传统 RAG 方法如 chunkRAG、MiniRAG、LightRAG、GraphRAG 等普遍依赖预先定义好的工作流先切块chunking、再向量化入库、查询时强制走召回 → 排序 → 拼接 → 生成的固定路径。这类方案的核心短板在于无法自主判断当前知识是否足以回答该问题检索总是无条件发生检索策略固定不会根据问题类型简单事实、多跳推理、表格查询动态调整对于多跳multi-hop问题缺乏分步检索、逐步收敛的推理能力。Agentic RAG 则把检索本身变成 Agent 可以调用的工具LLM 根据任务需要决定何时检索、检索什么、是否需要继续检索最终自行判断是否已有足够信息作答。在 AutoAgent 中这一能力通过框架的Agent 工具 上下文变量context_variables机制实现并由 autoagent/core.py 中的MetaChain.run_async驱动 Agent 的多轮思考-调用工具-观察结果循环。二、系统架构从导入到初始化1. 必需导入Required Imports仓库 evaluation/multihoprag/run_rag.py 顶部给出了 Agentic RAG 评测脚本所需的全部导入from constant import DOCKER_WORKPLACE_NAME from autoagent.environment.docker_container import init_container from autoagent.io_utils import read_yaml_file, get_md5_hash_bytext from autoagent.agents import get_rag_agent from autoagent.core import AutoAgent from autoagent.environment.docker_env import DockerEnv, DockerConfig, with_env import argparse import asyncio import csv from tqdm import trange import os import json import time各模块职责如下导入用途constant全局常量如DOCKER_WORKPLACE_NAME容器内工作区名默认workplace见 constant.pyautoagent.agents通过get_rag_agent(model)获取 RAG Agent 实例实际从 autoagent/agents/init.py 的注册表中动态导出autoagent.core核心运行时AutoAgent即MetaChain负责 Agent 多轮对话与工具调用编排autoagent.environment.docker_envDocker 沙箱环境提供DockerEnv、DockerConfig、with_envasyncio/tqdm/csv/json异步执行、进度条、数据集读取与结果序列化2. 环境配置Environment ConfigurationAgentic RAG 的默认实现运行在 Docker 容器中以获得隔离、可复现的运行环境。仓库给出了get_env工厂函数def get_env(container_name: str gaia_test, model: str gpt-4o-mini-2024-07-18, git_clone: bool False, setup_package: str lite_pkgs): workplace_name DOCKER_WORKPLACE_NAME docker_config DockerConfig( container_namecontainer_name, workplace_nameworkplace_name, communication_port12345, conda_path/home/user/micromamba ) docker_env DockerEnv(docker_config) return docker_env对照 autoagent/environment/docker_env.py 中的DockerConfig定义主要配置项包括container_nameDocker 容器名称用于docker ps检查、docker start复用或docker run创建默认gaia_testworkplace_name工作区名称同时决定本地挂载目录local_workplace{local_root}/{workplace_name}与容器内工作目录docker_workplace/{workplace_name}二者通过卷挂载打通communication_port容器与宿主机通信端口默认12345对应容器内tcp_server.py --port的监听端口conda_path容器内 Python 环境路径示例为/home/user/micromamba。DockerEnv.init_container()在底层执行docker ps -a --filter name...检查容器状态若容器已运行则直接复用若存在但未运行则docker start若不存在则通过docker run -d --name ... -v {local_workplace}:{docker_workplace} -p {communication_port}:{communication_port} BASE_IMAGES ...创建并启动并在容器内启动tcp_server.py见 docker_env.py。因此在使用前需要保证本机 Docker 环境可用且镜像BASE_IMAGES默认由 constant.py 根据 CPU 架构自动选择tjbtech1/metachain:amd64_latest或tjbtech1/metachain:latest可被拉取。三、RAG Agent 组装与任务注入1. 获取 RAG Agent核心片段如下见 run_rag.pyasync def main(container_name: str gaia_test, model: str gpt-4o-mini-2024-07-18, git_clone: bool False, setup_package: str lite_pkgs, test_pull_name: str test_pull_1010, debug: bool True, task_instructions: str None): workplace_name DOCKER_WORKPLACE_NAME # Docker environment is optional # docker_env get_env(container_name, model, git_clone, setup_package, test_pull_name, debug) # docker_env.init_container() task_instructions YOUR TASK rag_agent get_rag_agent(model)#, rag_envdocker_env) mc AutoAgent()要点说明get_rag_agent(model)按模型名创建配置好的 RAG Agent该函数通过 autoagent/agents/init.py 的import_agents_recursively递归加载autoagent/agents下所有 Agent 模块并注册到全局 registry再以globals().update(registry.agents)导出因此可直接以get_rag_agent调用AutoAgent()即MetaChain实例是 Agent 的执行引擎负责指令注入、工具调用解析、上下文管理与回合控制Docker 环境是可选的评测脚本中默认注释掉docker_env.init_container()即纯本地执行需要沙箱隔离时取消注释即可将rag_env传入 Agent。2. Agentic RAG 的关键设计Agentic RAG 的智能体现在以下设计维度可从框架机制推断异步优先main为async def通过asyncio.run(...)驱动底层调用MetaChain.run_async见 core.py支持并发批量处理多个查询模型可配置model参数支持任意 LiteLLM 兼容的模型名函数调用能力由 constant.py 中的FN_CALL逻辑按模型名自动开关如deepseek-r1、llama等默认关闭函数调用走工具描述拼接模式消息机制灵活用户查询以标准messages列表传入工具调用结果以role: tool消息回填到历史形成完整的多轮上下文。四、查询处理流程Query Processing Flow1. 上下文变量与消息构建context_variables { working_dir: DOCKER_WORKPLACE_NAME, user_query: task_instructions } messages [{role: user, content: task_instructions}] response await mc.run_async( agentcodeact_agent, messagesmessages, max_turns10, context_variablescontext_variables, debugdebug )该流程包含五个步骤设置上下文变量working_dir指定容器/本地工作目录user_query透传当前问题上下文变量会被注入到所有声明了context_variables参数的 Agent 工具中core.py 通过inspect.signature(func).parameters检测并注入构建消息格式以{role: user, content: task_instructions}作为首轮输入异步执行 Agentrun_async内部循环调用get_chat_completion_async带tenacity指数退避重试最多 4 次见 core.py并将tool_calls逐一交给handle_tool_calls执行控制最大轮数max_turns10限制思考-调用-观察的循环次数避免无限检索while len(history) - init_len max_turns and active_agent是核心循环条件core.pyDebug 模式debugTrue时打印收到的补全消息、工具调用等调试信息便于排查多跳推理过程。2. 工具调用与回合终止在handle_tool_calls中core.py每个工具调用的参数会被json.loads解析后执行返回值统一经handle_function_result转为字符串或Result对象再以role: tool消息写回历史。当 Agent 不再产生tool_calls时回合结束Response.messages中保存了完整对话最终答案即response.messages[-1][content]。五、端到端使用MultiHopRAG 评测仓库在 evaluation/multihoprag 提供了完整的 Agentic RAG 评测示例包含run_rag.py、scripts/run_rag.sh与结果文件result.json。1. 基础用法Basic Usage运行脚本 evaluation/multihoprag/scripts/run_rag.shcurrent_dir$(dirname $(readlink -f $0)) cd $current_dir cd ../ export DOCKER_WORKPLACE_NAMEworkplace_rag export EVAL_MODETrue export DEBUGTrue export BASE_IMAGEStjbtech1/gaia-bookworm:v2 export COMPLETION_MODELclaude-3-5-sonnet-20241022 python run_rag.py --model gpt-4o-mini-2024-07-18 --container_name gaia_test环境变量说明对应 constant.py 的读取逻辑DOCKER_WORKPLACE_NAMEworkplace_rag覆盖默认工作区名workplaceconstant.pyEVAL_MODETrue进入评测模式此时DEFAULT_LOG被强制置为Falseconstant.py避免评测过程产生冗余日志DEBUGTrue开启调试输出BASE_IMAGEStjbtech1/gaia-bookworm:v2指定容器基础镜像默认按架构选择tjbtech1/metachain:*见 constant.pyCOMPLETION_MODEL默认补全模型脚本注释中给出了多组可选配置见 run_rag.sh例如gpt-4o-2024-08-06、mistral/mistral-large-2407、deepseek/deepseek-chat等。2. 命令行参数说明Parameter Descriptionrun_rag.py通过argparse定义参数见 run_rag.py参数默认值含义--container_namegaia_testDocker 容器名称--modelgpt-4o-mini-2024-07-18使用的语言模型--git_cloneFalsestore_true是否克隆代码到容器环境--setup_packagelite_pkgs容器内安装的软件包类型--debugFalsestore_true是否开启调试模式3. 数据准备与批量评测流程Agentic RAG 评测对应 README 中的复现步骤分三步下载数据集从 MultiHopRAG 数据源下载MultiHopRAG.csv保存到evaluation/multihoprag目录下运行推理执行run_rag.sh或等价命令查看结果结果写入evaluation/multihoprag/result.json仓库中初始为空数组[]。批量评测逻辑位于main函数中run_rag.pycsv_file_path ./MultiHopRAG.csv json_path ./result.json question_list [] GA_LIST [] with open(csv_file_path, moder, encodingutf-8) as question_file: reader csv.DictReader(question_file) for row in reader: question_list.append(row[query]) GA_LIST.append(row[answer]) row_count 0 with open(json_path, r, encodingutf-8) as json_file: data json.load(json_file) row_count len(data) for QUESTIONid in trange(row_count, len(question_list)): task_instructions question_list[QUESTIONid] codeact_agent get_rag_agent(model) mc AutoAgent() context_variables {working_dir: DOCKER_WORKPLACE_NAME, user_query: task_instructions} messages [{role: user, content: task_instructions}] response await mc.run_async(agentcodeact_agent, messagesmessages, max_turns10, context_variablescontext_variables, debugdebug) data_new { query: task_instructions, gold_answer: GA_LIST[QUESTIONid], answer: response.messages[-1][content] } append_to_json(json_path, data_new)设计要点断点续跑先读取result.json已有条数row_count从该位置继续避免重复推理天然支持失败重试逐条评测tqdm.trange显示进度每条查询构建独立的rag_agent与AutoAgent实例结果记录append_to_json采用读-追加-写回方式run_rag.py每条记录包含query、gold_answer与模型生成的answer便于后续计算准确率等指标。六、关键特性与使用注意关键特性异步处理Asynchronous Processing全程基于asyncio与acompletionLiteLLM 异步补全接口可显著提升批处理吞吐容器化部署Containerized Deployment通过DockerEnv/DockerConfig提供一致的运行环境支持卷挂载工作区与端口通信灵活配置Flexible Configurationmodel、container_name、setup_package、debug等参数可组合COMPLETION_MODEL与BASE_IMAGES等环境变量覆盖默认值批量处理Batch Processing内置 CSV 逐行读取与 JSON 增量写入支持大规模数据集评测结果跟踪Result Trackingresult.json保存问题、标准答案与模型回答配合trange进度显示便于分析与复现。重要注意事项确保 Docker 环境正确配置容器名、工作区名、通信端口与 conda 路径需与实际环境一致首次运行会自动拉取基础镜像检查模型访问权限与配置不同模型需在.env中设置对应 API Key如OPENAI_API_KEY、DEEPSEEK_API_KEY、ANTHROPIC_API_KEY等并确认模型名符合 LiteLLM 命名规范如openrouter/deepseek/deepseek-r1、gemini/gemini-2.0-flash部分模型默认关闭函数调用框架会自动切换到工具描述模式见 constant.py设置合理的最大对话轮数max_turns过小可能导致检索不充分过大则增加延迟与成本多跳问题建议从10起步调优保持数据格式一致CSV 需包含query与answer两列对应row[query]、row[answer]result.json保持 JSON 数组格式定期备份结果文件由于采用断点续跑机制result.json是唯一的进度状态应定期备份防止丢失。七、如何在此基础上扩展自己的 Agentic RAG结合仓库结构你可以从三个方向扩展替换检索后端Agent 所使用的检索工具封装在 autoagent/tools 中如 autoagent/tools/rag_code.py 提供了code_rag工具、autoagent/tools/rag_tools.py 对接 autoagent/memory/rag_memory.py 中的Memory类。Memory基于 ChromaDB 实现向量库的增、查、预览支持 OpenAI Embedding默认text-embedding-3-small与本地 SentenceTransformer 两种嵌入方案rag_memory.py可据此替换为自有知识库调整评测数据集仿照MultiHopRAG.csv的query/answer两列格式即可将评测迁移到任意 QA 数据集接入多 Agent 协作MetaChain支持工具调用返回Agent对象实现 Agent 间切换core.py可以将 RAG Agent 与检索、总结等子 Agent 组合成更复杂的检索工作流。从实现层面看Agentic RAG 的本质是在 autoagent/core.py 提供的通用 Agent 执行引擎之上把检索决策交给 LLM模型在每一轮自由决定调用哪个检索工具、是否停止检索并作答从而实现了从固定流水线到自主决策的跃迁。这既是本文所述 MultiHopRAG 评测的核心也是将 Agentic RAG 能力复用到任意垂直领域问答系统的通用范式。【免费下载链接】AutoAgentAutoAgent: Fully-Automated and Zero-Code LLM Agent Framework项目地址: https://gitcode.com/GitHub_Trending/au/AutoAgent创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考