目录

LLM Learning Assistant

LLM Learning Assistant

1. 项目简介

LLM Learning Assistant 是一个面向大模型学习者的开源学习助手,帮助你理解知识、排查实验问题,并根据资料出处核对回答。你可以把自己的课程笔记、实验指南和常见问题放入知识库,搭建自己的学习工具。

项目适用于个人自学和课程教学。自学时,可以用它答疑、追问和记录学习过程;课堂中,学生还可以提交实验、查看反馈和求助,教师与助教可以发布任务、审阅作业和维护知识库。

仓库提供可运行的代码和配套指南,支持直接使用与二次开发。当前知识库为“大模型全链路开发”的精简教学示例,可替换为自己的学习资料;回答范围取决于已加入的资料。

开发过程包含数据整理、模型 API 接入、RAG 检索、工具调用、应用开发、评测与部署。技术栈为 Python 标准库、HTML/JavaScript 和 SQLite,具备 Python 基础即可开始。

2. 效果展示

2.1 项目整体预览

学习助手的完整页面包含账号与导航、知识问答、资料来源、回答反馈和人工求助入口。先看整体界面,再了解下面的具体功能。

学习助手完整页面预览

整体预览来自本地实际运行的应用,使用示例账号,问答回放此前真实 API 验证保存的回答。

教师与助教还可以通过看板管理学生、实验任务、提交审阅、求助回复和知识库。

查看教师看板完整预览

教师看板完整页面预览

以下功能截图来自沐曦验证环境,账号与作业为示例,问答调用真实模型。完整操作见项目实现。

2.2 知识答疑与实验排障

输入知识或实验问题,查看回答并展开来源核对依据。遇到新情况,可以补充实际日志继续追问。

知识问答与来源展示

2.3 实验提交与人工反馈

学生提交实际结果和附件,教师或助教审阅后给出完成结论与具体意见;需要修改时可以重新提交并保留历史版本。

实验提交与审阅反馈

2.4 求助与留言回复

助手无法解决的问题可以附上对话并提交求助。学生查看教师或助教的回复,补充信息或确认解决。

求助回复与确认

2.5 知识库更新与效果验证

教师或助教编辑资料并重建索引,再用原问题复问,核对新增资料是否支持回答。图中练习口令用于演示资料更新生效。

更新知识库后的回答与来源

3. 快速启动

3.1 获取代码

需要 Python 3.10+、Git、浏览器,以及一个兼容 OpenAI 格式、支持模型列表和文本生成的 API。课程部署使用沐曦实例,应用通过 API 调用模型,自身不要求 GPU;也可部署在自己的服务器。

在本机或服务器终端执行:

git clone https://gitlink.org.cn/ccf-ai-infra/llm-learning-assistant.git
cd llm-learning-assistant
python3 -m pip install -r requirements.txt

项目无需额外 Python 依赖,本地运行数据默认保存在 outputs/。服务器部署可通过 LLM_DATA_DIR 指定独立的数据目录,各终端保持一致。环境、SSH 和 VS Code 连接方法见前置环境配置。

完成效果: 进入仓库后,可以看到 app/、docs/、knowledge/ 和 tests/。

获取代码后的目录结构

3.2 配置模型

在 app/config.json 中修改 model_api:

"model_api": {
  "base_url": "https://ai.gitee.com/v1",
  "model": "Atria-Dawn-Preview",
  "max_tokens": 4096,
  "retries": 2
}

示例模型需要对应接口权限。使用其他服务时,填写实际 API 地址和准确模型名。令牌通过隐藏输入提供,保存在当前进程中:

python3 app/rag.py build
python3 app/server.py --check --ask-key

看到 success、model_present、generation_ok 均为 true,说明模型列表与一次真实生成检查通过。报告保存在数据目录的 model_probe.json。

完成效果: 索引输出包含资料块数量和保存路径,模型检查的三项结果为 true。

知识索引建立结果

