一个全栈独立开发的计算机专业课程智能答疑系统,基于 AWS 无服务器架构构建,集成 DeepSeek 大语言模型,为计算机专业学生提供课程作业答疑、代码纠错、知识点梳理等智能化服务。
技术痛点:通用 LLM 模型对于计算机专业课程的垂类知识理解不够精准,常常产生幻觉回答,影响学习效率。
业务痛点:学生在课程学习中遇到问题时,缺乏即时、专业的答疑渠道,传统的搜索引擎或论坛问答效率低下。
核心解决方案:
- 通过专业领域 Prompt 工程,引导模型聚焦于计算机专业知识(Python/Java/数据结构/操作系统/计算机网络)
- 实现问题输入 → AI 精准答疑 → DynamoDB 持久化 → 历史查询的完整业务闭环
- 无服务器架构提供弹性伸缩能力,按需付费,成本可控
点击下方图片观看项目完整演示视频 🎥
💡 点击上方图片,观看项目完整演示视频,了解系统功能与技术架构的详细展示
| 功能 | 描述 | 技术实现 |
|---|---|---|
| 智能问答 | 输入问题,AI 返回专业解答 | 调用 call_deepseek_api() 构建标准化请求体,设置 max_tokens=2000, temperature=0.7 |
| 代码纠错 | 粘贴代码片段,获取错误分析 | SYSTEM_PROMPT 明确引导代码分析和修复方案输出 |
| 历史记录 | 自动保存问答历史 | DynamoDB 复合主键设计:questionId(HASH) + createdAt(RANGE) |
| 分类筛选 | 按标签筛选历史记录 | DynamoDB Scan + FilterExpression=Attr('tag').eq() |
| 批量删除 | 清空全部历史记录 | batch_writer() 高效批量操作,减少网络往返 |
1. Lambda 单文件架构设计
- 所有业务逻辑集中在
lambda_function.py,零依赖外部模块,部署包体积最小化 - 路由分发通过
http_method+path组合实现,避免复杂框架开销 - 统一响应构建
build_response(),自动处理 CORS 和 JSON 序列化
2. 输入校验与容错体系
- 问题长度限制(2000字符)防止 API 滥用
- 空问题检测,快速返回 400 状态码
- 全局异常捕获,敏感错误信息不泄露给客户端
- HTTP 状态码规范:200(成功) / 400(请求错误) / 404(资源未找到) / 500(服务器错误)
3. 前端交互体验优化
- 深色/浅色主题切换:CSS 变量实现,localStorage 持久化
- 代码语法高亮:集成 highlight.js,支持多种编程语言
- Markdown 渲染:使用 marked.js 解析 AI 返回的富文本内容
- 响应式设计:适配移动端和桌面端,侧边栏在小屏幕自动隐藏
4. 本地开发环境
- Flask 模拟 Lambda:
local_server.py将 Lambda 事件结构转换为 Flask 请求,支持热更新调试 - 环境变量检测:启动时自动检查必要配置是否存在
Backend: Python 3.10+ + AWS Lambda
Database: Amazon DynamoDB
AI Service: DeepSeek API (deepseek-chat)
Local Dev: Flask 2.0+
Frontend: Vanilla JS + CSS3
Cloud Infrastructure: AWS API Gateway + S3
sequenceDiagram
participant User as 用户
participant Frontend as 前端
participant APIGW as API Gateway
participant Lambda as Lambda Function
participant DeepSeek as DeepSeek API
participant DynamoDB as DynamoDB
User->>Frontend: 输入问题 + 选择标签
Frontend->>APIGW: POST /ask (question, tag)
APIGW->>Lambda: lambda_handler(event)
Lambda->>Lambda: handle_ask(event)
Lambda->>Lambda: 输入校验 (非空 + 长度)
Lambda->>DeepSeek: call_deepseek_api(question)
DeepSeek-->>Lambda: {"choices": [{"message": {"content": "..."}}]}
Lambda->>Lambda: 生成 questionId (UUID)
Lambda->>DynamoDB: save_to_dynamodb(item)
DynamoDB-->>Lambda: 写入成功
Lambda-->>APIGW: build_response(200, {"success": true, "data": {...}})
APIGW-->>Frontend: JSON 响应
Frontend->>User: 显示 AI 回答
sequenceDiagram
participant User as 用户
participant Frontend as 前端
participant APIGW as API Gateway
participant Lambda as Lambda Function
participant DynamoDB as DynamoDB
User->>Frontend: 切换标签筛选
Frontend->>APIGW: GET /history?tag=数据结构&limit=50
APIGW->>Lambda: lambda_handler(event)
Lambda->>Lambda: handle_get_history(event)
alt 有标签筛选
Lambda->>DynamoDB: scan(FilterExpression=Attr('tag').eq(tag), Limit=50)
else 无标签筛选
Lambda->>DynamoDB: scan(Limit=50)
end
DynamoDB-->>Lambda: {"Items": [...]}
Lambda->>Lambda: items.sort(key=lambda x: x['createdAt'], reverse=True)
Lambda-->>APIGW: build_response(200, {"success": true, "data": items})
APIGW-->>Frontend: JSON 响应
Frontend->>User: 渲染历史列表
- 安装依赖
cd lambda
pip install -r requirements.txt
pip install flask boto3- 配置环境变量
# Windows PowerShell
$env:DEEPSEEK_API_KEY="your_deepseek_api_key"
$env:TABLE_NAME="campus-qa-8056-qa-history"- 启动本地服务器
python local_server.py提问接口
curl -X POST http://localhost:5000/ask \
-H "Content-Type: application/json" \
-d '{"question": "什么是二叉树的前序遍历?", "tag": "数据结构"}'查询历史
curl http://localhost:5000/history?tag=数据结构&limit=10清空历史
curl -X DELETE http://localhost:5000/history- 环境变量隔离:API Key 通过 AWS Secrets Manager/环境变量注入,不硬编码到代码中
- 输入校验:问题长度限制、空值检测,防止恶意输入和资源滥用
- CORS 配置:明确允许的 Origin、Methods、Headers,防止跨域攻击
- 异常处理:全局 try-catch,错误信息脱敏处理,敏感信息不泄露
- Lambda 冷启动优化:单文件架构减少依赖加载时间,启动更快
- DynamoDB 批量操作:
batch_writer()合并多个操作,减少网络往返次数 - 超时控制:API 请求设置 30s 超时,避免资源长时间占用
- 日志记录:关键节点打印日志,便于问题排查和性能监控
如果这个项目对你有帮助,请给个支持的 star!谢谢 ⭐️
