GradNote是一个基于FastAPI和大型语言模型(LLM)的错题知识点管理系统,帮助学生和教师高效管理、分析和利用错题资源。系统自动从错题中提取知识点,构建知识图谱,并提供智能化的学习建议。该仓库为项目的后端仓库。
- 🔍 智能错题分析:利用LLM自动分析错题并提取关键知识点
- 🧠 知识点网络构建:形成结构化知识体系,揭示知识点间关联
- 📊 学习弱点识别:检测学习中的薄弱环节,提供针对性建议
- 📈 学习进度追踪:监控学习进度,实现个性化学习
-
错题管理
- 支持多种格式错题录入(文本、图片)
- 智能分类与标签系统
- 全文检索功能
-
知识点提取
- 基于LangChain的知识点自动提取
- 知识点关联性分析
- 知识体系可视化
-
学习辅助
- 个性化复习计划生成
- 难点攻克建议
- 学习资源智能推荐
-
系统监控
- LangFuse提供的LLM性能监控
- 用户行为分析
- 系统使用统计
- 后端框架:FastAPI - 高性能异步API框架
- 数据库:PostgreSQL - 开源关系型数据库
- LLM集成:
- 监控分析:LangFuse - LLM应用监控平台
GradNote
│
├── backend/ # 后端服务
│ ├── app/ # 应用主目录
│ │ ├── api/ # API路由模块
│ │ │ ├── v1/ # API v1版本
│ │ │ └── deps.py # API依赖项
│ │ │
│ │ ├── core/ # 核心配置
│ │ │ ├── config.py # 配置管理
│ │ │ └── security.py # 安全配置
│ │ │
│ │ ├── db/ # 数据库模块
│ │ │ ├── base.py # 数据库基类
│ │ │ └── session.py # 会话管理
│ │ │
│ │ ├── llm_services/ # LLM服务
│ │ │ ├── chains/ # LangChain链
│ │ │ ├── graphs/ # LangGraph图
│ │ │ ├── prompts/ # 提示模板
│ │ │ └── monitoring/ # LangFuse监控
│ │ │
│ │ ├── models/ # 数据模型
│ │ │ ├── domain/ # 领域模型
│ │ │ └── schemas/ # Pydantic模式
│ │ │
│ │ ├── services/ # 业务服务
│ │ │ ├── problem_service.py # 错题服务
│ │ │ └── knowledge_service.py # 知识点服务
│ │ │
│ │ └── main.py # 应用入口
│ │
│ ├── requirements.txt # 依赖
│ ├── uploads/ # 上传的图片
│ └── .env.example # 环境变量示例
│
└── README.md # 项目说明
- Python 3.13+
- PostgreSQL 17+
- OpenAI API密钥(或其他兼容LLM的API)
- 克隆仓库
git clone https://github.com/black-zero358/GradNote.git
cd GradNote- 设置Python虚拟环境
python -m venv venv
# Windows
venv\Scripts\activate
# Linux/MacOS
source venv/bin/activate- 安装依赖
pip install -r backend/requirements.txt- 配置环境变量
cp .env.example .env
# 编辑.env文件,配置必要参数- 初始化数据库
todo...
- 启动应用
uvicorn app.main:app --reload应用将在 http://localhost:8000 运行
启动应用后,访问以下地址查看API文档:
- Swagger UI: http://localhost:8000/docs
- ReDoc: http://localhost:8000/redoc
import requests
response = requests.post(
"http://localhost:8000/api/v1/problems/",
json={
"title": "求解方程 2x + 3 = 7",
"content": "求解方程 2x + 3 = 7,其中x为未知数",
"subject": "数学",
"difficulty": "简单"
}
)
print(response.json())response = requests.get(
"http://localhost:8000/api/v1/problems/",
params={"subject": "数学", "limit": 10}
)
print(response.json())response = requests.post(
"http://localhost:8000/api/v1/knowledge/extract",
json={"problem_id": 1}
)
print(response.json())- API路由 (
app/api/): 处理HTTP请求的路由定义 - 数据模型 (
app/models/): SQLAlchemy和Pydantic模型 - 业务服务 (
app/services/): 核心业务逻辑 - LLM服务 (
app/llm_services/): LLM相关功能实现
我们使用LangChain和LangGraph构建LLM应用,设计原则:
- 模块化: 每个链和图都有明确的单一职责
- 可配置: 通过环境变量和配置文件灵活配置
- 可监控: 集成LangFuse实现全链路监控
- 可扩展: 支持多种LLM后端
示例LangChain链:
from langchain.chains import LLMChain
from langchain.prompts import PromptTemplate
from langchain_openai import ChatOpenAI
# 知识点提取链
knowledge_template = """
请从以下题目中提取关键知识点:
题目: {problem_content}
输出格式: 以JSON数组形式返回提取的知识点
"""
prompt = PromptTemplate(
input_variables=["problem_content"],
template=knowledge_template
)
llm = ChatOpenAI(temperature=0)
knowledge_chain = LLMChain(llm=llm, prompt=prompt)主要实体关系:
- Problem: 错题信息
- KnowledgePoint: 知识点
- ProblemKnowledge: 错题与知识点的多对多关系
- User: 用户信息
- UserProblemRecord: 用户错题记录
我们使用LangFuse进行LLM应用监控:
from langfuse.callback import CallbackHandler
handler = CallbackHandler(
public_key=os.getenv("LANGFUSE_PUBLIC_KEY"),
secret_key=os.getenv("LANGFUSE_SECRET_KEY")
)
llm = ChatOpenAI(
callbacks=[handler]
)- Fork项目仓库
- 创建特性分支 (
git checkout -b feature/amazing-feature) - 提交更改 (
git commit -m 'Add amazing feature') - 推送到分支 (
git push origin feature/amazing-feature) - 创建Pull Request
本项目采用AGPL-3.0 license - 详见 LICENSE 文件