索引路径由数据目录决定,资料修改后块数也会变化。

真实模型检查结果

该检查图来自沐曦实例上的真实 API 验证,实际结果以自己的接口为准。

3.3 启动服务

python3 app/server.py --ask-key

服务启动时重新输入模型令牌。也可通过 LLM_API_KEY 环境变量提供令牌,通过 LLM_BASE_URL、LLM_MODEL 覆盖模型配置。

完成效果: 终端显示访问地址和数据目录,并保持运行。

服务启动结果

这是本地界面预览的实际启动输出,临时数据目录仅用于截图;自己的部署使用默认目录或指定的 LLM_DATA_DIR。

开发调试通过 VS Code 端口转发打开 http://127.0.0.1:8000/。也可在本机执行:

ssh -N -L 8000:127.0.0.1:8000 -p <SSH端口> <用户名>@<主机地址>

3.4 打开页面并开始学习

打开 http://127.0.0.1:8000/,看到登录或注册页面后,输入自己的用户名和密码,点击“注册学生账号”。已有账号直接登录。

服务启动后的完整登录页面

在学习助手中提问“GPU 不可见时先检查什么?”,查看回答并展开来源。继续补充自己的实际输出,体验多轮排障。

完成效果: 登录成功,问题得到回答,来源可展开,回答反馈和求助入口可用。下面展示从页面顶部到页尾的完整应用预览,包含标题、账号、导航及当前页面全部内容。

最终效果:学习助手完整页面预览

完整预览来自本地实际运行的应用,使用示例账号;问答回放此前真实 API 验证保存的回答,本次截图未重新调用模型。实际部署按第 3.2 节配置自己的接口。

3.5 教学功能(可选)

需要发布实验、审阅作业或从页面维护知识库时,在另一个终端创建教学账号:

python3 app/server.py --create-user teacher01 --role teacher
python3 app/server.py --create-user ta01 --role ta

创建时隐藏输入密码,仅首次执行。个人部署者也可以使用教师账号维护自己的资料。正式教学需要 HTTPS 入口及对应 public_url、secure_cookie 配置,见部署与交付。

完成效果: 教学账号登录后能看到教师看板,包括学生进度、实验任务、提交审阅、求助和知识库维护。以下为完整页面,账号及任务均为示例。

查看教师看板完整预览

教师看板完整页面预览

4. 使用指南

角色 操作路径 完成效果
学习者(学生) 学习助手中提问、追问、查看出处,课堂中可发起求助 获得资料依据和下一步操作
学生 我的档案中查看任务、提交实际结果、查看反馈并重交 保留提交版本和审阅结果
教师 / 助教 教师看板中管理学生、发布任务、审阅提交、回复问题 了解进度,完成指导和反馈
教师 / 助教 在知识库中编辑 Markdown 并重建索引,再复问检查 补充知识缺口,改善回答

公共注册默认获得学生角色。教师与助教权限相同,由部署者授权;学生只能访问本人记录。将已注册用户设为助教,可在服务器执行:

python3 app/server.py --grant-role registered_user --role ta

实验提交支持 UTF-8 文本类文件,默认最多 3 个附件、每个 5 MB,可配置。自动检查提供格式和缺项线索,实验是否完成由教师或助教审阅。

5. 二次开发

从替换资料到增加功能的完整练习见二次开发指南;实现原理与源码讲解见项目实现。

建议先跑通原项目,再一次修改一个部分,并验证修改效果。需要维护自己的版本时,可先在平台 Fork 仓库,再克隆自己的副本。

5.1 替换学习资料

  1. 修改 knowledge/ 中的课程说明、实验指南和常见问题,补充实际出处与适用环境。保留 课程说明.md 作为课程规则查询入口。
  2. 修改 app/config.json 的 title、scope、prompt。使用章节步骤工具时,同步调整 acceptance.modules。
  3. 用于课程教学时,在教师看板发布自己的实验任务,明确提交要求。
  4. 重建索引,用自己的典型问题核对回答与来源。
