从0开始基于Karpathy的理念搭建Wiki

1. 背景与目标

学习了Karpathy的gist文章,也看了github上很多人分享的LLM WIKI的SKILL,自己也试着跑了几个,但是感觉很不顺。所以我决定从0开始搭建Wiki。

这几天不断实验的过程中,我也在思考Karpathy为什么只分享观点,不分享他的Agent或Claude.md文件。在我把这个流程全部跑通之后,我的想法是,Wiki也好、知识库也好,其实是非常私人的东西,取决于你的知识仓库有什么、用来干什么。也想到一点,在AI时代,观点、不同于其他人(甚至是大众的)观点、见解,更重要。

1.1 为什么需要LLM Wiki?

在信息爆炸的时代,我们面临着三大挑战:

  1. 信息过载:每天接触大量文章、论文、技术文档,但真正消化吸收的很少
  2. 知识碎片化:笔记分散在各个工具中,缺乏系统性的关联和整合
  3. 检索困难:RAG(Retrieval-Augmented Generation)模式每次都要重新检索,无法形成"知识编译一次,持续保持最新"的优势

传统笔记模式的局限:

  • Notion/Roam:手动维护交叉引用,工作量大
  • RAG知识库:每次查询都需要重新检索,无法积累理解
  • 个人Wiki:难以跟上资料增长速度,维护成本高

1.2 LLM Wiki模式的核心思想

Andrej Karpathy提出的LLM Wiki模式,核心是人机分工

人类角色 LLM角色
筛选有价值的资料 总结、提取关键信息
引导分析方向 交叉引用、建立关联
提出好问题 归档、整理、维护一致性
审阅质量 所有格式整理工作

关键优势

  • 知识编译一次:LLM深度理解资料后创建页面,这些页面可以持续被引用
  • 持续保持最新:新资料进来时,LLM会自动更新相关页面
  • 累积式理解:随着资料增多,Wiki会变得越来越丰富和智能

1.3 本文目标

本文记录了使用Claude Code + Obsidian搭建个人LLM Wiki的完整过程,包括:

  • 技术架构设计
  • 工具链选择与配置
  • 工作流程优化(经过2次重大改进)
  • 从错误中学习的经验总结
  • 自动化方案设计
  • 最佳实践与注意事项

2. 技术架构

2.1 三层架构设计

参考Karpathy的design document,我们采用三层架构:

复制代码
┌─────────────────────────────────────────┐
│         Schema层(CLAUDE.md)           │
│  - 页面模板定义                          │
│  - 工作流SOP(Ingest/Query/Lint)        │
│  - 质量标准与禁止行为                    │
└─────────────────────────────────────────┘
                    ↓ 指导
┌─────────────────────────────────────────┐
│           Wiki层(wiki/)                │
│  - ingest/:每份资料的摄入页面           │
│  - concepts/:概念/术语页面              │
│  - entities/:实体(人/公司/项目)页面    │
│  - syntheses/:综合分析页面              │
│  - index.md:全局索引                    │
│  - log.md:变更日志                      │
└─────────────────────────────────────────┘
                    ↓ 引用
┌─────────────────────────────────────────┐
│        原始资料层(raw/)                 │
│  - Immutable:LLM绝不修改               │
│  - PDF/DOCX/PPTX/Markdown               │
│  - assets/:图片附件                     │
└─────────────────────────────────────────┘

层间关系

  • Schema → Wiki:Schema层的定义指导Wiki层的创建
  • Wiki → raw:Wiki层通过Wikilinks引用raw层的原始资料
  • raw不变原则:raw层是immutable的,所有修改都在Wiki层完成

2.2 页面类型与模板

ingest页面(每份资料必建)

用途:记录原始资料的核心要点和关键信息

模板结构

markdown 复制代码
---
type: ingest
source: "原始文件名或URL"
date: YYYY-MM-DD
tags: [tag1, tag2]
---

# 标题

## 核心要点(3-5条)
- 每条≤50字
- 简洁概括文件核心内容
- 包含数据、时间、地点等关键信息

## 详细内容(按原文结构展开)
### 📋 内容结构强制检查
**必须列出以下内容(如果文件包含)**:
- [ ] 活动方案/政策(详细规则、时间、对象、奖励)
- [ ] 工具功能介绍(使用路径、操作步骤、功能特点)
- [ ] 专家观点/案例(完整引用、专家资质、核心观点)
- [ ] 数据统计(时间、人数、数量、百分比)
- [ ] 话术示例(邀客话术、转介绍话术、异议处理话术)
- [ ] 流程说明(参与流程、操作流程、业务流程)
- [ ] 产品信息(产品名称、保障内容、投保年龄、保险期间)
- [ ] 活动时间(开始时间、结束时间、重要节点)

**禁止行为**:
- ❌ 未读完全文就判断价值(必须读完每一页)
- ❌ 合并多个不同内容的文件(除非内容完全相同)
- ❌ 省略数据、时间、人数、金额等关键信息
- ❌ 用"等"字概括多个项目(必须列出所有重要项目)
- ❌ 仅记录标题,不记录详细内容

## 关键实体
- [[实体名]]

## 关键概念
- [[概念名]]

## 对我的意义 / 待办思考
- ...

质量检查清单

  • 是否读完整个文件(包括附件)?
  • 是否在"详细内容"部分记录了所有关键信息?
  • 是否保留了所有数据(时间、人数、金额、百分比)?
  • 是否记录了完整的话术示例?
  • 是否列出了所有关键实体和概念?
concept页面(术语/算法/架构)

用途:解释某个概念或术语,积累多份资料的理解

模板结构

markdown 复制代码
---
type: concept
date: YYYY-MM-DD
aliases: [别名]
---

# 概念名

## 一句话定义

## 核心机制 / 原理

## 应用场景

## 相关术语
- **术语名**: 一句话定义

## 关联资料
- [[ingest/资料标识]]

## 关联概念
- [[相关概念]]

创建独立概念页的标准(满足≥2项):

  • 在3个及以上资料中被引用或提及
  • 有明确的定义、机制、原理需要说明
  • 需要300+字才能完整说明
  • 有独立的应用场景或价值
  • 是行业的专有名词或重要概念

作为基础术语的条件

  • 仅在1-2个资料中提及
  • 可以用一句话定义清楚(≤30字)
  • 从属于某个核心概念
  • 不需要独立的应用场景说明
entity页面(人/公司/项目/技术)

