DB-GPT Agent 框架深度解析:ConversableAgent 架构、多智能体协作与三层记忆体系 📅 发布时间:2026/9/13 11:07:55 👁 浏览次数: DB-GPT Agent 框架深度解析ConversableAgent 架构、多智能体协作与三层记忆体系【免费下载链接】DB-GPTopen-source agentic AI data assistant for the next generation of AI Data products.项目地址: https://gitcode.com/GitHub_Trending/db/DB-GPT本文以 DB-GPT 官方的 Agent 框架概念文档为骨架完整讲解其数据驱动的多智能体架构包括 ConversableAgent 的五大核心模块Profile / Memory / Planning / Action / Resource、消息驱动的协作模式、分级记忆体系以及如何用几行代码构建并运行一个自定义 Agent。读完后你可以直接对照源码理解接收消息 → 思考 → 审查 → 行动 → 验证这一完整对话循环的实现机制并能在仓库示例的基础上搭建自己的多智能体应用。一、框架定位数据驱动的多智能体框架DB-GPT 提供的是一套数据驱动的多智能体框架data-driven multi-agent framework用于构建能够自主协作、调用工具、访问数据库并在多轮会话中保持记忆的 AI Agent。与只做单轮对话补全的系统不同该框架的 Agent 具备完整的感知—思考—行动—反思闭环并且原生面向数据场景SQL 查询、数据分析、图表生成设计。从源码结构看整个 Agent 框架位于packages/dbgpt-core/src/dbgpt/agent/目录下核心实现分层如下目录/文件职责agent/core/base_agent.py基类ConversableAgent实现完整对话循环agent/core/agent.py抽象接口Agent、运行上下文AgentContext、消息对象AgentMessageagent/core/role.py角色基类Role定义 Profile、记忆读写、任务进度跟踪agent/core/profile/角色档案ProfileConfig名字、角色、目标、约束agent/core/memory/分级记忆体系感知/短期/长期/混合agent/core/plan/规划模块PlannerAgent、Auto-Plan 等任务分解策略agent/core/action/行动模块Action执行工具/查询/SQL 等具体操作agent/expand/预置 Agent数据分析、代码、摘要、React 等agent/resource/资源模块封装工具、数据库、知识库的访问二、Agent 架构五大核心模块官方文档给出的架构如下每个 Agent 都围绕五个核心模块构建ConversableAgent将其统一封装对外连接用户、LLM、外部工具、数据库与知识库。模块作用对应源码位置Profile定义 Agent 的角色、名字、目标与约束agent/core/profile/base.pyProfileConfigMemory存储对话历史与学习到的信息agent/core/memory/Planning将复杂任务分解为可执行步骤agent/core/plan/planner_agent.py、team_auto_plan.pyAction执行工具调用、SQL 查询等具体操作agent/core/action/base.pyAction、ActionOutputResource提供对工具、数据库、知识库的访问agent/resource/base.pyResource这五个模块在ConversableAgent中体现为一组显式字段见 ConversableAgent 类定义agent_contextAgentContext会话运行上下文携带conv_id、语言、采样温度等运行参数actionsList[Action]行动模块可绑定一个或多个 Action按顺序执行并以前一个 Action 的输出为下一个的输入resourceResource资源模块在build()阶段通过preload_resource()预加载并通过get_prompt()把知识库/表结构等信息注入提示词llm_configLLMConfig模型配置封装LLMClient与模型选择策略memoryAgentMemory记忆模块默认为带 GptsMemory 会话记忆的实现。此外还有若干重要的运行控制字段max_retry_count默认 3单轮回复失败重试上限、max_timeout默认 600 秒、run_modeAgentRunMode.DEFAULT或LOOP循环模式下 Agent 会持续迭代直到收到终止信号以及stream_out是否流式输出。2.1 Profile角色的定义与约束从源码结构看Role基类见 Role 类定义持有profile: ProfileConfig与memory: AgentMemory两个必填/默认字段并通过一组只读属性对外暴露角色信息name、role、goal、constraints、retry_goal、retry_constraints、desc、examples、expand_prompt。这些属性正是系统提示词模板中的渲染变量——Role.prompt_template()方法会解析模板中未声明的变量把上述角色参数与运行时参数一起渲染进提示词见 prompt_template 实现。值得注意的是安全细节模板渲染统一走SandboxedEnvironmentJinja2 沙箱注释中明确说明这是为了防止用户可控内容例如所选 Skill 的指令文本通过模板注入导致 SSTI服务端模板注入问题见 build_system_prompt 实现。2.2 Planning 与 Action任务分解和执行Planning 模块负责把复杂任务拆成可执行步骤agent/core/plan/下提供了几种策略planner_agent.py规划型 Agent通过 LLM 生成子任务计划team_auto_plan.pyAuto-Plan 团队实现管理器—工人式协作对应下文 Manager-Worker 模式plan/awel/基于 AWEL 图引擎的 Agent 编排算子agent_operator.py、team_awel_layout.py可把 Agent 团队构造成 DAG 在流程画布中运行。Action 模块则是手。ConversableAgent.act()的默认实现见 act 方法遍历self.actions列表先调用action.parse_action()从 LLM 回复中解析出真正要执行的动作再调用real_action.run()得到ActionOutput若一个 Action 未解析出可执行动作则continue最终返回最后一个 Action 的输出。ActionOutput携带执行结果content/observations、是否成功is_exe_success、是否可重试have_retry、思考过程thoughts等字段是验证与记忆写入的关键数据源。三、ConversableAgent对话循环的完整实现ConversableAgent是所有 Agent 的基类见 base_agent.py#L39它继承自Role并实现抽象接口Agentsend/receive/generate_reply/thinking/review/act/verify定义于 agent.py#L16。文档中概括的接收消息 → thinkplan→ act → respond循环在generate_reply()中被展开为带重试的六阶段流程见 generate_reply 实现初始化回复消息_init_reply_message()基于收到的消息创建回复消息轮次rounds 1Thinking思考_load_thinking_messages()组装提示词——读取记忆read_memories()、注入任务进度摘要task_progress、加载资源提示词数据库表结构、知识库等、构建 system/user prompt随后thinking()调用 LLM内置 3 次模型级重试失败后换模型并休眠 10 秒重试见 thinking 方法。若 LLM 报上下文超长错误且启用了上下文管理_context_manager会自动触发响应式压缩Layer 4 reactive compaction后重试Review审查review()检查回复是否合规返回(approve, comments)写入AgentReviewInfoAct行动执行第二节所述的 Action 链产出ActionOutput并挂到消息的action_report上Verify验证verify()依次检查审查是否通过、Action 是否执行成功、结果是否为空最后调用子类可覆写的correctness_check()自我修正循环若verify不通过且act_out.have_retry为真把失败原因作为新的observation写入记忆并进入下一轮直至max_retry_count通过则写入记忆并非 LOOP 模式或动作终止时结束。整个循环由max_retry_count默认 3和max_timeout默认 600s双重保护每轮失败都会通过send()把带失败原因的消息回传给发件人以组织新的求解指令。AgentMessage是智能体间通信的消息对象见 AgentMessage 定义除文本content外还携带rounds轮次、action_report、review_info、current_goal、model_name、success等字段to_llm_message()负责把消息转成 LLM 可消费的 dict。3.1 AgentContext 运行上下文AgentContext定义于 agent.py#L197-L227是每次会话的运行参数容器常用字段及默认值字段默认值说明conv_id必填会话 ID记忆与会话恢复都以此隔离max_chat_round100最大对话轮次max_retry_round10最大重试轮次max_new_tokens4096单次生成最大 token 数temperature0.5采样温度languageNone提示词渲染语言output_dirNone会话工作目录操作快照写入此处缺省回退到DBGPT_HOME/workspace/op_snapshotsenable_context_managementFalse是否启用多层上下文管理token 预算、自动压缩max_context_tokens120000上下文 token 预算context_warning_threshold/context_error_threshold0.70 / 0.90预警/告警阈值build()阶段见 build 方法会完成三件准备工作预加载资源、check_available()校验身份、Action 所需资源、LLM 配置齐全以及初始化记忆会话f{conv_id}_{role}_{name}并从GptsMemory恢复历史 Action 输出。校验逻辑见 check_available 实现——非人类 Agent 若缺少 Action 模块、LLM 配置或 Action 声明的资源类型都会在这里抛出ValueError。四、多智能体协作模式文档定义了三种协作拓扑在源码中均有对应实现Sequential顺序协作Agent 按顺序把结果传给下一个。底层就是send()/receive()消息传递链——initiate_chat()发起对话后回复方通过receive()生成回复并send()回发件人见 receive 实现消息中的rely_messages参数支持显式指定依赖消息例如引用上游 Agent 的执行结果在_load_thinking_messages()中会被格式化为Question:/Observation:段落注入提示词。Parallel并行协作多个 Agent 同时处理子任务。ConversableAgent内置executor默认单线程ThreadPoolExecutor见 字段定义blocking_func_to_async()可把阻塞函数放入执行器并发运行团队层面的并行编排可结合plan/awel/中的 AWEL 算子实现。Manager-Worker管理器—工人规划 Agent 把任务委派给专家 Agent。对应实现是agent/core/plan/team_auto_plan.py的 Auto-Plan 团队PlannerAgent负责拆解与调度可参考示例 auto_plan_agent_dialogue_example.py 查看完整用法。所有 Agent 之间的通信都统一走Agent抽象接口的send/receive/generate_reply三件套并配合root_tracer的全链路 trace spanagent.send、agent.receive、agent.generate_reply.thinking/act/verify等便于观测每一步的思考、行动与验证结果。五、记忆体系感知 / 短期 / 长期 / 混合文档给出的记忆分级表记忆类型作用域持久化Sensory感知记忆当前消息不持久化Short-term短期记忆当前会话会话级Long-term长期记忆跨会话数据库向量库Hybrid混合记忆组合三者混合源码中该体系位于agent/core/memory/与文档的一一对应关系base.pySensoryMemory、ShortTermMemory、Memory抽象基类与MemoryFragment记忆片段long_term.py/short_term.py长期与短期记忆实现短期记忆EnhancedShortTermMemory带重要性淘汰机制hybrid.pyHybridMemory见 hybrid.py#L31显式建模人类的短期/长期记忆——短期记忆缓冲近期感知长期记忆固化重要信息agent_memory.pyAgentMemory把上述记忆与 GptsMemory会话消息记忆整合为 Agent 可直接使用的统一入口。几个值得注意的实现细节向量库持久化HybridMemory.from_chroma()类方法见 hybrid.py#L69-L110可以基于 Chroma 向量库构建长期记忆集合默认名为agent_memory_long_term数据默认落在DATA_DIR/agent_memoryfrom_vstore()则支持任意VectorStoreBase实现说明长期记忆的存储后端是可插拔的。重要性评分记忆片段写入时可携带importance分数与is_insight标记见 AgentMemoryFragmentRole基类预留了memory_importance_scorer与memory_insight_extractor属性默认由 LLM 打分/抽取memory/llm.py用于决定哪些片段值得长期保留。记忆读写闭环Role.write_memories()见 role.py#L278-L406在每轮对话结束后把thought / action / observation等字段渲染成记忆片段并写入read_memories()在下轮思考前按当前观测召回相关记忆注入提示词。recovering_memory()还支持从历史ActionOutput恢复记忆配合build()中的gpts_memory.get_agent_history_memory()实现跨进程会话恢复。任务进度快照_task_progress列表逐轮追加已完成的步骤step / action / phase / status并通过task_progress_summary属性渲染成 ## Task Progress 摘要注入每次 LLM 调用防止 Agent 在长任务中重复已完成的步骤同时每步的完整action_input/observation会写入磁盘快照文件step_NNN_action.json保证上下文压缩后仍可通过read_file找回精确数值见 _write_op_snapshot。六、预置 Agent 类型文档列出的四类预置 Agent 在agent/expand/中都有实现并各有配套示例脚本文档中的类型源码实现示例脚本Data Analysis Agent分析数据、生成 SQL、创建图表expand/data_analysis_agent.py、expand/data_agent.pysql_agent_dialogue_example.pySummary Agent长文与会话摘要expand/summary_assistant_agent.pysingle_summary_agent_dialogue_example.pyCode Agent生成并执行代码expand/code_assistant_agent.py、expand/react_agent.pysandbox_code_agent_example.pyChat Agent通用对话expand/simple_assistant_agent.pysingle_agent_dialogue_example.pyexpand/下还有dashboard_assistant_agent.py、excel_table_agent.py、web_assistant_agent.py、data_scientist_agent.py等更专门的变体可作为自定义 Agent 的参考模板。七、快速上手构建并运行一个 Agent7.1 官方文档的最小示例from dbgpt.agent import ConversableAgent, AgentContext # Define a simple custom agent agent ConversableAgent( nameDataAnalyst, roleYou are a data analysis expert, goalHelp users analyze data and generate insights, llm_config{model: chatgpt_proxyllm}, ) # Start a conversation result await agent.a_send(Analyze the sales trends for Q4 2024)该示例展示了用 Profile 参数name/role/goal 模型配置定义 Agent 的最小形态。需要注意的是从当前源码看ConversableAgent是 Pydantic 模型角色信息实际经由ProfileConfig传入且完整运行必须绑定AgentContextcheck_available()会强制校验 context、actions 与 llm_config 三者齐备因此该示例应理解为概念性最小表达可直接运行的完整写法见下一节。7.2 仓库示例中的完整可运行写法仓库示例 single_agent_dialogue_example.py 给出了标准工作流创建 Agent → bind 上下文/模型/记忆 → build 校验初始化 → 通过 UserProxyAgent 发起对话import asyncio import os from dbgpt.agent import AgentContext, AgentMemory, LLMConfig, UserProxyAgent from dbgpt.agent.expand.code_assistant_agent import CodeAssistantAgent async def main(): from dbgpt.model.proxy.llms.siliconflow import SiliconFlowLLMClient # 1. 创建 LLM 客户端此处以 SiliconFlow 为例可替换为任意 dbgpt.model 中的客户端 llm_client SiliconFlowLLMClient( model_aliasos.getenv( SILICONFLOW_MODEL_VERSION, Qwen/Qwen2.5-Coder-32B-Instruct ), ) # 2. 会话上下文与记忆 context: AgentContext AgentContext(conv_idtest123, gpts_app_name代码助手) agent_memory AgentMemory() agent_memory.gpts_memory.init(conv_idtest123) try: # 3. 链式 bind上下文 → LLM 配置 → 记忆然后 build() 完成校验与记忆恢复 coder ( await CodeAssistantAgent() .bind(context) .bind(LLMConfig(llm_clientllm_client)) .bind(agent_memory) .build() ) user_proxy await UserProxyAgent().bind(context).bind(agent_memory).build() # 4. 由人类代理UserProxyAgent发起对话 await user_proxy.initiate_chat( recipientcoder, revieweruser_proxy, message计算下321 * 123等于多少, ) finally: agent_memory.gpts_memory.clear(conv_idtest123) if __name__ __main__: asyncio.run(main())bind()是ConversableAgent提供的统一装配入口见 bind 方法它按类型分发绑定目标AgentContext→agent_contextLLMConfig→llm_configAgentMemory→memory注意GptsMemory不可直接绑定会抛出ValueError请改用AgentMemoryResource→resourceProfileConfig→profileAction类/实例或 Action 列表 → 追加进actionsPromptTemplate→bind_prompt直接覆盖系统提示词模板SkillBase/FileBasedSkill→ 绑定 Skill并把 Skill 的指令模板设为bind_prompt让技能指令成为 Agent 的系统提示词也就是说同一个bind()入口覆盖了Profile、Memory、Planning、Action、Resource五大模块的装配这也是框架数据驱动的体现Agent 行为由绑定的数据上下文、记忆、资源、模型策略决定而不是硬编码。7.3 更多协作示例摘要型单 Agentsingle_summary_agent_dialogue_example.pySQL/数据分析 Agentsql_agent_dialogue_example.pyAuto-Plan 多 Agent 协作auto_plan_agent_dialogue_example.py沙箱代码执行 Agentsandbox_code_agent_example.py八、延伸阅读与源码导航按官方文档的Whats next指引并结合当前仓库的实际文件位置Agent 框架详解docs/docs/agents/introduction.md自定义 Agentdocs/docs/agents/introduction/custom_agents.mdAgent 工具docs/docs/agents/introduction/tools.md任务分解Planningdocs/docs/agents/introduction/planning.md核心基类packages/dbgpt-core/src/dbgpt/agent/core/base_agent.py抽象接口与上下文packages/dbgpt-core/src/dbgpt/agent/core/agent.py记忆体系packages/dbgpt-core/src/dbgpt/agent/core/memory/hybrid.py预置 Agent 集合packages/dbgpt-core/src/dbgpt/agent/expand/小结DB-GPT 的 Agent 框架以ConversableAgent为中枢用 Profile/Memory/Planning/Action/Resource 五大模块把角色、记忆、规划、执行、资源解耦用send/receive/generate_reply消息循环串联单 Agent 与多 Agent 协作并用感知—短期—长期—混合的分级记忆向量库可插拔 重要性评分 任务进度快照支撑跨会话的长程任务。理解这套结构后你可以基于expand/下的现成模板用bind() build() initiate_chat()三步骤快速搭建自己的数据智能体。【免费下载链接】DB-GPTopen-source agentic AI data assistant for the next generation of AI Data products.项目地址: https://gitcode.com/GitHub_Trending/db/DB-GPT创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考