乐于分享
好东西不私藏

打造个人知识管理助手 – 让 AI 帮你整理知识(实战教程)

打造个人知识管理助手 – 让 AI 帮你整理知识(实战教程)

读过的文章不会整理?写作找不到素材?让 AI 帮你搞定!


🤔 你是不是也有这些烦恼?

场景 1:收藏即学会

看到好文章 → 点击收藏 → 再也没看过看到好观点 → 截图保存 → 再也找不到看到好教程 → 标记稍后读 → 没有后来了

场景 2:写作找不到素材

要写文章 → 大脑一片空白想找之前的资料 → 翻遍所有收藏夹好不容易找到 → 发现没有记录来源

场景 3:知识碎片化

今天学点 Python → 零散笔记明天学点 AI → 到处乱放后天想回顾 → 找不到了

如果有一个人能帮你:

  • • 自动收集好文章
  • • 自动整理和分类
  • • 自动打标签
  • • 写作时自动推荐素材

那个人就是:个人知识管理助手!


🎯 最终效果

配置完成后,你将拥有:

1. 自动收集

看到好文章 → 转发给助手 → 自动保存

实际操作:

  • • 微信公众号文章 → 转发给飞书助手
  • • 知乎文章 → 复制链接给助手
  • • 网页文章 → 一键保存到助手

2. 自动整理

助手自动:- 提取文章标题、作者、发布时间- 生成 200 字摘要- 提取 3-5 个关键词- 自动分类到对应目录

实际效果:

📚 已保存文章标题:OpenClaw 入门教程作者:Mac来源:公众号分类:技术/AI标签:#OpenClaw #AI #教程摘要:本文介绍了 OpenClaw 的安装配置...保存时间:2026-03-25 15:00

3. 智能检索

你问:帮我找一下之前保存的 OpenClaw 相关文章助手回复:找到 3 篇相关文章:1. OpenClaw 入门教程   保存时间:2026-03-25   标签:#OpenClaw #AI2. OpenClaw vs 其他 Agent 框架   保存时间:2026-03-26   标签:#OpenClaw #对比3. OpenClaw 插件开发   保存时间:2026-03-27   标签:#OpenClaw #开发需要我打开哪一篇?

4. 写作辅助

你问:我要写一篇 OpenClaw 教程,帮我整理下素材助手回复:已为你整理相关素材:📁 相关文章(5 篇)📝 核心概念(10 条)💡 金句摘录(8 条)📊 对比表格(2 个)🔗 参考链接(6 个)需要我帮你生成文章大纲吗?

🛠️ 开始实战

准备工作

需要的基础:

  • • ✅ 已完成入门系列安装配置
  • • ✅ 会使用基本的聊天命令
  • • ✅ 有飞书或微信账号

预计耗时: 30 分钟

难度: ⭐⭐☆☆☆(入门级)


第 1 步:创建知识管理目录

打开终端,执行:

# 创建工作目录mkdir -p ~/workspace/knowledge-base# 进入目录cd ~/workspace/knowledge-base# 创建分类目录mkdir -p articles/tech      # 技术文章mkdir -p articles/business  # 商业文章mkdir -p articles/life      # 生活文章mkdir -p notes              # 笔记mkdir -p quotes             # 金句摘录mkdir -p drafts             # 写作草稿# 创建索引文件touch index.json

完成后的目录结构:

knowledge-base/├── articles/│   ├── tech/│   ├── business/│   └── life/├── notes/├── quotes/├── drafts/└── index.json

第 2 步:创建文章保存脚本

创建 save-article.py

