Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

一个基于Langchain和Flask构建的AI大模型自动批改英语作文系统

License

Notifications You must be signed in to change notification settings

rice-awa/AutoGradAI

Repository files navigation

AI英语作文自动批改系统

🎉 最新更新 (2025年10月07日): 现已支持任何OpenAI兼容的API服务,包括Ollama本地模型!详见配置指南

基于大型语言模型(LLM)的英语作文自动批改系统,为英语学习者提供专业、全面、详细的作文评价和改进建议。

项目简介

本项目是一个使用现代NLP技术实现的英语作文自动批改系统,通过整合深度语义分析,提供与专业英语教师相当的批改质量。系统对英语作文进行全方位评价,包括语法、拼写、用词、结构和内容深度,并给出详细的改进建议。

主要功能

  • 作文评分:提供15分制专业评分,附带详细评分理由
  • 错误分析:精确定位并分类作文中的拼写错误、语法错误和用词不当问题
  • 亮点分析:识别作文中使用的高级词汇和优秀表达
  • 写作建议:提供针对性的结构、表达和内容改进建议
  • 同步/异步处理:支持同步和异步批改模式,适应不同使用场景
  • 流式响应:实时返回批改结果,提升用户体验
  • 多模型支持:灵活支持DeepSeek、OpenAI及任何OpenAI兼容的API服务
  • 统一配置管理:通过JSON配置文件轻松管理服务器和模型设置

技术架构

  • 前端:Flask Web应用,响应式设计
  • 后端:Python + LangChain框架
  • 配置管理:JSON配置文件,支持灵活的模型和服务器配置
  • 语言模型:支持DeepSeek、OpenAI及任何OpenAI兼容的API服务
  • 错误检测:基于高级正则表达式和语义分析的错误检测系统
  • 错误位置验证:智能索引匹配系统,确保精确定位错误位置
  • 类型提示:使用Python类型注解提高代码可读性和可维护性

流程展示

  • 初始界面提交作文

pVMrMYF.png

  • 等待批改,流式传输数据,实时返回批改结果

pVMr8yR.png

  • 批改完成

pVMrGO1.png

  • 鼠标悬停可查看错误,点击即可跳转到错误

pVMrQW4.png

安装与使用

环境要求

  • Python 3.8+
  • 网络连接(用于API调用)
  • OpenAI/DeepSeek API密钥

安装步骤

  1. 克隆本仓库

    git clone https://github.com/rice-awa/AutoGradAI.git
    cd AutoGradAI
  2. 安装依赖

    pip install -r requirements.txt
  3. 配置应用

    方式一:使用配置文件(推荐)

    复制示例配置文件并根据需要修改:

    cp config.example.json config.json

    编辑 config.json:

    {
     "server": {
     "host": "0.0.0.0",
     "port": 5000,
     "debug": true
     },
     "model": {
     "provider": "deepseek", // 可选: deepseek, openai, ollama, 或其他
     "deepseek": {
     "model_name": "deepseek-chat",
     "base_url": "https://api.deepseek.com/v1",
     "temperature": 0.0,
     "request_timeout": 120
     }
     }
    }
  4. 配置环境变量(API密钥)

    创建 .env 文件:

    # 根据使用的provider设置对应的API密钥
    # DeepSeek
    DEEPSEEK_API_KEY=your_deepseek_api_key_here
    # OpenAI
    OPENAI_API_KEY=your_openai_api_key_here
    # 自定义provider (可选)
    # 使用特定环境变量: {PROVIDER}_API_KEY
    OLLAMA_API_KEY=ollama
    # 或使用通用密钥 (作为后备)
    API_KEY=your_api_key_here

    或直接设置环境变量:

    # Linux/MacOS
    export DEEPSEEK_API_KEY=your_deepseek_api_key_here
    # Windows PowerShell
    $env:DEEPSEEK_API_KEY="your_deepseek_api_key_here"
    # Windows CMD
    set DEEPSEEK_API_KEY=your_deepseek_api_key_here

