# AI Agent 学习助教机器人
**Repository Path**: north-dream-testing/ai-agent--learning-tutor-robot
## Basic Information
- **Project Name**: AI Agent 学习助教机器人
- **Description**: 基于大语言模型与 LangChain Agent 框架构建的智能 Python 助教系统。系统通过 Agent 自主决策机制,自动识别学生问题类型并调度对应工具完成解答,覆盖**代码检查、报错解释、数学计算、知识点问答**四大核心场景,并基于 RAG 技术确保知识回答的准确性。
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-09-24
- **Last Updated**: 2026-09-24
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
基于 Agent 的 Python 助教机器人
功能 •
架构 •
部署 •
API •
FAQ
---
## 项目概述
基于大语言模型与 LangChain Agent 框架构建的智能 Python 助教系统。系统通过 Agent 自主决策机制,自动识别学生问题类型并调度对应工具完成解答,覆盖**代码检查、报错解释、数学计算、知识点问答**四大核心场景,并基于 RAG 技术确保知识回答的准确性。
## 功能特性
### 智能对话交互
系统内置 AI 助教"小林",支持多轮上下文对话,学生可用自然语言自由提问。

### 代码语法检查
学生提交 Python 代码片段,系统通过 AST 静态分析检测语法错误,定位问题行并给出修复建议。
| 前端交互界面 | Agent 工具调用日志 |
|:---:|:---:|
|  |  |
### 报错信息解释
学生粘贴 Python 运行时错误信息,系统以通俗中文解释错误根因,并给出可操作的修复方案。
| 前端交互界面 | Agent 工具调用日志 |
|:---:|:---:|
|  |  |
### Python 知识点问答
基于 RAG(检索增强生成)架构,系统先从 ChromaDB 向量库中检索最相关的知识片段,再结合检索内容生成回答,避免大模型幻觉。
| 前端交互界面 | Agent 工具调用日志 |
|:---:|:---:|
|  |  |
### 数学表达式计算
学生输入数学表达式,系统自动求值并返回计算结果。
| 前端交互界面 | Agent 工具调用日志 |
|:---:|:---:|
|  |  |
## 技术架构
### 系统架构图
```
┌─────────────────────────────────────────────────────────────┐
│ 浏览器客户端 │
│ HTML / CSS / JavaScript 单页应用 │
└──────────────────────────┬──────────────────────────────────┘
│ HTTP REST API
┌──────────────────────────▼──────────────────────────────────┐
│ FastAPI 后端服务 │
│ │
│ ┌───────────────────────────────────────────────────────┐ │
│ │ LangChain Agent (OPENAI_FUNCTIONS) │ │
│ │ │ │
│ │ ┌────────────┐ ────────────┐ ┌───────────────┐ │ │
│ │ │ check_code │ │explain_error│ │ calculate │ │ │
│ │ │ (AST解析) │ │ (LLM解释) │ │ (eval求值) │ │ │
│ │ └────────────┘ └────────────┘ └───────────────┘ │ │
│ │ │ │
│ │ ┌───────────────────────────────────────────────┐ │ │
│ │ │ ask_python_knowledge (RAG 链路) │ │ │
│ │ │ ChromaDB 检索 → 上下文注入 → LLM 生成回答 │ │ │
│ │ └───────────────────────────────────────────────┘ │ │
│ └───────────────────────────────────────────────────────┘ │
│ │
│ ┌───────────────────────────────────────────────────────┐ │
│ │ ChatMessageHistory 对话历史管理 │ │
│ └───────────────────────────────────────────────────────┘ │
└──────────────────────────┬──────────────────────────────────┘
│
┌────────────────┼────────────────┐
▼ ▼ ▼
┌─────────────┐ ┌─────────────┐ ┌──────────────┐
│ DeepSeek │ │ ChromaDB │ │ BGE 嵌入模型 │
│ Chat API │ │ 向量数据库 │ │ bge-large-zh │
│ (LLM 推理) │ │ (知识存储) │ │ (向量化) │
└─────────────┘ └─────────────┘ ──────────────┘
```
### 技术栈
| 层级 | 技术选型 | 版本 | 说明 |
|:---|:---|:---|:---|
| 大语言模型 | DeepSeek Chat | - | 通过 OpenAI 兼容 API 调用 |
| Agent 框架 | LangChain | 0.3.19 | OPENAI_FUNCTIONS Agent 类型 |
| 向量嵌入模型 | BAAI/bge-large-zh-v1.5 | - | 中文优化的 BGE 嵌入模型 |
| 向量数据库 | ChromaDB | 0.6.3 | 本地持久化 HNSW 索引 |
| 后端框架 | FastAPI + Uvicorn | 0.115.6 / 0.33.0 | 异步高性能 Web 框架 |
| 前端 | 原生 HTML/CSS/JS | - | 零依赖单页应用 |
| 容器化 | Docker + Docker Compose | v2+ | 一键部署 |
| 配置管理 | python-dotenv | 1.0.1 | 环境变量注入 |
### 核心模块说明
| 模块 | 文件 | 职责 |
|:---|:---|:---|
| 后端主服务 | `main.py` | FastAPI 路由、Agent 初始化、工具注册、RAG 链路 |
| 知识库构建 | `build_knowledge_base.py` | 文档加载、文本分块、向量入库 |
| 前端界面 | `static/index.html` | 聊天 UI、消息渲染、交互逻辑 |
| 依赖清单 | `requirements.txt` | Python 包版本锁定 |
| 容器配置 | `Dockerfile` | 镜像构建指令 |
| 编排配置 | `docker-compose.yml` | 服务编排、端口映射、卷挂载 |
## 项目结构
```
7.Python助教机器人_项目源码/
├── Dockerfile # Docker 镜像构建文件
├── docker-compose.yml # Docker Compose 服务编排
├── .env # 环境变量(API 密钥等,不提交版本库)
├── .env.example # 环境变量模板
├── .dockerignore # Docker 构建排除规则
├── README.zh-cn.md # 项目说明文档(中文)
│
└── Agent-Based-Python-TA/
└── 基于Agent的Python助教机器人/
├── main.py # FastAPI 后端 + Agent 核心逻辑
├── build_knowledge_base.py # 知识库构建脚本
├── requirements.txt # Python 依赖清单
├── static/
│ └── index.html # 前端聊天界面
├── chromadb/ # ChromaDB 向量数据库持久化目录
│ ├── chroma.sqlite3 # 元数据 SQLite 数据库
│ ── knowledge/
│ └── Python_concept.docx # 知识库源文档(Python 概念)
└── images/ # 功能演示截图
├── 打招呼.png
├── test_check_code.png
├── test_explain_error.png
├── test_ask_python_knowledge.png
├── test_calculate.png
├── agent_function_call_check_code.png
├── agent_function_call_explain_error.png
├── agent_function_call_ask_python_knowledge.png
└── agent_function_call_calculate.png
```
## 快速开始
### 环境要求
| 依赖项 | 最低版本 | 说明 |
|:---|:---|:---|
| Docker | 20.10+ | 容器运行时 |
| Docker Compose | v2+ | 服务编排 |
| 可用内存 | 4 GB+ | 嵌入模型加载需要 |
| 可用磁盘 | 5 GB+ | 首次构建含模型下载 |
### 方式一:Docker 部署(推荐)
#### 1. 克隆项目
```bash
git clone
cd 7.Python助教机器人_项目源码
```
#### 2. 配置环境变量
```bash
cp .env.example .env
```
编辑 `.env` 文件,填入你的 API 配置:
```env
# 大语言模型 API 配置
OPENAI_API_KEY=你的API密钥
OPENAI_BASE_URL=https://api.deepseek.com
MODEL_NAME=deepseek-chat
```
> **说明**:`OPENAI_BASE_URL` 支持任何 OpenAI 兼容的 API 端点,包括 DeepSeek、OpenAI 官方、本地部署的 vLLM / Ollama 等。
#### 3. 构建并启动
```bash
docker compose up -d
```
首次构建预计耗时 10-20 分钟(需下载 Python 依赖和 BGE 嵌入模型约 1.3GB)。
#### 4. 访问应用
浏览器打开 **http://localhost:8080** 即可使用。
#### 常用运维命令
```bash
# 查看服务状态
docker compose ps
# 查看实时日志
docker compose logs -f python-ta
# 停止服务
docker compose down
# 重建镜像(代码修改后)
docker compose up -d --build
```
### 方式二:本地直接运行
```bash
# 1. 安装 Python 依赖
pip install -r Agent-Based-Python-TA/基于Agent的Python助教机器人/requirements.txt
# 2. 下载 BGE 嵌入模型(约 1.3GB)
huggingface-cli download BAAI/bge-large-zh-v1.5
# 3. 配置环境变量
export OPENAI_API_KEY=你的API密钥
export OPENAI_BASE_URL=https://api.deepseek.com
export MODEL_NAME=deepseek-chat
# 4. 启动服务
cd Agent-Based-Python-TA/基于Agent的Python助教机器人
uvicorn main:app --host 0.0.0.0 --port 8000
```
浏览器访问 **http://localhost:8000**。
### 方式三:中国大陆网络加速
国内网络访问 HuggingFace 和 PyPI 可能较慢,项目已内置加速配置:
- **PyPI 镜像**:Dockerfile 中使用阿里云 PyPI 镜像源
- **HuggingFace 镜像**:通过 `HF_ENDPOINT=https://hf-mirror.com` 环境变量切换至国内镜像
- **PyTorch CPU 版本**:使用 `--extra-index-url https://download.pytorch.org/whl/cpu` 避免下载 GPU 版 torch(节省约 2GB)
## 知识库管理
### 构建知识库
```bash
cd Agent-Based-Python-TA/基于Agent的Python助教机器人
python build_knowledge_base.py
```
构建流程:
1. **文档加载**:读取 `chromadb/knowledge/` 目录下的文档文件
2. **文本分块**:使用 `RecursiveCharacterTextSplitter` 切分(chunk_size=150, chunk_overlap=10)
3. **向量化**:通过 BGE 嵌入模型将文本块转换为向量
4. **入库存储**:写入 ChromaDB 向量数据库(HNSW 索引)
### 支持的文档格式
| 格式 | 扩展名 | 加载器 |
|:---|:---|:---|
| Word 文档 | `.docx` | UnstructuredWordDocumentLoader |
| PDF 文档 | `.pdf` | PDF 加载器 |
| 纯文本 | `.txt` | TextLoader |
| CSV 表格 | `.csv` | CSVLoader |
| Markdown | `.md` | Markdown 加载器 |
### 扩展知识库
1. 将新的知识文档放入 `chromadb/knowledge/` 目录
2. 重新执行 `python build_knowledge_base.py`
3. 重启服务使新知识生效
### 调整检索参数
在 `main.py` 中修改检索返回的文档数量:
```python
# 默认 k=1,返回最相关的 1 个文档块
retriever = db.as_retriever(search_kwargs={"k": 1})
# 如需更丰富的上下文,可增大 k 值
retriever = db.as_retriever(search_kwargs={"k": 3})
```
## API 接口文档
### POST /chat
发送聊天消息,获取 AI 助教回复。
**请求头:**
```
Content-Type: application/json
```
**请求体:**
```json
{
"query": "Python的列表和元组有什么区别?"
}
```
**成功响应(200):**
```json
{
"response": "列表和元组都是Python中的序列类型,主要区别在于:列表是可变的..."
}
```
**错误响应(500):**
```json
{
"error": "内部服务器错误"
}
```
### GET /
返回前端聊天界面 HTML 页面。
**响应:** `text/html`,包含完整的聊天 UI。
### GET /static/*
静态资源服务,提供前端所需的 CSS、JS 等文件。
## 工作原理
### Agent 决策流程
```
用户输入问题
│
▼
┌─────────────────┐
│ LangChain Agent │
│ 分析问题意图 │
└────────┬────────
│
┌────────┬────────────┬──────────────┐
▼ ▼ ▼ ▼
check_code explain_error calculate ask_python_knowledge
(AST) (LLM) (eval) (RAG检索+生成)
│ │ │ │
────┬────┴────────────┴──────────────┘
▼
Agent 整合工具输出
│
▼
返回最终回答给用户
```
### RAG 检索增强生成流程
```
用户提问"Python列表是什么?"
│
▼
┌─────────────────────┐
│ BGE 模型向量化问题 │
└──────────┬──────────┘
▼
┌─────────────────────┐
│ ChromaDB 相似度检索 │──→ 返回 Top-K 相关文档块
└──────────┬──────────┘
▼
┌─────────────────────┐
│ 文档块注入系统提示词 │
──────────┬──────────┘
▼
┌─────────────────────┐
│ DeepSeek 生成回答 │──→ "Python列表是一个有序且可变的集合..."
└─────────────────────┘
```
### 对话历史管理
系统使用 `ChatMessageHistory` 在服务端维护全局对话历史。每次请求时,完整的历史对话会被注入到 Agent 的系统提示词中,使模型能够理解上下文、保持对话连贯性。
## 环境变量配置
| 变量名 | 必填 | 默认值 | 说明 |
|:---|:---:|:---|:---|
| `OPENAI_API_KEY` | 是 | - | 大语言模型 API 密钥 |
| `OPENAI_BASE_URL` | 否 | `https://api.openai.com/v1` | API 端点地址 |
| `MODEL_NAME` | 否 | `deepseek-chat` | 模型名称 |
| `HF_ENDPOINT` | 否 | `https://huggingface.co` | HuggingFace 镜像地址 |
| `HF_HOME` | 否 | `~/.cache/huggingface` | 模型缓存目录 |
## 常见问题
### 首次启动非常慢
首次运行需要下载 BGE 嵌入模型(约 1.3GB)和 Python 依赖包。后续启动只需加载已缓存的模型,速度会显著提升。
### 如何切换大语言模型
修改 `.env` 文件中的两个变量即可:
```env
# 切换为 OpenAI 官方
OPENAI_BASE_URL=https://api.openai.com/v1
MODEL_NAME=gpt-3.5-turbo
# 切换为本地 Ollama
OPENAI_BASE_URL=http://localhost:11434/v1
MODEL_NAME=qwen2:7b
```
### 知识库回答不准确
可尝试以下调整:
1. 增大检索数量:修改 `main.py` 中 `search_kwargs={"k": 1}` 为更大的值
2. 优化知识文档:确保 `Python_concept.docx` 内容准确、结构清晰
3. 调整分块参数:修改 `build_knowledge_base.py` 中的 `chunk_size` 和 `chunk_overlap`
### 端口 8080 被占用
修改 `docker-compose.yml` 中的端口映射:
```yaml
ports:
- "8081:8000" # 将宿主机端口改为 8081
```
### 容器日志无输出
应用启动时需要加载嵌入模型(约 30-60 秒),此期间无日志输出属正常现象。可通过 `docker logs -f python-ta-bot` 持续观察。
### 依赖安装冲突
项目已简化 `requirements.txt` 为最小核心依赖集,由 pip 自动解析传递依赖。如遇版本冲突,可尝试:
```bash
pip install --upgrade pip
pip install -r requirements.txt --no-deps
```
## 贡献指南
欢迎通过以下方式参与贡献:
1. **Fork** 本仓库
2. 创建特性分支:`git checkout -b feature/your-feature`
3. 提交变更:`git commit -m 'feat: 添加某某功能'`
4. 推送分支:`git push origin feature/your-feature`
5. 提交 **Pull Request**
### 代码规范
- Python 代码遵循 PEP 8 风格
- 提交信息使用 [Conventional Commits](https://www.conventionalcommits.org/) 规范
- 新增功能需附带对应的测试用例
## 许可证
本项目仅供学习和研究使用。
## 致谢
| 项目 | 用途 | 链接 |
|:---|:---|:---|
| LangChain | Agent 编排框架 | https://github.com/langchain-ai/langchain |
| ChromaDB | 向量数据库 | https://github.com/chroma-core/chroma |
| BGE | 中文文本嵌入模型 | https://huggingface.co/BAAI/bge-large-zh-v1.5 |
| DeepSeek | 大语言模型 API | https://www.deepseek.com/ |
| FastAPI | Web 后端框架 | https://fastapi.tiangolo.com/ |