基于 LLM 的本地 Wiki 构建实战:将 AI 对话记录炼化成结构化知识库

0 阅读14分钟

本文介绍如何用 Python 搭建一套自动化的知识库流水线,支持从豆包、Kimi 等平台 AI 对话记录中自动提取实体/概念、生成双向链接 Wiki 页面,并内置完整的健康检查(Health Check)机制。项目开源实现参考:github.com/JuneDylan/L…


作为开发者,你是否也有这样的困扰?

和Kimi、豆包、Claude聊技术、调bug、查方案,累计攒了上百条AI对话,每一条都藏着解决问题的关键思路——可能是深夜调试async/await的细节,可能是大模型部署的踩坑经验,也可能是论文选题的多轮打磨。但这些对话导出后,要么扔进文件夹吃灰,要么杂乱无章,3个月后遇到同类问题,还是得重新打开AI重复提问,白白浪费时间。

AI降低了知识获取的成本,却没解决知识留存与复用的核心痛点。于是我参考Karpathy的LLM Wiki理念,做了本土化工程化落地,开发了这款本地LLM知识库编译器,目前已开源!

无需复杂部署,本地就能跑通,支持零代码/轻代码两种模式,能自动把零散的AI对话、公众号文章、论文,转化为结构化、可检索、可关联的知识体系,目前已处理300+条对话,生成325个知识页面、169个技术概念、144个实体对象,知识库健康评分87/100。

本文将从「项目核心价值→架构设计→源码解析→实操教程→开源地址」,手把手教你搭建属于自己的本地知识库,全程干货,建议收藏备用,文末附完整开源仓库链接~

一、项目核心定位:不是笔记软件,是「知识编译器」

很多人会把它和Obsidian、Notion这类笔记软件混淆,但核心差异很明显:笔记软件需要你手动整理、手动分类、手动建链接,而这款LLM知识库编译器,核心是「让AI替你做所有体力活」。

类比程序员写代码的流程:你负责定义「知识规则」(Schema),LLM负责「编译执行」(提取实体、建立关联、格式化输出),你的角色从「笔记搬运工」,变成「知识架构师」。

核心优势(开发者最关心的3点):

  • ✅ 本地优先:所有数据存储在本地,Obsidian可视化管理,无需上传云端,隐私安全有保障(适配Obsidian本地存储特性,支持离线访问);
  • ✅ 全自动化:脚本一键批量处理AI对话、论文、公众号文章,自动生成结构化知识页,无需手动整理;
  • ✅ 可扩展:基于Python开发,源码简洁,支持自定义知识Schema、适配多平台AI对话格式(Kimi/豆包/Claude),可根据自身需求二次开发。

