API 文档

AutoBid 标书生成器的 REST API 接口文档

项目管理

GET /

获取项目列表首页,显示所有项目的HTML页面

响应:

返回HTML页面,包含项目列表和导航

状态码:
  • 200 - 成功返回页面
  • 500 - 服务器内部错误
GET /projects

项目列表页面(重定向到首页)

响应:

重定向到 / 端点

POST /create

创建新的标书项目,支持本地文件和网络文件

请求头:
头部名称 必需
Content-Type application/json
请求参数:
参数名 类型 必需 描述
name string 项目名称
file string 招标文件路径(本地路径或HTTP/HTTPS URL)
description string 项目描述
请求示例:
{
  "name": "智慧城市建设项目",
  "description": "某市智慧城市信息化建设项目标书",
  "file": "data/uploads/tender_document.pdf"
}
成功响应示例:
{
  "code": 0,
  "message": "项目创建成功",
  "data": {
    "project_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "parse_task_id": "task-uuid-string",
    "warning": null
  }
}
错误响应示例:
{
  "code": 1,
  "message": "项目名称不能为空",
  "data": null
}
状态码:
  • 200 - 项目创建成功
  • 400 - 请求参数错误
  • 500 - 服务器内部错误
GET /project/<project_id>

获取项目详情页面,显示项目状态和进度

路径参数:
参数名 类型 描述
project_id string 项目唯一标识符(UUID格式)
响应:

返回HTML页面,包含项目详情和各步骤状态

状态码:
  • 200 - 成功返回页面
  • 404 - 项目不存在
  • 500 - 服务器内部错误
DELETE /api/project/<project_id>

删除指定项目(仅删除数据库记录,保留文件)

路径参数:
参数名 类型 描述
project_id string 项目唯一标识符
成功响应示例:
{
  "code": 0,
  "message": "项目删除成功",
  "data": {
    "project_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
  }
}
状态码:
  • 200 - 删除成功
  • 404 - 项目不存在
  • 500 - 删除失败

文件上传

POST /api/upload

上传招标文件到服务器,支持多种文档格式

请求头:
头部名称 必需
Content-Type multipart/form-data
请求参数:
参数名 类型 必需 描述
file file 要上传的文件。支持格式:PDF、DOC、DOCX、TXT、MD
文件限制:
  • 最大文件大小:16MB
  • 支持的文件扩展名:.pdf, .doc, .docx, .txt, .md
  • 文件名将被重命名为UUID格式以避免冲突
成功响应示例:
{
  "code": 0,
  "message": "上传成功",
  "data": {
    "file_path": "data/uploads/a1b2c3d4-e5f6-7890-abcd-ef1234567890.pdf",
    "original_name": "招标文件.pdf",
    "size": 1024000
  }
}
错误响应示例:
{
  "code": 1,
  "message": "不支持的文件类型:.xlsx。支持的类型:.pdf, .doc, .docx, .txt, .md",
  "data": null
}
状态码:
  • 200 - 上传成功
  • 400 - 文件类型不支持或未选择文件
  • 413 - 文件大小超过限制
  • 500 - 服务器内部错误
cURL示例:
curl -X POST http://localhost:5005/api/upload \
  -F "file=@/path/to/tender_document.pdf"

工作流程

POST GET /generate_outline/<project_id>

启动项目大纲生成任务(异步处理)

路径参数:
参数名 类型 描述
project_id string 项目唯一标识符
请求参数(GET/POST):
参数名 类型 必需 描述
prompt string 用户提示词
前置条件:
  • 项目必须存在
  • 项目的技术需求和评分标准文件必须存在
成功响应示例:
{
  "code": 0,
  "message": "大纲生成任务已启动",
  "data": {
    "task_id": "task-uuid-string",
    "project_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
  }
}
状态码:
  • 200 - 任务启动成功
  • 404 - 项目不存在
  • 500 - 服务器内部错误
POST /api/project/<project_id>/re-extract

使用项目记录中的招标文件重新提取文档内容(异步处理)

