知识模块
🤖 Agent 知识模块
四、OpenClaw 框架介绍

OpenClaw:本地部署 AI Agent 实践

OpenClaw(小龙虾) 是一个开源的本地部署 AI Agent 框架,支持多渠道接入、三层记忆系统、技能扩展。本文将以 OpenClaw 为例,展示 Agent 系统的实际架构与实现。


一、OpenClaw 简介

1.1 什么是 OpenClaw

OpenClaw(代号"小龙虾")是一个本地部署的 AI Agent 框架,核心特点:

特点说明
本地部署数据不出本地,隐私安全可控
多渠道接入支持 WhatsApp、Telegram、Discord、WebChat
国产大模型支持 DeepSeek V3、Qwen3 Coder 等国产模型
三层记忆永久记忆 + 长期记忆 + 短期记忆
技能系统可扩展的技能模块,支持自定义开发
多智能体协作支持群聊中的多 Agent 交互

1.2 项目信息

项目信息详情
项目路径F:\vsspace\showvoice\openclaw-iflow
配置文件openclaw.iflow.json
主服务gateway_v2/gateway_v2.py
守护进程xiaolongxia_daemon.py
服务端口18789
AI 名称云枢(寓意:云端枢纽)

1.3 架构概览

┌─────────────────────────────────────────────────────────────────┐
│                      OpenClaw 系统架构                           │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  ┌─────────────────────────────────────────────────────────┐   │
│  │                    外部渠道层                            │   │
│  │  ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐        │   │
│  │  │WhatsApp │ │Telegram │ │Discord  │ │ WebChat │        │   │
│  │  └────┬────┘ └────┬────┘ └────┬────┘ └────┬────┘        │   │
│  └───────┼──────────┼──────────┼──────────┼────────────────┘   │
│          │          │          │          │                    │
│          └──────────┴────┬─────┴──────────┘                    │
│                            ↓                                    │
│  ┌─────────────────────────────────────────────────────────┐   │
│  │                   Gateway 网关层                         │   │
│  │  ┌─────────────────────────────────────────────────┐    │   │
│  │  │            gateway_v2 (端口: 18789)              │    │   │
│  │  │  • 消息路由     • 权限验证     • 会话管理        │    │   │
│  │  └─────────────────────────────────────────────────┘    │   │
│  └─────────────────────────────┬───────────────────────────┘   │
│                                ↓                                │
│  ┌─────────────────────────────────────────────────────────┐   │
│  │                    Agent 核心层                          │   │
│  │  ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐    │   │
│  │  │ 规划器   │ │ 记忆系统 │ │ 技能系统 │ │ 执行器   │    │   │
│  │  │(Planning)│ │(Memory)  │ │(Skills)  │ │(Action)  │    │   │
│  │  └──────────┘ └──────────┘ └──────────┘ └──────────┘    │   │
│  └─────────────────────────────┬───────────────────────────┘   │
│                                ↓                                │
│  ┌─────────────────────────────────────────────────────────┐   │
│  │                    LLM 服务层                            │   │
│  │  ┌──────────┐ ┌──────────┐ ┌──────────┐                 │   │
│  │  │ DeepSeek │ │  Qwen3   │ │ 其他模型 │                 │   │
│  │  │   V3     │ │  Coder   │ │  (API)   │                 │   │
│  │  └──────────┘ └──────────┘ └──────────┘                 │   │
│  └─────────────────────────────────────────────────────────┘   │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

二、核心组件详解

2.1 Gateway 网关服务

Gateway 是 OpenClaw 的入口网关,负责消息路由和会话管理。

# gateway_v2/gateway_v2.py 核心逻辑
 
