Sign inSign up

liukunup/ai-software-engineer

By liukunup

Updated 10 months ago

Image
0

305

liukunup/ai-software-engineer repository overview

AI Software Engineer

Docker FastAPI Python Node.js Kubernetes License

集成多种 AI 编程助手的智能工作节点

支持独立运行和集群部署 | 安全的命令执行 | 完整的 API 服务

快速开始功能特性部署指南API 文档配置说明


📖 简介

AI Software Engineer 是一个基于 Docker 的智能工作节点,集成了多种主流 AI 编程助手 CLI 工具,并提供 FastAPI 后端服务用于安全地执行白名单命令。

核心特性
  • 🎯 双模式运行: Standalone(独立)和 Worker(集群)两种模式
  • 🔒 安全执行: 基于白名单的命令执行机制
  • 🚀 开箱即用: 一键启动脚本,快速部署
  • 📊 完整监控: 健康检查、心跳上报、状态追踪
  • ☸️ 云原生: 支持 Docker、Docker Compose、Kubernetes
  • 🤖 AI 集成: GitHub Copilot、OpenAI Codex、Cursor、Alibaba Qoder、Tencent Codebuddy 等工具
  • 🔧 灵活配置: 支持按需安装 AI 工具,减少镜像体积

🎯 快速开始

前置要求
  • Docker 20.10+
  • (可选) Docker Compose 2.0+
  • (可选) Kubernetes 1.20+
  • (可选) Python 3.12+ (本地开发)
1️⃣ 本地开发模式

使用 Python 虚拟环境运行:

# 克隆仓库
git clone https://github.com/liukunup-ai/ai-software-engineer.git
cd ai-software-engineer

# 创建虚拟环境并安装依赖
python -m venv .venv
source .venv/bin/activate  # Windows: .venv\Scripts\activate
pip install -r requirements.txt

# 启动服务(使用启动脚本)
./start.sh

# 或直接使用 uvicorn
cd app
uvicorn main:app --host 0.0.0.0 --port 8007 --reload

访问服务:

2️⃣ Docker 容器模式
Standalone 模式(独立容器)
# 使用 Makefile 构建并运行
make build
make run

# 或使用 Docker 命令
docker build -f docker/Dockerfile -t ai-software-engineer:latest .
docker run -d \
  --name ai-worker \
  -e NODE_MODE=standalone \
  -p 8007:8007 \
  ai-software-engineer:latest
Worker 模式(集群节点)
# 配置环境变量
export REGISTER_URL=http://master-node:8000
export REGISTER_KEY=your-secret-key
export NODE_NAME=worker-01

# 使用启动脚本
./start.sh --register http://master-node:8000 --key your-secret-key

# 或使用 Docker Compose
docker-compose up -d

🚀 功能特性

运行模式
模式用途特点适用场景
Standalone独立容器无需后端,快速启动开发、测试、单机部署
Worker集群节点自动注册,心跳上报生产环境、分布式部署
集成的 AI 工具
GitHub Copilot
官方 AI 编程助手
OpenAI Codex
OpenAI 代码模型
Claude Code
Anthropic Claude 助手
Cursor
AI 代码编辑器
Alibaba Qoder
阿里云代码助手
Tencent Codebuddy
腾讯代码助手
OpenCode
开源代码生成工具
技术栈
  • 基础镜像: Ubuntu 24.04 LTS
  • 运行时: Python 3.12 + Node.js 22.x
  • 框架: FastAPI 0.110+ + Uvicorn
  • HTTP 客户端: httpx 0.27+
  • 容器化: Docker + Docker Compose + Docker CLI
  • 编排: Kubernetes (可选)

📦 包含的工具

系统工具
├── Ubuntu 24.04 LTS
├── Python 3.12
├── Node.js 22.x
├── Docker CLI
├── Git
├── curl, wget
├── vim, tree
└── 其他常用 CLI 工具
AI 编程助手
# GitHub Copilot (可选安装)
gh copilot suggest "your task"
gh copilot explain "complex command"

