ScholarForce AI
Patent API Documentation

专利生成 API 技术文档

本文档面向客户、技术人员和 AI 编程助手,说明如何通过 API 提交专利生成任务、在 Dify 中配置动态表单、轮询长时间任务,并获取完整 Markdown 正文与 Word 文档下载链接。

Base URL: https://patent.ecoaitech.com 异步任务 Dify 兼容 返回 md_content

1. 快速开始

推荐只使用稳定入口 POST /v1/patent/create。接口会立即返回任务编号和绝对地址 poll_url,调用方随后轮询 poll_url 获取进度或结果。

curl -X POST "https://patent.ecoaitech.com/v1/patent/create" \
  -H "Content-Type: application/json" \
  -H "X-API-Key: YOUR_PATENT_API_KEY" \
  -d '{
    "message": "一种面向锂电池材料制备过程的智能温控优化方法",
    "patent_type": "process",
    "email": ""
  }'

文档示例统一使用 YOUR_PATENT_API_KEY 占位符。真实 Key 由服务方单独发放,不会在公开页面展示。

2. 鉴权与 Key

创建任务接口需要 API Key。获得 Key 后,建议优先放入 HTTP Header,不要放在 URL 查询参数中。

方式示例说明
推荐X-API-Key: YOUR_PATENT_API_KEY适合 Dify HTTP 请求节点和后端服务调用。
兼容Authorization: Bearer YOUR_PATENT_API_KEY适合统一 Bearer Token 网关。

技术人员如需开通,请联系 digi@ecoaitech.com,说明调用场景、预计调用量和回调/轮询方式。

3. 创建专利生成任务

POSThttps://patent.ecoaitech.com/v1/patent/create

请求 Body

字段类型必填说明
messagestring发明构思或技术方案描述。建议包含发明名称、核心步骤/结构、应用场景、申请人信息。
patent_typestring专利类型,默认 auto。可选值见下文。
emailstring接收文档的邮箱。API 场景可为空,结果以轮询接口返回为准。
callback_webhookstring预留字段;当前推荐使用 poll_url 轮询。

成功响应

{
  "task_id": "pat_20260509_120000_ab12cd",
  "status": "running",
  "is_async": true,
  "poll_url": "https://patent.ecoaitech.com/api/status/pat_20260509_120000_ab12cd/POLL_TOKEN",
  "poll_token": "POLL_TOKEN",
  "retry_after": 10,
  "patent_type": "process",
  "type": "patent"
}

重点字段是 poll_url。它是完整绝对 URL,Dify 或后端可以直接拿它发起下一步轮询。

4. 轮询结果

GET{poll_url}

poll_url 已包含任务编号和轮询 token,不需要再传 API Key。建议按 retry_after 秒间隔轮询,直到返回 doneerror

进行中

{
  "status": "running",
  "progress": 45,
  "message": "正在写作第3章..."
}

完成

{
  "status": "done",
  "progress": 100,
  "message": "图表: 4",
  "topic": "一种面向锂电池材料制备过程的智能温控优化方法",
  "result": {
    "md_content": "完整Markdown正文",
    "word_count": 8200,
    "citations": 0,
    "sources": 0,
    "charts": 4,
    "patent_type": "process",
    "download_url": "https://patent.ecoaitech.com/api/download/pat_.../POLL_TOKEN/docx"
  }
}

失败

{
  "status": "error",
  "progress": 0,
  "message": "",
  "error": "生成失败原因"
}

5. 专利类型参数

patent_type 用于让生成管线选择更合适的权利要求布局、附图风格、实施例结构和技术表达方式。Dify 可以把它做成单选框或下拉框。

适用场景建议前端显示
auto无法确定类型或希望系统自动判断。自动判断
software算法、软件、AI 模型、数据处理方法、系统平台。软件/算法/系统
mechanical设备、装置、机械结构、硬件结构改进。装置/设备/结构
process制备工艺、材料、化学、流程控制、生产方法。工艺/材料/制备

为保持接口稳定,未来新增类型时会尽量向后兼容。现阶段建议客户系统只暴露以上四个值。

6. Dify 工作流配置

动态表单建议

Dify 变量控件说明
message多行文本用户输入发明构思,必填。
patent_type下拉/单选选项:autosoftwaremechanicalprocess
email单行文本可选。API 场景不建议设为必填。