模型配置

系统支持多种语言模型,通过 config.json 轻松切换:

1. 使用预定义模型 (DeepSeek/OpenAI)

编辑 config.json,修改 provider 字段:

{
 "model": {
 "provider": "deepseek" // 或 "openai"
 }
}

2. 使用自定义OpenAI兼容服务

系统支持任何OpenAI兼容的API服务,例如:

Ollama (本地模型):

{
 "model": {
 "provider": "ollama",
 "ollama": {
 "model_name": "qwen2.5:14b",
 "base_url": "http://localhost:11434/v1",
 "temperature": 0.0,
 "request_timeout": 120
 }
 }
}

设置环境变量: OLLAMA_API_KEY=ollama

OpenRouter (多模型路由):

{
 "model": {
 "provider": "openrouter",
 "openrouter": {
 "model_name": "anthropic/claude-3-sonnet",
 "base_url": "https://openrouter.ai/api/v1",
 "temperature": 0.0,
 "request_timeout": 120
 }
 }
}

设置环境变量: OPENROUTER_API_KEY=sk-or-v1-...

任何自定义服务:

{
 "model": {
 "provider": "custom",
 "custom": {
 "model_name": "your-model-name",
 "base_url": "https://your-api.example.com/v1",
 "temperature": 0.0,
 "request_timeout": 120
 }
 }
}

设置环境变量: CUSTOM_API_KEY=your-api-keyAPI_KEY=your-api-key

环境变量优先级

对于自定义provider,系统会按以下顺序查找API密钥:

  1. {PROVIDER}_API_KEY (如 OLLAMA_API_KEY)
  2. API_KEY (通用密钥,作为后备)

启动应用

python run.py

默认情况下,应用将在 http://localhost:5000 启动。

命令行参数:

# 自定义主机和端口
python run.py --host 127.0.0.1 --port 8080
# 关闭调试模式
python run.py --no-debug

配置文件中的设置会被命令行参数覆盖。

使用方法

Web界面使用

  1. 打开浏览器访问 http://localhost:5000
  2. 在文本框中输入或粘贴需要批改的英语作文
  3. 点击"提交"按钮
  4. 等待批改结果显示(通常在60秒内完成)

API调用

提交作文(异步)

curl -X POST http://localhost:5000/api/submit \
 -H "Content-Type: application/json" \
 -d '{"essay":"Your English essay here..."}'

返回:

{
 "task_id": "uuid-task-id",
 "status": "queued"
}

查询批改状态

curl http://localhost:5000/api/status/<task_id>

返回:

{
 "status": "completed",
 "result": {
 "评分": { ... },
 "错误分析": { ... },
 "亮点分析": { ... },
 "写作建议": { ... }
 }
}

项目结构

AutoGradAI/
├── app.py # Flask Web应用和API接口
├── main.py # 核心批改逻辑和LLM调用
├── prompts.py # LLM提示词和批改指令模板
├── logger.py # 日志配置和管理系统
├── run.py # 应用启动脚本
├── config.json # 配置文件 (用户创建)
├── config.example.json # 配置文件示例
├── .env # 环境变量文件 (用户创建)
├── requirements.txt # 项目依赖
├── static/ # 静态资源文件
│ ├── css/ # 样式表
│ ├── js/ # JavaScript脚本
│ └── img/ # 图片资源
├── templates/ # HTML模板
│ ├── index.html # 主页面模板
│ ├── result.html # 结果页面模板
│ └── layout.html # 布局模板
├── logs/ # 日志目录
├── tests/ # 测试代码目录
└── claude_md/ # 文档目录
 └── fix/ # 修复文档

