AutoBid 标书生成器的 REST API 接口文档
获取项目列表首页,显示所有项目的HTML页面
返回HTML页面,包含项目列表和导航
200 - 成功返回页面500 - 服务器内部错误项目列表页面(重定向到首页)
重定向到 / 端点
创建新的标书项目,支持本地文件和网络文件
| 头部名称 | 值 | 必需 |
|---|---|---|
| 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 - 服务器内部错误获取项目详情页面,显示项目状态和进度
| 参数名 | 类型 | 描述 |
|---|---|---|
| project_id | string | 项目唯一标识符(UUID格式) |
返回HTML页面,包含项目详情和各步骤状态
200 - 成功返回页面404 - 项目不存在500 - 服务器内部错误删除指定项目(仅删除数据库记录,保留文件)
| 参数名 | 类型 | 描述 |
|---|---|---|
| project_id | string | 项目唯一标识符 |
{
"code": 0,
"message": "项目删除成功",
"data": {
"project_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}
}
200 - 删除成功404 - 项目不存在500 - 删除失败上传招标文件到服务器,支持多种文档格式
| 头部名称 | 值 | 必需 |
|---|---|---|
| Content-Type | multipart/form-data | 是 |
| 参数名 | 类型 | 必需 | 描述 |
|---|---|---|---|
| file | file | 是 | 要上传的文件。支持格式:PDF、DOC、DOCX、TXT、MD |
{
"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 -X POST http://localhost:5005/api/upload \ -F "file=@/path/to/tender_document.pdf"
启动项目大纲生成任务(异步处理)
| 参数名 | 类型 | 描述 |
|---|---|---|
| project_id | string | 项目唯一标识符 |
| 参数名 | 类型 | 必需 | 描述 |
|---|---|---|---|
| prompt | string | 否 | 用户提示词 |
{
"code": 0,
"message": "大纲生成任务已启动",
"data": {
"task_id": "task-uuid-string",
"project_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}
}
200 - 任务启动成功404 - 项目不存在500 - 服务器内部错误使用项目记录中的招标文件重新提取文档内容(异步处理)
| 参数名 | 类型 | 描述 |
|---|---|---|
| project_id | string | 项目唯一标识符 |
{
"code": 0,
"message": "重新提取文档任务已启动",
"data": {
"task_id": "0e6c83af-6498-4b59-a026-70df612a8125",
"project_id": "e2af765f-d3dc-4d12-9a53-95436237a5c3"
}
}
200 - 重新提取任务启动成功400 - 项目没有关联的招标文件404 - 项目不存在或招标文件不存在500 - 服务器内部错误curl -X POST http://localhost:5005/api/project/e2af765f-d3dc-4d12-9a53-95436237a5c3/re-extract
启动完整文档生成任务(异步处理)
| 参数名 | 类型 | 必需 | 描述 |
|---|---|---|---|
| bidder | string | 是 | 供应商信息 |
{
"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 - 服务器内部错误获取异步任务的执行进度和状态
| 参数名 | 类型 | 描述 |
|---|---|---|
| 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 - 执行失败保存全局技术需求和评分标准文件
| 头部名称 | 值 | 必需 |
|---|---|---|
| Content-Type | application/json | 是 |
| 参数名 | 类型 | 必需 | 描述 |
|---|---|---|---|
| tech_md | string | 是 | 技术需求内容(Markdown 格式) |
| score_md | string | 是 | 评分标准内容(Markdown 格式) |
{
"code": 0,
"message": "输入文件保存成功",
"data": null
}
保存项目特定的技术需求和评分标准文件
| 参数名 | 类型 | 描述 |
|---|---|---|
| project_id | string | 项目唯一标识符 |
与 /save_input 相同
{
"code": 0,
"message": "输入文件保存成功",
"data": {
"project_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}
}
获取项目的大纲数据
| 参数名 | 类型 | 描述 |
|---|---|---|
| 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": "项目建设的背景和意义"
}
]
}
]
}
]
}
}
获取项目的完整文档内容
| 参数名 | 类型 | 描述 |
|---|---|---|
| project_id | string | 项目唯一标识符 |
{
"code": 0,
"message": "success",
"data": "# 项目技术方案\n\n## 一、项目概述\n\n项目的详细内容..."
}
下载项目的Word文档(.docx格式),将Markdown格式的content.md文件转换为Word文档
| 参数名 | 类型 | 描述 |
|---|---|---|
| project_id | string | 项目唯一标识符 |
application/vnd.openxmlformats-officedocument.wordprocessingml.documentattachment; filename="项目名称_项目ID.docx"{
"code": 1,
"message": "项目不存在: invalid-project-id",
"data": null
}
{
"code": 1,
"message": "文档尚未生成,请先生成文档",
"data": null
}
200 - 下载成功,返回Word文档文件流404 - 项目不存在或文档未生成500 - 服务器内部错误# 使用curl下载
curl -X GET "http://localhost:5005/download_docx/demo-simple" \
--output "项目文档.docx"
# 在浏览器中直接访问
# http://localhost:5005/download_docx/demo-simple
获取全局技术需求和评分标准文件
{
"code": 0,
"message": "success",
"data": {
"score_md": "# 评分标准\n\n评分标准内容...",
"tech_md": "# 技术要求\n\n技术要求内容..."
}
}
获取项目特定的技术需求和评分标准文件
| 参数名 | 类型 | 描述 |
|---|---|---|
| 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": "智慧城市建设项目"
}
}
保存项目大纲数据
| 参数名 | 类型 | 描述 |
|---|---|---|
| project_id | string | 项目唯一标识符 |
JSON格式的大纲数据,结构与 /api/get_outline 返回的数据相同
{
"code": 0,
"message": "大纲保存成功",
"data": {
"project_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}
}
获取当前系统配置
{
"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": {...}
}
}
更新系统配置
| 头部名称 | 值 | 必需 |
|---|---|---|
| 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": "配置参数无效"
}
获取提示词模板配置
{
"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": "请作为一个专业的标书大纲生成器..."
}
保存提示词模板配置
包含提示词变量的JSON对象,结构与GET响应相同
{
"success": true
}
{
"success": false,
"error": "保存失败的原因"
}
获取工作流页面(原有的index页面功能)
返回工作流操作的HTML页面
获取项目特定的需求文档编辑页面
| 参数名 | 类型 | 描述 |
|---|---|---|
| project_id | string | 项目唯一标识符 |
获取项目特定的大纲编辑页面
| 参数名 | 类型 | 描述 |
|---|---|---|
| project_id | string | 项目唯一标识符 |
获取项目特定的文档查看页面
| 参数名 | 类型 | 描述 |
|---|---|---|
| project_id | string | 项目唯一标识符 |
获取系统配置页面
返回系统配置编辑的HTML页面
获取提示词配置页面
返回提示词模板编辑的HTML页面
获取静态资源文件(图片、JS、CSS等)
| 参数名 | 类型 | 描述 |
|---|---|---|
| filename | string | 文件路径(支持子目录) |
/res/baihuaagent.jpg - 获取图片文件/res/llm-api-test.js - 获取JavaScript文件200 - 文件存在,返回文件内容404 - 文件不存在所有API端点都遵循统一的响应格式:
{
"code": 0, // 0表示成功,1表示失败
"message": "描述信息",
"data": {} // 响应数据,失败时为null
}
| 状态码 | 含义 | 说明 |
|---|---|---|
| 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
}
API支持跨域请求,允许的方法:GET、POST
允许的来源:* (所有域名)