# OpenAI Codex (可选安装)
codex help

# Claude Code (可选安装)
claude-code help

# Cursor (可选安装)
cursor help

# Alibaba Qoder (可选安装)
qoder help

# Tencent Codebuddy (可选安装)
tencent-codebuddy help

# OpenCode (可选安装)
opencode help

注意: AI 工具默认全部安装。可通过构建参数控制按需安装,减少镜像体积。


🛠 部署方式

方式 1: 快速启动脚本
# 本地开发(不使用 Docker)
./start.sh

# 使用 Makefile(Docker)
make build
make run

# 自定义参数
./start.sh --port 8080 --register http://master:8000 --key secret
方式 2: Docker 命令
# Standalone
docker run -d \
  --name ai-standalone \
  -e NODE_MODE=standalone \
  -e ALLOWED_COMMANDS=echo,date,ls,python3,node \
  -p 8007:8007 \
  ai-software-engineer:latest

# Worker
docker run -d \
  --name ai-worker \
  -e NODE_MODE=worker \
  -e REGISTER_URL=http://master:8000 \
  -e REGISTER_KEY=your-key \
  -e NODE_NAME=worker-1 \
  -e NODE_HOST=192.168.1.100 \
  -e NODE_PORT=8007 \
  -p 8007:8007 \
  ai-software-engineer:latest
方式 3: Docker Compose
version: '3.8'

services:
  ai-software-engineer:
    image: ai-software-engineer:latest
    container_name: ai-software-engineer
    restart: unless-stopped
    ports:
      - "8007:8007"
    environment:
      NODE_MODE: worker  # 或 standalone
      REGISTER_URL: http://localhost:8000
      REGISTER_KEY: key
      NODE_NAME: ai-software-engineer
      NODE_HOST: 127.0.0.1
      NODE_PORT: 8007
      HEARTBEAT_INTERVAL: 30
      ALLOWED_COMMANDS: echo,date,ls
      COMMAND_TIMEOUT: 15
docker-compose -f docker/docker-compose.yml up -d
方式 4: Kubernetes
# 部署
kubectl apply -f docker/k8s-deployment.yaml

# 扩容
kubectl scale deployment ai-worker --replicas=10

# 查看状态
kubectl get pods -l app=ai-worker

详细配置参见 k8s-deployment.yaml


🔨 构建镜像

使用 Makefile(推荐)
# 查看所有可用命令
make help

# 构建完整镜像(包含所有 AI 工具)
make build

# 强制重新构建(不使用缓存)
make build-no-cache

# 构建最小化镜像(仅必要工具)
make build-minimal
自定义构建
# 指定镜像名称和标签
make build IMAGE_NAME=myorg/ai-worker IMAGE_TAG=v1.0

# 选择性安装 AI 工具
docker build \
  --build-arg INSTALL_GITHUB_COPILOT=true \
  --build-arg INSTALL_OPENAI_CODEX=false \
  --build-arg INSTALL_CURSOR=false \
  --build-arg INSTALL_ALIBABA_QODER=true \
  -f docker/Dockerfile \
  -t ai-software-engineer:custom .

# 指定 Python 和 Node.js 版本
docker build \
  --build-arg PYTHON_VERSION=3.12 \
  --build-arg NODE_VERSION=22.x \
  -f docker/Dockerfile \
  -t ai-software-engineer:latest .

📡 API 文档

端点列表
方法路径描述认证
GET/healthz健康检查,返回节点状态
POST/execute执行白名单命令
POST/config/commands更新命令白名单(运行时)
POST/config/timeout更新命令超时(运行时)
GET/docsSwagger API 文档
GET/redocReDoc API 文档
健康检查
curl http://localhost:8007/healthz

响应示例(Standalone 模式):

{
  "status": "healthy",
  "mode": "standalone",
  "node_name": "dev-node",
  "allowed_commands": ["echo", "date", "ls", "python3"],
  "command_timeout": 15.0
}

