知识库数据收集
本章节将介绍如何系统性地收集和整理个人知识库的数据源,包括内容类型的选择、数据收集的自动化脚本示例,以及在 Hugo 网站结构下的实际操作方法,帮助你高效构建适合数字分身的知识库基础。
数据源选择
对于个人数字分身,你可以收集以下类型的内容作为知识库:
- 个人博客文章:技术总结、思考感悟、项目经验
- 专业文档:工作中的技术文档、项目说明
- 学习笔记:读书笔记、课程总结、知识整理
- 演讲稿和简历:个人经历和专业背景
- 常见问答:你经常回答的问题和标准答案
收集脚本示例
创建一个数据收集脚本来遍历你的 Hugo 网站目录:
// collect-content.ts
import { readdir, readFile, stat } from 'fs/promises';
import { join } from 'path';
import matter from 'gray-matter';
interface ContentFile {
path: string;
title: string;
content: string;
metadata: Record<string, any>;
}
async function collectMarkdownFiles(dir: string): Promise<ContentFile[]> {
const files: ContentFile[] = [];
async function traverse(currentDir: string) {
const entries = await readdir(currentDir);
for (const entry of entries) {
const fullPath = join(currentDir, entry);
const stats = await stat(fullPath);
if (stats.isDirectory()) {
// 跳过草稿和私有目录
if (!entry.startsWith('.') && entry !== 'drafts') {
await traverse(fullPath);
}
} else if (entry.endsWith('.md') && entry !== 'index.md') {
const content = await readFile(fullPath, 'utf-8');
const { data, content: markdownContent } = matter(content);
// 只收集已发布的内容
if (!data.draft) {
files.push({
path: fullPath,
title: data.title || entry.replace('.md', ''),
content: markdownContent,
metadata: {
...data,
relativePath: fullPath.replace(dir, ''),
lastModified: stats.mtime
}
});
}
}
}
}
await traverse(dir);
return files;
}
在函数中,我们首先定义了一个名为 files
的空数组,用于存储遍历到的文件。然后,我们定义了一个名为 traverse
的递归函数,用于遍历指定目录下的所有文件。在 traverse
函数中,我们使用 readdir
方法读取当前目录下的所有条目,并使用 stat
方法获取每个条目的状态信息。对于每个条目,如果是目录且不是草稿或私有目录,则递归调用 traverse
继续遍历;如果是 Markdown 文件且不是 index.md
,则读取文件内容并解析 front matter,最后将符合条件的文件信息存入 files
数组。
在处理知识库时,脚本应考虑以下事项:
- 跳过草稿和私有内容:脚本应跳过
drafts
目录、以点(.
)开头的隐藏目录,以及 front matter 中draft: true
的文件,避免收集未发布或私有内容。 - 跳过大段代码引用:如内容中包含大量代码块,可根据实际需求选择是否收集,或对代码块进行截断、摘要处理,防止知识库被无关代码淹没。
- 文件结构与多语言支持:Hugo 多语言站点通常有
/zh/
和/en/
目录,收集时需分别处理,确保不同语言的内容都能纳入知识库。你也可以仅收录一种语言,大模型也可以仅根据一种语言构建,避免多语言内容混淆。 - 元数据完整性:建议每个 Markdown 文件都包含
title
字段,并根据实际需要补充description
、date
等元数据,便于后续检索和分析。 - 自动化与可扩展性:脚本可根据内容类型、标签等条件灵活过滤,支持后续扩展(如同步到向量数据库、生成摘要等)。
- 路径处理:建议统一使用相对路径,便于后续迁移和索引。
通过遵循上述注意事项,可以高效、规范地收集和管理个人知识库内容,为数字分身等下游应用打下坚实基础。