课程助手初版
LLM Learning Assistant 是一个面向大模型学习者的开源学习助手,帮助你理解知识、排查实验问题,并根据资料出处核对回答。你可以把自己的课程笔记、实验指南和常见问题放入知识库,搭建自己的学习工具。
项目适用于个人自学和课程教学。自学时,可以用它答疑、追问和记录学习过程;课堂中,学生还可以提交实验、查看反馈和求助,教师与助教可以发布任务、审阅作业和维护知识库。
仓库提供可运行的代码和配套指南,支持直接使用与二次开发。当前知识库为“大模型全链路开发”的精简教学示例,可替换为自己的学习资料;回答范围取决于已加入的资料。
开发过程包含数据整理、模型 API 接入、RAG 检索、工具调用、应用开发、评测与部署。技术栈为 Python 标准库、HTML/JavaScript 和 SQLite,具备 Python 基础即可开始。
学习助手的完整页面包含账号与导航、知识问答、资料来源、回答反馈和人工求助入口。先看整体界面,再了解下面的具体功能。
整体预览来自本地实际运行的应用,使用示例账号,问答回放此前真实 API 验证保存的回答。
教师与助教还可以通过看板管理学生、实验任务、提交审阅、求助回复和知识库。
以下功能截图来自沐曦验证环境,账号与作业为示例,问答调用真实模型。完整操作见项目实现。
输入知识或实验问题,查看回答并展开来源核对依据。遇到新情况,可以补充实际日志继续追问。
学生提交实际结果和附件,教师或助教审阅后给出完成结论与具体意见;需要修改时可以重新提交并保留历史版本。
助手无法解决的问题可以附上对话并提交求助。学生查看教师或助教的回复,补充信息或确认解决。
教师或助教编辑资料并重建索引,再用原问题复问,核对新增资料是否支持回答。图中练习口令用于演示资料更新生效。
需要 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 连接方法见前置环境配置。
outputs/
LLM_DATA_DIR
完成效果: 进入仓库后,可以看到 app/、docs/、knowledge/ 和 tests/。
app/
docs/
knowledge/
tests/
在 app/config.json 中修改 model_api:
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。
success
model_present
generation_ok
model_probe.json
完成效果: 索引输出包含资料块数量和保存路径,模型检查的三项结果为 true。
索引路径由数据目录决定,资料修改后块数也会变化。
该检查图来自沐曦实例上的真实 API 验证,实际结果以自己的接口为准。
python3 app/server.py --ask-key
服务启动时重新输入模型令牌。也可通过 LLM_API_KEY 环境变量提供令牌,通过 LLM_BASE_URL、LLM_MODEL 覆盖模型配置。
LLM_API_KEY
LLM_BASE_URL
LLM_MODEL
完成效果: 终端显示访问地址和数据目录,并保持运行。
这是本地界面预览的实际启动输出,临时数据目录仅用于截图;自己的部署使用默认目录或指定的 LLM_DATA_DIR。
开发调试通过 VS Code 端口转发打开 http://127.0.0.1:8000/。也可在本机执行:
http://127.0.0.1:8000/
ssh -N -L 8000:127.0.0.1:8000 -p <SSH端口> <用户名>@<主机地址>
打开 http://127.0.0.1:8000/,看到登录或注册页面后,输入自己的用户名和密码,点击“注册学生账号”。已有账号直接登录。
在学习助手中提问“GPU 不可见时先检查什么?”,查看回答并展开来源。继续补充自己的实际输出,体验多轮排障。
完成效果: 登录成功,问题得到回答,来源可展开,回答反馈和求助入口可用。下面展示从页面顶部到页尾的完整应用预览,包含标题、账号、导航及当前页面全部内容。
完整预览来自本地实际运行的应用,使用示例账号;问答回放此前真实 API 验证保存的回答,本次截图未重新调用模型。实际部署按第 3.2 节配置自己的接口。
需要发布实验、审阅作业或从页面维护知识库时,在另一个终端创建教学账号:
python3 app/server.py --create-user teacher01 --role teacher python3 app/server.py --create-user ta01 --role ta
创建时隐藏输入密码,仅首次执行。个人部署者也可以使用教师账号维护自己的资料。正式教学需要 HTTPS 入口及对应 public_url、secure_cookie 配置,见部署与交付。
public_url
secure_cookie
完成效果: 教学账号登录后能看到教师看板,包括学生进度、实验任务、提交审阅、求助和知识库维护。以下为完整页面,账号及任务均为示例。
公共注册默认获得学生角色。教师与助教权限相同,由部署者授权;学生只能访问本人记录。将已注册用户设为助教,可在服务器执行:
python3 app/server.py --grant-role registered_user --role ta
实验提交支持 UTF-8 文本类文件,默认最多 3 个附件、每个 5 MB,可配置。自动检查提供格式和缺项线索,实验是否完成由教师或助教审阅。
从替换资料到增加功能的完整练习见二次开发指南;实现原理与源码讲解见项目实现。
建议先跑通原项目,再一次修改一个部分,并验证修改效果。需要维护自己的版本时,可先在平台 Fork 仓库,再克隆自己的副本。
课程说明.md
title
scope
prompt
acceptance.modules
python3 app/rag.py build python3 app/rag.py query '你的课程问题'
不同课程独立部署并使用独立数据目录,保留原课程的账号和提交记录。
修改 app/config.json 中的模型地址、名称和参数;调整系统提示词 prompt,或在 app/assistant.py 修改回答策略。
app/assistant.py
修改后重新检查模型接口并重启。对同一题集保留修改前后的回答,人工判断事实、出处和帮助是否有效。不要只凭回答长度或关键词命中判断收益。
app/index.html
app/teaching.py
app/accounts.py
app/storage.py
data_dir
app/rag.py
app/tools.py
app/server.py
修改配置或代码后重启,修改资料后重建索引。更改数据目录需停服并迁移;给已有数据库增加字段时,要编写迁移,不能只修改初始化建表语句。
向量检索、推理部署、微调和更复杂的 Agent 可作为后续扩展,以产品评测验证收益。先完成核心教学流程,再增加技术模块。
先运行不需要真实令牌的业务测试:
python3 tests/evaluate.py smoke
再启动真实服务,用学生账号评测自己的课程问题。换课后同步修改 tests/questions.jsonl 中的题目、预期状态和来源。
tests/questions.jsonl
python3 tests/evaluate.py regression --username student01 --output outputs/evaluation/before.jsonl
修改后输出到 after.jsonl,保持题集、模型和参数一致。评测生成逐题结果、人工复核 CSV、配置快照和汇总;结果文件不覆盖。RAG 与无资料模型的对照方法见测试与交付。
after.jsonl
交付标准: 新用户能够按 README 独立启动,用三个角色完成答疑、提交审阅、求助回复和知识更新;记录重启后保留,跨学生访问被拒绝。
先按 README 运行,再读项目实现理解源码,选择二次开发练习,最后按测试与交付验证成果。
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/;教学部署指定服务器目录,备份数据库、附件和课程资料。
代码改编自 Full Link Development of Large Models 的课程应用示例,采用木兰宽松许可证第 2 版。知识资料为可替换的教学示例。
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
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;也可部署在自己的服务器。
在本机或服务器终端执行:
项目无需额外 Python 依赖,本地运行数据默认保存在
outputs/。服务器部署可通过LLM_DATA_DIR指定独立的数据目录,各终端保持一致。环境、SSH 和 VS Code 连接方法见前置环境配置。完成效果: 进入仓库后,可以看到
app/、docs/、knowledge/和tests/。3.2 配置模型
在
app/config.json中修改model_api:示例模型需要对应接口权限。使用其他服务时,填写实际 API 地址和准确模型名。令牌通过隐藏输入提供,保存在当前进程中:
看到
success、model_present、generation_ok均为 true,说明模型列表与一次真实生成检查通过。报告保存在数据目录的model_probe.json。完成效果: 索引输出包含资料块数量和保存路径,模型检查的三项结果为 true。
索引路径由数据目录决定,资料修改后块数也会变化。
该检查图来自沐曦实例上的真实 API 验证,实际结果以自己的接口为准。
3.3 启动服务
服务启动时重新输入模型令牌。也可通过
LLM_API_KEY环境变量提供令牌,通过LLM_BASE_URL、LLM_MODEL覆盖模型配置。完成效果: 终端显示访问地址和数据目录,并保持运行。
这是本地界面预览的实际启动输出,临时数据目录仅用于截图;自己的部署使用默认目录或指定的
LLM_DATA_DIR。开发调试通过 VS Code 端口转发打开
http://127.0.0.1:8000/。也可在本机执行:3.4 打开页面并开始学习
打开
http://127.0.0.1:8000/,看到登录或注册页面后,输入自己的用户名和密码,点击“注册学生账号”。已有账号直接登录。在学习助手中提问“GPU 不可见时先检查什么?”,查看回答并展开来源。继续补充自己的实际输出,体验多轮排障。
完成效果: 登录成功,问题得到回答,来源可展开,回答反馈和求助入口可用。下面展示从页面顶部到页尾的完整应用预览,包含标题、账号、导航及当前页面全部内容。
完整预览来自本地实际运行的应用,使用示例账号;问答回放此前真实 API 验证保存的回答,本次截图未重新调用模型。实际部署按第 3.2 节配置自己的接口。
3.5 教学功能(可选)
需要发布实验、审阅作业或从页面维护知识库时,在另一个终端创建教学账号:
创建时隐藏输入密码,仅首次执行。个人部署者也可以使用教师账号维护自己的资料。正式教学需要 HTTPS 入口及对应
public_url、secure_cookie配置,见部署与交付。完成效果: 教学账号登录后能看到教师看板,包括学生进度、实验任务、提交审阅、求助和知识库维护。以下为完整页面,账号及任务均为示例。
查看教师看板完整预览
4. 使用指南
公共注册默认获得学生角色。教师与助教权限相同,由部署者授权;学生只能访问本人记录。将已注册用户设为助教,可在服务器执行:
实验提交支持 UTF-8 文本类文件,默认最多 3 个附件、每个 5 MB,可配置。自动检查提供格式和缺项线索,实验是否完成由教师或助教审阅。
5. 二次开发
从替换资料到增加功能的完整练习见二次开发指南;实现原理与源码讲解见项目实现。
建议先跑通原项目,再一次修改一个部分,并验证修改效果。需要维护自己的版本时,可先在平台 Fork 仓库,再克隆自己的副本。
5.1 替换学习资料
knowledge/中的课程说明、实验指南和常见问题,补充实际出处与适用环境。保留课程说明.md作为课程规则查询入口。app/config.json的title、scope、prompt。使用章节步骤工具时,同步调整acceptance.modules。不同课程独立部署并使用独立数据目录,保留原课程的账号和提交记录。
5.2 换模型或调整回答
修改
app/config.json中的模型地址、名称和参数;调整系统提示词prompt,或在app/assistant.py修改回答策略。修改后重新检查模型接口并重启。对同一题集保留修改前后的回答,人工判断事实、出处和帮助是否有效。不要只凭回答长度或关键词命中判断收益。
5.3 修改功能或界面
app/index.htmlapp/teaching.pyapp/accounts.pyapp/storage.py、data_dirapp/rag.pyapp/tools.pyapp/server.py修改配置或代码后重启,修改资料后重建索引。更改数据目录需停服并迁移;给已有数据库增加字段时,要编写迁移,不能只修改初始化建表语句。
向量检索、推理部署、微调和更复杂的 Agent 可作为后续扩展,以产品评测验证收益。先完成核心教学流程,再增加技术模块。
5.4 验证并交付修改
先运行不需要真实令牌的业务测试:
再启动真实服务,用学生账号评测自己的课程问题。换课后同步修改
tests/questions.jsonl中的题目、预期状态和来源。修改后输出到
after.jsonl,保持题集、模型和参数一致。评测生成逐题结果、人工复核 CSV、配置快照和汇总;结果文件不覆盖。RAG 与无资料模型的对照方法见测试与交付。交付标准: 新用户能够按 README 独立启动,用三个角色完成答疑、提交审阅、求助回复和知识更新;记录重启后保留,跨学生访问被拒绝。
6. 教程与仓库结构
先按 README 运行,再读项目实现理解源码,选择二次开发练习,最后按测试与交付验证成果。
账号、提交、对话和运行日志位于服务端数据目录,不进入 Git 仓库。本地开发测试可使用默认
outputs/;教学部署指定服务器目录,备份数据库、附件和课程资料。7. 来源与许可
代码改编自 Full Link Development of Large Models 的课程应用示例,采用木兰宽松许可证第 2 版。知识资料为可替换的教学示例。