HTTP 请求节点

Method: POST
URL: https://patent.ecoaitech.com/v1/patent/create
Headers:
  Content-Type: application/json
  X-API-Key: YOUR_PATENT_API_KEY
Body:
{
  "message": "",
  "patent_type": "",
  "email": ""
}

输出处理代码节点

import json

def main(body):
    data = json.loads(body)
    return {
        "is_async": str(data.get("is_async", False)).lower(),
        "poll_url": data.get("poll_url", ""),
        "status": data.get("status", ""),
        "task_id": data.get("task_id", ""),
        "poll_token": data.get("poll_token", ""),
        "patent_type": data.get("patent_type", ""),
        "result": json.dumps(data.get("result", {}), ensure_ascii=False) if data.get("result") else ""
    }

如果已经复用深度报告的输出处理节点,不加 patent_type 也可以跑通;加上后便于后续分流、展示和日志分析。

7. 调用示例

Python

import time
import requests

API_KEY = "YOUR_PATENT_API_KEY"
base_url = "https://patent.ecoaitech.com"

resp = requests.post(
    f"{base_url}/v1/patent/create",
    headers={"X-API-Key": API_KEY, "Content-Type": "application/json"},
    json={
        "message": "一种面向锂电池材料制备过程的智能温控优化方法",
        "patent_type": "process",
        "email": ""
    },
    timeout=30,
)
resp.raise_for_status()
task = resp.json()

while True:
    status_resp = requests.get(task["poll_url"], timeout=30)
    status_resp.raise_for_status()
    payload = status_resp.json()
    if payload["status"] == "done":
        markdown = payload["result"]["md_content"]
        download_url = payload["result"]["download_url"]
        break
    if payload["status"] == "error":
        raise RuntimeError(payload.get("error") or "patent generation failed")
    time.sleep(task.get("retry_after", 10))

JavaScript / Node.js

const apiKey = "YOUR_PATENT_API_KEY";

const created = await fetch("https://patent.ecoaitech.com/v1/patent/create", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "X-API-Key": apiKey
  },
  body: JSON.stringify({
    message: "一种面向锂电池材料制备过程的智能温控优化方法",
    patent_type: "process",
    email: ""
  })
}).then(r => r.json());

let result;
while (true) {
  const payload = await fetch(created.poll_url).then(r => r.json());
  if (payload.status === "done") {
    result = payload.result;
    break;
  }
  if (payload.status === "error") throw new Error(payload.error || "failed");
  await new Promise(resolve => setTimeout(resolve, (created.retry_after || 10) * 1000));
}

console.log(result.md_content);
console.log(result.download_url);

8. 给 LLM / AI 编程助手的接入提示

把下面这段说明交给 AI 编程助手,通常可以快速生成可用的接入代码。

你要接入 ScholarForce AI 专利生成 API。
Base URL 是 https://patent.ecoaitech.com。
创建任务:POST /v1/patent/create,Header 使用 X-API-Key: YOUR_PATENT_API_KEY。
请求 JSON 至少包含 message,可选 patent_type 和 email。
patent_type 只能使用 auto、software、mechanical、process。
创建接口会返回 is_async=true、status=running、task_id、poll_url、poll_token、retry_after。
必须使用返回的 poll_url 轮询结果;poll_url 是绝对 URL,不需要额外拼接域名。
轮询返回 status=running 表示继续等待;status=done 时读取 result.md_content 和 result.download_url;status=error 时读取 error。
不要把 API Key 写死在前端公开代码中,应放在 Dify 密钥配置、后端环境变量或服务端代理中。

9. 错误码与注意事项

HTTP 状态含义处理建议
401API Key 无效或缺失。检查 X-API-Key 或 Bearer Token 是否正确。
400请求参数错误。确认 message 非空,JSON 格式正确。
404任务不存在或文件未生成。确认任务编号、poll_url 或下载链接来自同一次创建响应。
403轮询 token 无效。不要自行拼接 poll_url,直接使用创建接口返回值。

安全建议:客户侧不要把真实 API Key 放入公开网页源码、移动端包或 Git 仓库。Dify 内部工作流可通过 HTTP 请求节点配置 Header;自建系统建议通过后端服务转发。