响应示例(Worker 模式):

{
  "status": "healthy",
  "mode": "worker",
  "node_name": "worker-01",
  "node_id": "123e4567-e89b-12d3-a456-426614174000",
  "register_url": "http://master:8000",
  "allowed_commands": ["echo", "date", "ls", "python3"],
  "command_timeout": 15.0
}
执行命令
# 执行 echo 命令
curl -X POST http://localhost:8007/execute \
  -H "Content-Type: application/json" \
  -d '{
    "command": "echo",
    "args": ["Hello", "World"]
  }'

响应示例:

{
  "command": "echo",
  "args": ["Hello", "World"],
  "exit_code": 0,
  "stdout": "Hello World\n",
  "stderr": "",
  "duration_ms": 12.5
}
运行时配置更新
# 更新命令白名单
curl -X POST http://localhost:8007/config/commands \
  -H "Content-Type: application/json" \
  -d '{
    "commands": ["echo", "date", "ls", "pwd", "python3", "node"]
  }'

# 更新命令超时
curl -X POST http://localhost:8007/config/timeout \
  -H "Content-Type: application/json" \
  -d '{
    "timeout": 30.0
  }'
错误处理
// 命令不在白名单
{
  "detail": "Command 'rm' is not allowed"
}

// 命令执行失败
{
  "detail": "Command 'invalid_cmd' not found"
}
{
  "detail": "命令执行超时"
}

