Adventure 6:搭建知识库
Sign in
Adventure 6:搭建知识库
欢迎进入数据库的世界。今天,你要学着用强大的数据工具来整理和追踪自己的学习。准备好做一名数据架构师吧。

Adventure 1

引子
本节悬念
想象你认真学了一整年。笔记本、便利贴、电脑里的文本文件——笔记到处都是。这时有人问你: 「这学期你数学一共学了多少小时?」
你能在 5 分钟内答上来吗?多半不能。但如果只要 5 秒呢?这就是数据库的力量。

Adventure 1

纯文本文件的混乱
你目前的方式
每天新建一个文件:
monday.txt:

Math: 1 hour

English: 30 minutes



tuesday.txt:

Math: 45 minutes

Coding: 1 hour



wednesday.txt:

English: 20 minutes

History: 40 minutes
问题在哪
  • 几个月之后就有上百个文件
  • 想跨文件搜索很费劲
  • 总数算起来很麻烦
  • 无法排序、无法筛选
  • 想看趋势?慢得让人怀疑人生

Adventure 1

讨论时间:你自己的数据烦恼
搭档分享
转向搭档讨论:你平时会记录哪些信息?现在是怎么整理的?让你最难受的部分是什么?
小组问题
有没有人因为忘了存在哪儿,把重要信息弄丢过?分享一下你的故事。

Adventure 1

出场:数据库解法
数据库就像一个超级聪明的文件柜,把数据按表(类似电子表格)整理起来。但和普通文件不同的是,数据库允许你 向数据提问 ——用专门的命令查询。
想知道数学总时长?一条命令。想找出所有超过 1 小时的学习记录?一条命令。想看哪门学得最多?你猜对了——还是一条命令。

Adventure 1

SQLite 是什么?
超轻量
没有复杂的安装。整个数据库就是你电脑上的一个文件,备份和分享都很轻松。
速度飞快
百万级记录依然能在毫秒内给你答案,比挨个翻文件快得多。
非常适合学习用
你每天在用的 app(比如手机里的短信 app)背后就是 SQLite。它是行业标准,又容易上手。

Adventure 1

数据库 vs. 电子表格
Excel / Google Sheets
  • 适合人眼阅读
  • 点击拖拽的交互
  • 数据量小的时候很好用
  • 数据一多就开始卡
  • 一般情况下一次只能一个人改
SQLite 数据库
  • 为程序优化
  • 用命令做查询
  • 能扛起海量数据
  • 搜索如闪电
  • 多个程序可以同时用
把电子表格想成笔记本,把数据库想成图书馆——都是存信息的,但图书馆是为「大量内容下的快速检索」设计的。

Adventure 1

动手做
活动 1:安装 SQLite
01
打开终端
找到并打开你的终端应用。
02
安装 SQLite
输入以下命令并回车:
03
建你的第一个数据库
输入这条命令来创建一个数据库文件:
sudo apt install sqlite3 -y



sqlite3 ~/learning.db
你应该会看到一个 sqlite> 提示符。恭喜你——已经身处数据库内部了。

Adventure 1

认识「表」
在数据库里,我们把数据按 表(table)来组织。表就像一张电子表格,有列(字段)和行(记录),每一列有特定的数据类型。
列
信息的分类(比如「日期」「科目」「时长」)
行
一条条单独的记录(比如某次学习)
数据类型
每一列存放的是什么类型的数据(文本、数字、日期等)

Adventure 1

创建你的学习日志表
我们来建一张表,用来记录学习时段,先把要存哪些信息定义清楚:
CREATE TABLE learning_log (

  id INTEGER PRIMARY KEY AUTOINCREMENT,

  date TEXT NOT NULL,

  subject TEXT NOT NULL,

  duration_min INTEGER NOT NULL,

  notes TEXT

);
1
id:每条记录的唯一编号(自动生成)
2
date:什么时候学的(必填)
3
subject:学的是什么(必填)
4
duration_min:学了多少分钟(必填)
5
notes:额外信息(可选)

Adventure 1

检查点:理解结构
为什么需要一个 ID 列?
ID 给每条记录一个唯一标识——这样就算两条记录一模一样,我们也能区分开来。
NOT NULL 是什么意思?
意思是这个字段必填,不能空。每条记录都得有日期、科目和时长。
为什么 notes 是可选的?
有时你没什么额外细节可写。把它设成可选,录入起来更快、更顺手。

Adventure 1

CRUD 操作
数据库的四种基本动作
Create(创建)
新增记录(INSERT)
Read(读取)
获取信息(SELECT)
Update(更新)
修改已有记录(UPDATE)
Delete(删除)
删除记录(DELETE)
数据库里所有操作都在这四类里。掌握这四个,就能做几乎任何事。

Adventure 1