路径参数:
参数名 类型 描述
project_id string 项目唯一标识符
功能说明:
  • 使用项目创建时上传的招标文件重新提取文档内容
  • 支持本地文件和网络文件的重新处理
  • 会覆盖当前已提取的文档内容
  • 返回任务ID,可通过任务状态接口查询进度
成功响应示例:
{
  "code": 0,
  "message": "重新提取文档任务已启动",
  "data": {
    "task_id": "0e6c83af-6498-4b59-a026-70df612a8125",
    "project_id": "e2af765f-d3dc-4d12-9a53-95436237a5c3"
  }
}
状态码:
  • 200 - 重新提取任务启动成功
  • 400 - 项目没有关联的招标文件
  • 404 - 项目不存在或招标文件不存在
  • 500 - 服务器内部错误
cURL示例:
curl -X POST http://localhost:5005/api/project/e2af765f-d3dc-4d12-9a53-95436237a5c3/re-extract
POST /generate_document/<project_id>

启动完整文档生成任务(异步处理)

路径参数:
参数名 类型 必需 描述
bidder string 供应商信息
前置条件:
  • 项目必须存在
  • 项目的大纲文件(outline.json)必须存在
成功响应示例:
{
  "code": 0,
  "message": "文档生成任务已启动",
  "data": {
    "task_id": "task-uuid-string",
    "project_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
  }
}
错误响应示例:
{
  "code": 1,
  "message": "大纲文件不存在,请先生成大纲",
  "data": null
}
状态码:
  • 200 - 任务启动成功
  • 400 - 前置条件不满足
  • 404 - 项目不存在
  • 500 - 服务器内部错误
GET /api/progress/<task_id>

获取异步任务的执行进度和状态

路径参数:
参数名 类型 描述
task_id string 任务唯一标识符
响应字段说明:
字段名 类型 描述
task_type string 任务类型:extract_parse(文档提取)、outline_generate(大纲生成)、document_generate(文档生成)
status string 任务状态:pending(等待)、running(执行中)、completed(完成)、failed(失败)、timeout(超时)
progress integer 任务进度百分比(0-100)
message string 当前状态描述信息
error_message string 错误信息(任务失败时)
成功响应示例:
{
  "code": 0,
  "message": "success",
  "data": {
    "task_id": "0e6c83af-6498-4b59-a026-70df612a8125",
    "project_id": "e2af765f-d3dc-4d12-9a53-95436237a5c3",
    "task_type": "extract_parse",
    "status": "running",
    "progress": 50,
    "message": "正在解析文档内容...",
    "error_message": null,
    "created_at": "2024-01-01T00:00:00",
    "updated_at": "2024-01-01T00:00:00"
  }
}
任务状态说明:
  • pending - 等待执行
  • running - 正在执行
  • completed - 执行完成
  • failed - 执行失败
POST /save_input

保存全局技术需求和评分标准文件

请求头:
头部名称 必需
Content-Type application/json
请求参数:
参数名 类型 必需 描述
tech_md string 技术需求内容(Markdown 格式)
score_md string 评分标准内容(Markdown 格式)
成功响应示例:
{
  "code": 0,
  "message": "输入文件保存成功",
  "data": null
}
POST /save_input/<project_id>

保存项目特定的技术需求和评分标准文件

路径参数:
参数名 类型 描述
project_id string 项目唯一标识符
请求参数:

/save_input 相同

成功响应示例:
{
  "code": 0,
  "message": "输入文件保存成功",
  "data": {
    "project_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
  }
}

数据获取

GET /api/get_outline/<project_id>

获取项目的大纲数据

路径参数:
参数名 类型 描述
project_id string 项目唯一标识符
查询参数:
参数名 类型 默认值 描述
type string json 返回格式:json 或其他格式
成功响应示例:
{
  "code": 0,
  "message": "success",
  "data": {
    "body_paragraphs": [
      {
        "chapter_title": "一、项目概述",
        "sections": [
          {
            "section_title": "1.1 项目背景",
            "sub_sections": [
              {
                "sub_section_title": "1.1.1 建设背景",
                "content_summary": "项目建设的背景和意义"
              }
            ]
          }
        ]
      }
    ]
  }
}
GET /show_document/<project_id>