class Gateway:
    """
    OpenClaw 网关服务
    - 端口: 18789
    - 功能: 消息路由、权限验证、会话管理
    """
    
    def __init__(self):
        self.port = 18789
        self.sessions = SessionManager()
        self.skill_registry = SkillRegistry()
        
    async def handle_message(self, message: Message):
        """处理接收到的消息"""
        # 1. 解析消息来源
        channel = message.channel  # whatsapp/telegram/discord/webchat
        
        # 2. 获取或创建会话
        session = self.sessions.get_or_create(
            user_id=message.user_id,
            channel=channel
        )
        
        # 3. 权限验证
        if not self.auth.verify(message.user_id):
            return "抱歉,您没有权限使用此服务。"
        
        # 4. 消息过滤(避免循环)
        if message.content.startswith("[rust_im]"):
            return None  # 过滤 Rust IM 系统消息
        
        # 5. 调用 Agent 处理
        response = await self.agent.process(
            message=message.content,
            session=session
        )
        
        return response

2.2 三层记忆系统

OpenClaw 实现了完整的三层记忆架构:

┌─────────────────────────────────────────────────────────────┐
│                   OpenClaw 三层记忆系统                      │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  ┌─────────────────────────────────────────────────────┐   │
│  │              🧠 永久记忆 (Permanent)                  │   │
│  │  ┌─────────────────────────────────────────────┐    │   │
│  │  │ 文件: IDENTITY.md + SOUL.md                 │    │   │
│  │  │ 作用: 定义 AI 核心身份和性格                 │    │   │
│  │  │ 特点: 注入系统提示词,不随会话改变           │    │   │
│  │  └─────────────────────────────────────────────┘    │   │
│  └─────────────────────────────────────────────────────┘   │
│                            │                                │
│                            ↓                                │
│  ┌─────────────────────────────────────────────────────┐   │
│  │              📚 长期记忆 (Long-term)                  │   │
│  │  ┌─────────────────────────────────────────────┐    │   │
│  │  │ 文件: MEMORY.md + 向量数据库                 │    │   │
│  │  │ 作用: 存储重要事件、学习成果、用户偏好        │    │   │
│  │  │ 特点: 跨会话持久化,通过关键词/向量检索       │    │   │
│  │  │ 写入时机: 重大决策、重要信息、学习成果        │    │   │
│  │  └─────────────────────────────────────────────┘    │   │
│  └─────────────────────────────────────────────────────┘   │
│                            │                                │
│                            ↓                                │
│  ┌─────────────────────────────────────────────────────┐   │
│  │              💬 短期记忆 (Short-term)                 │   │
│  │  ┌─────────────────────────────────────────────┐    │   │
│  │  │ 文件: memory/YYYY-MM-DD.md + SQLite 缓存    │    │   │
│  │  │ 作用: 当前会话上下文、临时信息               │    │   │
│  │  │ 特点: 近5轮核心会话,自动管理                │    │   │
│  │  └─────────────────────────────────────────────┘    │   │
│  └─────────────────────────────────────────────────────┘   │
│                                                             │
└─────────────────────────────────────────────────────────────┘

记忆系统实现

# workspace/AGENTS.md 定义的内存管理规则
 
class MemorySystem:
    """
    OpenClaw 三层记忆系统实现
    """
    
    def __init__(self, workspace_path: str):
        # 永久记忆:身份定义
        self.identity = self.load_file(f"{workspace_path}/IDENTITY.md")
        self.soul = self.load_file(f"{workspace_path}/SOUL.md")
        
        # 长期记忆:重要信息存储
        self.long_term_file = f"{workspace_path}/MEMORY.md"
        self.vector_db = VectorDatabase(f"{workspace_path}/memory.db")
        
        # 短期记忆:会话缓存
        self.today_memory = f"{workspace_path}/memory/{date.today()}.md"
        self.session_cache = SQLiteCache()
    
    def remember(self, info: str, importance: str = "short"):
        """
        记忆写入规则:
        - "记住这个" → 更新 memory/YYYY-MM-DD.md
        - 学到教训 → 更新 AGENTS.md, TOOLS.md
        - 犯错 → 记录下来,让未来的你不重蹈覆辙
        """
        if importance == "permanent":
            # 不允许程序修改永久记忆
            pass
        elif importance == "long":
            # 重要信息存入长期记忆
            self.append_to_file(self.long_term_file, info)
            self.vector_db.store(info)
        else:
            # 临时信息存入短期记忆
            self.append_to_file(self.today_memory, info)
            self.session_cache.add(info)
    
    def recall(self, query: str) -> str:
        """
        记忆检索优先级:
        1. 短期记忆(SQLite 缓存)→ 当前会话上下文
        2. 长期记忆(MEMORY.md + 向量检索)→ 重要历史信息
        3. 永久记忆(IDENTITY.md)→ 核心身份定义
        """
        # 优先从短期记忆获取
        if self.session_cache.has(query):
            return self.session_cache.get(query)
        
        # 向量检索长期记忆
        results = self.vector_db.search(query, top_k=5)
        if results:
            return results
        
        # 返回永久记忆(身份定义)
        return self.identity