添加数据:INSERT 命令
来加入你的第一条学习记录吧。INSERT 命令会在表里追加新的一行:
INSERT INTO learning_log (date, subject, duration_min, notes)

VALUES ('2025-02-08', 'Math', 60, 'Learned fractions');
我们再加几条:
INSERT INTO learning_log (date, subject, duration_min, notes)

VALUES ('2025-02-08', 'English', 30, 'Vocabulary practice');



INSERT INTO learning_log (date, subject, duration_min, notes)

VALUES ('2025-02-09', 'Math', 45, 'Word problems');



INSERT INTO learning_log (date, subject, duration_min, notes)

VALUES ('2025-02-09', 'Coding', 90, 'Built a calculator');

Adventure 1

读取数据:SELECT 命令
好玩的部分来了——开始向数据提问。SELECT 命令负责把数据从表里取出来。
看全部
SELECT * FROM learning_log;
星号(*)表示「所有列」
按科目筛选
SELECT * FROM learning_log

WHERE subject='Math';
WHERE 让你筛选结果
按时长排序
SELECT * FROM learning_log

ORDER BY duration_min DESC;
DESC = 降序(从大到小)
计算总时长
SELECT SUM(duration_min)

FROM learning_log

WHERE subject='Math';
SUM 会把所有值相加

Adventure 1

练习
活动 2:搭建你的数据库
1
加 5 条学习记录
至少插入 5 条记录,包含不同的科目、日期和时长,尽量贴近你的真实学习。
2
查看你的数据
用 SELECT * 看一下所有记录,确认数据都对。
3
试试筛选
用 WHERE 只显示一个科目。再按时长排序看看。
用时:10 分钟。卡住了就举手。

Adventure 1

SQL 魔法咒语:进阶查询
下面学几招强大的 SQL「咒语」,能让你瞬间看清数据背后的洞察。
统计记录数
SELECT COUNT(*)

FROM learning_log;
总共多少次学习?
平均时长
SELECT AVG(duration_min)

FROM learning_log;
你每次学习平均多长?
最长一次
SELECT MAX(duration_min), subject

FROM learning_log;
你的个人记录!

Adventure 1

分组:GROUP BY 子句
想看每门科目的合计?用 GROUP BY 把结果按类别分组:
SELECT subject, SUM(duration_min) as total_minutes

FROM learning_log

GROUP BY subject;
这会显示 每门科目 各自的总学习时间——相当于自动生成一份汇总报告。
SELECT subject, 

       COUNT(*) as sessions,

       SUM(duration_min) as total_min,

       AVG(duration_min) as avg_min

FROM learning_log

GROUP BY subject

ORDER BY total_min DESC;
现在你能一眼看出哪门学得最多、学了多少次、平均每次多长时间。

Adventure 1

讨论:数据规律
搭档讨论
看看你的分组结果。哪门学得最多?哪门最少?结果让你意外吗?
反思问题
如果你能看到一整个学期的数据,可能会发现哪些关于自己学习习惯的规律?
设定目标
根据数据,你是不是该在某门上多花点时间?这样的追踪怎么帮你进步?

Adventure 1

更新记录:UPDATE 命令
写错了?没关系,UPDATE 让你修改已有记录:
UPDATE learning_log

SET notes = 'Mastered fractions!'

WHERE id = 1;

警告! UPDATE 必须配合 WHERE 一起用!漏了 WHERE,你会把表里 每一条 记录都改掉。id 这一列让你精准定位到要改的那一条。
也可以一次更新多个字段:
UPDATE learning_log

SET duration_min = 65,

    notes = 'Extended study session'

WHERE id = 1;

Adventure 1

删除记录:DELETE 命令
想删一条记录?小心使用 DELETE:
DELETE FROM learning_log

WHERE id = 5;

极其重要! 和 UPDATE 一样,DELETE 必须配合 WHERE。漏了 WHERE,你会把表里 所有内容 都删光,而且没有撤销按钮。
要删除某一天的所有记录:
DELETE FROM learning_log

WHERE date = '2025-02-08';
要删除全部记录(务必慎用):
DELETE FROM learning_log;

Adventure 1

挑战
SQL 挑战速跑!
检验本事的时候到了。下面这些挑战完成一下,可以和搭档一起做:
1
找出你最高产的一天
写一条查询,找出你学习总时长最多的那一天。
2
按科目算平均
计算每门科目的平均学习时长。
3
只看长课时
列出所有持续 45 分钟及以上的学习记录。
4
更新一条备注
挑一条记录,把它的 notes 字段更新成新内容。
彩蛋挑战: 找出平均时长最长的那门科目。

Adventure 1

挑战参考答案
最高产的一天
SELECT date, SUM(duration_min)

FROM learning_log

GROUP BY date

ORDER BY SUM(duration_min) DESC

LIMIT 1;
按科目算平均
SELECT subject, AVG(duration_min)