// 命令未找到
{
  "detail": "命令未找到,请检查容器或系统中是否已安装"
Swagger 文档

访问 http://localhost:8007/docs 查看完整的交互式 API 文档。


⚙️ 配置

环境变量
通用配置
变量说明默认值必需
NODE_MODE运行模式 (standalone/worker)worker
NODE_NAME节点名称主机名
ALLOWED_COMMANDS允许的命令白名单(逗号分隔)echo,date,ls
COMMAND_TIMEOUT命令执行超时(秒)15
HOST监听地址0.0.0.0
PORT监听端口8007
LOG_LEVEL日志级别info
RELOAD热重载(开发模式)false
AISE_ENV环境标识dev
Worker 模式专用
变量说明默认值必需
REGISTER_URL主节点地址http://localhost:8000
REGISTER_KEY注册密钥key
NODE_HOST节点主机地址自动检测
NODE_PORT节点端口8007
NODE_DESC节点描述AI-Software-Engineer
NODE_TAGS节点标签(逗号分隔)worker,ai
HEARTBEAT_INTERVAL心跳间隔(秒)30
配置示例
# .env 文件(Worker 模式)
NODE_MODE=worker
REGISTER_URL=http://192.168.1.100:8000
REGISTER_KEY=my-secret-key-2024
NODE_NAME=worker-prod-01
NODE_HOST=192.168.1.101
NODE_PORT=8007
NODE_DESC=Production Worker Node
NODE_TAGS=production,gpu,high-memory
HEARTBEAT_INTERVAL=30
ALLOWED_COMMANDS=echo,date,ls,pwd,cat,python3,node,npm,git
COMMAND_TIMEOUT=30
LOG_LEVEL=info
AISE_ENV=production

# .env 文件(Standalone 模式)
NODE_MODE=standalone
NODE_NAME=dev-node
ALLOWED_COMMANDS=echo,date,ls,pwd,python3,node
COMMAND_TIMEOUT=15
PORT=8007
LOG_LEVEL=debug
RELOAD=true
AISE_ENV=dev

📂 项目结构

ai-software-engineer/
├── 📄 README.md                     # 项目文档(本文件)
├── 📄 GETTING_STARTED.zh-CN.md      # 快速开始指南
├── 📄 LICENSE                       # 开源许可证
├── 📄 Makefile                      # 构建自动化
├── 📄 requirements.txt              # Python 依赖
├── 🚀 start.sh                      # 启动脚本
├── 🚀 start.ps1                     # PowerShell 启动脚本
│
├── 📁 app/                          # FastAPI 应用
│   ├── __init__.py
│   └── main.py                      # 主程序入口
│
├── 📁 docker/                       # Docker 相关文件
│   ├── Dockerfile                   # Docker 镜像定义
│   ├── docker-compose.yml           # Docker Compose 配置
│   ├── entrypoint.sh                # 容器入口脚本
│   ├── k8s-deployment.yaml          # Kubernetes 部署配置
│   ├── .env.example                 # 环境变量示例
│   └── 📁 scripts/                  # AI 工具安装脚本
│       ├── install-github-copilot.sh
│       ├── install-openai-codex.sh
│       ├── install-claude-code.sh
│       ├── install-cursor.sh
│       ├── install-opencode.sh
│       ├── install-alibaba-qoder.sh
│       └── install-tencent-codebuddy.sh
│
└── 📁 docs/                         # 文档目录(预留)

🎓 使用教程

AI 工具配置
GitHub Copilot
# 进入容器
docker exec -it ai-worker bash

# 认证 GitHub
gh auth login

# 使用 Copilot
gh copilot suggest "create a REST API with Python FastAPI"
gh copilot explain "docker run -it --rm -v \$(pwd):/app ubuntu bash"
---

## 🎓 使用教程

### AI 工具配置

#### GitHub Copilot

```bash
# 进入容器
docker exec -it ai-worker bash

# 认证 GitHub
gh auth login

# 使用 Copilot
gh copilot suggest "create a REST API with Python FastAPI"
gh copilot explain "docker run -it --rm -v \$(pwd):/app ubuntu bash"
其他工具
开发模式
# 本地开发(热重载)
./start.sh --no-reload=false

# 或使用 Docker(代码热加载)
docker run -it --rm \
  -e NODE_MODE=standalone \
  -e RELOAD=true \
  -v $(pwd)/app:/app \
  -p 8007:8007 \
  ai-software-engineer:latest

# 查看日志
docker logs -f ai-worker
tail -f ai-software-engineer.log
生产部署
# 使用 Kubernetes
kubectl apply -f docker/k8s-deployment.yaml
kubectl get pods -w

# 扩容到 10 个副本
kubectl scale deployment ai-worker --replicas=10

# 滚动更新
kubectl set image deployment/ai-worker \
  worker=ai-software-engineer:v2.0

# 查看状态
kubectl rollout status deployment/ai-worker

🔒 安全建议

命令白名单

⚠️ 重要: 严格控制 ALLOWED_COMMANDS,仅包含安全命令

推荐的命令:

echo, date, ls, pwd, cat, python3, node, npm, git status, docker ps

禁止的命令:

rm, shutdown, reboot, dd, mkfs, fdisk

⚠️ 谨慎使用:

curl, wget, apt, yum  # 仅在必要时添加
最佳实践
  1. 最小权限: 使用非 root 用户运行容器
  2. 网络隔离: 使用 Docker 网络隔离
  3. 资源限制: 设置 CPU 和内存限制
  4. 密钥管理: 使用环境变量或 Kubernetes Secrets
  5. 日志审计: 启用命令执行日志记录
  6. 定期更新: 及时更新基础镜像和依赖
Docker 安全选项
docker run -d \
  --name ai-worker \
  --user 1000:1000 \
  --read-only \
  --security-opt=no-new-privileges \
  --cpus=2 \
  --memory=4g \
  -e NODE_MODE=standalone \
  -p 8007:8007 \
  ai-software-engineer:latest

🧪 测试

手动测试
# 测试 Standalone 模式
./start.sh --test-mode

# 测试健康检查
curl http://localhost:8007/healthz

# 测试命令执行
curl -X POST http://localhost:8007/execute \
  -H "Content-Type: application/json" \
  -d '{"command": "echo", "args": ["test"]}'

# 测试配置更新
curl -X POST http://localhost:8007/config/commands \
  -H "Content-Type: application/json" \
  -d '{"commands": ["echo", "date", "ls", "pwd"]}'
容器测试
# 构建并测试
make build
make run
make health-check

# 查看容器状态
docker ps --filter "name=ai-worker"

📊 监控和日志

查看日志
# 本地开发日志
tail -f ai-software-engineer.log

# Docker 容器日志
docker logs -f ai-worker
docker logs --tail 100 ai-worker

# Kubernetes 日志
kubectl logs -f deployment/ai-worker
kubectl logs -l app=ai-worker --tail=100
监控指标
# 容器资源使用
docker stats ai-worker

# Kubernetes 资源使用
kubectl top pods -l app=ai-worker

🔧 故障排除

常见问题
1. Worker 模式无法注册

症状: 日志显示 ❌ 注册失败

解决方案:

# 检查后端连接
curl $REGISTER_URL/healthz

# 验证配置
docker logs ai-worker | grep "后端地址"

# 检查网络连接
docker exec ai-worker curl -v $REGISTER_URL/healthz
2. 命令执行被拒绝

症状: API 返回 Command 'xxx' is not allowed

解决方案:

# 方法1: 重启时添加命令到白名单
docker run -d \
  -e ALLOWED_COMMANDS=echo,date,ls,your-command \
  ...

# 方法2: 运行时更新白名单
curl -X POST http://localhost:8007/config/commands \
  -H "Content-Type: application/json" \
  -d '{"commands": ["echo", "date", "ls", "your-command"]}'
  -d '{"commands": ["echo", "date", "ls", "your-command"]}'
3. 容器启动失败

症状: 容器不断重启

解决方案:

# 查看详细日志
docker logs ai-worker

# 检查端口占用
lsof -i :8007

# 使用不同端口
docker run -d -p 8008:8007 ...
4. 端口冲突

症状: Error: address already in use

解决方案:

# 查找占用端口的进程
lsof -i :8007
netstat -anp | grep 8007

# 修改启动端口
./start.sh --port 8008

📚 文档资源


🤝 贡献指南

欢迎贡献代码、报告问题或提出改进建议!

开发流程
# 1. Fork 项目
# 2. 克隆仓库
git clone https://github.com/your-username/ai-software-engineer.git

# 3. 创建特性分支
git checkout -b feature/amazing-feature

# 4. 提交更改
git commit -m "feat: Add amazing feature"

# 5. 推送到分支
git push origin feature/amazing-feature

# 6. 创建 Pull Request
代码规范
  • Python: 遵循 PEP 8 规范
  • Shell: 使用 ShellCheck 检查
  • Docker: 遵循 Docker 最佳实践
  • 提交信息: 使用语义化提交 (feat/fix/docs/style/refactor/test/chore)
提交类型
  • feat: 新功能
  • fix: 修复 Bug
  • docs: 文档更新
  • style: 代码格式调整
  • refactor: 代码重构
  • test: 测试相关
  • chore: 构建/工具链相关

⚠️ 注意事项

  1. AI 工具授权: GitHub Copilot、OpenAI Codex 等工具需要有效订阅
  2. 网络要求: 部分工具需要互联网连接才能使用
  3. 存储空间: 完整镜像约 2-3 GB,最小化镜像约 1 GB
  4. 定期更新: 建议定期重新构建镜像以获取最新工具版本
  5. 安全风险: 严格控制命令白名单,避免执行危险命令
  6. 日志管理: 生产环境建议使用日志收集系统
  7. 资源限制: 生产环境建议设置容器资源限制

📄 许可证

本项目采用 MIT License 开源协议。


🔗 相关链接

官方网站
技术文档
项目相关

如果这个项目对你有帮助,请给个 ⭐ Star 支持一下!

Made with ❤️ by liukunup

Tag summary

Content type

Image

Digest

sha256:dd3cf9098

Size

1.2 GB

Last updated

10 months ago

docker pull liukunup/ai-software-engineer