补充说明:项目核心依赖Obsidian实现知识可视化和双向链接,Obsidian作为免费开源的本地笔记工具,支持知识图谱、Canvas画布等功能,完美适配本地知识库的管理需求(官网:obsidian.md/,可直接下载安装,无需…

二、架构设计:3层架构,极简可落地

项目全程文件系统驱动,无复杂依赖,哪怕是新手也能快速看懂架构、跑通项目,核心分为3层,对应源码目录结构,看完就能上手改代码。

2.1 核心架构拆解

image.png

# 项目源码目录
llm-wiki/
├── raw/                  # 原始素材层(只读,不修改)
│   ├── dialogs/          # AI对话素材(Markdown格式,支持多平台导出)
│   └── articles/         # 公众号/论文素材(Obsidian剪藏或手动导入)
├── wiki/                 # 知识输出层(LLM自动生成,结构化存储)
│   ├── concepts/         # 技术概念页(如:液态神经网络.md)
│   ├── entities/         # 实体页(如:HighD数据集.md、LLM.md)
│   └── sources/          # 来源溯源页(对应原始对话/文章,便于回溯)
├── src/                  # 核心脚本层(开源核心,可直接复用)
│   ├── __init__.py
│   ├── config.py         # 配置文件(API密钥、路径等,可自定义)
│   ├── ingest_dialogue.py# 单对话处理脚本(核心:对话解析+知识蒸馏)
│   ├── batch_ingest.py   # 批量处理脚本(核心:批量蒸馏+增量更新)
│   ├── healthcheck.py    # 知识库健康检查脚本(断链、重复检测)
│   ├── fix_missing_pages.py # 断链修复脚本(自动创建占位页)
│   └── slugify.py        # Slug统一工具(解决路径一致性问题)
├── template/             # 模板目录(零代码模式专用)
│   ├── raw/              # 零代码素材目录
│   └── wiki/             # 零代码知识输出目录
├── .env                  # API配置文件(存放LLM密钥,不提交Git)
├── requirements.txt      # 依赖清单(一键安装)
└── README.md             # 详细文档(新手必看)

2.2 各层核心作用(结合源码逻辑)

  1. 原始素材层(raw/) :所有原始数据的“仓库”,支持AI对话(Markdown格式)、公众号文章(Obsidian Web Clipper剪藏)、论文(PDF/Markdown),全程只读,避免误删原始上下文,确保知识可溯源。
  2. 知识输出层(wiki/) :LLM自动生成的结构化知识,每一个页面都遵循统一Schema,包含Frontmatter标签、双向链接、参考来源,可直接用Obsidian打开,支持搜索、知识图谱可视化。
  3. 核心脚本层(src/) :项目的“大脑”,所有自动化逻辑都在这里,也是开源代码的核心,下面会重点解析关键脚本的实现思路。

三、核心源码解析:4个关键脚本,读懂自动化逻辑

项目的核心价值的是“自动化”,而自动化的关键就在4个核心脚本。这里不贴完整代码(避免冗余),只解析核心逻辑、关键代码片段和使用场景,帮你快速理解原理,也方便你基于源码二次开发。

3.1 对话解析脚本:ingest_dialogue.py(单文件处理核心)

作用:处理单条AI对话,完成“对话解析→LLM结构化→知识页生成”,是整个项目的基础,新手可先从这个脚本入手,理解核心流程。

核心逻辑(3步走):

# 核心逻辑片段(简化版,完整代码见开源仓库)
def ingest_dialogue(file_path):
    # 1. 解析对话:适配Kimi/豆包/Claude导出格式,提取核心信息
    dialogue = parse_dialogue(file_path)  # 自定义解析函数,提取问题、结论、代码块
    questions = dialogue["questions"]    # 对话中的核心问题
    conclusions = dialogue["conclusions"]# 对话中的最终结论
    code_blocks = dialogue["code_blocks"]# 对话中的代码片段(按语言分类)
    
    # 2. 调用LLM,按预设Schema做结构化分析(核心Prompt设计)
    llm_response = call_llm_api(
        prompt=generate_distill_prompt(questions, conclusions, code_blocks),
        model="qwen-max"  # 支持豆包、Kimi、OpenAI,可在config.py中修改
    )
    # 解析LLM返回,提取实体、概念(按预设分类)
    entities = llm_response["entities"]  # 实体:algorithm/dataset/tool等
    concepts = llm_response["concepts"]  # 概念:method/principle/domain等
    
    # 3. 自动生成知识页(Markdown格式)
    generate_source_page(file_path, dialogue)  # 生成来源溯源页
    generate_concept_pages(concepts)           # 生成概念页
    generate_entity_pages(entities)           # 生成实体页
    return "处理完成,知识页已生成至wiki目录"

# 关键:预设Schema,确保LLM输出统一(避免自由发挥)
def generate_distill_prompt(questions, conclusions, code_blocks):
    prompt = f"""请将以下AI对话中的内容,按以下Schema提取结构化信息:
    实体分类(entities):person/organization/model/algorithm/dataset/venue/tool/project/hardware
    概念分类(concepts):method/principle/paradigm/metric/phenomenon/domain
    要求:1. 只提取对话中明确出现的内容;2. 每个实体/概念标注对应类型;3. 不添加无关信息。
    对话问题:{questions}
    对话结论:{conclusions}
    代码片段:{code_blocks}"""
    return prompt

使用场景:处理单条重要的AI对话(如复杂技术调试、论文思路探讨),执行命令即可生成对应的知识页:

python src/ingest_dialogue.py raw/dialogues/kimi-液态神经网络.md

3.2 批量处理脚本:batch_ingest.py(规模化核心)

作用:当AI对话积累到几十条、上百条时,单文件处理效率太低,这个脚本可批量扫描素材目录,增量处理新文件,避免重复生成,是规模化搭建知识库的关键。

核心逻辑(关键代码片段):

def batch_ingest():
    # 配置素材目录路径(可在config.py中修改)
    dialogs_dir = "raw/dialogues"
    articles_dir = "raw/articles"
    
    # 1. 获取所有素材文件,过滤已处理文件(增量处理)
    processed_files = load_processed_files()  # 记录已处理文件,避免重复
    all_files = get_all_files(dialogs_dir, articles_dir)  # 获取所有素材文件
    new_files = [f for f in all_files if f not in processed_files]
    
    # 2. 批量处理每一个新文件
    for file in new_files:
        try:
            if file.endswith(".md") and "dialog" in file:
                ingest_dialogue(file)  # 处理AI对话
            else:
                ingest_article(file)   # 处理公众号/论文(适配剪藏格式)
            record_processed_file(file)  # 记录已处理文件
            print(f"✅ 处理完成:{file}")
        except Exception as e:
            print(f"❌ 处理失败{file}{str(e)}")
    
    print(f"批量处理完成,共处理{len(new_files)}个新文件")

使用场景:每天花1分钟,将新的AI对话、剪藏的文章放入对应目录,执行以下命令,一键完成批量知识蒸馏:

python src/batch_ingest.py

3.3 健康检查脚本:healthcheck.py(知识库维护核心)

作用:知识库用久了,难免出现断链、重复页面、标签不规范等问题,这个脚本可从9个维度校验知识库质量,相当于知识库的“Linter”,确保知识体系的一致性。

核心校验维度(对应源码逻辑):

def health_check():
    check_results = {
        "frontmatter_completeness": check_frontmatter(),  # Frontmatter完整性
        "broken_link": check_broken_links(),             # 断链检测(核心)
        "isolated_pages": check_isolated_pages(),        # 孤立页面(无关联链接)
        "source_validity": check_source_validity(),      # 来源有效性(溯源是否正常)
        "tag_normalization": check_tag_normalization(),  # 标签规范化
        "content_quality": check_content_quality(),      # 内容质量(无空页面)
        "index_completeness": check_index_completeness(),# 索引完整性
        "graph_consistency": check_graph_consistency(),  # 知识图谱一致性
        "duplicate_pages": check_duplicate_pages()       # 重复页面检测
    }
    # 计算健康评分(满分100)
    score = calculate_health_score(check_results)
    # 输出报告
    generate_health_report(check_results, score)
    return score

使用场景:每次批量处理后,执行以下命令,查看知识库健康状态,及时修复问题:

python src/healthcheck.py

检查项详解:

image.png 补充:如果检测出断链问题,可执行python src/fix_missing_pages.py,自动批量创建缺失的占位页,快速修复断链,提升健康评分(亲测从74分涨到87分)。

3.4 Slug统一工具:slugify.py(避坑核心)

这是我踩过最深的坑!文件系统驱动的知识库,路径一致性就是生死线,不同脚本Slug生成逻辑不统一,会导致断链、文件名乱码(Windows下尤为明显)。

核心解决方案(统一Slug生成逻辑,源码片段):

import re

def slugify(text: str) -> str:
    """统一Slug生成逻辑,避免路径混乱"""
    text = text.lower().strip()
    text = re.sub(r'[\/]', '-', text)  # 关键:将路径分隔符替换为横线,避免生成子目录
    text = re.sub(r'[^\w\s-]', '', text)  # 移除非字母/数字/横线/空格的字符
    text = re.sub(r'[-\s]+', '-', text)  # 多个横线/空格合并为一个横线
    return text.strip('-')  # 移除首尾横线

# 所有脚本调用该函数生成文件名,确保路径一致性
def generate_file_path(category, name):
    slug = slugify(name)
    return f"wiki/{category}/{slug}.md"

避坑提示:无论后续新增什么脚本,只要涉及文件名、路径生成,都调用这个slugify函数,可避免90%的路径相关问题,这也是开源项目中最关键的细节之一。

四、实操教程:5分钟跑通项目(零代码/轻代码任选)

项目已做极简适配,新手无需懂复杂代码,零代码模式可手动操作,有Python基础的可使用脚本自动化,

4.1 前期准备(必做)

  1. 下载安装Obsidian:访问官网obsidian.md/,根据自身系统(Win…
  2. 下载开源源码:克隆GitHub仓库(文末附链接),解压至本地,无需复杂配置;
  3. 准备AI助手:豆包、Kimi、ChatGPT均可(零代码模式用手动对话,轻代码模式需配置API密钥);
  4. (轻代码模式)配置Python环境:安装Python 3.8+,执行pip install -r requirements.txt,一键安装所有依赖。

4.2 零代码模式(推荐新手,无需编程)

适合不懂Python的新手,全程手动操作,核心靠AI完成知识蒸馏,Obsidian管理知识:

  1. 导入素材:

    1. AI对话:复制与AI的完整对话,保存为Markdown文件(后缀.md),放入template/raw/dialogs目录;
    2. 公众号/论文:用Obsidian的Web Clipper插件(需在Obsidian社区插件中开启)剪藏文章,自动存入template/raw/articles目录。
  2. 知识蒸馏:

    1. 复制素材内容,粘贴给AI,搭配仓库中prompt.md的蒸馏提示词(可直接复制使用);
    2. 复制AI生成的结构化内容,按“概念/实体/来源”分类,保存至template/wiki对应目录。
  3. 日常查阅:用Obsidian打开template目录,搜索关键词即可快速定位知识,点击双向链接串联相关内容,借助Obsidian的知识图谱,直观查看知识关联。

4.3 轻代码模式(自动化批量处理,适合开发者)

适合有基础Python经验的开发者,一键批量处理,解放双手:

  1. 配置API:在项目根目录的.env文件中,填写AI API密钥(支持豆包、Kimi、OpenAI),格式如下: LLM_PROVIDER=qwen # 可选:qwen/chatgpt/kimi `` LLM_API_KEY=你的API密钥 ``LLM_URL=对应API地址(可选,部分平台需填写)
  2. 批量处理:执行python src/batch_ingest.py,脚本自动扫描raw目录,批量处理所有素材,生成知识页;
  3. 维护知识库:执行python src/healthcheck.py检测问题,执行python src/fix_missing_pages.py修复断链;
  4. 检索知识:执行python src/query.py "关键词",一键调出所有关联的知识内容,快速复用。

4.4 核心注意事项(避坑必看)

  1. 原始素材只读:rawtemplate/raw目录下的素材,仅用于存档,不修改,所有编辑操作在wiki目录下进行,便于溯源;
  2. AI输出需核对:LLM可能出现分类错误、信息遗漏,处理后花1-2分钟核对,重点检查核心逻辑和术语准确性;
  3. 版本管理:建议用Git对项目目录做版本控制,避免误删内容,便于回溯历史版本;
  4. 插件适配:Obsidian可安装Dataview、Calendar等社区插件,提升知识库管理效率(开启社区插件需在Obsidian设置中关闭限制模式)。

五、项目开源与后续规划

目前项目已完整开源,所有脚本均保留详细注释,新手可快速上手,开发者可基于源码二次开发,适配自己的知识管理需求。

开源仓库地址(点击直达)

👉 **GitHub:github.com/JuneDylan/L… **

仓库包含:完整源码、详细README、Prompt模板、示例素材、Obsidian配置教程,新手克隆后可直接跑通。

后续规划(欢迎贡献代码)

  • 适配更多AI平台对话格式(目前支持Kimi/豆包/Claude,后续新增GPT-4o、通义千问);
  • 新增PDF批量处理功能,支持直接解析PDF论文,提取知识;
  • 优化Obsidian插件适配,新增一键生成知识图谱功能;
  • 完善中文文档,新增视频教程,降低新手上手门槛。

六、为什么做这个项目?

作为常年和AI打交道的开发者,我深刻体会到:技术人的核心竞争力,不是记住多少知识,而是能快速复用多少知识。

我们每天花大量时间和AI对话、查资料,本质上是在“生产知识”,但如果不做好留存和复用,这些时间就相当于白费——3个月后遇到同类问题,还是得重新提问、重新踩坑。

这款LLM知识库编译器,本质上是帮开发者“留住自己的思考”:把零散的AI对话、技术笔记,变成可检索、可关联、可复用的知识体系,让AI不仅是“问答工具”,更是“知识沉淀助手”。

最后,欢迎大家克隆源码、测试使用,遇到问题可在GitHub提交Issue,也欢迎贡献代码、提出优化建议~