python3 app/rag.py build
python3 app/rag.py query '你的课程问题'

不同课程独立部署并使用独立数据目录,保留原课程的账号和提交记录。

5.2 换模型或调整回答

修改 app/config.json 中的模型地址、名称和参数;调整系统提示词 prompt,或在 app/assistant.py 修改回答策略。

修改后重新检查模型接口并重启。对同一题集保留修改前后的回答,人工判断事实、出处和帮助是否有效。不要只凭回答长度或关键词命中判断收益。

5.3 修改功能或界面

想修改什么 代码入口 修改后检查什么
页面和交互 app/index.html 学生、教师和助教分别走查
实验任务、提交、审阅、求助 app/teaching.py 对应业务能走通,数据归属正确
注册、登录和权限 app/accounts.py 不能伪造角色或读取他人记录
存储字段与数据目录 app/storage.py、data_dir 重启和备份恢复后记录完整
资料切分与检索 app/rag.py 典型问题能召回支持答案的原文
工具调用 app/tools.py 更新参数定义、权限与执行逻辑,并测试错误参数
后端接口 app/server.py 页面调用正确,身份校验和错误提示完整

修改配置或代码后重启,修改资料后重建索引。更改数据目录需停服并迁移;给已有数据库增加字段时,要编写迁移,不能只修改初始化建表语句。

向量检索、推理部署、微调和更复杂的 Agent 可作为后续扩展,以产品评测验证收益。先完成核心教学流程,再增加技术模块。

5.4 验证并交付修改

先运行不需要真实令牌的业务测试:

python3 tests/evaluate.py smoke

再启动真实服务,用学生账号评测自己的课程问题。换课后同步修改 tests/questions.jsonl 中的题目、预期状态和来源。

python3 tests/evaluate.py regression --username student01 --output outputs/evaluation/before.jsonl

修改后输出到 after.jsonl,保持题集、模型和参数一致。评测生成逐题结果、人工复核 CSV、配置快照和汇总;结果文件不覆盖。RAG 与无资料模型的对照方法见测试与交付。

交付标准: 新用户能够按 README 独立启动,用三个角色完成答疑、提交审阅、求助回复和知识更新;记录重启后保留,跨学生访问被拒绝。

6. 教程与仓库结构

先按 README 运行,再读项目实现理解源码,选择二次开发练习,最后按测试与交付验证成果。

文档 学习内容
00 前置环境配置 算力、API、SSH、VS Code
01 项目实现 用户需求、架构、数据流程、关键代码与运行效果
02 二次开发 替换资料、调整模型与检索、增加功能及验收
03 测试与交付 业务测试、模型评测、部署、备份与独立复跑
llm-learning-assistant/
├── README.md
├── LICENSE
├── requirements.txt
├── docs/                 # 操作指南与 images/ 截图
├── app/
│   ├── server.py          # HTTP 接口与服务编排
│   ├── accounts.py        # 账号、会话与授权
│   ├── teaching.py        # 教学业务与知识维护
│   ├── storage.py         # 数据库与文件存储
│   ├── assistant.py       # 模型调用与回答策略
│   ├── rag.py             # 资料索引与检索
│   ├── tools.py           # 工具与审计
│   ├── index.html         # 浏览器页面
│   └── config.json        # 非敏感配置
├── knowledge/            # RAG 知识库,存放可替换的学习资料
└── tests/                 # 业务测试与模型评测

账号、提交、对话和运行日志位于服务端数据目录,不进入 Git 仓库。本地开发测试可使用默认 outputs/;教学部署指定服务器目录,备份数据库、附件和课程资料。

7. 来源与许可

代码改编自 Full Link Development of Large Models 的课程应用示例,采用木兰宽松许可证第 2 版。知识资料为可替换的教学示例。

邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9 京公网安备 11010802047560号