FROM learning_log

GROUP BY subject;
长课时记录
SELECT * FROM learning_log

WHERE duration_min >= 45;
更新备注
UPDATE learning_log

SET notes = 'Your new note'

WHERE id = 3;

Adventure 1

接入 AI
教 AI 来管理你的数据库
酷的部分来了:我们可以教 AI 助手用自然语言操作数据库。不用敲 SQL,只要跟 AI 说人话就行。
想象你直接说: 「记录一下:我今天学了 45 分钟数学」 AI 自动把它写进数据库。或者问: 「我这周学了多少?」 瞬间拿到答案。
我们用技能系统把这套配起来。

Adventure 1

创建一个数据库技能
先建一个文件夹和文件,告诉 AI 关于这个数据库的事:
mkdir ~/clawd/skills/database

vim ~/clawd/skills/database/SKILL.md
这会创建一个特殊的指令文件,向 AI 说明:
  • 什么时候该用数据库(触发词)
  • 数据库在哪里
  • 它可以做哪些操作
  • 要使用的 SQL 命令具体是什么
把它当作给 AI 写的一份培训手册。

Adventure 1

技能文件的内容
# Learning Record Database Skill



## Trigger Words

User mentions "record study", "learning stats", 

"studied today", "how much studied"



## Database Location

~/learning.db



## Operations

### Record Study Session

sqlite3 ~/learning.db "INSERT INTO learning_log 

(date, subject, duration_min, notes) 

VALUES ('date', 'subject', minutes, 'notes');"



### View Statistics

sqlite3 ~/learning.db "SELECT subject, 

SUM(duration_min) as total 

FROM learning_log 

GROUP BY subject;"



### Weekly Summary

sqlite3 ~/learning.db "SELECT SUM(duration_min) 

FROM learning_log 

WHERE date >= date('now', '-7 days');"

Adventure 1

测试你的 AI 数据库助手
重启 AI 系统,然后试试看:
openclaw restart

openclaw agent --message "Record that I studied Math for 45 minutes today"
AI 应该能听懂你的话,并把记录写入数据库。再试几条:
  • 「我这周学了多少小时?」
  • 「展示一下我的学习统计」
  • 「我刚学完 30 分钟英语词汇」
  • 「我学得最多的科目是哪一门?」
你的 AI 摇身一变,成了你的私人学习追踪器。

Adventure 1

讨论:AI 与自动化
小组讨论
和小组分享:你还能用数据库跟踪什么?健身?阅读?兴趣爱好?哪些对你个人最有用?
再想一想:你哪些重复的事情可以用 AI + 数据库自动化掉?
伦理问题
如果 AI 把你做的一切(学习时间、访问的网站、用的 app)都记录下来,是帮助你,还是让你担心?这条线该划在哪里?
讨论一下便利和隐私之间的平衡。

Adventure 1

可视化
让你的数据「看得见」
数据库里的数字很有用,但人对图像更敏感。我们用 Python + matplotlib,把学习数据画成图表。
我们会生成:
柱状图
每门科目的总学习时间
饼图
各科目所占的比例
趋势图
按天/按周的学习时长趋势

Adventure 1

安装绘图工具
先安装用于绘图的 Python 库:
然后建一个 Python 脚本:
vim ~/visualize-learning.py
这个脚本会:
  1. 连接你的 SQLite 数据库
  1. 查询学习数据
  1. 生成漂亮的图表
  1. 保存成图片文件
你的进度,一眼就能看清。

Adventure 1

Python 绘图脚本
import sqlite3

import matplotlib.pyplot as plt



# Connect to database

conn = sqlite3.connect('/home/user/learning.db')

cursor = conn.cursor()



# Get data

cursor.execute("""

    SELECT subject, SUM(duration_min) 

    FROM learning_log 

    GROUP BY subject

""")

results = cursor.fetchall()



# Separate into subjects and durations

subjects = [row[0] for row in results]

durations = [row[1] for row in results]



# Create bar chart

plt.figure(figsize=(10, 6))

plt.bar(subjects, durations, color='skyblue')

plt.xlabel('Subject')

plt.ylabel('Total Minutes')

plt.title('Study Time by Subject')

plt.savefig('study-chart.png')

print("Chart saved!")

Adventure 1

运行你的可视化脚本
执行 Python 脚本:
python3 ~/visualize-learning.py
它会在你的家目录里生成一个名为 study-chart.png 的文件。打开它就能看到漂亮的图表了。

小贴士: 你可以改脚本来生成不同类型的图。把 plt.bar() 改成 plt.pie() 得到饼图;或者加上 plt.plot() 得到一条随时间变化的折线图。
你可以把这些图表给老师或家长看,或者就留给自己欣赏一下进度。

Adventure 1