获取项目的完整文档内容

路径参数:
参数名 类型 描述
project_id string 项目唯一标识符
成功响应示例:
{
  "code": 0,
  "message": "success",
  "data": "# 项目技术方案\n\n## 一、项目概述\n\n项目的详细内容..."
}
GET /download_docx/<project_id>

下载项目的Word文档(.docx格式),将Markdown格式的content.md文件转换为Word文档

路径参数:
参数名 类型 描述
project_id string 项目唯一标识符
前置条件:
  • 项目必须存在
  • 项目的content.md文件必须存在(通过文档生成接口生成)
成功响应:
  • 状态码: 200
  • Content-Type: application/vnd.openxmlformats-officedocument.wordprocessingml.document
  • Content-Disposition: attachment; filename="项目名称_项目ID.docx"
  • 响应体: Word文档文件流
错误响应示例:
{
  "code": 1,
  "message": "项目不存在: invalid-project-id",
  "data": null
}
{
  "code": 1,
  "message": "文档尚未生成,请先生成文档",
  "data": null
}
状态码:
  • 200 - 下载成功,返回Word文档文件流
  • 404 - 项目不存在或文档未生成
  • 500 - 服务器内部错误
功能特性:
  • 自动将Markdown格式转换为Word文档格式
  • 保持标题层级、列表格式等Markdown结构
  • 自动添加项目名称、项目ID、创建时间等元信息
  • 支持中文文件名和内容
  • 实时生成,不保存到服务器磁盘
使用示例:
# 使用curl下载
curl -X GET "http://localhost:5005/download_docx/demo-simple" \
     --output "项目文档.docx"

# 在浏览器中直接访问
# http://localhost:5005/download_docx/demo-simple
GET /show_input

获取全局技术需求和评分标准文件

成功响应示例:
{
  "code": 0,
  "message": "success",
  "data": {
    "score_md": "# 评分标准\n\n评分标准内容...",
    "tech_md": "# 技术要求\n\n技术要求内容..."
  }
}
GET /show_input/<project_id>

获取项目特定的技术需求和评分标准文件

路径参数:
参数名 类型 描述
project_id string 项目唯一标识符
成功响应示例:
{
  "code": 0,
  "message": "success",
  "data": {
    "score_md": "# 评分标准\n\n项目特定的评分标准...",
    "tech_md": "# 技术要求\n\n项目特定的技术要求...",
    "project_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "project_name": "智慧城市建设项目"
  }
}
POST /api/save_outline/<project_id>

保存项目大纲数据

路径参数:
参数名 类型 描述
project_id string 项目唯一标识符
请求体:

JSON格式的大纲数据,结构与 /api/get_outline 返回的数据相同

成功响应示例:
{
  "code": 0,
  "message": "大纲保存成功",
  "data": {
    "project_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
  }
}

配置管理

GET /api/config

获取当前系统配置

成功响应示例:
{
  "llm": {
    "api_key": "sk-***",
    "api_base": "https://api.deepseek.com/v1",
    "model": "deepseek-chat",
    "max_tokens": 8192,
    "temperature": 0.7,
    "top_p": 0.1,
    "timeout": 300
  },
  "retry": {
    "max_retries": 0,
    "delay": 0,
    "backoff": 1.5
  },
  "api": {
    "request_timeout": 300
  },
  "proxy": {
    "enabled": false,
    "urls": {
      "http": "http://127.0.0.1:33210",
      "https": "http://127.0.0.1:33210"
    }
  },
  "prompts": {
    "extract": {...},
    "outline": {...},
    "content": {...}
  }
}
POST /api/config

更新系统配置

请求头:
头部名称 必需
Content-Type application/json
请求参数:

可以包含以下配置部分的任意组合:

  • llm - LLM API配置
  • retry - 重试配置
  • api - API超时配置
  • proxy - 代理配置
请求示例:
{
  "llm": {
    "api_key": "sk-new-api-key",
    "model": "gpt-4",
    "temperature": 0.8
  },
  "proxy": {
    "enabled": true
  }
}
成功响应示例:
{
  "status": "success",
  "config": {
    // 更新后的完整配置
  }
}
错误响应示例:
{
  "status": "error",
  "message": "配置参数无效"
}
GET /api/prompts/variables

获取提示词模板配置

成功响应示例:
{
  "OUTLINE_SYSTEM_ROLE": "你是投标文件编制专家...",
  "OUTLINE_TECH_USER": "这是项目的响应结构、技术要求...",
  "OUTLINE_SCORE_USER": "这是项目的评分标准...",
  "OUTLINE_GENERATE_USER": "现在请基于之前提供的技术要求...",
  "CONTENT_SYSTEM_ROLE": "你是一名专业的技术方案撰写专家...",
  "CONTENT_INIT_USER": "请记住以下项目背景信息...",
  "CONTENT_SECTION_USER": "请基于已预置的背景信息...",
  "EXTRACT_SYSTEM_ROLE": "你是一个专业的招标文件分析专家...",
  "EXTRACT_USER_TEMPLATE": "请作为一个专业的标书大纲生成器..."
}
POST /api/prompts/variables

保存提示词模板配置

请求参数:

包含提示词变量的JSON对象,结构与GET响应相同

成功响应示例:
{
  "success": true
}
错误响应示例:
{
  "success": false,
  "error": "保存失败的原因"
}

页面路由

GET /workflow

获取工作流页面(原有的index页面功能)

响应:

返回工作流操作的HTML页面

GET /project/<project_id>/input

获取项目特定的需求文档编辑页面

路径参数:
参数名 类型 描述
project_id string 项目唯一标识符
GET /project/<project_id>/outline

获取项目特定的大纲编辑页面

路径参数:
参数名 类型 描述
project_id string 项目唯一标识符
GET /project/<project_id>/document

获取项目特定的文档查看页面

路径参数:
参数名 类型 描述
project_id string 项目唯一标识符
GET /config

获取系统配置页面

响应:

返回系统配置编辑的HTML页面

GET /prompts

获取提示词配置页面

响应:

返回提示词模板编辑的HTML页面

静态资源

GET /res/<path:filename>

获取静态资源文件(图片、JS、CSS等)

路径参数:
参数名 类型 描述
filename string 文件路径(支持子目录)
示例:
  • /res/baihuaagent.jpg - 获取图片文件
  • /res/llm-api-test.js - 获取JavaScript文件
状态码:
  • 200 - 文件存在,返回文件内容
  • 404 - 文件不存在

错误处理和状态码

通用响应格式:

所有API端点都遵循统一的响应格式:

{
  "code": 0,        // 0表示成功,1表示失败
  "message": "描述信息",
  "data": {}        // 响应数据,失败时为null
}
HTTP状态码:
状态码 含义 说明
200 OK 请求成功
400 Bad Request 请求参数错误或格式不正确
404 Not Found 请求的资源不存在
413 Payload Too Large 上传文件大小超过限制(16MB)
500 Internal Server Error 服务器内部错误
常见错误示例:
// 参数错误
{
  "code": 1,
  "message": "项目名称不能为空",
  "data": null
}

// 资源不存在
{
  "code": 1,
  "message": "项目不存在: invalid-project-id",
  "data": null
}

// 服务器错误
{
  "code": 1,
  "message": "生成大纲失败: LLM API调用超时",
  "data": null
}
CORS支持:

API支持跨域请求,允许的方法:GET、POST

允许的来源:* (所有域名)

请求限制:
  • 最大请求体大小:16MB
  • 请求超时时间:300秒(可配置)
  • 支持的文件格式:PDF、DOC、DOCX、TXT、MD