全自动算法解题系统,基于 ReAct(Reasoning + Acting) 框架。Django 提供可视化 Web 界面,实时流式展示 LLM 推理和解题过程。
- 左侧题库面板:LeetCode(Medium / Hard)+ Codeforces(按 rating 渐变色标签)
- 右侧过程面板:think 灰色泡泡、Phase 1 蓝色、Phase 2 绿色、Observation 黄色,代码块语法高亮
- 右上角 Ollama 健康检测(每 15 秒轮询)
- 已解题目直接加载历史日志回放,未解题目点击后一键运行
ReAct-AI-Agent/
├── manage.py
├── requirements.txt
│
├── core/ # Django 项目配置
│ ├── settings.py
│ └── urls.py
│
├── web/ # Django App
│ ├── api.py # Django Ninja API(题库 / 日志 / 健康检查 / SSE 解题)
│ ├── views.py
│ └── templates/web/
│ └── index.html
│
├── static/
│ ├── css/main.css
│ └── js/main.js
│
└── ai_agent/ # ReAct 算法解题引擎
├── src/
│ ├── agent/ # ReAct 主循环
│ ├── providers/ # LLM Provider(Ollama / OpenAI / OpenRouter)
│ ├── templates/ # Prompt 模板(Phase 1 / Phase 2)
│ ├── parsers/ # 题目解析器(LeetCode / Codeforces)
│ ├── sandbox/ # Docker 隔离执行
│ ├── logger/ # 增量落盘 JSON 日志
│ └── utils/ # tiktoken token 计数 + 消息裁剪
├── problems/ # 题库 JSON
├── logs/ # 解题日志(JSON)
├── .env # LLM 配置
└── Dockerfile.sandbox # 沙盒镜像
- Python 3.11+
- Docker Desktop(运行状态)
- Ollama(本地模型)或 OpenAI / OpenRouter API Key
pip install -r requirements.txtcp ai_agent/.env.example ai_agent/.env编辑 ai_agent/.env:
PROVIDER_TYPE=ollama
PROVIDER_MODEL=gpt-oss:120b
PROVIDER_BASE_URL=http://localhost:11434/v1docker build -f ai_agent/Dockerfile.sandbox -t react-agent-sandbox:latest .python manage.py runserver 8080停止服务:
lsof -ti :8080 | xargs kill -9| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/problems |
题库列表(含是否有日志) |
| GET | /api/log/{source}/{id} |
加载历史日志(/ 用 __ 编码) |
| GET | /api/health |
Ollama 在线状态 |
| GET | /api/solve/{source}/{id} |
SSE 流式解题 |
SSE 事件类型:think / phase / content / observation / done / error
Phase 1(think=high)
生成测试框架 → 开放用例(模型可见)+ 隐藏用例(模型不可见)
Phase 2 ReAct 循环(最多 8 轮,think=high,max_output=64k)
Thought → 写代码 → Docker 沙盒执行 → Observation → 下一轮
全部测试通过(含隐藏用例)→ 结束
开放 / 隐藏用例的分层设计遵循 TDD / CI-CD 原则:模型只能看到样例,无法针对用例硬编码,必须写通用算法。
修改 ai_agent/.env 即可,无需改代码:
| Provider | 配置 |
|---|---|
| Ollama 本地 | PROVIDER_TYPE=ollama PROVIDER_MODEL=gpt-oss:120b |
| OpenAI | PROVIDER_TYPE=openai PROVIDER_MODEL=gpt-4o PROVIDER_API_KEY=sk-xxx |
| OpenRouter | PROVIDER_TYPE=openrouter PROVIDER_MODEL=anthropic/claude-opus-4-5 PROVIDER_API_KEY=sk-or-xxx |