2.3 技能系统

OpenClaw 采用模块化技能系统,每个技能独立定义和实现:

┌─────────────────────────────────────────────────────────────┐
│                    OpenClaw 技能系统                         │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  workspace/skills/                                          │
│  ├── playwright-mcp/          # 浏览器自动化技能            │
│  │   └── SKILL.md             # 技能定义文件               │
│  ├── doubao-chat/             # 豆包对话技能               │
│  │   └── SKILL.md                                         │
│  ├── screenshot/              # 截图技能                   │
│  │   └── SKILL.md                                         │
│  └── ...                                                   │
│                                                             │
│  技能定义格式 (SKILL.md):                                    │
│  ┌─────────────────────────────────────────────────────┐   │
│  │ # 技能名称                                           │   │
│  │ ## 功能描述                                          │   │
│  │ ## 使用方法                                          │   │
│  │ ## 参数说明                                          │   │
│  │ ## 示例                                              │   │
│  └─────────────────────────────────────────────────────┘   │
│                                                             │
└─────────────────────────────────────────────────────────────┘

技能注册与调用

class SkillRegistry:
    """
    技能注册中心
    """
    
    def __init__(self):
        self.skills = {}
        self.load_skills()
    
    def load_skills(self):
        """从 workspace/skills/ 加载所有技能"""
        skills_dir = "workspace/skills"
        for skill_path in glob.glob(f"{skills_dir}/*/SKILL.md"):
            skill = self.parse_skill(skill_path)
            self.skills[skill.name] = skill
    
    def select_skill(self, user_message: str) -> Optional[Skill]:
        """根据用户消息选择合适的技能"""
        for skill in self.skills.values():
            if skill.matches(user_message):
                return skill
        return None
    
    def execute(self, skill_name: str, params: dict) -> str:
        """执行技能"""
        skill = self.skills.get(skill_name)
        if skill:
            return skill.execute(**params)
        return "技能不存在"

2.4 多渠道适配

OpenClaw 支持多种即时通讯渠道:

渠道适配方式特点
WebChat内置 Web 界面实时聊天,支持 Markdown
Rust IMWebSocket 连接Flutter App 后端服务
DiscordBot API服务器群聊
TelegramBot API消息推送
# 多渠道消息格式适配
class ChannelAdapter:
    def adapt_message(self, raw_message: dict, channel: str) -> Message:
        """适配不同渠道的消息格式"""
        
        if channel == "webchat":
            return Message(
                user_id=raw_message["userId"],
                content=raw_message["content"],
                channel="webchat"
            )
        
        elif channel == "rust_im":
            # Rust IM 服务消息
            return Message(
                user_id=raw_message["sender_id"],
                content=raw_message["text"],
                channel="rust_im",
                group_id=raw_message.get("group_id")
            )
        
        elif channel == "discord":
            return Message(
                user_id=str(raw_message["author"]["id"]),
                content=raw_message["content"],
                channel="discord",
                guild_id=raw_message.get("guild_id")
            )
        
        # ... 其他渠道

三、配置与部署

3.1 配置文件结构