核心模块详解

  • main.py:

    • 定义数据结构和类型(ErrorItem, TaskStatus等)
    • 实现ModelConfig类,支持多模型配置和OpenAI兼容服务
    • 提供错误分析验证 (ErrorAnalysisValidator)
    • 实现任务处理逻辑 (TaskHandler)
    • 提供同步、异步、流式处理API
  • run.py:

    • 应用启动和初始化
    • 配置加载和验证
    • API密钥检查(支持自定义provider)
    • 命令行参数处理
  • prompts.py:

    • 定义作文批改提示词模板
    • 配置错误模式和规则
    • 管理输出格式指导
  • logger.py:

    • 配置日志记录系统
    • 实现日志过滤和格式化
    • 支持文件和控制台输出
  • app.py:

    • 实现Flask Web界面
    • 定义RESTful API接口
    • 管理任务队列和状态跟踪

高级功能

错误位置验证

系统采用智能错误位置验证机制,通过以下方法确保精确定位:

  • 精确文本匹配
  • 模糊匹配算法
  • 上下文相关性分析

异步处理支持

系统支持长文本的异步处理,避免Web请求超时:

  • 任务队列管理
  • 实时状态查询
  • 结果缓存机制

流式响应支持

系统支持流式响应处理,实时展示批改结果:

  • 实时数据传输
  • 流式响应管理
  • 自动错误恢复

多模型灵活切换

系统支持在不同LLM之间灵活切换:

  • 统一的配置接口(config.json)
  • 支持任何OpenAI兼容的API服务
  • 灵活的API密钥管理
  • 模块化模型配置

OpenAI兼容服务支持

系统支持任何OpenAI兼容的API服务,包括:

  • Ollama: 本地大模型部署
  • vLLM: 高性能推理服务器
  • LocalAI: 本地AI服务
  • OpenRouter: 多模型路由服务
  • 任何自定义的OpenAI兼容API

数据类型设计

系统采用TypedDict和类型注解,实现强类型的数据结构:

class EssayFeedback(TypedDict):
 """作文反馈完整数据结构"""
 评分: EvaluationScore
 错误分析: ErrorAnalysis
 亮点分析: HighlightAnalysis
 写作建议: WritingSuggestion

未来计划

  • ✅ 支持更多语言模型集成(已支持任何OpenAI兼容服务)
  • ✅ 统一配置管理(已通过config.json实现)
  • 添加批量处理功能
  • 实现用户历史记录和进度跟踪
  • 开发更精细的评分标准和错误分类
  • 增加自定义提示词和评分标准
  • 添加单元测试和集成测试
  • 支持更多语言的作文批改

性能优化建议

  • 使用异步API处理长文本
  • 对于较短文本,使用同步API减少延迟
  • 使用本地模型(如Ollama)降低API成本和延迟
  • 在高负载情况下配置队列系统
  • 定期清理日志文件

常见问题

如何切换到本地模型?

  1. 安装并启动Ollama
  2. 编辑 config.json,设置provider为"ollama"
  3. 配置ollama的base_url和model_name
  4. 设置环境变量 OLLAMA_API_KEY=ollama

如何使用自定义API服务?

  1. 确保您的API服务支持OpenAI格式
  2. config.json 中添加自定义provider配置
  3. 设置对应的环境变量({PROVIDER}_API_KEYAPI_KEY)

配置文件和命令行参数的优先级?

优先级从高到低:

  1. 命令行参数
  2. config.json配置文件
  3. 默认值

支持哪些OpenAI兼容的服务?

理论上支持所有OpenAI兼容的API服务,包括但不限于:

  • Ollama (本地)
  • Qwen (OpenAI兼容)
  • OpenRouter (路由服务)
  • 任何自建的OpenAI兼容服务

许可证

MIT

贡献指南

欢迎提交Issue和Pull Request,共同改进这个项目!

联系方式

issues@rice-awa.top

About

一个基于Langchain和Flask构建的AI大模型自动批改英语作文系统

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

AltStyle によって変換されたページ (->オリジナル) /