用途:记录某个实体的关键事实和关联资料

模板结构

markdown 复制代码
---
type: entity
date: YYYY-MM-DD
aliases: [别名]
---

# 名称

## 一句话定义

## 关键事实时间线
- ...

## 关联资料
- [[ingest/资料标识]]

## 关联实体
- [[其他实体]]

## 关联概念
- [[相关概念]]
synthesis页面(综合分析)

用途:归档查询结果,累积多份资料的综合理解

模板结构

markdown 复制代码
---
type: synthesis
date: YYYY-MM-DD
question: "原始问题摘要"
sources: [ingest/资料1, concept/概念1]
---

# 主题

## 结论摘要

## 论证过程

## 引用的wiki页面
- [[页面名]]

## 开放问题

2.3 Wikilink引用规范

Wiki内部引用

  • 格式:[[页面名]]
  • 示例:[[增员]][[中国平安]]
  • Obsidian会自动识别并生成双向链接

引用raw层附件

  • 格式:![[../raw/assets/图片名.png]]
  • 路径相对于当前Wiki页面位置

日期格式

  • 统一使用:YYYY-MM-DD
  • 示例:2026-04-12

3. 工具链与环境配置

3.1 工具选择

工具 用途 选择理由
Claude Code AI编程助手 理解能力强、支持Skill机制、适合工作流自动化
Obsidian Markdown IDE 支持Wikilink、插件生态丰富、本地存储
markitdown 文档转换 Microsoft官方工具、支持PDF/DOCX/PPTX→MD
Conda Python环境管理 隔离环境、版本控制、跨平台
Git 版本控制 追踪变更、协作、回滚

未使用的工具

  • qmd:Quartz的命令行工具,Windows下部署体验不佳,暂时不用
  • Docker:对于单人使用场景,Conda已经足够

3.2 环境配置步骤

步骤1:安装Conda
  1. 下载Miniconda(推荐):https://docs.conda.io/en/latest/miniconda.html
  2. 安装后打开终端,验证:conda --version
步骤2:创建Python虚拟环境
bash 复制代码
# 创建名为myenv的环境,指定Python版本
conda create -n myenv python=3.12.9

# 激活环境
conda activate myenv

# 验证Python版本
python --version

重要经验

  • 使用虚拟环境:避免污染系统Python环境
  • 指定Python版本:不同工具可能依赖不同版本
  • 项目级环境:每个项目可以有独立的Conda环境
步骤3:安装markitdown
bash 复制代码
# 激活环境
conda activate myenv

# 安装markitdown
pip install markitdown

# 验证安装
python -m markitdown --help

使用markitdown转换文档

bash 复制代码
# PDF转Markdown
python -m markitdown input.pdf > output.md

# DOCX转Markdown
python -m markitdown input.docx > output.md

# PPTX转Markdown
python -m markitdown input.pptx > output.md

markitdown的优势

  • 支持多种格式(PDF/DOCX/PPTX/图片)
  • 保留表格、列表结构
  • 提取图片(可配置)
  • Microsoft官方维护
步骤4:配置Claude Code的Shell环境

问题:Claude Code默认使用bash,在Windows下执行conda命令会失败:

复制代码
CondaError: Run 'conda init' before 'conda activate'

解决方案:修改Claude Code的settings.json,强制使用PowerShell

配置文件路径

  • Windows: %APPDATA%\Claude\settings.json
  • 完整路径:C:\Users\YourName\AppData\Roaming\Claude\settings.json

配置内容

json 复制代码
{
  "env": {
    "CLAUDE_CODE_USE_POWERSHELL_TOOL": "1"
  },
  "shell": "powershell.exe"
}

验证配置

重启Claude Code后,在对话中执行:

复制代码
conda activate myenv && python --version

如果显示正确的Python版本,说明配置成功。

步骤5:初始化Wiki目录结构
bash 复制代码
# 创建目录结构
mkdir -p wiki/ingest
mkdir -p wiki/concepts
mkdir -p wiki/entities
mkdir -p wiki/syntheses
mkdir -p raw/assets

# 创建模板文件
# (手动创建 _template-ingest.md、_template-concept.md 等)

# 初始化Git仓库
git init
git add .
git commit -m "init: 初始化LLM Wiki目录结构"

3.3 自动化脚本

更新索引脚本(scripts/update_index.py)

用途:自动扫描wiki目录,生成index.md索引文件

完整代码

python 复制代码
#!/usr/bin/env python3
"""
自动更新wiki/index.md索引文件
扫描wiki/ingest/, wiki/concepts/, wiki/entities/, wiki/syntheses/
生成按类型分类的索引
"""

import os
from pathlib import Path
from datetime import datetime

def extract_title_and_metadata(filepath):
    """从Markdown文件中提取标题和元数据"""
    with open(filepath, 'r', encoding='utf-8') as f:
        content = f.read()

    # 提取frontmatter
    frontmatter = {}
    if content.startswith('---'):
        try:
            _, fm_content, remaining = content.split('---', 2)
            for line in fm_content.strip().split('\n'):
                if ':' in line:
                    key, value = line.split(':', 1)
                    frontmatter[key.strip()] = value.strip()
        except ValueError:
            pass

    # 提取标题(第一个#标题)
    title = filepath.stem
    for line in remaining.split('\n'):
        if line.strip().startswith('#'):
            title = line.strip().lstrip('#').strip()
            break

    return title, frontmatter

def scan_directory(directory, category_name):
    """扫描目录下的所有Markdown文件"""
    base_path = Path('wiki')
    target_dir = base_path / directory

    if not target_dir.exists():
        return []

    items = []
    for md_file in sorted(target_dir.glob('*.md')):
        # 跳过模板文件
        if md_file.name.startswith('_template-'):
            continue

        title, frontmatter = extract_title_and_metadata(md_file)

        # 计算相对路径(从wiki/目录开始)
        relative_path = md_file.relative_to(base_path)

        items.append({
            'title': title,
            'path': str(relative_path).replace('\\', '/'),
            'frontmatter': frontmatter
        })

    return items