// openclaw.iflow.json
{
  "name": "OpenClaw",
  "version": "2.0.0",
  "gateway": {
    "port": 18789,
    "host": "0.0.0.0"
  },
  "llm": {
    "provider": "deepseek",
    "model": "deepseek-chat",
    "api_key": "${DEEPSEEK_API_KEY}"
  },
  "memory": {
    "vector_db": "./data/memory.db",
    "max_context_tokens": 8000
  },
  "skills": {
    "enabled": ["playwright-mcp", "doubao-chat", "screenshot"]
  }
}

3.2 启动服务

# 启动主服务
cd F:\vsspace\showvoice\openclaw-iflow
python gateway_v2/run.py
 
# 或使用守护进程
python xiaolongxia_daemon.py

3.3 环境变量

# .env 文件
DEEPSEEK_API_KEY=your_deepseek_key
QWEN_API_KEY=your_qwen_key
OPENAI_API_KEY=your_openai_key  # 可选

四、核心功能实现

4.1 消息处理流程

┌─────────────────────────────────────────────────────────────┐
│                   OpenClaw 消息处理流程                      │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   用户消息 ──→ ┌─────────────────────────────────────┐      │
│                │  1. Gateway 接收消息                  │      │
│                │     • 解析来源渠道                    │      │
│                │     • 权限验证                        │      │
│                └───────────────┬─────────────────────┘      │
│                                ↓                            │
│                ┌─────────────────────────────────────┐      │
│                │  2. 记忆系统加载上下文               │      │
│                │     • 加载短期记忆(当前会话)        │      │
│                │     • 检索长期记忆(相关历史)        │      │
│                │     • 注入永久记忆(身份定义)        │      │
│                └───────────────┬─────────────────────┘      │
│                                ↓                            │
│                ┌─────────────────────────────────────┐      │
│                │  3. 技能匹配与选择                   │      │
│                │     • 分析用户意图                    │      │
│                │     • 匹配合适技能                    │      │
│                └───────────────┬─────────────────────┘      │
│                                ↓                            │
│                ┌─────────────────────────────────────┐      │
│                │  4. LLM 推理生成响应                 │      │
│                │     • 构造提示词                      │      │
│                │     • 调用大模型 API                  │      │
│                └───────────────┬─────────────────────┘      │
│                                ↓                            │
│                ┌─────────────────────────────────────┐      │
│                │  5. 执行动作(如需要)               │      │
│                │     • 调用技能执行                    │      │
│                │     • 获取执行结果                    │      │
│                └───────────────┬─────────────────────┘      │
│                                ↓                            │
│                ┌─────────────────────────────────────┐      │
│                │  6. 更新记忆并返回响应               │      │
│                │     • 存储重要信息到记忆             │      │
│                │     • 返回响应给用户                  │      │
│                └─────────────────────────────────────┘      │
│                                                             │
└─────────────────────────────────────────────────────────────┘

4.2 心跳机制

OpenClaw 实现了主动心跳机制,支持定时任务和主动推送:

# 心跳轮询处理
class HeartbeatHandler:
    """
    心跳机制:定时检查并主动行动
    """
    
    def on_heartbeat(self):
        """收到心跳轮询时的处理逻辑"""
        
        # 检查事项(轮换执行,每天 2-4 次)
        checks = [
            self.check_emails,      # 紧急邮件?
            self.check_calendar,    # 近期事件?
            self.check_mentions,    # 社交通知?
            self.check_weather,     # 天气提醒?
        ]
        
        # 随机选择一项检查
        check = random.choice(checks)
        result = check()
        
        if result.needs_attention:
            # 主动联系用户
            return result.message
        else:
            # 保持安静
            return "HEARTBEAT_OK"
    
    def should_be_proactive(self) -> bool:
        """判断是否应该主动联系"""
        # 深夜保持安静
        if self.is_night_time():
            return False
        
        # 主人很忙时不打扰
        if self.user_is_busy():
            return False
        
        # 有重要信息需要通知
        return self.has_important_info()

