打造个人知识管理助手 – 让 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. ✅ 搭建个人知识库目录结构 -
2. ✅ 创建文章保存脚本 -
3. ✅ 配置 OpenClaw 知识管理助手 -
4. ✅ 实现自动分类和标签 -
5. ✅ 搜索和检索文章 -
6. ✅ 为写作整理素材
下一步:
-
• 配置更多自动化规则 -
• 集成更多数据源 -
• 优化分类和标签算法 -
• 搭建 Web 界面
🚀 扩展阅读
-
• 进阶 2:《自动化工作流》- 让知识收集全自动 -
• 进阶 4:《内容创作助手》- 从知识到文章的完整流程 -
• 入门 6:《插件开发教程》- 开发更强大的知识管理插件
🔗 相关资源
-
• 完整代码: /Users/ldb/.openclaw/workspace/projects/公众号运营/articles/进阶系列/1-knowledge-management/ -
• OpenClaw 文档:https://docs.openclaw.ai -
• 知识管理最佳实践:[待补充]
作者:Mac ⚡\ 编辑:兵哥\ 发布时间:2026-04-01
你的知识管理助手搭建好了吗?欢迎在评论区分享你的使用体验!
夜雨聆风