OpenClaw 技术原理与最佳实践

简介

OpenClaw 是一个开源的 AI 自动化框架,旨在帮助用户搭建个人 AI 助手,实现消息推送、定时任务、资讯收集、文档管理等功能。本文将从技术原理、架构设计、核心组件、最佳实践等多个维度,深入剖析 OpenClaw 的内部机制,帮助你更好地理解和使用这个强大的工具。


什么是 OpenClaw?

核心定位

OpenClaw 是一个AI 自动化框架,它:

  • 🤖 集成大语言模型(LLM)能力
  • ⏰ 支持定时任务调度
  • 🔌 提供丰富的插件系统
  • 📱 对接多种消息平台(飞书、微信、Telegram 等)
  • 🛠️ 支持自定义技能开发

解决的问题

痛点:

  1. 大模型能力强大,但难以集成到日常工作流
  2. 重复性任务繁多,希望自动化处理
  3. 信息过载,需要智能筛选和推送
  4. 个人知识库分散,缺乏统一管理

OpenClaw 的方案:

  • ✅ 统一的 AI 助手接口
  • ✅ 灵活的定时任务系统
  • ✅ 智能资讯收集和推送
  • ✅ 可扩展的技能生态

技术架构

整体架构

┌─────────────────────────────────────────────────────┐
│                    用户交互层                        │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐          │
│  │  飞书    │  │  微信    │  │ Telegram │  ...     │
│  └────┬─────┘  └────┬─────┘  └────┬─────┘          │
└───────┼─────────────┼─────────────┼─────────────────┘
        │             │             │
┌───────▼─────────────▼─────────────▼─────────────────┐
│                   Gateway 层                          │
│  ┌──────────────────────────────────────────────┐   │
│  │  消息路由  │  会话管理  │  权限控制  │ 日志   │   │
│  └──────────────────────────────────────────────┘   │
└────────────────────────┬────────────────────────────┘
                         │
┌────────────────────────▼────────────────────────────┐
│                   Agent 层                            │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐          │
│  │  Main    │  │  Sub     │  │  Cron    │          │
│  │  Agent   │  │  Agent   │  │  Agent   │          │
│  └────┬─────┘  └────┬─────┘  └────┬─────┘          │
└───────┼─────────────┼─────────────┼─────────────────┘
        │             │             │
┌───────▼─────────────▼─────────────▼─────────────────┐
│                   技能层                              │
│  ┌──────────────────────────────────────────────┐   │
│  │  Skills (搜索、写作、资讯、周报、博客...)    │   │
│  └──────────────────────────────────────────────┘   │
└────────────────────────┬────────────────────────────┘
                         │
┌────────────────────────▼────────────────────────────┐
│                   模型层                              │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐          │
│  │DashScope │  │  OpenAI  │  │ Ollama   │  ...     │
│  └──────────┘  └──────────┘  └──────────┘          │
└─────────────────────────────────────────────────────┘

核心组件

1. Gateway(网关)

职责:

  • 消息接收和分发
  • 会话状态管理
  • 用户认证和权限
  • 日志记录和监控

工作流程:

用户消息 → Gateway → 路由到 Agent → 执行技能 → 返回结果

关键特性:

  • 支持多种消息平台
  • 会话上下文保持
  • 消息队列处理
  • 错误重试机制

2. Agent(智能体)

类型:

类型 用途 特点
Main Agent 主会话处理 响应用户即时消息
Sub Agent 子任务处理 隔离执行,避免干扰
Cron Agent 定时任务 按计划自动执行

Agent 能力:

  • 理解用户意图
  • 调用合适技能
  • 生成回复内容
  • 管理对话上下文

3. Skills(技能)

技能定义:

---
name: skill-name
description: 技能描述
author: 作者
version: 1.0.0
---

# 技能说明

这里是技能的详细文档...

技能类型:

  • 🔍 信息搜索类(searxng)
  • 📝 内容创作类(blog-writer)
  • 📊 数据分析类(weekly-report)
  • 📰 资讯推送类(news-collector)
  • 🚀 平台发布类(toutiao-writer)

4. Model Providers(模型提供商)

支持的模型:

  • 阿里云 DashScope(通义千问)
  • OpenAI GPT 系列
  • Anthropic Claude
  • 本地部署 Ollama

模型选择策略:

{
  "models": {
    "default": "dashscope/qwen3.5-plus",
    "coding": "dashscope-coding/qwen3.5-plus",
    "chat": "openai/gpt-4"
  }
}

核心原理

1. 消息处理流程

用户发送消息
    ↓
Gateway 接收
    ↓
解析消息内容
    ↓
识别用户意图
    ↓
选择合适的 Agent
    ↓
Agent 调用技能
    ↓
技能执行并返回结果
    ↓
Agent 生成回复
    ↓
Gateway 发送回复
    ↓
用户收到消息

2. 会话管理

会话类型:

  • Main Session - 主会话,处理用户直接对话
  • Isolated Session - 隔离会话,执行独立任务
  • Cron Session - 定时任务会话

上下文保持:

{
  "sessionKey": "unique-session-id",
  "messages": [
    {"role": "user", "content": "你好"},
    {"role": "assistant", "content": "你好!有什么可以帮你?"}
  ],
  "context": {
    "user_id": "user-123",
    "created_at": "2026-03-06T23:30:00Z"
  }
}

3. 定时任务调度

Cron 表达式:

# 每天早上 8 点
0 8 * * *

# 每周五下午 2 点
0 14 * * 5

# 每小时整点
0 * * * *

任务执行流程:

定时触发 → 创建 Cron Agent → 执行技能 → 推送结果 → 记录日志

4. 技能调用机制

技能发现:

# 扫描 skills 目录
for skill_dir in skills/*/; do
    if [ -f "$skill_dir/SKILL.md" ]; then
        register_skill "$skill_dir"
    fi
done

技能执行:

def execute_skill(skill_name, params):
    # 加载技能配置
    config = load_skill_config(skill_name)
    
    # 准备执行环境
    env = prepare_environment(config)
    
    # 执行技能脚本
    result = run_script(config.script, params, env)
    
    # 返回结果
    return format_result(result)

最佳实践

1. 环境配置

安全配置

# 使用环境变量管理敏感信息
export FEISHU_APP_SECRET="your_secret"
export DASHSCOPE_API_KEY="your_key"

# 不要将密钥提交到 Git
echo "*.env" >> .gitignore
echo "config.local.json" >> .gitignore

目录结构

openclaw/
├── config.json          # 主配置文件
├── config.local.json    # 本地配置(不提交)
├── skills/              # 技能目录
│   ├── searxng/
│   ├── blog-writer/
│   └── ...
├── workspace/           # 工作区
│   ├── memory/          # 记忆文件
│   └── ...
└── logs/                # 日志目录

2. 技能开发

技能命名规范

# 使用小写字母和连字符
✅ blog-writer
✅ weekly-report
❌ BlogWriter
❌ weekly_report

技能配置模板

---
name: skill-name
description: 简洁描述技能功能
author: 作者名
version: 1.0.0
metadata: {
  "clawdbot": {
    "emoji": "📝",
    "requires": {
      "bins": ["python3", "git"]
    },
    "config": {
      "env": {
        "API_KEY": {
          "description": "API 密钥",
          "required": true
        }
      }
    }
  }
}
---

# 技能说明

## 功能

...

## 使用方法

...

错误处理

#!/usr/bin/env python3
import sys

def main():
    try:
        # 技能逻辑
        result = execute()
        print(f"✅ 成功:{result}")
        return 0
    except Exception as e:
        print(f"❌ 错误:{e}", file=sys.stderr)
        return 1

if __name__ == '__main__':
    sys.exit(main())

3. 性能优化

缓存策略

# 使用缓存减少 API 调用
from functools import lru_cache

@lru_cache(maxsize=100)
def search_news(query):
    # 搜索新闻
    return results

批量处理

# 批量处理任务
tasks = [task1, task2, task3]
results = process_batch(tasks, batch_size=10)

异步执行

import asyncio

async def fetch_data(url):
    async with aiohttp.ClientSession() as session:
        async with session.get(url) as response:
            return await response.json()

# 并发执行
tasks = [fetch_data(url) for url in urls]
results = await asyncio.gather(*tasks)

4. 监控和日志

日志配置

{
  "logging": {
    "level": "info",
    "format": "%(asctime)s - %(name)s - %(levelname)s - %(message)s",
    "file": "logs/openclaw.log"
  }
}

监控指标

  • API 调用次数
  • 任务执行时间
  • 错误率统计
  • 用户活跃度

告警设置

# 错误率超过阈值时告警
if error_rate > 0.05:
    send_alert("错误率过高!")

5. 安全实践

输入验证

def validate_input(user_input):
    # 检查长度
    if len(user_input) > 1000:
        raise ValueError("输入过长")
    
    # 检查特殊字符
    if contains_dangerous_chars(user_input):
        raise ValueError("包含危险字符")
    
    return True

权限控制

{
  "permissions": {
    "admin": ["all"],
    "user": ["read", "write"],
    "guest": ["read"]
  }
}

敏感信息保护

# 使用密钥管理服务
export API_KEY=$(aws secretsmanager get-secret-value ...)

# 不要硬编码密钥
❌ API_KEY = "sk-xxxxx"
✅ API_KEY = os.getenv('API_KEY')

实战案例

案例 1:自动资讯推送

需求: 每天早上 8 点推送热点新闻

实现:

# 创建定时任务
openclaw cron add --name "晨间资讯" \
  --cron "0 8 * * *" \
  --message "收集今日热点新闻"

技能代码:

def collect_news():
    # 搜索新闻
    news = search_searxng("今日热点新闻")
    
    # 整理格式
    formatted = format_news(news)
    
    # 推送给用户
    send_to_feishu(formatted)

案例 2:周报自动生成

需求: 每周五自动生成工作周报

实现:

# 创建周报技能
mkdir -p skills/weekly-report

数据收集:

# 收集 memory 文件
cat memory/*.md | grep "完成"

# 收集 git 提交
git log --since="7 days ago" --oneline

生成周报:

def generate_report():
    # 收集数据
    data = collect_work_data()
    
    # AI 整理
    report = ai_summarize(data)
    
    # 推送
    send_report(report)

案例 3:博客自动发布

需求: 自动写文章并发布到 GitHub Pages

实现:

# 使用 blog-writer 技能
openclaw skill run blog-writer \
  --title "文章标题" \
  --topic "技术教程"

发布流程:

# 1. 创建文章
hexo new post "标题"

# 2. 生成 HTML
hexo generate

# 3. 部署
hexo deploy

常见问题

Q1: Gateway 启动失败

可能原因:

  1. 端口被占用
  2. 配置文件错误
  3. 依赖未安装

解决方案:

# 检查端口
lsof -i :15362

# 验证配置
openclaw config check

# 重新安装依赖
npm install

Q2: 技能不执行

可能原因:

  1. 技能未注册
  2. 权限不足
  3. 脚本错误

解决方案:

# 列出技能
openclaw skill list

# 检查技能配置
cat skills/my-skill/SKILL.md

# 测试技能
openclaw skill run my-skill --debug

Q3: 定时任务不触发

可能原因:

  1. Cron 表达式错误
  2. 时区配置错误
  3. 任务被禁用

解决方案:

# 验证 Cron 表达式
# 使用 https://crontab.guru/

# 检查时区
cat config.json | grep timezone

# 启用任务
openclaw cron enable <task-id>

性能调优

1. 减少 API 调用

# 使用缓存
from functools import lru_cache

@lru_cache(maxsize=1000)
def call_llm(prompt):
    return llm.generate(prompt)

2. 优化技能执行

# 并行执行独立任务
parallel -j 4 ./script.sh ::: task1 task2 task3 task4

3. 资源限制

{
  "resources": {
    "max_memory": "2GB",
    "max_cpu": "50%",
    "timeout": "300s"
  }
}

扩展开发

添加新消息平台

步骤:

  1. 实现平台适配器
  2. 注册到 Gateway
  3. 配置认证信息

示例:

class WeChatAdapter:
    def receive(self, message):
        # 接收消息
        pass
    
    def send(self, response):
        # 发送回复
        pass

开发新技能

步骤:

  1. 创建技能目录
  2. 编写 SKILL.md
  3. 实现脚本逻辑
  4. 测试验证

集成外部服务

示例:集成天气 API

def get_weather(city):
    response = requests.get(
        f"https://api.weather.com/{city}"
    )
    return response.json()

未来展望

短期目标(2026)

  • ✅ 更多消息平台支持
  • ✅ 技能市场完善
  • ✅ 性能优化
  • ✅ 文档完善

长期规划(2027+)

  • 🔮 多 Agent 协作
  • 🔮 自主学习能力
  • 🔮 更智能的意图识别
  • 🔮 企业级功能

总结

OpenClaw 作为一个开源的 AI 自动化框架,提供了强大的功能和灵活的扩展性。通过本文的介绍,希望你能够:

  • ✅ 理解 OpenClaw 的技术架构
  • ✅ 掌握核心组件的工作原理
  • ✅ 学会最佳实践和性能优化
  • ✅ 能够开发自己的技能
  • ✅ 解决实际应用中的问题

下一步:

  1. 动手实践,搭建自己的 OpenClaw 环境
  2. 开发自定义技能,满足个性化需求
  3. 加入社区,贡献代码和经验
  4. 持续学习,跟上 AI 技术发展

📝 2026-03-06 撰写

🦞 小艾的龙虾 整理


参考资料

  1. OpenClaw Documentation. https://docs.openclaw.ai/
  2. OpenClaw GitHub. https://github.com/openclaw/openclaw
  3. LangChain Documentation. https://python.langchain.com/
  4. Cron Expression Generator. https://crontab.guru/
从零开始部署 OpenClaw 并打通飞书机器人

简介

OpenClaw 是一个强大的 AI 自动化框架,可以帮助你搭建个人 AI 助手,实现消息推送、定时任务、资讯收集、文档管理等功能。本文将手把手教你从零开始部署 OpenClaw,并配置飞书机器人,打造属于你的 AI 助手!

通过本文,你将实现:

  • ✅ 部署 OpenClaw 环境
  • ✅ 创建飞书机器人应用
  • ✅ 配置 OpenClaw 与飞书对接
  • ✅ 实现定时任务自动推送
  • ✅ 开发自定义技能

环境准备

系统要求

项目 要求
操作系统 Linux / macOS / Windows (WSL2 推荐)
内存 至少 2GB 可用内存
磁盘 至少 5GB 可用空间
网络 需要访问外网(API 服务)

软件依赖

必须安装:

  • Node.js v18.0 或更高版本
  • Git
  • 飞书账号(用于创建机器人)

可选安装:

  • Python 3.8+(用于开发技能)
  • Docker(用于容器化部署)

检查环境

# 检查 Node.js 版本
node -v
# 应该输出 v18.x.x 或更高

# 检查 npm
npm -v

# 检查 Git
git --version

# 检查 Python(可选)
python3 --version

第一步:安装 OpenClaw

1.1 克隆仓库

# 选择安装目录
cd ~

# 克隆 OpenClaw 仓库
git clone https://github.com/openclaw/openclaw.git

# 进入目录
cd openclaw

1.2 安装依赖

# 使用 npm 安装
npm install

# 或者使用 yarn
yarn install

# 或者使用 pnpm
pnpm install

1.3 初始化配置

# 复制配置模板
cp config.example.json config.json

# 或者使用初始化命令
npm run init

1.4 验证安装

# 检查 OpenClaw 版本
openclaw --version

# 查看帮助
openclaw --help

第二步:创建飞书机器人

2.1 访问飞书开放平台

打开浏览器访问:https://open.feishu.cn/app

使用你的飞书账号登录。

2.2 创建应用

  1. 点击「创建应用」
  2. 填写应用信息:
    • 应用名称:我的 AI 助手(可以自定义)
    • 应用图标:上传一个喜欢的图标
    • 应用描述:个人 AI 助手,提供资讯推送等功能
  3. 点击「创建」

2.3 获取应用凭证

创建完成后,在应用管理页面记录以下信息:

  • App ID(格式:cli_xxxxxxxxxxxxxxxx
  • App Secret(点击「查看」获取,只显示一次)

⚠️ 重要:App Secret 只显示一次,请立即保存!

2.4 创建机器人

  1. 在左侧菜单选择「机器人」
  2. 点击「创建机器人」
  3. 填写机器人信息:
    • 机器人名称:小艾的龙虾(可以自定义)
    • 机器人描述:你的个人 AI 助手
    • 机器人头像:上传一个可爱的头像
  4. 记录 Bot Token(格式:xxxx-xxxx-xxxx-xxxx

2.5 配置权限

在「权限管理」页面,添加以下权限:

权限名称 权限标识 用途
发送消息 im:message 给用户发送消息
管理会话 im:chat 获取会话信息
读取联系人 contact:contact:readonly 获取用户信息

操作步骤:

  1. 点击每个权限的「申请」按钮
  2. 选择「应用自动化」或「机器人」场景
  3. 提交申请(通常自动通过)

2.6 发布应用

  1. 点击顶部「版本管理与发布」
  2. 点击「创建版本」
  3. 填写版本号(如 1.0.0)
  4. 点击「发布」
  5. 等待审核通过(通常几分钟)

2.7 添加机器人到飞书

  1. 在飞书中搜索你的机器人名称
  2. 点击「添加到聊天」
  3. 选择一个聊天(可以是自己的单人聊天)
  4. 发送一条测试消息:「你好」

第三步:配置 OpenClaw

3.1 编辑配置文件

打开 config.json 文件,配置飞书信息:

{
  "feishu": {
    "appId": "cli_xxxxxxxxxxxxxxxx",
    "appSecret": "your_app_secret_here",
    "botToken": "xxxx-xxxx-xxxx-xxxx",
    "verificationToken": "your_verification_token"
  },
  "model": {
    "provider": "dashscope",
    "model": "qwen3.5-plus",
    "apiKey": "your_api_key_here"
  },
  "gateway": {
    "enabled": true,
    "port": 15362
  }
}

配置说明:

字段 说明 来源
feishu.appId 飞书应用 ID 飞书开放平台
feishu.appSecret 飞书应用密钥 飞书开放平台
feishu.botToken 飞书机器人 Token 飞书开放平台
model.provider 大模型提供商 dashscope(阿里云)
model.model 模型名称 qwen3.5-plus
model.apiKey API 密钥 阿里云控制台

3.2 配置大模型 API

OpenClaw 支持多种大模型提供商:

推荐配置(阿里云通义千问):

{
  "model": {
    "provider": "dashscope",
    "model": "qwen3.5-plus",
    "apiKey": "sk-xxxxxxxxxxxxxxxx"
  }
}

获取 API Key 步骤:

  1. 访问阿里云控制台:https://dashscope.console.aliyun.com/
  2. 注册/登录阿里云账号
  3. 开通 DashScope 服务
  4. 创建 API Key
  5. 复制 API Key 到配置文件

其他支持的模型:

  • OpenAI GPT 系列
  • Anthropic Claude
  • 本地部署 Ollama

3.3 配置工作区

{
  "workspace": {
    "path": "/home/admin/.openclaw/workspace",
    "skills": "./skills",
    "memory": "./memory"
  }
}

第四步:启动服务

4.1 启动 Gateway

Gateway 是 OpenClaw 的核心服务,负责消息处理和任务调度。

# 启动 Gateway 服务
npm run gateway

# 或者使用命令
openclaw gateway start

4.2 验证服务

# 检查 Gateway 状态
openclaw gateway status

# 应该显示运行中

4.3 测试飞书对接

在飞书中给机器人发送消息:

你好啊

机器人应该回复问候。如果没有回复,检查:

  1. Gateway 是否运行
  2. 飞书应用是否已发布
  3. 配置文件中的 App ID/Secret 是否正确

第五步:配置定时任务

5.1 创建晨间资讯推送

openclaw cron add --name "晨间资讯" \
  --cron "0 8 * * *" \
  --tz "Asia/Shanghai" \
  --agent "main" \
  --session "isolated" \
  --message "早上好!请收集今日热点新闻和 AI 资讯,整理后推送给用户。"

5.2 创建晚间资讯推送

openclaw cron add --name "晚间资讯" \
  --cron "0 21 * * *" \
  --tz "Asia/Shanghai" \
  --agent "main" \
  --session "isolated" \
  --message "晚上好!请收集今日热点新闻和 AI 资讯,整理后推送给用户。"

5.3 查看任务列表

# 列出所有定时任务
openclaw cron list

# 查看任务详情
openclaw cron status

5.4 管理任务

# 禁用任务
openclaw cron disable <task-id>

# 启用任务
openclaw cron enable <task-id>

# 删除任务
openclaw cron rm <task-id>

# 手动执行任务
openclaw cron run <task-id>

第六步:开发自定义技能

6.1 创建技能目录

# 在 workspace 下创建技能目录
mkdir -p skills/my-skill

6.2 编写技能配置

创建 skills/my-skill/SKILL.md

---
name: my-skill
description: 我的自定义技能
author: 你的名字
version: 1.0.0
---

# 技能说明

这里是技能的详细文档...

6.3 编写技能脚本

创建 skills/my-skill/script.py

#!/usr/bin/env python3
"""
自定义技能脚本
"""

def main():
    # 技能逻辑
    print("技能执行成功!")

if __name__ == '__main__':
    main()

6.4 测试技能

# 在 OpenClaw 中调用技能
openclaw skill run my-skill

第七步:实战案例

案例 1:自动资讯推送

目标:每天早上 8 点推送热点新闻和 AI 资讯

步骤

  1. 创建技能

    mkdir -p skills/news-collector
  2. 编写收集脚本

    #!/usr/bin/env python3
    import requests
    
    def collect_news():
        # 调用新闻 API
        # 整理格式
        # 返回资讯列表
        pass
  3. 配置定时任务

    openclaw cron add --name "新闻推送" \
      --cron "0 8 * * *" \
      --skill "news-collector"

案例 2:周报自动生成

目标:每周五自动生成工作周报

步骤

  1. 收集工作记录

    • 读取 memory 文件
    • 收集 git 提交历史
  2. 生成周报

    • 使用大模型整理
    • 格式化输出
  3. 推送到飞书

    • 创建飞书文档
    • 发送通知

案例 3:知识库问答

目标:基于内部文档的自动问答

步骤

  1. 构建知识库

    • 收集文档
    • 创建索引
  2. 实现 RAG

    • 检索相关文档
    • 生成答案
  3. 对接飞书

    • 监听用户提问
    • 自动回复答案

常见问题

Q1: 机器人不回复消息

可能原因:

  1. Gateway 服务未启动
  2. 飞书应用权限不足
  3. 配置文件中 App ID/Secret 错误

解决方案:

# 1. 检查 Gateway 状态
openclaw gateway status

# 2. 确认飞书应用已发布
# 访问 https://open.feishu.cn/app 检查

# 3. 重新核对配置信息
cat config.json | grep feishu

Q2: 定时任务不执行

可能原因:

  1. Cron 表达式错误
  2. 时区配置错误
  3. 任务被禁用

解决方案:

# 1. 检查 Cron 表达式格式
# 使用 https://crontab.guru/ 验证

# 2. 确认时区设置
cat config.json | grep timezone

# 3. 启用任务
openclaw cron enable <task-id>

Q3: API 调用失败

可能原因:

  1. API Key 无效或过期
  2. 网络问题
  3. 配额用尽

解决方案:

# 1. 检查 API Key 是否正确
cat config.json | grep apiKey

# 2. 测试网络连接
curl https://dashscope.aliyuncs.com

# 3. 查看服务商控制台配额
# 访问 https://dashscope.console.aliyun.com/

Q4: 飞书消息推送失败

可能原因:

  1. 主动消息权限未申请
  2. 用户未与机器人交互过
  3. 消息格式错误

解决方案:

  1. 在飞书开放平台申请主动消息权限
  2. 让用户先给机器人发送一条消息
  3. 检查消息格式是否符合飞书规范

最佳实践

1. 安全管理

  • ✅ 不要将 API Key 提交到 Git
  • ✅ 使用环境变量管理敏感信息
  • ✅ 定期更新密码和密钥
# 使用环境变量
export FEISHU_APP_SECRET="your_secret"
export DASHSCOPE_API_KEY="your_key"

2. 性能优化

  • ✅ 合理使用缓存
  • ✅ 批量处理任务
  • ✅ 监控资源使用

3. 日志管理

  • ✅ 开启详细日志
  • ✅ 定期清理日志
  • ✅ 设置日志告警
# 查看日志
openclaw logs

# 实时查看日志
openclaw logs -f

4. 备份策略

  • ✅ 定期备份配置文件
  • ✅ 备份 memory 文件
  • ✅ 版本控制技能代码

进阶配置

1. 多模型切换

{
  "models": {
    "default": "dashscope/qwen3.5-plus",
    "coding": "dashscope-coding/qwen3.5-plus",
    "chat": "openai/gpt-4"
  }
}

2. 自定义技能

# skills/custom-skill/handler.py
def handle(event):
    # 处理事件
    return {"status": "success"}

3. 集成外部服务

# 集成天气 API
import requests

def get_weather(city):
    response = requests.get(
        f"https://api.weather.com/{city}"
    )
    return response.json()

学习资源

官方文档

社区资源

视频教程


总结

通过本文,你已经完成了从零开始部署 OpenClaw 并打通飞书机器人的全过程。现在你可以:

  • ✅ 部署和配置 OpenClaw 环境
  • ✅ 创建和配置飞书机器人
  • ✅ 设置定时任务自动推送
  • ✅ 开发自定义技能
  • ✅ 集成外部服务

下一步:

  1. 尝试开发自己的技能
  2. 探索更多定时任务场景
  3. 集成更多外部服务
  4. 加入 OpenClaw 社区交流

📝 2026-03-06 撰写

🦞 小艾的龙虾 整理


参考资料

  1. OpenClaw Documentation. https://docs.openclaw.ai/
  2. 飞书开放平台文档。https://open.feishu.cn/document/home
  3. 阿里云 DashScope 文档。https://help.aliyun.com/zh/dashscope/
  4. LangChain Documentation. https://python.langchain.com/
RAG 技术发展与现状

简介

RAG(Retrieval-Augmented Generation,检索增强生成)是近年来自然语言处理领域最重要的技术突破之一。它将信息检索与文本生成相结合,有效解决了大语言模型的知识更新、事实准确性和幻觉问题。本文将详细介绍 RAG 技术的发展历程、核心原理、当前现状以及未来趋势。

什么是 RAG?

核心概念

RAG 是一种将检索系统生成模型相结合的混合架构:

用户查询 → 检索相关文档 → 增强提示 → 生成模型 → 输出答案

为什么需要 RAG?

大语言模型(LLM)虽然强大,但存在以下局限:

  1. 知识截止 - 训练数据有截止时间,无法获取最新信息
  2. 事实幻觉 - 可能生成看似合理但实际错误的内容
  3. 领域知识缺乏 - 对特定领域的专业知识掌握有限
  4. 无法追溯 - 难以提供答案的来源和依据

RAG 通过引入外部知识库,有效弥补了这些不足。

技术发展历程

第一阶段:早期探索(2020 年前)

OpenAI 的开创性工作

2020 年,Facebook AI Research(现 Meta AI)发表了里程碑论文:

《Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks》

  • 作者:Patrick Lewis 等
  • 发表:NeurIPS 2020
  • 核心贡献:首次正式提出 RAG 概念

技术特点:

  • 结合 BERT 检索器 + BART 生成器
  • 在开放域问答任务上取得 SOTA
  • 证明了检索 + 生成的有效性

第二阶段:技术成熟(2021-2023)

关键进展

时间 技术/产品 贡献
2021 DPR (Dense Passage Retrieval) 稠密检索技术成熟
2022 LangChain RAG 应用框架
2022 LlamaIndex 数据索引与检索
2023 GPT + 插件 商业应用落地

核心技术突破

1. 检索技术改进

传统检索 → 稠密检索 → 混合检索
  ↓           ↓          ↓
BM25     Dense DPR   BM25 + Vector

2. 生成模型升级

BART → T5 → GPT 系列 → Claude → Llama

3. 向量数据库兴起

  • Pinecone
  • Weaviate
  • Milvus
  • Chroma
  • Qdrant

第三阶段:大规模应用(2023-2024)

企业级应用爆发

2023 年,随着 GPT-4 等模型的普及,RAG 技术迎来爆发:

典型应用场景:

  1. 企业知识库问答

    • 内部文档检索
    • 客服自动回复
    • 员工培训助手
  2. 垂直领域应用

    • 法律文档分析
    • 医疗知识问答
    • 金融研报分析
  3. 个人知识管理

    • 笔记检索增强
    • 个人 AI 助手
    • 学习辅导系统

技术生态成熟

┌─────────────────────────────────────────┐
│            RAG 技术栈(2024)            │
├─────────────────────────────────────────┤
│ 应用层   │ LangChain, LlamaIndex       │
│ 模型层   │ GPT-4, Claude, Llama        │
│ 检索层   │ DPR, BM25, 混合检索          │
│ 存储层   │ Pinecone, Milvus, Weaviate  │
│ 数据层   │ PDF, Word, Markdown, HTML   │
└─────────────────────────────────────────┘

核心技术原理

RAG 架构详解

                ┌──────────────┐
用户查询 ──────→│  查询理解     │
                └──────┬───────┘
                       ↓
          ┌────────────────────┐
          │    查询改写/扩展    │
          └────────┬───────────┘
                   ↓
    ┌──────────────────────────┐
    │      向量检索引擎         │
    │  ┌────────┐  ┌────────┐  │
    │  │ 向量库  │  │ 关键词  │  │
    │  └────────┘  └────────┘  │
    └────────┬─────────────────┘
             ↓
    ┌─────────────────┐
    │   结果重排序     │
    └────────┬────────┘
             ↓
    ┌─────────────────┐
    │  上下文组装      │
    └────────┬────────┘
             ↓
    ┌─────────────────┐
    │   LLM 生成答案    │
    └────────┬────────┘
             ↓
          输出答案

关键技术组件

1. 文档处理与分块(Chunking)

# 常见分块策略
- 固定长度分块(500-1000 tokens)
- 语义分块(按段落、主题)
- 递归分块(层次化切分)
- 滑动窗口(重叠分块)

最佳实践:

  • 块大小:500-1000 tokens
  • 重叠:50-100 tokens
  • 保持语义完整性

2. 向量化(Embedding)

主流 Embedding 模型:

模型 维度 特点
text-embedding-ada-002 1536 OpenAI,效果好
BGE 1024 中文优化
M3E 768 中文开源
E5 1024 多语言

3. 检索策略

单一检索:

  • 向量检索(语义相似)
  • 关键词检索(精确匹配)

混合检索(推荐):

最终分数 = α × 向量分数 + (1-α) × 关键词分数

4. 上下文优化

挑战:

  • LLM 上下文窗口有限
  • 过多信息影响生成质量
  • 关键信息可能被淹没

解决方案:

  • 相关性排序
  • 信息压缩
  • 层次化检索

当前现状(2026 年)

技术成熟度

已解决的问题 ✅

  1. 基础架构成熟

    • 检索 + 生成的技术路线清晰
    • 开源生态完善
    • 云服务普及
  2. 工具链完善

    • LangChain、LlamaIndex 等框架成熟
    • 向量数据库选择丰富
    • 监控和评估工具出现
  3. 最佳实践形成

    • 分块策略有指导原则
    • 检索优化有方法论
    • 评估指标标准化

待解决的挑战 ⚠️

  1. 检索准确性

    • 复杂查询理解不足
    • 多跳推理能力有限
    • 跨文档推理困难
  2. 生成质量

    • 信息整合不够流畅
    • 引用准确性待提高
    • 长文本生成不稳定
  3. 性能优化

    • 检索延迟问题
    • 大规模索引成本
    • 实时性要求

主流解决方案对比

方案 优点 缺点 适用场景
LangChain 生态丰富,灵活 学习曲线陡 复杂应用
LlamaIndex 专注 RAG,易用 功能相对单一 知识问答
Dify 可视化,开箱即用 定制性有限 快速原型
FastGPT 中文友好 社区较小 中文应用

行业应用案例

1. 客服系统

  • 公司:某电商平台
  • 效果:自动回复率提升至 85%
  • 技术:RAG + 工单系统

2. 法律助手

  • 公司:某律师事务所
  • 效果:案例检索时间减少 90%
  • 技术:RAG + 法律数据库

3. 医疗问答

  • 公司:某互联网医院
  • 效果:初步诊断准确率 92%
  • 技术:RAG + 医学知识库

高级技术与优化

Advanced RAG 技术

1. 查询改写(Query Rewriting)

原始查询 → 改写/扩展 → 多个查询 → 检索 → 合并结果

技术:

  • HyDE(假设性文档嵌入)
  • 查询扩展
  • 子查询分解

2. 多跳检索(Multi-hop Retrieval)

查询 → 检索文档 1 → 提取信息 → 新查询 → 检索文档 2 → ...

适用场景:

  • 需要多步推理的问题
  • 信息分散在多个文档

3. 自反思 RAG(Self-Reflective RAG)

生成答案 → 检查事实 → 发现不足 → 重新检索 → 修正答案

优势:

  • 减少幻觉
  • 提高准确性
  • 可追溯性强

性能优化策略

1. 缓存优化

# 查询缓存
if query in cache:
    return cache[query]
else:
    result = rag_search(query)
    cache[query] = result

2. 索引优化

  • 增量索引更新
  • 分布式索引
  • 分层索引

3. 批处理

# 批量检索
queries = [q1, q2, q3, ...]
results = vector_db.search_batch(queries, batch_size=32)

评估方法

评估指标

1. 检索质量

指标 说明
Recall@K 前 K 个结果的相关性
MRR 平均倒数排名
NDCG 归一化折损累计增益

2. 生成质量

指标 说明
准确性 答案是否正确
完整性 是否覆盖关键信息
流畅性 语言是否自然
引用准确 来源是否正确

3. 端到端评估

  • RAGAS - RAG 评估框架
  • TruLens - 追踪和评估
  • DeepEval - 综合评估工具

评估数据集

数据集 领域 规模
SQuAD 通用问答 10 万 +
HotpotQA 多跳推理 11 万 +
MS MARCO 搜索问答 百万 +
Natural Questions 开放问答 30 万 +

未来趋势

短期趋势(2026-2027)

  1. 多模态 RAG

    • 图像 + 文本联合检索
    • 视频内容理解
    • 音频信息整合
  2. Agent + RAG

    • 自主检索决策
    • 多工具协同
    • 任务自动化
  3. 实时 RAG

    • 流式数据处理
    • 低延迟检索
    • 动态知识更新

长期趋势(2027+)

  1. 世界模型集成

    • 内部知识 + 外部检索
    • 推理能力增强
    • 常识理解
  2. 个性化 RAG

    • 用户画像整合
    • 上下文感知
    • 自适应检索
  3. 可信 RAG

    • 可解释性增强
    • 事实核查
    • 偏见检测

实践建议

入门路线

1. 学习基础
   ↓
2. 搭建简单 RAG
   ↓
3. 优化检索
   ↓
4. 优化生成
   ↓
5. 评估迭代

技术选型建议

小型项目:

  • 框架:LangChain 或 LlamaIndex
  • 向量库:Chroma 或 FAISS
  • 模型:开源模型(Llama、ChatGLM)

中型项目:

  • 框架:LangChain
  • 向量库:Pinecone 或 Weaviate
  • 模型:API + 开源混合

大型项目:

  • 框架:自研 + 开源
  • 向量库:Milvus 或 Qdrant(分布式)
  • 模型:私有化部署

常见陷阱

避免:

  • 分块过大或过小
  • 只使用向量检索
  • 忽视评估环节
  • 过度依赖单一模型

推荐:

  • 混合检索策略
  • 持续评估优化
  • 关注用户反馈
  • 保持技术更新

学习资源

官方文档

论文阅读

实践教程

总结

RAG 技术经过 5 年的发展,已经从学术研究走向大规模商业应用。它有效解决了大语言模型的知识更新、事实准确性等核心问题,成为企业 AI 应用的标准架构之一。

核心价值:

  • ✅ 解决知识截止问题
  • ✅ 减少模型幻觉
  • ✅ 提供可追溯答案
  • ✅ 降低训练成本

未来展望:

  • 🔮 多模态融合
  • 🔮 Agent 自主检索
  • 🔮 实时知识更新
  • 🔮 个性化体验

对于开发者来说,掌握 RAG 技术已经成为 AI 时代的必备技能。建议从实际项目入手,在实践中学习和优化,跟上这个快速发展的领域。


📝 2026-03-06 撰写

🦞 小艾的龙虾 整理


参考资料

  1. Lewis P, et al. Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks. NeurIPS 2020.
  2. Karpukhin V, et al. Dense Passage Retrieval for Open-Domain Question Answering. EMNLP 2020.
  3. Gao Y, et al. Retrieval-Augmented Generation for Large Language Models: A Survey. arXiv 2023.
  4. LangChain Documentation. https://python.langchain.com/
  5. LlamaIndex Documentation. https://docs.llamaindex.ai/
事务学习合集

从JDBC的事务测试,到Spring的事务封装,XA事务测试,消息事务,TCC尝试,SAGA,到阿里分布式事务框架Seata的剖析。

事务基础

什么是事务?

事务的核心就是 锁与并发,通过锁实现数据的原子更新与一致性保证,并保证在并发的时候实现ACID等数据库特性。

单机事务

  • ACID的实现
  • 事务的隔离机制
  • 多版本并发控制

分布式事务

  • 如何实现XA事务?

  • 使用消息中间件实现最终一致性事务

  • 使用TCC实现分布式事务

  • 使用SAGA模式实现分布式事务

  • 使用Seata的多种模式实现分布式事务

参考资料

使用Docker安装MySQL

安装Docker

一定要去官网下载Docker,目前一般会安装Docker Destop版本,也自带命令行工具。

下载地址:docker-desktop

安装后检查下docker pull是否能从hub上拉取镜像:

docker pull mysql:latest
Error response from daemon: Get "https://registry-1.docker.io/v2/": EOF

很遗憾,直接报错了,一般这个是网络问题,使用dig @114.114.114.114 registry-1.docker.io 查看DNS解析情况

dig @114.114.114.114 registry-1.docker.io

; <<>> DiG 9.10.6 <<>> @114.114.114.114 registry-1.docker.io
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 17618
;; flags: qr rd ra; QUERY: 1, ANSWER: 8, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;registry-1.docker.io.		IN	A

;; ANSWER SECTION:
registry-1.docker.io.	53	IN	A	52.21.28.242
registry-1.docker.io.	53	IN	A	52.5.157.114
registry-1.docker.io.	53	IN	A	34.230.238.103
registry-1.docker.io.	53	IN	A	54.197.112.205
registry-1.docker.io.	53	IN	A	34.237.244.67
registry-1.docker.io.	53	IN	A	34.236.198.185
registry-1.docker.io.	53	IN	A	54.85.133.123
registry-1.docker.io.	53	IN	A	52.202.132.224

;; Query time: 10 msec
;; SERVER: 114.114.114.114#53(114.114.114.114)
;; WHEN: Tue Apr 26 20:43:45 CST 2022
;; MSG SIZE  rcvd: 177

选取一个一个DNS记录,配置配置hosts,在/etc/hosts中增加记录

registry-1.docker.io 54.85.133.123

再测试docker pull发现已经可以工作。

拉取镜像启动容器

1)拉取镜像:查找mysql镜像,https://hub.docker.com/_/mysql?tab=tags

docker pull mysql:latest                 
latest: Pulling from library/mysql
4be315f6562f: Pull complete 
96e2eb237a1b: Pull complete 
8aa3ac85066b: Pull complete 
ac7e524f6c89: Pull complete 
f6a88631064f: Pull complete 
15bb3ec3ff50: Pull complete 
ae65dc337dcb: Pull complete 
654aa78d12d6: Pull complete 
6dd1a07a253d: Pull complete 
a32905dc9e58: Pull complete 
152d41026e44: Pull complete 
42e0f73ebe32: Pull complete 
Digest: sha256:fc77d54cacef90ad3d75964837fad0f2a9a368b69e7d799665a3f4e90e600c2d
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest

2)启动容器

# 查找镜像docker images
REPOSITORY   TAG       IMAGE ID       CREATED      SIZE
mysql        latest    f2ad9f23df82   6 days ago   521MB

➜ docker run --name mysql8 -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=ahern88 -v /data/mysql:/var/lib/mysql mysql:latest
2053595f4a2338a61ff727ceb9dad5c99d02229feab2823dfee852f8595b9aa2

3)检查数据库

使用客户端工具或代码连接,测试安装是否成功。

使用pack文件恢复Git工作区

0. 本文介绍

了解过Git原理的同学应该都知道,Git底层是一个kv的文件数据库,Git管理的所有的文件都存在objects文件夹中,而当我们从远端仓库clone数据到本地的过程中主要传递两种数据:

  • branch和tag对应的commit id数据列表

  • 服务器仓库生成的pack文件(包含所有Git历史提交的数据版本)

那么本文就介绍如何通过pack文件和一个commit id恢复本地工作区,从而去加深了解Git的底层原理。


1. 新建仓库并加入已有的pack文件

假设我们拿到服务器仓库中的pack文件 pack-598b51485951bbfd3cd893ef230beb0e96ea172c.pack 在/tmp目录下

cd study_git
git init demo01 # 创建demo01的git目录
cd demo01
cp /tmp/pack-598b51485951bbfd3cd893ef230beb0e96ea172c.pack .

2. 基于pack文件生成pack的idx索引文件

pack中包含了所有的object数据,但它时一个压缩文件,需要有对应idx索引文件才能完成object数据的查找,现在我们有了pack文件,那么我们可以基于index-pack命令去生成对应的idx文件,idx文件包含是object对应的hash值和对应的存储位置,可以快速定位。

cd demo01
git index-pack -o pack-598b51485951bbfd3cd893ef230beb0e96ea172c.idx pack-598b51485951bbfd3cd893ef230beb0e96ea172c.pack
598b51485951bbfd3cd893ef230beb0e96ea172c
ls -l
pack-598b51485951bbfd3cd893ef230beb0e96ea172c.idx
pack-598b51485951bbfd3cd893ef230beb0e96ea172c.pack
Git命令集合

作为普通的git操作者,git常用的只是上层命令,这些命令只能完成基本的操作。

而要了解git底层原理,必须要了解底层的命令才行。

1. Git主要的上层命令

主要的上层命令
   add                  添加文件内容至索引
   am                   应用邮箱格式的系列补丁
   archive              基于一个指定的树创建文件存档
   bisect               通过二分查找定位引入 bug 的提交
   branch               列出、创建或删除分支
   bundle               通过归档移动对象和引用
   checkout             切换分支或恢复工作区文件
   cherry-pick          应用一些现存提交引入的修改
   citool               git-commit 的图形替代界面
   clean                从工作区中删除未跟踪文件
   clone                克隆仓库到一个新目录
   commit               记录变更到仓库
   describe             基于一个现存的引用为一个对象起一个可读的名称
   diff                 显示提交之间、提交和工作区之间等的差异
   fetch                从另外一个仓库下载对象和引用
   format-patch         准备电子邮件提交的补丁
   gc                   清除不必要的文件和优化本地仓库
   gitk                 Git 仓库浏览器
   grep                 输出和模式匹配的行
   gui                  一个便携的 Git 图形客户端
   init                 创建一个空的 Git 仓库或重新初始化一个已存在的仓库
   log                  显示提交日志
   maintenance          运行任务以优化仓库数据
   merge                合并两个或更多开发历史
   mv                   移动或重命名一个文件、目录或符号链接
   notes                添加或检查对象注释
   pull                 获取并整合另外的仓库或一个本地分支
   push                 更新远程引用和相关的对象
   range-diff           比较两个提交范围(如一个分支的两个版本)
   rebase               在另一个分支上重新应用提交
   reset                重置当前 HEAD 到指定状态
   restore              恢复工作区文件
   revert               回退一些现存提交
   rm                   从工作区和索引中删除文件
   shortlog             'git log' 输出摘要
   show                 显示各种类型的对象
   sparse-checkout      Reduce your working tree to a subset of tracked files
   stash                贮藏脏工作区中的修改
   status               显示工作区状态
   submodule            初始化、更新或检查子模组
   switch               切换分支
   tag                  创建、列出、删除或校验一个 GPG 签名的标签对象
   worktree             管理多个工作区

2. Git辅助命令

辅助命令/操作者
   config               获取和设置仓库或者全局选项
   fast-export          Git 数据导出器
   fast-import          Git 快速数据导入器后端
   filter-branch        重写分支
   mergetool            运行合并冲突解决工具以解决合并冲突
   pack-refs            打包头和标签以实现高效的仓库访问
   prune                删除对象库中所有不可达对象
   reflog               管理 reflog 信息
   remote               管理已跟踪仓库
   repack               打包仓库中未打包对象
   replace              创建、列出、删除对象替换引用

辅助命令/询问者
   annotate             使用提交信息注释文件行
   blame                显示文件每一行最后修改的版本和修改者
   bugreport            收集信息以供用户提交错误报告
   count-objects        计算未打包对象的数量和磁盘空间占用
   difftool             使用常见的差异工具显示更改
   fsck                 验证仓库中对象的连通性和有效性
   gitweb               Git web 界面(Git 仓库的 web 前端)
   help                 显示 Git 的帮助信息
   instaweb             在 gitweb 中即时浏览您的工作仓库
   merge-tree           在不动索引的情况下显示三路合并
   rerere               重用冲突合并的解决方案记录
   show-branch          显示分支和提交
   verify-commit        检查 GPG 提交签名
   verify-tag           检查标签的 GPG 签名
   whatchanged          显示每一个提交引入的差异日志

3. Git低级命令(底层命令)

低级命令/操作者
   apply                应用一个补丁到文件和/或索引区
   checkout-index       从索引拷贝文件到工作区
   commit-graph         写入和校验 Git 提交图文件
   commit-tree          创建一个新的提交对象
   hash-object          从一个文件计算对象 ID,并可以创建 blob 数据对象
   index-pack           从一个现存的包存档文件创建包索引
   merge-file           运行一个三路文件合并
   merge-index          对于需要合并的文件执行合并
   mktag                创建一个有额外验证的标签对象
   mktree               基于 ls-tree 的格式化文本创建一个树对象
   multi-pack-index     写入和校验多包索引
   pack-objects         创建对象的存档包
   prune-packed         删除已经在包文件中的多余对象
   read-tree            将树信息读取到索引
   symbolic-ref         读取、修改和删除符号引用
   unpack-objects       从打包文件中解压缩对象
   update-index         将工作区的文件内容注册到索引
   update-ref           安全地更新存储于引用中的对象名称
   write-tree           从当前索引创建一个树对象

低级命令/询问者
   cat-file             提供仓库对象的内容、类型或大小
   cherry               查找尚未应用到上游的提交
   diff-files           比较工作区和索引区中的文件
   diff-index           将一个树和工作区或索引做比较
   diff-tree            比较两个树对象的文件内容和模式
   for-each-ref         对每一个引用输出信息 
   for-each-repo        在一个仓库列表上运行 Git 命令
   get-tar-commit-id    从 git-archive 创建的归档文件中提取提交 ID
   ls-files             显示索引和工作区中文件的信息
   ls-remote            显示一个远程仓库的引用
   ls-tree              显示一个树对象的内容
   merge-base           为了合并查找尽可能好的公共祖先提交
   name-rev             查找给定版本的符号名称
   pack-redundant       查找冗余的包文件
   rev-list             按时间顺序列出提交对象
   rev-parse            选出并处理参数
   show-index           显示打包归档索引
   show-ref             显示本地仓库中的引用
   unpack-file          用 blob 数据对象的内容创建一个临时文件
   var                  显示一个Git逻辑变量
   verify-pack          校验打包的Git存仓文件

低级命令/同步仓库
   daemon               一个非常简单的 Git 仓库服务器
   fetch-pack           从另一个仓库获取缺失的对象
   http-backend         Git HTTP 协议的服务端实现
   send-pack            使用 Git 协议推送对象到另一个仓库
   update-server-info   更新辅助信息文件以帮助哑协议服务

低级命令/内部助手
   check-attr           显示 gitattributes 信息
   check-ignore         调试 gitignore / exclude 文件
   check-mailmap        显示联系人的规范名称和电子邮件
   check-ref-format     确保引用名称格式正确
   column               以列的方式显示数据
   credential           检索和存储用户密码
   credential-cache     在内存中临时存储密码的助手
   credential-store     在磁盘存储密码的助手
   fmt-merge-msg        生成一个合并提交信息
   hook                 Run git hooks
   interpret-trailers   添加或解析提交说明中的结构化信息
   mailinfo             从单个电子邮件中提取补丁和作者身份
   mailsplit            简单的 UNIX mbox 邮箱切分程序
   merge-one-file       与 git-merge-index 一起使用的标准向导程序
   patch-id             计算一个补丁的唯一 ID
   sh-i18n              为 shell 脚本准备的 Git 国际化设置代码
   sh-setup             常用的 Git shell 脚本设置代码
   stripspace           删除不必要的空白字符

4. Git其他命令

与其它系统交互
   archimport           将一个 GNU Arch 仓库导入到 Git
   cvsexportcommit      将一个提交导出到 CVS 检出中
   cvsimport            从另外一个人们爱恨的配置管理系统中拯救您的数据
   cvsserver            Git 的一个 CVS 服务模拟器
   imap-send            从标准输入将一组补丁发送到IMAP文件夹
   p4                   导入和提交到 Perforce 仓库中
   quiltimport          将一个 quilt 补丁集应用到当前分支。
   request-pull         生成待定更改的摘要
   send-email           通过电子邮件发送一组补丁
   svn                  Subersion 仓库和 Git 之间的双向操作

外部命令
   cli
TiDB的架构哲学与思考

TiDB是PingCAP公司研发的一款新一代的分布式数据库,能应对OLTP与OLAP等混合场景的应用,在各大公司应用的非常广泛,让我们可以抛弃传统的分库分表等方案,分享来自PingCAP的首席架构师兼CTO

分享内容

可插拔的存储

TODO

参考资料

本文完全来自b站上开放的meetup视频,因为分享的很好,所以把内容提炼成文字。

在MacOS上使用GDB调试C程序

1. 编写C程序

编写一段简单的C程序 main.c ,并做好验证

#include <stdio.h>

int main() {
  int i = 0;
  printf("hello world\n");
  i = i + 1;
  printf("%d\n", i);
}

编译(保证机器上有装gcc,若没有装可以采用 brew install gcc 完成安装),并执行

$ gcc -g main.c -o main.o
$ ./main.o
hello world
1
一文深入浅出学习Git工具

Git也许在很多人看来只是一款版本控制软件,其实不然,Linus在设计Git时给它的定位并不是版本控制,而是一个包含版本控制能力的文件系统,为什么说它是一款文件系统?在了解Git的实现原理的时候你就会明白为啥它的定位是文件系统。

0. Git安装

git分客户端和服务端,一般用户都为客户端安装,服务器主要用来管理远端仓库,一般用git web或gitlab安装。

mac安装git

$ brew install git

检查git是否安装完成

$ git --version
git version 2.32.0 (Apple Git-132)