自研学术智能体系列(02):基于 OpenClaw 四层架构・学术场景精简版

3 阅读3分钟

本文为「自研轻量学术智能体」系列第 2 篇,基于 OpenClaw 经典四层架构做学术场景专属裁剪,只保留文献检索、记忆、调度、推送必需逻辑,完整模块接口与异常处理收录于掘金小册。

一、前言

上一篇我们完成了极简学术智能体的环境搭建与项目初始化,本篇将基于 OpenClaw 的 Skill / Orchestrator / Memory / Gateway 四层架构思想,针对文献自动化场景做轻量化重构,设计每个模块的职责与基础接口,让后续功能开发有统一规范,同时保持极低的复杂度与运行风险。

二、OpenClaw 四层架构・学术场景精简原则

完整 OpenClaw 面向全场景智能体,模块冗余度极高;我们只保留学术文献必需职责:

  1. Orchestrator(编排器) :统一调度任务流程,控制文献抓取、去重、推送顺序
  2. Skill(技能模块) :实现文献检索、解析、摘要等具体能力
  3. Memory(记忆模块) :存储研究方向、关键词、历史文献记录
  4. Gateway(网关模块) :负责结果通知、多渠道推送

无多余扩展、无系统调用、无权限风险,完全服务科研场景。

三、模块职责设计(公开版)

1. Orchestrator(编排入口)

  • 统一启动、停止智能体
  • 按顺序调度各个 Skill 执行
  • 简单异常捕获与日志输出

2. Skill(文献技能)

  • 对外提供统一调用接口
  • 负责与 arXiv、学术平台交互
  • 返回结构化文献数据

3. Memory(本地记忆)

  • 存储用户研究方向、关键词配置
  • 记录已处理文献,为后续去重做准备
  • 轻量化本地读写

4. Gateway(通知网关)

  • 提供消息发送基础接口
  • 后续扩展微信 / 飞书推送
  • 格式化输出文献信息

四、项目结构与基础代码(公开可运行版)

在之前的目录下,创建对应模块文件夹与基础文件:

AcademicAgent/
├── main.py                 # 编排器入口
├── skill/
│   └── paper_skill.py      # 文献检索技能
├── memory/
│   └── local_memory.py     # 本地记忆存储
├── gateway/
│   └── notify_gateway.py   # 通知网关
└── config/
    └── config.py           # 配置管理

1. 文献技能基础接口(skill/paper_skill.py)

# 文献检索技能(基础演示版,完整逻辑见小册)
class PaperSkill:
    def __init__(self):
        self.name = "paper_search_skill"

    def search_papers(self, keyword, max_results=5):
        # 核心检索逻辑在小册中完整实现
        print(f"正在检索关键词: {keyword}")
        return []

2. 本地记忆基础接口(memory/local_memory.py)

# 本地记忆模块(基础版)
class LocalMemory:
    def __init__(self):
        self.research_keywords = []

    def set_keywords(self, keywords):
        self.research_keywords = keywords
        print(f"已设置研究方向: {keywords}")

3. 通知网关基础接口(gateway/notify_gateway.py)

# 通知网关(基础版)
class NotifyGateway:
    def send_msg(self, msg):
        print(f"【智能体通知】{msg}")

4. 编排器入口(main.py 更新)

from skill.paper_skill import PaperSkill
from memory.local_memory import LocalMemory
from gateway.notify_gateway import NotifyGateway

# 参考OpenClaw架构:编排器统一调度
class AcademicAgent:
    def __init__(self):
        self.memory = LocalMemory()
        self.skill = PaperSkill()
        self.gateway = NotifyGateway()

    def run(self, keyword):
        self.memory.set_keywords([keyword])
        papers = self.skill.search_papers(keyword)
        self.gateway.send_msg(f"检索完成,共找到 {len(papers)} 篇文献")

if __name__ == "__main__":
    agent = AcademicAgent()
    agent.run("reinforcement learning traffic")

五、运行验证

python main.py

输出示例:

已设置研究方向: ['reinforcement learning traffic']
正在检索关键词: reinforcement learning traffic
【智能体通知】检索完成,共找到 0 篇文献

六、本篇公开范围

  • ✅ 公开:四层模块职责、目录结构、基础空壳代码、模块调用流程

  • 🔒 小册专属(不公开):

    • 完整模块间数据交互规范
    • 文献技能真实检索逻辑
    • 记忆模块结构化存储方案
    • 网关异常处理与重连机制
    • 学术场景专属模块优化策略

七、下期预告

第 3 周:本地记忆库 SQLite 完整实现,让智能体永久记住你的研究方向与关键词配置。

完整可运行的模块代码、学术优化方案、工程化规范后续将收录于掘金小册《从零自研轻量学术文献智能体》,持续更新全套源码与定制化案例。