4.3 群聊协作规则

OpenClaw 支持群聊场景,实现智能的参与决策:

class GroupChatHandler:
    """
    群聊处理规则
    """
    
    def should_respond(self, message: GroupMessage) -> bool:
        """
        判断是否应该回复群聊消息
        
        响应时机:
        - 直接被提及或被问问题
        - 可以提供真正的价值
        - 纠正重要的错误信息
        - 被要求总结时
        """
        
        # 被提及
        if self.is_mentioned(message):
            return True
        
        # 能提供价值
        if self.can_contribute(message):
            return True
        
        # 需要纠正错误
        if self.needs_correction(message):
            return True
        
        return False
    
    def should_stay_quiet(self, message: GroupMessage) -> bool:
        """
        保持沉默的时机:
        - 只是人类之间的闲聊
        - 已经有人回答了问题
        - 回复只是"是的"或"不错"
        - 对话进行得很好
        """
        
        if self.is_small_talk(message):
            return True
        
        if self.already_answered(message):
            return True
        
        return False

五、与大模型集成

5.1 支持的模型

模型提供商特点适用场景
DeepSeek V3深度求索推理能力强复杂任务规划
Qwen3 Coder阿里云代码能力强编程任务
豆包字节跳动多模态支持创意任务

5.2 提示词构造

class PromptBuilder:
    """
    OpenClaw 提示词构造器
    """
    
    def build_system_prompt(self, session: Session) -> str:
        """构造系统提示词"""
        
        # 1. 注入永久记忆(身份定义)
        identity = self.memory.get_permanent()
        
        # 2. 加载长期记忆(相关历史)
        history = self.memory.recall(session.user_id)
        
        # 3. 获取当前会话上下文
        context = self.memory.get_short_term(session.session_id)
        
        return f"""
{identity}
 
## 历史上下文
{history}
 
## 当前会话
{context}
 
## 可用技能
{self.list_skills()}
"""
    
    def build_user_prompt(self, message: str) -> str:
        """构造用户提示词"""
        return f"""
用户消息: {message}
 
请根据用户意图,选择合适的行动:
1. 直接回答(知识问题)
2. 调用技能(需要执行操作)
3. 请求更多信息(意图不明确)
"""

六、安全与权限

6.1 权限验证

class AuthManager:
    """
    权限管理
    """
    
    def verify(self, user_id: str) -> bool:
        """验证用户权限"""
        
        # 检查用户是否在白名单
        if user_id in self.whitelist:
            return True
        
        # 检查用户是否被封禁
        if user_id in self.blacklist:
            return False
        
        # 默认允许(可配置)
        return self.default_allow

6.2 敏感操作确认

class SafeExecutor:
    """
    安全执行器
    """
    
    SENSITIVE_ACTIONS = [
        "send_email",
        "post_public",
        "delete_file",
        "execute_shell"
    ]
    
    def execute(self, action: str, params: dict) -> str:
        """安全执行操作"""
        
        # 敏感操作需要用户确认
        if action in self.SENSITIVE_ACTIONS:
            confirmation = self.ask_user_confirmation(action, params)
            if not confirmation:
                return "操作已取消"
        
        # 在沙箱环境中执行
        return self.sandbox.execute(action, params)

七、实战案例

7.1 案例:自动写博客

用户: 帮我写一篇关于 Java 并发的博客文章

OpenClaw:
  Thought: 需要收集并发知识点,然后组织成博客格式
  Action: skill_knowledge_search("Java 并发编程")
  Observation: 找到 synchronized、线程池、JMM 等知识点
  
  Action: generate_blog(topics=["synchronized", "线程池", "JMM"])
  Observation: 博客文章已生成
  
  Answer: 已为您生成 Java 并发编程博客文章,主要内容包括:
           1. synchronized 关键字原理
           2. 线程池核心参数与配置
           3. Java 内存模型(JMM)详解
           文章已保存到 workspace/output/java-concurrency.md

7.2 案例:跨会话记忆

