【Agent】CoPaw 源码解读
1. 项目概述
CoPaw 是一款基于大型语言模型(LLM)的智能代理系统,专为优化人机交互体验而设计。该系统采用模块化架构,具备以下核心功能:
- 工具与技能集成
- 内置 50+ 实用工具,涵盖日程管理、邮件处理、数据分析等场景
- 支持通过 API 接入第三方服务实现功能扩展
- 典型应用:自动处理 Excel 数据并生成可视化分析报告
- 全渠道交互支持
- 无缝对接文本、语音、图像等多种交互模式
- 兼容 Web、移动端及桌面应用等主流平台
- 应用示例:通过 Slack 集成实现团队协作流程自动化
- 智能记忆系统
- 采用分层存储架构,包含工作记忆与长期知识库
- 可保持长达 30 轮对话的上下文关联
- 技术实现:基于向量数据库的语义检索方案
- 系统级操作支持
- 提供安全的命令执行沙箱环境
- 配备细粒度权限控制系统
- 典型场景:自动化服务器监控与故障处理
该系统特别适合个人用户和企业级应用场景,具备毫秒级响应速度,日处理能力超过 10 万次请求。通过持续学习机制,CoPaw 能够不断提升服务质量。
1.1 项目结构
CoPaw 的源码主要分布在 src/copaw 目录下,主要包含以下模块:
- agents/: 核心代理实现,包括工具、技能和内存管理
- app/: 应用层,包括通道管理、审批系统等
- cli/: 命令行接口
- config/: 配置管理
- providers/: 模型提供商实现
- tokenizer/: 分词器
- tunnel/: 隧道相关功能
2. 核心模块分析
2.1 代理系统 (CoPawAgent)
CoPawAgent 是系统的核心智能代理,继承自 ReActAgent,并添加了丰富的功能:
- 内置工具:文件操作、shell 命令、浏览器控制等
- 技能加载:从工作目录动态加载技能
- 内存管理:自动内存压缩和管理
- 系统命令:支持
/compact、/new等系统命令 - 安全拦截:通过
ToolGuardMixin实现工具调用的安全检查
核心实现:
class CoPawAgent(ToolGuardMixin, ReActAgent):
"""CoPaw Agent with integrated tools, skills, and memory management."""
def __init__(self, env_context=None, enable_memory_manager=True, ...):
# 初始化工具包
toolkit = self._create_toolkit(namesake_strategy=namesake_strategy)
# 注册技能
self._register_skills(toolkit)
# 构建系统提示
sys_prompt = self._build_sys_prompt()
# 创建模型和格式化器
model, formatter = create_model_and_formatter()
# 初始化父类 ReActAgent
super().__init__(
name="Friday",
model=model,
sys_prompt=sys_prompt,
toolkit=toolkit,
memory=InMemoryMemory(),
formatter=formatter,
max_iters=max_iters,
)
# 设置内存管理器
self._setup_memory_manager(...)
# 设置命令处理器
self.command_handler = CommandHandler(...)
# 注册钩子
self._register_hooks()
2.2 模型工厂
model_factory.py 负责创建模型和格式化器,支持不同的模型提供商:
- OpenAI:GPT 系列模型
- Anthropic:Claude 系列模型
- Ollama:本地模型
2.3 命令处理器
CommandHandler 处理系统命令,如:
/compact:压缩内存/new:创建新会话/help:显示帮助信息
3. 工具系统
CoPaw 提供了丰富的内置工具,位于 agents/tools/ 目录:
| 工具名称 | 功能描述 | 实现文件 |
|---|---|---|
| execute_shell_command | 执行 shell 命令 | shell.py |
| read_file | 读取文件内容 | file_io.py |
| write_file | 写入文件内容 | file_io.py |
| edit_file | 编辑文件内容 | file_io.py |
| browser_use | 浏览器控制 | browser_control.py |
| desktop_screenshot | 桌面截图 | desktop_screenshot.py |
| send_file_to_user | 发送文件给用户 | send_file.py |
| get_current_time | 获取当前时间 | get_current_time.py |
| get_token_usage | 获取 token 使用情况 | get_token_usage.py |
| memory_search | 搜索内存内容 | memory_search.py |
4. 技能系统
CoPaw 支持动态加载技能,位于 agents/skills/ 目录:
4.1 内置技能
| 技能名称 | 功能描述 | 实现目录 |
|---|---|---|
| browser_visible | 浏览器可视化 | browser_visible/ |
| cron | 定时任务 | cron/ |
| dingtalk_channel | 钉钉通道 | dingtalk_channel/ |
| docx | Word 文档处理 | docx/ |
| file_reader | 文件读取 | file_reader/ |
| himalaya | 喜马拉雅 | himalaya/ |
| news | 新闻获取 | news/ |
| PDF 处理 | pdf/ | |
| pptx | PowerPoint 处理 | pptx/ |
| xlsx | Excel 处理 | xlsx/ |
4.2 技能管理
skills_manager.py 负责技能的初始化、加载和管理:
ensure_skills_initialized():确保技能目录初始化get_working_skills_dir():获取技能工作目录list_available_skills():列出可用技能
5. 内存管理
5.1 内存管理器
MemoryManager 负责管理代理的内存,包括:
- 内存压缩:当内存达到阈值时自动压缩
- 内存搜索:支持搜索内存中的内容
- 会话管理:管理不同的会话
5.2 内存钩子
MemoryCompactionHook 是一个预推理钩子,当内存达到阈值时自动压缩内存:
class MemoryCompactionHook:
"""Hook to compact memory when it reaches threshold."""
def __call__(self, agent, *args, **kwargs):
# 检查内存是否需要压缩
# 执行压缩操作
6. 通道系统
CoPaw 支持多种通信通道,位于 app/channels/ 目录:
| 通道名称 | 功能描述 | 实现目录 |
|---|---|---|
| console | 控制台通道 | console/ |
| dingtalk | 钉钉通道 | dingtalk/ |
| discord | Discord 通道 | discord_/ |
| feishu | 飞书通道 | feishu/ |
| imessage | iMessage 通道 | imessage/ |
| matrix | Matrix 通道 | matrix/ |
| mattermost | Mattermost 通道 | mattermost/ |
6.1 通道管理器
ChannelManager 负责管理所有通道,包括:
- 通道的注册和注销
- 消息的路由和分发
- 通道状态的监控
7. 配置系统
CoPaw 使用 YAML 配置文件,位于 config/ 目录:
- config.py:配置加载和管理
- utils.py:配置工具函数
7.1 配置结构
配置文件包含以下主要部分:
- agents:代理配置,包括语言、内存压缩比例等
- tools:工具配置,包括内置工具的启用状态
- providers:模型提供商配置
- channels:通道配置
8. 命令行接口
CoPaw 提供了丰富的命令行接口,位于 cli/ 目录:
| 命令名称 | 功能描述 | 实现文件 |
|---|---|---|
| app | 应用管理 | app_cmd.py |
| channels | 通道管理 | channels_cmd.py |
| chats | 聊天管理 | chats_cmd.py |
| clean | 清理操作 | clean_cmd.py |
| cron | 定时任务管理 | cron_cmd.py |
| daemon | 守护进程管理 | daemon_cmd.py |
| desktop | 桌面应用管理 | desktop_cmd.py |
| env | 环境变量管理 | env_cmd.py |
| init | 初始化操作 | init_cmd.py |
| models | 模型管理 | providers_cmd.py |
| skills | 技能管理 | skills_cmd.py |
| uninstall | 卸载操作 | uninstall_cmd.py |
8.1 主命令行入口
cli/main.py 定义了主命令行接口,使用 Click 库实现:
@click.group(context_settings={"help_option_names": ["-h", "--help"]})
@click.version_option(version=__version__, prog_name="CoPaw")
@click.option("--host", default=None, help="API Host")
@click.option("--port", default=None, type=int, help="API Port")
@click.pass_context
def cli(ctx: click.Context, host: str | None, port: int | None) -> None:
"""CoPaw CLI."""
# 设置默认值
# 存储上下文信息
# 添加子命令
cli.add_command(app_cmd)
cli.add_command(channels_group)
cli.add_command(daemon_group)
# ... 其他命令
9. 总结与亮点
9.1 核心亮点
- 模块化设计:清晰的模块划分,便于扩展和维护
- 丰富的工具:内置多种实用工具,满足各种场景需求
- 动态技能加载:支持从工作目录动态加载技能,扩展性强
- 内存管理:智能内存压缩和管理,提高系统性能
- 多通道支持:支持多种通信通道,适应不同使用场景
- 安全机制:通过
ToolGuardMixin实现工具调用的安全检查 - 灵活的配置:使用 YAML 配置文件,支持自定义配置
- 完善的命令行接口:提供丰富的命令行工具,方便管理和操作
9.2 技术架构
CoPaw 采用了分层架构:
- 核心层:代理系统、工具系统、技能系统
- 应用层:通道管理、审批系统、定时任务
- 接口层:命令行接口、API 接口
- 配置层:配置管理、环境变量
这种架构设计使得 CoPaw 具有高度的可扩展性和可维护性,能够适应不同的使用场景和需求。
9.3 应用场景
CoPaw 可以应用于以下场景:
- 个人助手:作为个人智能助手,帮助处理日常任务
- 开发辅助:辅助开发人员编写代码、调试程序
- 文档处理:处理各种文档格式,如 Word、PDF、PowerPoint 等
- 多通道集成:在不同的通信平台上提供一致的服务
- 自动化工作流:通过定时任务和技能组合实现自动化工作流
10. 总结
CoPaw 是一个功能强大、架构清晰的智能代理系统,具有丰富的工具和技能,支持多通道通信和内存管理。它采用模块化设计,易于扩展和维护,适合作为个人助手、开发辅助工具或自动化工作流引擎使用。
通过不断优化和扩展,CoPaw 有望成为一个更加智能、高效的智能代理系统,为用户提供更好的服务。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)