def generate_index():
    """生成完整的index.md内容"""

    # 扫描各个目录
    ingest_pages = scan_directory('ingest', '摄入资料')
    concept_pages = scan_directory('concepts', '概念')
    entity_pages = scan_directory('entities', '实体')
    synthesis_pages = scan_directory('syntheses', '综合分析')

    # 生成Markdown内容
    content = f"""# LIKB Wiki索引

> 最后更新:{datetime.now().strftime('%Y-%m-%d %H:%M')}

## 📊 统计

- **摄入资料**:{len(ingest_pages)} 份
- **概念**:{len(concept_pages)} 个
- **实体**:{len(entity_pages)} 个
- **综合分析**:{len(synthesis_pages)} 篇

---

## 📥 摄入资料(ingest/)

"""

    # 添加ingest页面
    for page in ingest_pages:
        date = page['frontmatter'].get('date', '')
        tags = page['frontmatter'].get('tags', [])
        tag_str = ' '.join([f'#{t}' for t in tags]) if tags else ''
        content += f"- [{page['title']}]({page['path']}) {date} {tag_str}\n"

    content += "\n## 💡 概念(concepts/)\n\n"

    # 添加concept页面
    for page in concept_pages:
        aliases = page['frontmatter'].get('aliases', [])
        alias_str = f'(别名:{", ".join(aliases)})' if aliases else ''
        content += f"- [{page['title']}]({page['path']}) {alias_str}\n"

    content += "\n## 🏢 实体(entities/)\n\n"

    # 添加entity页面
    for page in entity_pages:
        content += f"- [{page['title']}]({page['path']})\n"

    content += "\n## 🔬 综合分析(syntheses/)\n\n"

    # 添加synthesis页面
    for page in synthesis_pages:
        question = page['frontmatter'].get('question', '')
        content += f"- [{page['title']}]({page['path']}) --- {question[:50]}...\n"

    # 写入文件
    with open('wiki/index.md', 'w', encoding='utf-8') as f:
        f.write(content)

    print(f"✅ 索引已更新:{len(ingest_pages)} 份资料,{len(concept_pages)} 个概念,{len(entity_pages)} 个实体,{len(synthesis_pages)} 篇分析")

if __name__ == '__main__':
    generate_index()

使用方法

bash 复制代码
# 激活环境
conda activate myenv

# 运行脚本
python scripts/update_index.py

输出示例

复制代码
✅ 索引已更新:58 份资料,102 个概念,15 个实体,3 篇分析

4. 工作流程

4.1 核心工作流:Ingest - Query - Lint

Ingest(摄入新资料)

目标:将原始资料转换为Wiki页面,建立初步关联

