乐于分享
好东西不私藏

QwenPaw源码解析系列:开篇 – 一文读懂QwenPaw的整体架构设计

QwenPaw源码解析系列:开篇 – 一文读懂QwenPaw的整体架构设计

前言

QwenPaw(原名CoPaw)是AgentScope团队打造的个人AI助手项目,GitHub星标已超过1.5万。这个项目不仅功能丰富,更在代码架构上有着值得深入学习的设计思路。今天开始,我将为大家带来一系列QwenPaw源码解析文章,从架构设计到核心模块,带你深入理解这个优秀的开源项目。

项目概述

QwenPaw定位为个人AI助手,其核心理念是”懂你所需,伴你左右”。从功能特性来看,它支持:

多渠道接入:钉钉、飞书、微信、Discord、Telegram等
Skills扩展:内置定时任务、PDF/Office处理等,支持自定义技能
多智能体协作:创建多个独立智能体,实现协作完成任务
多层安全防护:工具守卫、文件访问控制、技能安全扫描
记忆进化:智能体从交互中学习,主动服务

技术栈与源码结构

技术栈

从仓库统计来看,QwenPaw的技术栈非常清晰:

语言 占比
Python 75.6%
TypeScript 18.7%
Less/CSS 4.2%

Python主导的后端配合TypeScript的前端控制台,构成了完整的技术生态。

源码目录结构

核心源码位于 src/qwenpaw/ 目录下,其结构如下:

src/qwenpaw/
├── agents/ # 智能体核心模块
│ ├── __init__.py # 懒加载入口
│ ├── react_agent.py # QwenPawAgent主类
│ ├── model_factory.py # 模型工厂
│ ├── command_handler.py # 命令处理器
│ ├── acp/ # 多智能体通信协议
│ ├── context/ # 上下文管理
│ ├── memory/ # 记忆系统
│ ├── mission/ # 任务系统
│ ├── skills/ # 技能扩展
│ └── hooks/ # 生命周期钩子
├── app/ # 应用层
│ ├── console/ # 前端控制台
│ ├── mcp/ # MCP协议客户端
│ └── server.py # 服务端
├── config/ # 配置管理
├── constant.py # 常量定义
├── envs.py # 环境变量
└── utils/ # 工具函数

核心架构设计

1. 智能体架构:继承与Mixin模式

QwenPawAgent继承自AgentScope的ReActAgent,并通过Mixin模式扩展功能:

class QwenPawAgent(ToolGuardMixin, ReActAgent):

这种设计带来了几个关键优势:

a) 分层关注点分离

ReActAgent 提供基础的推理-行动循环
ToolGuardMixin 拦截工具调用,实现安全防护
QwenPawAgent 在此基础上整合业务逻辑

b) 懒加载优化

# agents/__init__.py
def __getattr__(name: str):
if name == "QwenPawAgent":
from .react_agent import QwenPawAgent
return QwenPawAgent

通过懒加载,避免在导入模块时加载重型依赖(如agentscope、tools),提升CLI工具的启动速度。

2. 工厂模式:ModelFactory

模型创建使用工厂模式,统一管理不同模型提供商的配置:

# model_factory.py
def create_model_and_formatter(agent_id: str):
# 根据配置创建模型实例
# 返回 (model, formatter) 元组

这种设计支持灵活的模型切换,无需修改核心代码即可更换模型提供商。

3. 插件化架构:Registry模式

记忆管理、上下文管理都采用Registry模式:

# memory/base_memory_manager.py
memory_registry: Registry[BaseMemoryManager] = Registry()

def get_memory_manager_backend(backend: str) -> type[BaseMemoryManager]:
return memory_registry.get(backend)

插件化设计让系统可以轻松扩展新的记忆管理器或上下文管理器。

4. 生命周期钩子系统

QwenPaw实现了完整的生命周期钩子机制:

# 注册钩子示例
self.register_instance_hook(
hook_type="pre_reasoning",
hook_name="bootstrap_hook",
hook=bootstrap_hook.__call__,
)

支持的钩子类型:

pre_reasoning: 推理前
post_acting: 行动后
pre_reply: 回复前
post_reply: 回复后

核心组件解析

工具系统

QwenPaw内置了丰富的工具集:

工具类型 代表工具
文件操作 read_file, write_file, edit_file
搜索 grep_search, glob_search
Shell命令 execute_shell_command
浏览器 browser_use, desktop_screenshot
多媒体 view_image, view_video
智能体协作 list_agents, chat_with_agent

工具注册采用策略模式处理同名冲突:

NamesakeStrategy = Literal["override", "skip", "raise", "rename"]

记忆系统

记忆管理采用分层架构:

BaseMemoryManager (抽象基类)
├── RemeLightMemoryManager (轻量级实现)
└── AgentMdManager (Markdown文件管理)

关键特性:

异步后台处理:summarize任务在后台异步执行
任务队列:FIFO顺序保证任务执行的有序性
工具暴露:记忆管理器可以注册自己的工具函数

上下文管理

上下文管理器负责:

1.
上下文压实:当token接近限制时,压缩历史消息
2.
工具结果修剪:裁剪过长的工具输出
3.
健康检查:在每个推理步骤前检查上下文状态

Skills系统

Skills是QwenPaw扩展能力的核心。每个Skill是一个独立目录,包含:

skill_name/
├── config.json # 技能配置
├── prompts.py # 提示词
└── scripts/ # 脚本文件

技能管理器支持:

渠道特定配置:不同渠道可以启用不同的技能
动态加载:从工作目录自动加载用户自定义技能
安全扫描:安装技能前进行安全检查

安全机制

QwenPaw实现了多层安全防护:

1. ToolGuardMixin

在工具执行前进行拦截:

async def _acting(self, tool_call) -> dict | None:
# 检查是否为危险命令
# 拦截并返回安全提示

2. 命令白名单

通过配置文件定义允许执行的命令模式:

# constant.py
SAFE_SHELL_PATTERNS = [...]

3. 文件访问控制

限制智能体访问敏感路径:

SENSITIVE_PATHS = ['~/.ssh', '~/.aws', ...]

多智能体协作:ACP协议

ACP(Agent Communication Protocol)是QwenPaw实现多智能体通信的协议:

# acp/server.py
class QwenPawACPAgent:
async def run(self):
# 启动ACP服务

支持功能:

智能体间直接通信
任务委托与结果回传
权限控制与认证

下一篇文章预告

在下一篇文章中,我们将深入剖析QwenPawAgent的核心实现,包括:

ReAct循环的完整执行流程
工具调用的拦截与处理
多模态支持的实现机制
命令系统的设计与实现

敬请期待!


如果你觉得这个系列对你有帮助,欢迎点赞在看,也欢迎转发给有需要的朋友。我们下期见!