#!/usr/bin/env python3# -*- coding: utf-8 -*-"""文章保存脚本"""import jsonimport requestsfrom pathlib import Pathfrom datetime import datetimeimport re# 配置BASE_DIR = Path(__file__).parentINDEX_FILE = BASE_DIR / "index.json"def extract_article_info(url: str) -> dict:    """    提取文章信息    实际使用可以调用:    - 公众号 API    - 知乎 API    - 或使用通用网页抓取    """    # 这里用简单示例,实际可以调用 API    # 示例:使用 mercury-parser 服务    parser_url = "https://mercury.postlight.com/parser/"    params = {"url": url}    try:        response = requests.get(parser_url, params=params, timeout=10)        data = response.json()        return {            "title": data.get("title", "无标题"),            "author": data.get("author", "未知"),            "content": data.get("content", ""),            "excerpt": data.get("excerpt", "")[:200],            "url": url,            "published_date": data.get("date_published", ""),        }    except Exception as e:        # 如果解析失败,用 URL 生成基本信息        return {            "title": Path(url).stem or "未命名文章",            "author": "未知",            "content": "",            "excerpt": f"来自:{url}",            "url": url,            "published_date": "",        }def auto_categorize(title: str, content: str) -> str:    """    自动分类    简单规则:    - 包含技术关键词 → tech    - 包含商业关键词 → business    - 其他 → life    """    tech_keywords = ["代码", "编程", "技术", "AI", "Python", "开发", "软件"]    business_keywords = ["商业", "投资", "理财", "公司", "管理", "市场"]    text = f"{title} {content}".lower()    if any(kw in text for kw in tech_keywords):        return "tech"    elif any(kw in text for kw in business_keywords):        return "business"    else:        return "life"def auto_tags(title: str, content: str) -> list:    """    自动提取标签    简单实现:提取出现频率高的词    实际可以用 NLP 工具    """    # 简单示例,返回固定标签    # 实际可以用 jieba 分词 + TF-IDF    return ["未分类"]def save_article(url: str, category: str = None) -> dict:    """    保存文章    Args:        url: 文章链接        category: 手动指定分类(可选)    Returns:        保存结果    """    # 提取文章信息    info = extract_article_info(url)    # 自动分类    if not category:        category = auto_categorize(info["title"], info["content"])    # 自动标签    tags = auto_tags(info["title"], info["content"])    # 生成文件名    timestamp = datetime.now().strftime("%Y%m%d%H%M%S")    safe_title = re.sub(r'[^\w\s-]', '', info["title"])[:50]    filename = f"{timestamp}_{safe_title}.md"    # 保存路径    save_dir = BASE_DIR / "articles" / category    save_path = save_dir / filename    # 写入文件    content = f"""---title: {info['title']}author: {info['author']}url: {info['url']}category: {category}tags: {', '.join(tags)}saved_at: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}---# {info['title']}**作者:** {info['author']}**来源:** {info['url']}**保存时间:** {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}---## 摘要{info['excerpt']}---## 正文{info['content']}"""    with open(save_path, 'w', encoding='utf-8') as f:        f.write(content)    # 更新索引    update_index({        "title": info["title"],        "author": info["author"],        "url": info["url"],        "category": category,        "tags": tags,        "file": str(save_path),        "saved_at": datetime.now().isoformat(),    })    return {        "success": True,        "title": info["title"],        "category": category,        "path": str(save_path),    }def update_index(article: dict):    """更新索引文件"""    index = []    if INDEX_FILE.exists():        with open(INDEX_FILE, 'r', encoding='utf-8') as f:            index = json.load(f)    index.append(article)    with open(INDEX_FILE, 'w', encoding='utf-8') as f:        json.dump(index, f, ensure_ascii=False, indent=2)if __name__ == '__main__':    # 测试    test_url = "https://example.com/article"    result = save_article(test_url)    print(f"保存成功:{result['title']}")

第 3 步:创建 OpenClaw 工具

创建 knowledge-agent.py

