API Reference

API 参考

目远AI 提供 REST API,方便你把分析能力集成到自己的系统里。所有端点返回 JSON。

概览

Base URL

http://localhost:8000/api

部署到生产环境后换成你自己的域名。建议套一层 HTTPS 反向代理。

认证

config.yaml 里设置 api.auth_token 后,所有请求需要带 Bearer token:

Authorization: Bearer your-secret-token-here

不设 token 的话 API 默认无认证(适合本地开发)。生产环境请务必配置。

通用响应格式

{
  "status": "ok",
  "data": { ... },
  "meta": {
    "request_id": "req_a1b2c3d4",
    "took_ms": 1234
  }
}

端点

POST /api/collect

触发一次数据采集任务。异步执行,返回任务 ID。

请求体

{
  "sources": ["sina_news", "eastmoney"],
  "filters": {
    "sector": "technology",
    "min_relevance": 0.6
  },
  "period": "24h",
  "max_articles": 200
}

响应 — 202 Accepted

{
  "status": "ok",
  "data": {
    "task_id": "task_8f3a2b1c",
    "sources": ["sina_news", "eastmoney"],
    "estimated_time_s": 45
  }
}
POST /api/analyze

对已采集的数据运行分析管道。可以指定分析模型和参数。

请求体

{
  "task_id": "task_8f3a2b1c",
  "model": "sentiment_v2",
  "options": {
    "enable_cross_validation": true,
    "min_confidence": 0.5
  }
}

响应 — 200 OK

{
  "status": "ok",
  "data": {
    "analysis_id": "ana_7e2d4f9a",
    "articles_processed": 47,
    "insights": [
      {
        "type": "trend",
        "sector": "technology",
        "direction": "bearish_short_term",
        "confidence": 0.78,
        "supporting_articles": 12,
        "sentiment_score": -0.32
      },
      {
        "type": "signal",
        "sector": "ai_infrastructure",
        "direction": "bullish_long_term",
        "confidence": 0.82,
        "supporting_articles": 8,
        "sentiment_score": 0.61
      }
    ]
  }
}
POST /api/advise

基于分析结果生成投资建议。

请求体

{
  "analysis_id": "ana_7e2d4f9a",
  "risk_level": "moderate",
  "horizon": "medium_term",
  "max_recommendations": 5
}

响应 — 200 OK

{
  "status": "ok",
  "data": {
    "summary": "科技板块短期承压,但 AI 基建方向中长期确定性高。",
    "recommendations": [
      {
        "action": "watch",
        "target": "算力基础设施",
        "confidence": 0.82,
        "risk": "medium",
        "reason": "三大运营商资本开支计划超预期,算力需求持续增长",
        "sources_count": 8
      },
      {
        "action": "hold",
        "target": "消费电子",
        "confidence": 0.71,
        "risk": "medium",
        "reason": "需求复苏信号不明确,等待 Q2 财报确认",
        "sources_count": 5
      }
    ],
    "generated_at": "2026-04-15T10:30:00Z"
  }
}
GET /api/status

查看系统状态和任务进度。

响应 — 200 OK

{
  "status": "ok",
  "data": {
    "version": "0.3.0",
    "uptime_s": 86421,
    "database": "connected",
    "redis": "connected",
    "active_tasks": [
      {
        "task_id": "task_8f3a2b1c",
        "type": "collect",
        "status": "running",
        "progress": 0.65,
        "started_at": "2026-04-15T10:28:00Z"
      }
    ],
    "stats": {
      "total_articles": 12847,
      "total_analyses": 342,
      "cache_hit_rate": 0.73
    }
  }
}

错误码

出错时响应格式:

{
  "status": "error",
  "error": {
    "code": "TASK_NOT_FOUND",
    "message": "Task task_xyz not found"
  }
}
HTTP 状态码错误码说明
400INVALID_PARAMS请求参数格式错误或缺少必填字段
401UNAUTHORIZED缺少或无效的 Bearer token
404TASK_NOT_FOUND指定的 task_id 或 analysis_id 不存在
409TASK_ALREADY_RUNNING相同参数的任务正在执行中
422SOURCE_UNAVAILABLE指定的数据源暂时不可用
429RATE_LIMITED请求频率超限,请稍后重试
500INTERNAL_ERROR服务端内部错误

Rate Limiting

默认限制:每个 token 每分钟 60 次请求。超限后返回 429 状态码。

响应头里会带上限速信息:

X-RateLimit-Limit: 60
X-RateLimit-Remaining: 42
X-RateLimit-Reset: 1713178200

X-RateLimit-Reset 是 Unix 时间戳,表示限速窗口重置的时间。

关于 /api/collect 的特殊限制:采集任务比较重,同一时间最多允许 3 个并发采集任务。超过后新请求会返回 TASK_ALREADY_RUNNING。这个限制和每分钟请求数是独立的。