第一天对话:
用户: 我叫张三,是一名 Java 开发工程师
OpenClaw: 你好张三!很高兴认识一位 Java 工程师。

第二天对话:
用户: 我最近在学习什么?
OpenClaw: 根据记录,您是一名 Java 工程师,最近在学习 AI Agent 相关内容。
         需要我推荐一些 Agent 学习资料吗?

(跨会话记忆生效,Agent 记住了用户的身份和学习方向)

八、常见面试题

Q1: OpenClaw 的三层记忆系统是如何工作的?

A:

记忆层级存储方式作用检索优先级
永久记忆IDENTITY.md + SOUL.md定义 AI 核心身份3(最低)
长期记忆MEMORY.md + 向量数据库存储重要历史信息2
短期记忆memory/YYYY-MM-DD.md + SQLite当前会话上下文1(最高)

工作流程

  1. 用户发送消息
  2. 先从短期记忆获取当前会话上下文
  3. 再从长期记忆检索相关历史信息
  4. 最后注入永久记忆(身份定义)
  5. 构造完整提示词发送给 LLM

Q2: OpenClaw 如何支持多渠道接入?

A:

通过 ChannelAdapter 适配层实现多渠道统一接入:

# 不同渠道消息统一适配为标准 Message 格式
class ChannelAdapter:
    def adapt_message(self, raw_message, channel):
        # WhatsApp / Telegram / Discord / WebChat
        # 统一转换为 Message(user_id, content, channel)
        ...

Q3: OpenClaw 的技能系统如何工作?

A:

用户消息 → 技能匹配 → 技能执行 → 返回结果

1. 技能定义: workspace/skills/*/SKILL.md
2. 技能匹配: 根据消息内容匹配技能关键词
3. 技能执行: 在沙箱环境中安全执行
4. 结果返回: 将执行结果返回给用户

Q4: 如何实现 Agent 的主动行为(心跳机制)?

A:

# 心跳轮询机制
def on_heartbeat():
    # 检查是否有需要主动通知的事项
    # 有 → 主动联系用户
    # 无 → 返回 HEARTBEAT_OK 保持安静
    
    if has_important_info():
        return proactive_message
    else:
        return "HEARTBEAT_OK"

Q5: OpenClaw 与 LangChain Agent 有什么区别?

A:

对比项OpenClawLangChain Agent
部署方式本地部署云端/本地
模型支持国产模型优先OpenAI 优先
记忆系统三层架构向量存储
多渠道原生支持需要集成
适用场景私有化部署快速开发

Q6: 如何保证 OpenClaw 的执行安全?

A:

1. 权限验证:检查用户是否在白名单
2. 敏感操作确认:发送邮件等操作需要用户确认
3. 沙箱执行:代码执行在隔离环境中
4. 操作日志:所有执行操作记录日志

Q7: OpenClaw 如何处理群聊消息?

A:

群聊参与规则:

  • 回复时机:被提及、能提供价值、需要纠正错误
  • 沉默时机:闲聊、已有人回答、回复无价值

核心原则:质量 > 数量,模拟真实人类群聊行为。

Q8: 如何扩展 OpenClaw 的技能?

A:

1. 创建技能目录: workspace/skills/my-skill/
2. 编写 SKILL.md 定义文件
3. 实现技能逻辑(Python 脚本)
4. 重启服务自动加载

九、总结

特性OpenClaw 实现面试关键词
架构Gateway + Agent + LLM多渠道、网关模式
记忆三层记忆系统永久/长期/短期
技能模块化技能系统SKILL.md、技能注册
模型国产大模型支持DeepSeek、Qwen
安全权限验证 + 沙箱执行白名单、敏感操作确认
主动心跳机制定时检查、主动推送

OpenClaw 是学习 Agent 技术的优秀实践项目,完整展示了:

  • Agent 四大组件的实际实现
  • 多渠道消息适配
  • 三层记忆架构
  • 技能扩展系统
  • 安全执行机制

最后更新:2026年3月18日