教 AI 自动出图
把生成图表的能力加进 AI 的数据库技能文件里:
### Generate Study Chart

python3 ~/visualize-learning.py



### Response

"I've created a chart of your study statistics. 

Check study-chart.png to see your progress!"
之后你就可以直接对 AI 说: 「给我画一张学习时间的图」 它会自动生成并保存好可视化结果。

Adventure 1

常见错误
常见数据库错误与修复
忘了写 WHERE
问题: 没有 WHERE 的 UPDATE 或 DELETE 会改/删全部记录!
修复: 永远再确认一下 WHERE 写了没,先用 SELECT 验证一遍。
数据类型不匹配
问题: 把文本塞进数字字段,或反过来,都会报错。
修复: 检查列类型。文本要加引号,整数不加。
列名拼错
问题: 把「duration」写成「duraton」,会得到「no such column」的报错。
修复: 用 tab 补全,或者回头对照一下 CREATE TABLE 写得怎样。
文本忘加引号
问题: 写成 WHERE subject=Math 而不是 WHERE subject='Math',会报错。
修复: 文本值永远要加单引号,数字不用。

Adventure 1

更多常见错误
用户输入里的 SQL 注入
问题: 用拼字符串的方式拿用户输入构造 SQL,例如: "SELECT * FROM table WHERE user='" + input + "'" 极其危险!
修复: 请改用参数化查询或预编译语句,防止 SQL 注入攻击。
没有关闭数据库连接
问题: 不关连接,可能会把数据库文件锁住。
修复: 永远记得关连接: conn.close() Python 里用 .exit 命令行 sqlite3 里用
忘了分号
问题: SQL 语句末尾必须有分号,否则不会被执行。
修复: 每条 SQL 语句都用 ;

Adventure 1

小测验
知识检查小测
检验一下你学到的东西。回答下面 5 题,写下你的答案,然后一起对答案。
  1. 数据库的四个基本操作(CRUD)分别是?
  1. 用哪条 SQL 命令来添加新记录?
  1. 为什么不带 WHERE 用 UPDATE 或 DELETE 很危险?
  1. GROUP BY 子句的作用是什么?
  1. 数据库和电子表格的区别是什么?
彩蛋题: 在 SELECT * FROM table 里,星号(*)表示什么?

Adventure 1

测验答案
1
CRUD 操作
Create(创建) (INSERT)、 Read(读取) (SELECT)、 Update(更新) (UPDATE)、 Delete(删除) (DELETE)
2
添加记录
INSERT INTO table_name (columns) VALUES (values);
3
WHERE 子句的重要性
没有 WHERE,UPDATE 会改全部记录,DELETE 会删全部记录——没有撤销!
4
GROUP BY 的功能
它把结果按类别分组,让你能对每一组算合计(SUM、AVG、COUNT 等)。
5
数据库 vs 电子表格
电子表格适合人看少量数据;数据库为程序、快速查询和大数据量优化。
彩蛋: 星号表示「所有列」——把整行的内容都查出来。

Adventure 1

成就
恭喜,数据库架构师!
100%
冒险完成
你已经掌握了数据库的基础。
徽章解锁
数据库架构师
创建并管理了自己的数据库
数据可视化大师
从数据中生成了图表
SQL 查询巫师
掌握了 SELECT、INSERT、UPDATE、DELETE
进度追踪者
搭建了一套监测自己学习的系统

Adventure 1

作业
本周任务
1
每日追踪
整整一周记录你的所有学习时段,至少涵盖 3 门科目。坚持下去。
2
增强可视化
改一下 Python 脚本,让它同时画柱状图和饼图,并加上一条按天显示总学习时长的趋势线。
3
导出与分享
研究一下怎么把数据库导出为 CSV 格式。再写一段简短的反思,谈谈你从自己的学习规律里看出了什么。

Adventure 1

反思与离堂作业
个人反思
花 3 分钟写下:
  • 数据库里有哪一点出乎你意料
  • 你今天遇到的一个挑战,以及你是怎么克服的
  • 你将来打算用这门技能做的一件事
离堂作业问题
  1. 1 到 5 分,你对 SQL 命令的信心打几分?
  1. 你还有一个什么问题没搞明白?
  1. 如果可以记录任何事,你会想用数据库追踪什么?
下课前交上离堂作业。你的回答能帮老师判断哪些内容需要再复习。

Adventure 1

下一段冒险预告
Adventure 7:AI 超能力!
准备好升级一档。Adventure 7 里,你会认识 工具调用 以及 MCP 插件——教会 AI 使用外部工具和服务。
工具集成
把 AI 连到网络 API、计算器和其他服务上
MCP 插件
搭建模块化能力,让 AI 按需启用
超能 AI
做一个真正能动手做事——而不仅仅会说话——的 AI 助手
下一段冒险见! 🚀

Adventure 1