#!/usr/bin/env python3# -*- coding: utf-8 -*-"""知识管理助手 - OpenClaw Agent"""import jsonfrom pathlib import Pathfrom save_article import save_article, auto_categorize, auto_tags# 配置BASE_DIR = Path(__file__).parentINDEX_FILE = BASE_DIR / "index.json"def search_articles(keyword: str, limit: int = 5) -> list:    """    搜索文章    Args:        keyword: 搜索关键词        limit: 返回数量限制    Returns:        匹配的文章列表    """    if not INDEX_FILE.exists():        return []    with open(INDEX_FILE, 'r', encoding='utf-8') as f:        index = json.load(f)    results = []    for article in index:        # 简单关键词匹配        text = f"{article['title']} {' '.join(article['tags'])} {article['category']}"        if keyword.lower() in text.lower():            results.append(article)            if len(results) >= limit:                break    return resultsdef get_articles_by_category(category: str, limit: int = 10) -> list:    """按分类获取文章"""    if not INDEX_FILE.exists():        return []    with open(INDEX_FILE, 'r', encoding='utf-8') as f:        index = json.load(f)    results = [a for a in index if a['category'] == category]    return results[:limit]def get_all_tags() -> list:    """获取所有标签"""    if not INDEX_FILE.exists():        return []    with open(INDEX_FILE, 'r', encoding='utf-8') as f:        index = json.load(f)    tags = set()    for article in index:        tags.update(article.get('tags', []))    return sorted(list(tags))def generate_summary_for_writing(topic: str) -> dict:    """    为写作生成素材摘要    Args:        topic: 写作主题    Returns:        素材汇总    """    related = search_articles(topic, limit=20)    # 分类整理    by_category = {}    for article in related:        cat = article['category']        if cat not in by_category:            by_category[cat] = []        by_category[cat].append(article)    # 提取标签    all_tags = set()    for article in related:        all_tags.update(article.get('tags', []))    return {        "topic": topic,        "total": len(related),        "by_category": by_category,        "tags": sorted(list(all_tags)),        "articles": related[:10],  # 只显示前 10 篇    }# OpenClaw 工具注册def register_tools(registry):    """注册工具到 OpenClaw"""    @registry.tool(        name="save_article",        description="保存一篇文章到知识库",        parameters={            "type": "object",            "properties": {                "url": {                    "type": "string",                    "description": "文章链接"                },                "category": {                    "type": "string",                    "description": "分类(可选):tech/business/life"                }            },            "required": ["url"]        })    def save_article_tool(url: str, category: str = None) -> str:        """保存文章"""        result = save_article(url, category)        if result['success']:            return f"✅ 已保存:{result['title']}\n分类:{result['category']}\n位置:{result['path']}"        else:            return "❌ 保存失败"    @registry.tool(        name="search_articles",        description="搜索知识库中的文章",        parameters={            "type": "object",            "properties": {                "keyword": {                    "type": "string",                    "description": "搜索关键词"                },                "limit": {                    "type": "integer",                    "description": "返回数量(默认 5)"                }            },            "required": ["keyword"]        })    def search_articles_tool(keyword: str, limit: int = 5) -> str:        """搜索文章"""        results = search_articles(keyword, limit)        if not results:            return "❌ 未找到相关文章"        response = f"找到 {len(results)} 篇相关文章:\n\n"        for i, article in enumerate(results, 1):            response += f"{i}. **{article['title']}**\n"            response += f"   分类:{article['category']} | 标签:{', '.join(article['tags'])}\n"            response += f"   保存时间:{article['saved_at'][:10]}\n\n"        return response    @registry.tool(        name="list_categories",        description="列出所有分类及其文章数量",        parameters={})    def list_categories_tool() -> str:        """列出分类"""        if not INDEX_FILE.exists():            return "❌ 知识库为空"        with open(INDEX_FILE, 'r', encoding='utf-8') as f:            index = json.load(f)        # 统计各分类        stats = {}        for article in index:            cat = article['category']            stats[cat] = stats.get(cat, 0) + 1        response = "📚 知识库分类统计:\n\n"        for cat, count in sorted(stats.items()):            cat_name = {"tech": "技术", "business": "商业", "life": "生活"}.get(cat, cat)            response += f"- {cat_name}{count}篇\n"        return response    @registry.tool(        name="generate_writing_materials",        description="为写作主题生成素材汇总",        parameters={            "type": "object",            "properties": {                "topic": {                    "type": "string",                    "description": "写作主题"                }            },            "required": ["topic"]        })    def generate_writing_materials_tool(topic: str) -> str:        """生成写作素材"""        materials = generate_summary_for_writing(topic)        response = f"📝 为「{topic}」整理的素材:\n\n"        response += f"找到相关文章:{materials['total']}篇\n\n"        response += "📁 分类统计:\n"        for cat, articles in materials['by_category'].items():            cat_name = {"tech": "技术", "business": "商业", "life": "生活"}.get(cat, cat)            response += f"- {cat_name}{len(articles)}篇\n"        response += f"\n🏷️ 相关标签:{', '.join(materials['tags'][:10])}\n"        response += "\n📄 推荐文章:\n"        for i, article in enumerate(materials['articles'][:5], 1):            response += f"{i}. {article['title']}\n"        return response    return registryif __name__ == '__main__':    # 测试    print("测试搜索功能...")    results = search_articles("OpenClaw")    print(f"找到 {len(results)} 篇文章")

第 4 步:配置 OpenClaw Agent

创建 SOUL.md

# SOUL.md - 知识管理助手的人格## 定位你是专业的知识管理助手,帮助用户高效整理和利用知识。## 能力- 保存文章到知识库- 搜索和检索文章- 按分类浏览- 为写作整理素材- 提取金句和摘要## 工作风格- 主动询问分类偏好- 自动打标签- 定期整理和去重- 提供写作建议## 口头禅- "这篇文章我帮你保存好了,分类到 XX 目录"- "找到 X 篇相关文章,需要我打开哪篇?"- "这些素材够你写一篇文章了,需要我生成大纲吗?"

创建 USER.md

# USER.md - 用户信息- **姓名**:兵哥- **兴趣领域**:AI、技术写作、效率工具- **写作方向**:OpenClaw 教程、AI 应用- **偏好分类**:技术 > 商业 > 生活