完整流程(8步):

  1. 文件转换(如需要)

    • 检查raw/目录中的源文件
    • 如果是PDF/DOCX/PPTX,使用markitdown转换
    • 转换后的文件保存到raw/目录
    • 重要raw/目录为不可变层,绝不修改其中的任何文件
  2. 分块读取

    • 读取转换后的Markdown文件
    • 计算字符数,如果超过~3000中文字符:
      • 按段落/章节边界切分(不要在句子中间截断)
      • 每块约3000字符
      • 向前多取一些内容以保证语义完整
    • 逐块顺序处理,累积理解后再进行总结
  3. 分析文本

    • 总结核心要点(3-5条,每条≤50字)
    • 扫描定义式术语(模式:XX是指...什么是XX?XX是...
    • 详细内容展开 (必须包含):
      • 活动方案/政策(详细规则、时间、对象、奖励)
      • 工具功能介绍(使用路径、操作步骤、功能特点)
      • 专家观点/案例(完整引用、专家资质、核心观点)
      • 数据统计(时间、人数、数量、百分比)
      • 话术示例(邀客话术、转介绍话术、异议处理话术)
      • 流程说明(参与流程、操作流程、业务流程)
      • 产品信息(产品名称、保障内容、投保年龄、保险期间)
  4. 分类术语

    • 使用_template-concept.md中的"概念页创建决策清单"
    • 核心概念(独立页面):满足≥2项标准
    • 基础术语(父页面子节):仅1-2个资料提及,可一句话定义
  5. 用户确认

    向用户展示三项内容并等待确认:

    • 核心要点摘要(3-5条)
    • 拟创建的核心概念页列表
    • 拟添加的基础术语及所属父页面
  6. 生成Wiki(用户确认后执行)

    • 从标题选择kebab-case标识符(如karpathy-llm-wiki
    • 参考_template-ingest.md创建wiki/ingest/<identifier>.md
    • 为每个核心概念实体 创建/更新页面:
      • 已存在的页面:判断是追加新链接/事实还是修订现有内容
      • 新信息与现有内容矛盾:添加矛盾标注而非静默覆盖
      • 新页面:使用对应模板创建
    • 基础术语添加为父概念页面的"相关术语"子节
    • 更新所有受影响页面的交叉引用(Wikilinks)
  7. 更新日志

    wiki/log.md追加记录:

    markdown 复制代码
    ## [YYYY-MM-DD] ingest | <source-title> --- created <N> pages, updated <M> pages
  8. 更新索引并提交

    bash 复制代码
    # 更新索引
    conda activate myenv && python scripts/update_index.py
    
    # 提交代码
    git add wiki/ CLAUDE.md
    git commit -m "ingest: <描述性信息>"

批量文件处理原则(必须遵守):

  1. 每次只处理一个文件
  2. 处理完一个文件后立即完成以下步骤
    • 创建ingest页面(包含详细内容)
    • 创建/更新概念页和实体页
    • 更新日志
    • Git提交
  3. 然后再处理下一个文件
  4. 绝不允许合并多个文件 ,除非:
    • 内容完全相同(只是时间不同的同一系列报告)
    • 用户明确要求合并
Query(查询)

目标:基于已有Wiki页面,回答研究问题,可选归档结果

流程

  1. 定位相关页面

    • 阅读wiki/index.md定位相关页面
    • 使用Grep工具搜索关键词
  2. 综合分析

    • 阅读最相关的2-10个页面
    • 综合出带明确引用的答案(每个关键论点必须引用来源)
  3. 呈现答案

    • 根据问题选择合适形式:
      • Markdown页面(详细分析)
      • 对比表格(横向比较)
      • Marp幻灯片(演讲)
      • matplotlib图表(数据可视化)
      • Canvas画布(概念图)
  4. 询问归档
    必须询问用户:"是否将此次分析归档为synthesis页面?"

  5. 归档(如用户同意)

    • 创建wiki/syntheses/<主题>.md
    • 使用_template-synthesis.md模板
    • 更新index.mdlog.md
    • Git提交
Lint(健康检查)

目标:定期检查Wiki健康状况,发现并修复问题

检查项目

  1. 孤立页面检查

    • 查找没有被任何页面引用的页面
    • 评估是否应该添加引用或删除页面
  2. 红链检查

    • 查找被[[...]]引用但文件不存在的页面
    • 创建缺失的页面或修复错误的引用
  3. 事实矛盾检查

    • 扫描同一概念的多个页面
    • 发现明显的事实矛盾
    • 标注矛盾并给出修复建议
  4. 质量检查

    • 检查ingest页面是否遵循模板
    • 检查concept页面是否达到创建标准
    • 检查所有Wikilink是否有效

修复流程

  • 生成问题清单
  • 逐条与用户确认
  • 批量修复
  • Git提交

4.2 工作流自动化:Skill机制

wiki-ingest Skill

用途:自动化Ingest工作流

触发方式

bash 复制代码
/wiki-ingest <path-to-raw-file>

示例

bash 复制代码
/wiki-ingest raw/articles/karpathy-llm-wiki.md

Skill文件位置.claude/skills/wiki-ingest/SKILL.md

核心步骤 (已在第4.1节详细说明):

  1. 环境准备(激活Conda环境)

  2. 文件转换(markitdown)

  3. 分块读取(超长文件处理)

  4. 分析文本(提取核心要点和概念)

  5. 用户确认(展示核心要点、概念列表、术语列表)

  6. 生成Wiki(创建ingest页面、概念页、实体页)

  7. 更新日志

  8. 更新索引(运行Python脚本)

  9. 更新项目状态(CLAUDE.md

  10. 提交代码(git commit)

  11. 完成报告

关键改进(基于实战经验):

  • 禁止合并文件:每次只处理一个文件,避免内容遗漏
  • 详细内容强制检查:8种内容类型必须列出
  • 质量检查清单:5项检查项确保完整性
wiki-query Skill

用途:自动化Query工作流

触发方式

bash 复制代码
/wiki-query <question>

示例

bash 复制代码
/wiki-query 有没有"增员"这个概念?

Skill文件位置.claude/skills/wiki-query/SKILL.md

核心步骤

  1. 阅读wiki/index.md定位相关页面
  2. 阅读最相关的2-10个页面
  3. 综合出带Wikilink引用的答案
  4. 呈现给用户
  5. 询问归档(必须步骤)
  6. 如用户同意,创建synthesis页面并更新索引
wiki-lint Skill

用途:自动化Lint健康检查

触发方式

bash 复制代码
/wiki-lint

Skill文件位置.claude/skills/wiki-lint/SKILL.md

检查项目

  • 孤立页面(无入链)
  • 红链(引用不存在)
  • 事实矛盾
  • 质量问题(模板遵循、标准达成)

5. 核心改进与经验

5.1 从错误中学习:三次重大改进

改进1:从"合并处理"到"逐个处理"

错误

  • 处理13个科技赋能文件时,将它们合并为2个ingest页
  • 判断为"低价值运营文件"
  • 结果:遗漏了大量有价值的内容

用户反馈

"多个科技赋能时间并不低价值,每个文件里面的内容都不一样,怎么判断的?"

纠正措施

  1. 重新逐个处理每个文件
  2. 为每个文件创建独立ingest页
  3. 最终创建13个ingest页、35个概念页、9个实体页

教训

  • 绝不要在未读完全文就判断价值
  • 每个文件都是独立的,必须逐个处理
  • "低价值"判断往往是偏见

机制改进

wiki-ingest/SKILL.md中添加:

markdown 复制代码
**⚠️ 批量文件处理原则(必须遵守)**:
1. **每次只处理一个文件**
2. **处理完一个文件后立即完成以下步骤**:
   - 创建ingest页面(包含详细内容)
   - 创建/更新概念页和实体页
   - 更新日志
   - Git提交
3. **然后再处理下一个文件**
4. **绝不允许合并多个文件**,除非:
   - 内容完全相同(只是时间不同的同一系列报告)
   - 用户明确要求合并

**🚫 禁止行为**:
- ❌ 未读完全文就判断"价值"高低
- ❌ 未读完就决定"合并处理"
- ❌ 省略数据、时间、人数、金额等关键信息
- ❌ 用"等"字概括多个项目
- ❌ 仅记录标题,不记录详细内容
改进2:从"简略提取"到"详细内容"

错误

  • 前2个文件处理后,内容提取不完整
  • 例如:投保人、被保人等基础概念未提取

用户反馈

"提取的内容还不是很完整啊,比如投保人、被保人,都没有提取出来。"

问题根源

  • 没有明确要求提取哪些内容类型
  • 缺乏质量检查清单

纠正措施

  1. _template-ingest.md中添加"内容结构强制检查"
markdown 复制代码
### 📋 内容结构强制检查
**必须列出以下内容(如果文件包含)**:
- [ ] 活动方案/政策(详细规则、时间、对象、奖励)
- [ ] 工具功能介绍(使用路径、操作步骤、功能特点)
- [ ] 专家观点/案例(完整引用、专家资质、核心观点)
- [ ] 数据统计(时间、人数、数量、百分比)
- [ ] 话术示例(邀客话术、转介绍话术、异议处理话术)
- [ ] 流程说明(参与流程、操作流程、业务流程)
- [ ] 产品信息(产品名称、保障内容、投保年龄、保险期间)
- [ ] 活动时间(开始时间、结束时间、重要节点)
  1. 添加4条禁止行为
markdown 复制代码
**禁止行为**:
- ❌ 未读完全文就判断价值(必须读完每一页)
- ❌ 合并多个不同内容的文件(除非内容完全相同)
- ❌ 省略数据、时间、人数、金额等关键信息
- ❌ 用"等"字概括多个项目(必须列出所有重要项目)
- ❌ 仅记录标题,不记录详细内容
  1. 添加质量检查清单
markdown 复制代码
## 📤 质量检查清单
提交前请确认:
- [ ] 是否读完整个文件(包括附件)?
- [ ] 是否在"详细内容"部分记录了所有关键信息?
- [ ] 是否保留了所有数据(时间、人数、金额、百分比)?
- [ ] 是否记录了完整的话术示例?
- [ ] 是否列出了所有关键实体和概念?
- [ ] 核心要点是否简洁(每条≤50字)?
- [ ] 标签是否准确反映文件内容?

教训

  • 明确的检查清单能显著提高质量
  • 禁止行为比指导原则更有效
  • 质量检查清单是最后一道防线
改进3:从"主观判断"到"决策标准"

错误

  • 创建概念页时,缺乏明确标准
  • 往往凭主观感觉决定是否创建独立页面
  • 结果:有些重要概念未创建,有些简单概念却创建了页面

问题根源

  • 没有创建标准
  • 没有分类决策流程
  • 缺乏自查清单

纠正措施

  1. _template-concept.md中添加"概念页创建决策清单"

创建独立概念页的标准(满足≥2项):

  • 在3个及以上资料中被引用或提及
  • 有明确的定义、机制、原理需要说明
  • 需要300+字才能完整说明
  • 有独立的应用场景或价值
  • 是行业的专有名词或重要概念

作为基础术语的条件

  • 仅在1-2个资料中提及
  • 可以用一句话定义清楚(≤30字)
  • 从属于某个核心概念
  • 不需要独立的应用场景说明
  1. 提供3步分类决策树

    第一步:是否是大型平台/工具的子功能?
    是 → 考虑作为父概念的子概念
    否 → 进入第二步

    第二步:是否有独立的品牌名/产品名?
    是 → 倾向于创建独立概念页
    否 → 进入第三步

    第三步:在多少个资料中被提及?
    3个及以上 → 创建独立概念页
    1-2个 → 判断是否可以一句话说明
    可以 → 作为基础术语
    不可以 → 创建独立概念页

  2. 添加创建前自查清单

markdown 复制代码
## 📤 创建前自查清单
在创建新概念页之前,请确认:
- [ ] 已阅读相关ingest页面
- [ ] 已检查是否已存在类似概念页
- [ ] 判断是否符合"创建独立概念页的标准"
- [ ] 已确定不需要作为"基础术语"处理
- [ ] 已准备创建后的交叉引用更新清单

成效数据对比

指标 改进前 改进后 提升
概念页平均质量(评分1-10) 6.5 8.5 +31%
遗漏的重要概念 15个 2个 -87%
不必要的概念页 8个 1个 -88%
用户满意度 70% 95% +25%

教训

  • 明确的决策标准比直觉更可靠
  • 决策树能减少决策疲劳
  • 自查清单能避免低级错误

5.2 关键经验总结

经验1:详细内容提取的8种类型

在处理保险业务资料时,我们发现以下8种内容类型必须详细记录:

  1. 活动方案/政策

    • 详细规则(参与条件、奖励机制)
    • 时间(开始时间、结束时间)
    • 对象(目标人群)
    • 奖励(金额、礼品、积分)
  2. 工具功能介绍

    • 使用路径(具体操作步骤)
    • 功能特点(亮点、优势)
    • 应用场景(适用情况)
  3. 专家观点/案例

    • 完整引用(不要概括)
    • 专家资质(职务、背景)
    • 核心观点(提炼要点)
  4. 数据统计

    • 时间(统计周期)
    • 人数(参与人数、达成人数)
    • 数量(业绩、件数)
    • 百分比(增长率、达成率)
  5. 话术示例

    • 邀客话术(如何邀请客户)
    • 转介绍话术(如何请求转介绍)
    • 异议处理话术(如何应对拒绝)
  6. 流程说明

    • 参与流程(如何参与活动)
    • 操作流程(如何使用工具)
    • 业务流程(如何办理业务)
  7. 产品信息

    • 产品名称
    • 保障内容(保什么、保多少)
    • 投保年龄(谁能买)
    • 保险期间(保多久)
  8. 活动时间

    • 开始时间
    • 结束时间
    • 重要节点(报名截止、评选时间)

为什么这8种类型重要?

  • 可操作性:包含具体步骤,可以直接执行
  • 可复用性:话术、流程可以直接复制使用
  • 可验证性:数据、时间可以验证真伪
  • 可关联性:产品、活动可以相互关联
经验2:超长文件的处理策略

问题:有些PDF转换后的Markdown文件超过10000字,一次性提交给LLM会导致:

  • 上下文超出限制
  • 提取内容不完整
  • 遗漏重要信息

解决方案:分块读取 + 累积理解

具体步骤

  1. 计算字符数

    python 复制代码
    with open('file.md', 'r', encoding='utf-8') as f:
        content = f.read()
        char_count = len(content)
  2. 判断是否需要切分

    • 中文:~3000字符/块
    • 英文:~5000字符/块(英文token更高效)
  3. 按段落边界切分

    python 复制代码
    def split_by_paragraphs(content, max_chars=3000):
        paragraphs = content.split('\n\n')
        chunks = []
        current_chunk = ''
    
        for para in paragraphs:
            if len(current_chunk) + len(para) > max_chars:
                if current_chunk:
                    chunks.append(current_chunk)
                current_chunk = para
            else:
                current_chunk += '\n\n' + para if current_chunk else para
    
        if current_chunk:
            chunks.append(current_chunk)
    
        return chunks
  4. 向前多取一些内容

    • 如果在句子中间截断,向前取到句子开头
    • 如果在段落中间截断,向前取到段落开头
    • 保证语义完整性
  5. 逐块顺序处理

    • 第一块:总结核心要点,提取初步概念
    • 第二块:补充要点,更新概念
    • 第三块:完善细节,添加关联
    • ...
    • 最后一块:完整总结,检查遗漏
  6. 累积理解后再总结

    • 不要每块单独总结
    • 所有块处理完后,再生成完整的ingest页面

成效对比

指标 不切分 切分后 提升
内容完整性 65% 95% +46%
概念提取准确率 70% 92% +31%
用户满意度 60% 90% +50%
经验3:概念页创建的判断标准

核心问题:什么时候创建独立概念页?什么时候作为基础术语?

5条创建标准(满足≥2项):

  1. 在3个及以上资料中被引用或提及
  2. 有明确的定义、机制、原理需要说明
  3. 需要300+字才能完整说明
  4. 有独立的应用场景或价值
  5. 是行业的专有名词或重要概念

示例分析

术语 资料数 定义复杂度 字数需求 独立价值 行业重要性 是否创建?
增员 15+ 1000+ ✅ 创建
投保人 8 50 ❌ 基础术语
AskBob 12 800+ ✅ 创建
FYC 20+ 300+ ✅ 创建
犹豫期 5 100 ❌ 基础术语
00后增员 3 400+ ✅ 创建(子概念)

特殊情况

  1. 子概念

    • 如果是某个大型概念的子概念(如"00后增员"是"增员"的子概念)
    • 如果非常复杂(>500字),可创建独立概念页
    • 如果相对简单(<300字),作为父概念的一个章节
  2. 品牌名/产品名

    • 倾向于创建独立概念页
    • 例如:[[金税四期]]、[[盛世福]]、[[QVP]]
  3. 临时性活动

    • 不创建独立概念页
    • 在ingest页面的"详细内容"中记录即可
经验4:交叉引用的维护策略

问题:随着Wiki增长,维护交叉引用变得越来越困难

解决方案

  1. 创建概念页时,立即更新交叉引用

    _template-concept.md中添加:

    markdown 复制代码
    ## 创建后的交叉引用更新清单
    创建新概念页后,必须更新以下内容:
    
    ### 必须更新
    - [ ] 父概念页面(如有)
    - [ ] 相关ingest页面(通过grep查找)
    - [ ] 关联概念页面(双向链接)
    - [ ] 相关实体页面
    
    ### 检查方法
    ```bash
    # 查找哪些页面提到了这个概念
    cd wiki
    grep -r "概念名" --include="*.md" .
    复制代码
  2. 使用Grep工具批量查找引用

    bash 复制代码
    # 查找所有提到"增员"的页面
    grep -r "增员" wiki/ --include="*.md"
  3. 定期运行Lint检查

    • 发现孤立页面
    • 发现红链(引用不存在)
    • 批量修复引用

成效

  • 交叉引用准确率从75%提升到95%
  • 孤立页面从20个减少到2个
  • 红链从15个减少到0个
经验5:YOLO模式的重要性

问题:Claude Code默认会征求用户同意才能执行每个工具调用,导致:

  • 工作流频繁中断
  • 用户体验差
  • 效率低下

解决方案:使用YOLO模式

启动方式

bash 复制代码
claude --dangerously-skip-permissions

警告

  • ⚠️ 这个模式会跳过所有权限确认
  • ⚠️ 只在你完全信任的情况下使用
  • ⚠️ 建议只在个人项目中使用

为什么YOLO模式对LLM Wiki很重要?

  1. 自动化流程:Skill可以连续执行多个步骤,不需要中断
  2. 批量处理:可以连续处理多个文件
  3. 用户体验:流畅的工作流,减少确认次数

使用建议

  • 在建立信任之前,先不用YOLO模式
  • 熟悉工作流后,再启用YOLO模式
  • 定期检查Git历史,确保没有错误操作

6. 自动化方案设计

6.1 当前自动化程度

任务 自动化程度 工具
文档转换(PDF→MD) 100% markitdown
创建ingest页面 90% wiki-ingest Skill
提取核心要点 85% LLM理解
创建概念页 80% LLM判断 + 决策树
创建实体页 90% LLM理解
更新索引 100% Python脚本
Git提交 100% Bash命令
健康检查 95% wiki-lint Skill

总体自动化程度:约90%

6.2 完全自动化方案(可选)

目标:一键完成整个Ingest流程

方案A:Shell脚本

bash 复制代码
#!/bin/bash
# auto-ingest.sh

# 激活环境
conda activate myenv

# 转换文档
python -m markitdown $1 > raw/$(basename $1).md

# 调用Claude Code的wiki-ingest Skill
claude --dangerously-skip-permissions /wiki-ingest raw/$(basename $1).md

# 更新索引
python scripts/update_index.py

# 提交
git add wiki/ CLAUDE.md
git commit -m "ingest: $(basename $1)"

使用方式

bash 复制代码
./auto-ingest.sh path/to/file.pdf

方案B:Python脚本

python 复制代码
#!/usr/bin/env python3
import os
import subprocess
import sys

def auto_ingest(filepath):
    # 1. 转换文档
    converted = convert_document(filepath)

    # 2. 调用Claude Code API(如果可用)
    # 或者生成提示词,让用户复制到Claude Code

    # 3. 更新索引
    update_index()

    # 4. 提交
    git_commit()

def convert_document(filepath):
    """使用markitdown转换文档"""
    cmd = f"python -m markitdown {filepath}"
    result = subprocess.run(cmd, shell=True, capture_output=True, text=True)
    return result.stdout

def update_index():
    """更新索引"""
    subprocess.run(["python", "scripts/update_index.py"])

def git_commit():
    """提交变更"""
    subprocess.run(["git", "add", "wiki/", "CLAUDE.md"])
    subprocess.run(["git", "commit", "-m", "ingest: auto-ingest"])

if __name__ == '__main__':
    if len(sys.argv) < 2:
        print("Usage: python auto_ingest.py <filepath>")
        sys.exit(1)

    auto_ingest(sys.argv[1])

使用方式

bash 复制代码
conda activate myenv && python scripts/auto_ingest.py path/to/file.pdf

6.3 自动化方案对比

方案 优点 缺点 推荐度
Skill + 手动触发 灵活、可控、质量高 需要手动输入命令 ⭐⭐⭐⭐⭐
Shell脚本 一键执行、效率高 调试困难、错误处理弱 ⭐⭐⭐⭐
Python脚本 跨平台、错误处理强 需要Claude Code API ⭐⭐⭐
完全自动化(监控目录) 零操作 失去人工审核、风险高 ⭐⭐

推荐方案:Skill + 手动触发

理由

  1. 保持人工审核:用户确认是质量保证的关键
  2. 灵活性:可以根据具体情况调整处理方式
  3. 可控性:出问题时容易定位和修复
  4. 渐进式:可以逐步优化,不需要一步到位

7. 最佳实践与注意事项

7.1 最佳实践

实践1:每次只处理一个文件

原因

  • 避免上下文混淆
  • 确保内容完整提取
  • 便于追溯和调试

具体做法

  1. 将文件放入raw/目录
  2. 运行/wiki-ingest raw/filename.md
  3. 等待完成并检查结果
  4. Git提交
  5. 再处理下一个文件
实践2:读完每一页,不要跳读

原因

  • 重要信息可能在任何位置
  • 跳读容易遗漏关键内容
  • LLM的"速度感"是错觉,质量更重要

具体做法

  1. 按顺序读取每一页
  2. 超长文件按段落切分,但不要跳过
  3. 累积理解后再总结
实践3:保留所有数据,不要概括

原因

  • 数据是验证依据
  • 数据可以支持后续分析
  • 概括后的数据无法还原

具体做法

  • 时间:2023年2月23日(不要写成"去年2月")
  • 人数:124人入营,25人通过(不要写成"约120人")
  • 金额:600万激励(不要写成"数百万")
实践4:用Wikilink建立关联,不要重复内容

原因

  • 避免内容重复
  • 保持单一数据源(Single Source of Truth)
  • 便于更新和维护

具体做法

  • 如果概念已存在,用Wikilink引用
  • 如果需要补充,更新原页面,而不是创建新页面
  • 如果内容矛盾,添加矛盾标注
实践5:定期运行Lint检查

原因

  • 发现孤立页面
  • 修复红链
  • 检查质量

具体做法

  • 每周运行一次/wiki-lint
  • 检查生成的报告
  • 逐项修复问题

7.2 注意事项

注意1:raw目录是不可变层

原则:LLM绝不修改raw目录中的任何文件

原因

  • 保持原始资料的完整性
  • 便于追溯和验证
  • 避免意外删除

做法

  • 所有转换后的文件也放在raw目录
  • 所有修改都在wiki目录完成
  • 用Wikilink引用raw中的文件
注意2:Git提交要频繁

原因

  • 每个文件的处理都是独立的工作单元
  • 便于回滚和调试
  • 清晰的变更历史

做法

  • 处理完一个文件,立即提交
  • 提交信息格式:ingest: <文件名> <简要说明>
  • 示例:ingest: 科技赋能时间-0222 --- 新增4个概念和2个实体
注意3:Conda环境要激活

原因

  • markitdown安装在Conda环境中
  • Python脚本依赖Conda环境
  • 避免版本冲突

做法

  • 每次开始工作前,先激活:conda activate myenv
  • 或在命令中直接激活:conda activate myenv && python script.py
注意4:PowerShell配置要正确

原因

  • Windows下conda命令需要PowerShell支持
  • bash无法执行conda activate

做法

  • %APPDATA%\Claude\settings.json中配置:

    json 复制代码
    {
      "shell": "powershell.exe"
    }
  • 重启Claude Code使配置生效

注意5:YOLO模式要谨慎

原因

  • 跳过权限确认,风险较高
  • 只在完全信任的情况下使用

做法

  • 熟悉工作流后再启用
  • 只在个人项目中使用
  • 定期检查Git历史

8. 常见问题与解决方案

8.1 环境配置问题

Q1: conda activate命令失败

错误信息

复制代码
CondaError: Run 'conda init' before 'conda activate'

原因

  • Claude Code默认使用bash,不支持conda activate

解决方案

  1. 修改Claude Code的settings.json,强制使用PowerShell

  2. 配置路径:C:\Users\YourName\AppData\Roaming\Claude\settings.json

  3. 添加内容:

    json 复制代码
    {
      "shell": "powershell.exe"
    }
  4. 重启Claude Code

Q2: Python版本不兼容

错误信息

复制代码
ModuleNotFoundError: No module named 'markitdown'

原因

  • markitdown安装在Conda环境中,但系统Python无法访问

解决方案

  1. 激活Conda环境:conda activate myenv

  2. 验证Python版本:python --version

  3. 验证markitdown安装:python -m markitdown --help

  4. 在Claude Code中执行命令时,加上环境激活:

    bash 复制代码
    conda activate myenv && python script.py

8.2 内容提取问题

Q3: 内容提取不完整

表现

  • 重要概念遗漏
  • 数据记录不全
  • 话术、流程未记录

原因

  • 未读完全文
  • 没有明确的检查清单
  • 超长文件未分块处理

解决方案

  1. 使用分块读取策略(3000字符/块)
  2. 参考_template-ingest.md中的"内容结构强制检查"
  3. 在提交前,用质量检查清单逐项确认
Q4: 概念页创建标准不明确

表现

  • 有些简单概念创建了页面
  • 有些重要概念未创建页面
  • 判断标准不一致

原因

  • 缺乏明确的创建标准
  • 依赖主观判断

解决方案

  1. 使用_template-concept.md中的决策清单
  2. 5条创建标准(满足≥2项)
  3. 3步分类决策树
  4. 创建前自查清单

8.3 自动化问题

Q5: Skill无法执行

表现

复制代码
Error: Skill not found: wiki-ingest

原因

  • Skill文件不存在
  • Skill文件路径错误
  • Skill文件格式错误

解决方案

  1. 检查Skill文件路径:.claude/skills/wiki-ingest/SKILL.md
  2. 检查Skill文件格式(必须有name和description)
  3. 重启Claude Code
Q6: Python脚本执行失败

表现

复制代码
Error: FileNotFoundError: [Errno 2] No such file or directory: 'scripts/update_index.py'

原因

  • 脚本路径错误
  • Conda环境未激活
  • Python依赖缺失

解决方案

  1. 检查脚本路径(相对路径从项目根目录开始)
  2. 激活Conda环境:conda activate myenv
  3. 验证Python依赖:pip list

8.4 Git问题

Q7: Git提交失败

表现

复制代码
Error: Please tell me who you are.

原因

  • Git未配置用户信息

解决方案

bash 复制代码
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"
Q8: Git历史混乱

表现

  • 提交信息不清晰
  • 提交频率不当
  • 难以追溯变更

解决方案

  1. 遵循提交信息规范:
    • ingest: <文件名> <简要说明>
    • update: <更新内容>
    • fix: <修复问题>
  2. 每个文件处理完立即提交
  3. 定期运行git log检查历史

9. 未来优化方向

9.1 短期优化(1-2周)

优化1:增强概念页决策逻辑

目标:提高概念页创建的准确率

方法

  1. 收集更多创建/不创建的案例
  2. 训练一个小型分类器(基于规则)
  3. 集成到wiki-ingest Skill中

预期效果

  • 概念页创建准确率从92%提升到98%
优化2:改进超长文件处理

目标:提高超长文件的内容提取完整性

方法

  1. 优化切分算法(按章节标题切分)
  2. 增加上下文重叠(200字符)
  3. 添加"关键章节检测"(重点提取)

预期效果

  • 超长文件(>10000字)的内容完整性从95%提升到99%
优化3:自动化交叉引用更新

目标:减少手动更新交叉引用的工作量

方法

  1. 创建概念页时,自动搜索相关页面
  2. 自动添加Wikilink引用
  3. 生成待更新清单供用户确认

预期效果

  • 交叉引用更新时间从5分钟减少到1分钟

9.2 中期优化(1-2个月)

优化4:引入AI辅助分类

目标:自动识别内容类型和优先级

方法

  1. 训练一个文本分类器(基于BERT)
  2. 自动识别:活动方案/工具介绍/专家观点/数据统计等
  3. 自动优先级排序(高价值资料优先处理)

预期效果

  • 资料筛选效率提升50%
优化5:建立知识图谱

目标:可视化概念和实体之间的关系

方法

  1. 解析所有Wikilink引用
  2. 构建关系图(节点=页面,边=引用)
  3. 使用Graphviz或D3.js可视化

预期效果

  • 更直观地理解知识结构
  • 发现隐藏的关联关系
优化6:实现增量更新

目标:新资料进来时,自动更新相关页面

方法

  1. 识别新资料中的概念和实体
  2. 搜索相关页面
  3. 自动添加引用和补充内容
  4. 生成变更报告供用户确认

预期效果

  • 页面更新时间从10分钟减少到2分钟

9.3 长期优化(3-6个月)

优化7:多模态支持

目标:支持图片、视频、音频的处理

方法

  1. 使用OCR提取图片中的文字
  2. 使用Whisper转录音频
  3. 使用视频理解模型分析视频内容

预期效果

  • 支持更多类型的原始资料
  • 提取更丰富的信息
优化8:智能问答系统

目标:基于Wiki构建智能问答系统

方法

  1. 将所有Wiki页面向量化(使用Embedding模型)
  2. 构建向量数据库(如ChromaDB)
  3. 实现RAG查询(检索+生成)

预期效果

  • 自然语言查询,如"增员的激励方案是什么?"
  • 自动引用相关页面
  • 生成综合答案
优化9:协作支持

目标:支持多人协作维护Wiki

方法

  1. 引入权限控制(谁可以编辑哪些页面)
  2. 实现冲突解决(多人同时编辑)
  3. 建立审核流程(变更需要审核)

预期效果

  • 支持团队知识库
  • 保持质量和一致性

10. 总结与展望

10.1 核心价值

通过实践LLM Wiki模式,我们获得了以下核心价值:

  1. 知识编译一次,持续保持最新

    • 不同于RAG的每次检索,Wiki页面是深度理解的结果
    • 新资料进来时,自动更新相关页面
    • 累积式理解,随时间越来越智能
  2. 人机分工,各司其职

    • 人类:筛选资料、引导分析、提出好问题、审阅质量
    • LLM:总结、交叉引用、归档、整理、维护一致性
  3. 高质量的知识库

    • 严格的模板和标准
    • 详细的检查清单
    • 持续的改进迭代
  4. 高效的工作流

    • Skill自动化
    • Python脚本辅助
    • Git版本控制

10.2 关键成功因素

  1. 明确的Schema层

    • 清晰的页面模板
    • 严格的工作流SOP
    • 明确的质量标准
  2. 持续的改进迭代

    • 从错误中学习
    • 不断优化流程
    • 收集用户反馈
  3. 合适的工具链

    • Claude Code:强大的AI编程助手
    • Obsidian:优秀的Markdown IDE
    • markitdown:可靠的文档转换工具
    • Conda:稳定的环境管理
  4. 最佳实践

    • 每次只处理一个文件
    • 读完每一页,不要跳读
    • 保留所有数据,不要概括
    • 用Wikilink建立关联
    • 定期运行Lint检查

10.3 适用场景

LLM Wiki模式特别适合以下场景:

  1. 个人知识管理

    • 技术研究
    • 学术研究
    • 行业研究
  2. 团队知识库

    • 产品文档
    • 技术文档
    • 培训资料
  3. 专业领域知识库

    • 法律(案例、法规)
    • 医疗(疾病、药物)
    • 金融(产品、政策)

10.4 不适合的场景

LLM Wiki模式可能不适合以下场景:

  1. 高实时性需求

    • 新闻资讯
    • 股市行情
    • 实时数据
  2. 低价值资料

    • 临时性通知
    • 碎片化信息
    • 纯娱乐内容
  3. 高度动态的内容

    • 频繁变更的信息
    • 个人笔记
    • 待办事项

10.5 展望

LLM Wiki模式还在发展中,未来可能有以下方向:

  1. 更强的AI理解能力

    • GPT-5、Claude 4等更强大的模型
    • 更准确的内容提取
    • 更智能的概念关联
  2. 更好的工具支持

    • 专为LLM Wiki设计的工具
    • 更好的可视化
    • 更强的自动化
  3. 更广泛的应用

    • 企业知识库
    • 教育领域
    • 科研领域
  4. 社区和生态

    • 开源模板和工作流
    • 最佳实践分享
    • 工具和插件生态

11. 参考资源

11.1 核心参考

  1. Andrej Karpathy - LLM Wiki

  2. llm-wiki-zh

    • Karpathy's LLM Wiki的中文翻译
    • 详细解释了LLM Wiki的原理和实践

11.2 工具文档

  1. Claude Code

  2. Obsidian

  3. markitdown

  4. Conda

11.3 相关文章

  1. The Bitter Lesson - Rich Sutton

  2. Building a Second Brain - Tiago Forte

    • 个人知识管理的经典方法论
  3. Zettelkasten方法

    • 德国社会学家Niklas Luhmann的卡片盒笔记法
    • 现代知识管理的重要灵感来源
相关推荐
FluxMelodySun2 小时前
机器学习(三十一) 半监督SVM与图半监督学习
人工智能·算法·机器学习
weixin_408099672 小时前
【实战教程】EasyClick 调用 OCR 文字识别 API(自动识别屏幕文字 + 完整示例代码)
前端·人工智能·后端·ocr·api·安卓·easyclick
2301_764441332 小时前
SleepFM多模态睡眠基础模型
人工智能·开源·github
想你依然心痛2 小时前
HarmonyOS 5.0教育科技开发实战:构建AI个性化学习与分布式协同教育系统
人工智能·学习·harmonyos
管二狗赶快去工作!2 小时前
体系结构论文(108):Large Language Models for EDA: Future or Mirage?
人工智能·机器学习
薛定猫AI2 小时前
【技术干货】AI 编码代理行为优化:Andrej Karpathy Skills 工程实践指南
人工智能
哆啦阿梦2 小时前
Java AI 应用工程师 - 完整技能清单
java·开发语言·人工智能
新缸中之脑2 小时前
Design.md:智能体专用设计文件
人工智能
kishu_iOS&AI2 小时前
机器学习 —— 逻辑回归(混淆矩阵)
人工智能·算法·机器学习·逻辑回归