创建 agents.yaml 配置:

agents:  - name: knowledge-assistant    agentDir: /Users/bingge/workspace/knowledge-base    rules:      - channel: feishu        keyword: "保存文章"      - channel: feishu        keyword: "搜索文章"

第 5 步:测试使用

重启 OpenClaw:

openclaw gateway restart

测试 1:保存文章

在飞书中发送:

保存文章:https://mp.weixin.qq.com/s/xxx

助手回复:

✅ 已保存:OpenClaw 入门教程分类:技术位置:/Users/bingge/workspace/knowledge-base/articles/tech/20260325150000_OpenClaw 入门教程.md已自动打标签:#OpenClaw #AI #教程

测试 2:搜索文章

在飞书中发送:

搜索文章:OpenClaw

助手回复:

找到 3 篇相关文章:1. **OpenClaw 入门教程**   分类:技术 | 标签:#OpenClaw#AI#教程   保存时间:2026-03-252. **OpenClaw vs 其他 Agent 框架**   分类:技术 | 标签:#OpenClaw#对比   保存时间:2026-03-263. **OpenClaw 插件开发**   分类:技术 | 标签:#OpenClaw#开发   保存时间:2026-03-27需要我打开哪一篇?

测试 3:查看分类统计

在飞书中发送:

查看分类

助手回复:

📚 知识库分类统计:- 技术:15 篇- 商业:8 篇- 生活:5 篇总共 28 篇文章

测试 4:为写作整理素材

在飞书中发送:

我要写 OpenClaw 教程,帮我整理素材

助手回复:

📝 为「OpenClaw 教程」整理的素材:找到相关文章:12 篇📁 分类统计:- 技术:10 篇- 商业:2 篇🏷️ 相关标签:#OpenClaw#AI#教程#开发#插件📄 推荐文章:1. OpenClaw 入门教程2. OpenClaw vs 其他 Agent 框架3. OpenClaw 安全优势4. OpenClaw 多 Agent 实战5. OpenClaw 定时任务需要我帮你生成文章大纲吗?

🎯 进阶用法

1. 批量导入

# 批量导入已有收藏urls = [    "https://...",    "https://...",    # ...]for url in urls:    save_article(url)    print(f"已保存:{url}")

2. 定期整理

# 添加定时任务,每周整理一次openclaw cron add \  --name "knowledge-cleanup" \  --cron "0 10 * * 0" \  --message "整理知识库,删除重复文章,更新索引"

3. 导出分享

# 导出为 HTMLdef export_to_html(output_path: str):    """导出知识库为 HTML"""    # 实现略    pass

4. 同步到云端

# 用 git 同步cd ~/workspace/knowledge-basegit add .git commit -m "更新知识库"git push

⚠️ 常见问题

Q1:文章解析失败怎么办?

A: 检查 URL 是否可访问,或手动填写文章信息:

save_article(    url="https://...",    manual_info={        "title": "手动标题",        "author": "作者",        "content": "内容",    })

Q2:分类不准确怎么办?

A: 手动指定分类:

保存文章:https://... 分类:tech

Q3:搜索不准确怎么办?

A: 优化标签系统,或添加全文搜索:

# 使用 whoosh 或 elasticsearchfrom whoosh.index import create_in# ...

🎉 总结

通过本文,你学会了:

  1. 1. ✅ 搭建个人知识库目录结构
  2. 2. ✅ 创建文章保存脚本
  3. 3. ✅ 配置 OpenClaw 知识管理助手
  4. 4. ✅ 实现自动分类和标签
  5. 5. ✅ 搜索和检索文章
  6. 6. ✅ 为写作整理素材

下一步:

  • • 配置更多自动化规则
  • • 集成更多数据源
  • • 优化分类和标签算法
  • • 搭建 Web 界面

🚀 扩展阅读

  • • 进阶 2:《自动化工作流》- 让知识收集全自动
  • • 进阶 4:《内容创作助手》- 从知识到文章的完整流程
  • • 入门 6:《插件开发教程》- 开发更强大的知识管理插件

🔗 相关资源

  • • 完整代码:/Users/ldb/.openclaw/workspace/projects/公众号运营/articles/进阶系列/1-knowledge-management/
  • • OpenClaw 文档:https://docs.openclaw.ai
  • • 知识管理最佳实践:[待补充]

作者:Mac ⚡\ 编辑:兵哥\ 发布时间:2026-04-01


你的知识管理助手搭建好了吗?欢迎在评论区分享你的使用体验!