> ## Documentation Index
> Fetch the complete documentation index at: https://docs.aibase.com/llms.txt
> Use this file to discover all available pages before exploring further.

# GEO 排名查询工具

> 检测指定 AI 咨询问题在多个大模型平台中的品牌推荐、曝光、排名、情感及来源引用情况。

GEO 排名查询工具用于检测指定 AI 咨询问题在多个主流大模型平台（如 DeepSeek、火山引擎、百度、腾讯、阿里云等）中的品牌推荐表现、曝光次数、排序位置、情感倾向以及引用来源链接。

<Info>
  **执行模式：ASYNC · 异步。**
  本接口采用异步任务模式：向统一入口提交请求后，平台先返回 `requestId` 和 `taskId`；随后使用 `taskId` 轮询 [异步任务查询接口](/api-reference/tasks)（建议每隔 10 秒查询一次）获取最终结果。
</Info>

## 接口速查

| 项目   | 当前接口约定                                   |
| ---- | ---------------------------------------- |
| 接口状态 | 已上线                                      |
| 请求方式 | `POST`                                   |
| 请求地址 | `https://api.aibase.cn/v1/openapi/tasks` |
| 业务标识 | `geo.ranking`                            |
| 执行模式 | **ASYNC · 异步**（需轮询结果）                    |
| 身份认证 | Header `AIBase-API-Key`                  |
| 请求格式 | `application/json`                       |

## 请求头

<ParamField header="AIBase-API-Key" type="string" required>
  AIBase 开放平台 API Key，例如 `AIBase_xxx`。请仅在服务端保存和使用。
</ParamField>

<ParamField header="Content-Type" type="string" required>
  固定为 `application/json`。
</ParamField>

<ParamField header="AIBase-Request-Id" type="string">
  可选的客户端请求追踪标识。
</ParamField>

## 请求体

<ParamField body="apiCode" type="string" required>
  固定为 `geo.ranking`。
</ParamField>

<ParamField body="data" type="object" required>
  当前业务接口的参数对象。
</ParamField>

<ParamField body="data.keyword" type="string" required>
  AI 咨询的问题，例如 `"性价比高的智能手机推荐"`。
</ParamField>

<ParamField body="data.brandKeyword" type="string[]" required>
  品牌关键词列表，用于检测是否在大模型回答中命中并推荐，例如 `["小米", "华为", "苹果"]`。
</ParamField>

<ParamField body="data.platforms" type="string[]" required>
  参与检测的各大模型平台编码列表，例如 `["deepseek", "volcengine", "baidu", "tencent", "aliyun"]`。
</ParamField>

<RequestExample>
  ```bash cURL (第一步：提交任务) theme={null}
  curl --request POST \
    --url https://api.aibase.cn/v1/openapi/tasks \
    --header "AIBase-API-Key: ${AIBASE_API_KEY}" \
    --header 'AIBase-Request-Id: req-20260908-000001' \
    --header 'Content-Type: application/json' \
    --data '{
      "apiCode": "geo.ranking",
      "data": {
        "keyword": "性价比高的智能手机推荐",
        "brandKeyword": ["小米", "华为", "苹果"],
        "platforms": ["deepseek", "volcengine", "baidu", "tencent", "aliyun"]
      }
    }'
  ```

  ```python Python (提交与轮询完整流程) theme={null}
  import os
  import time
  import requests

  api_key = os.environ["AIBASE_API_KEY"]
  headers = {
      "AIBase-API-Key": api_key,
      "Content-Type": "application/json",
  }

  # 1. 提交异步任务
  res = requests.post(
      "https://api.aibase.cn/v1/openapi/tasks",
      headers=headers,
      json={
          "apiCode": "geo.ranking",
          "data": {
              "keyword": "性价比高的智能手机推荐",
              "brandKeyword": ["小米", "华为", "苹果"],
              "platforms": ["deepseek", "volcengine", "baidu", "tencent", "aliyun"],
          },
      },
      timeout=30,
  )
  res.raise_for_status()
  submit_payload = res.json()
  task_id = submit_payload["data"]["taskId"]
  print("任务已提交，taskId:", task_id)

  # 2. 轮询任务结果（建议 10 秒间隔）
  while True:
      time.sleep(10)
      query_res = requests.get(
          f"https://api.aibase.cn/v1/openapi/tasks/{task_id}",
          headers={"AIBase-API-Key": api_key},
          timeout=30,
      )
      query_payload = query_res.json()
      status = query_payload["data"]["status"]
      
      if status == 2:  # SUCCESS
          print("查询成功，GEO 排名结果:")
          print(query_payload["data"]["result"])
          break
      elif status == 1:  # PENDING
          print("大模型分析中，等待下一次查询...")
      else:
          raise RuntimeError(f"任务终止，状态码: {status}")
  ```

  ```javascript Node.js theme={null}
  import { setTimeout } from "node:timers/promises";

  const apiKey = process.env.AIBASE_API_KEY;
  const headers = {
    "AIBase-API-Key": apiKey,
    "Content-Type": "application/json",
  };

  // 1. 提交任务
  const res = await fetch("https://api.aibase.cn/v1/openapi/tasks", {
    method: "POST",
    headers,
    body: JSON.stringify({
      apiCode: "geo.ranking",
      data: {
        keyword: "性价比高的智能手机推荐",
        brandKeyword: ["小米", "华为", "苹果"],
        platforms: ["deepseek", "volcengine", "baidu", "tencent", "aliyun"],
      },
    }),
  });
  const { data: { taskId } } = await res.json();

  // 2. 轮询结果
  while (true) {
    await setTimeout(10000);
    const check = await fetch(`https://api.aibase.cn/v1/openapi/tasks/${taskId}`, {
      headers: { "AIBase-API-Key": apiKey },
    });
    const json = await check.json();
    if (json.data?.status === 2) {
      console.log("最终结果:", json.data.result);
      break;
    }
  }
  ```

  ```java Java theme={null}
  // 第一步：向统一入口 POST 提交任务
  HttpRequest submitReq = HttpRequest.newBuilder()
      .uri(URI.create("https://api.aibase.cn/v1/openapi/tasks"))
      .header("AIBase-API-Key", System.getenv("AIBASE_API_KEY"))
      .header("Content-Type", "application/json")
      .POST(HttpRequest.BodyPublishers.ofString("""
          {
            "apiCode": "geo.ranking",
            "data": {
              "keyword": "性价比高的智能手机推荐",
              "brandKeyword": ["小米", "华为", "苹果"],
              "platforms": ["deepseek", "volcengine", "baidu", "tencent", "aliyun"]
            }
          }
          """))
      .build();

  // 发送请求后解析返回的 taskId，随后按 10 秒间隔调用 GET /v1/openapi/tasks/{taskId}
  ```
</RequestExample>

## 第一步：提交任务响应

向 `POST /v1/openapi/tasks` 提交后，直接返回 `requestId` 和 `taskId`：

<ResponseExample>
  ```json 200 (提交任务响应) theme={null}
  {
    "code": 200,
    "msg": "成功",
    "data": {
      "requestId": "599b2f8f39078d",
      "taskId": "task_d77143abc87642d4842ff588197faa89"
    },
    "timeStamp": 1789550182642
  }
  ```
</ResponseExample>

## 第二步：最终结果字段说明（GET 查询返回）

轮询任务查询接口，当 `status = 2` 时，`data.result` 包含完整的 GEO 排名数据：

<ResponseField name="keyword" type="string" required>
  本次检测使用的 AI 咨询问题。
</ResponseField>

<ResponseField name="brandKeyword" type="string" required>
  请求中的品牌关键词，结果示例中为 JSON 字符串格式。
</ResponseField>

<ResponseField name="platforms" type="string[]" required>
  本次检测的大模型平台编码列表。
</ResponseField>

<ResponseField name="totalPlatforms" type="integer" required>
  本次任务的平台总数。
</ResponseField>

<ResponseField name="completedPlatforms" type="integer" required>
  已完成分析处理的平台数量。
</ResponseField>

<ResponseField name="failedPlatforms" type="integer" required>
  处理失败的平台数量。
</ResponseField>

<ResponseField name="requestTime" type="string" required>
  本次请求时间，格式为 `yyyy-MM-dd HH:mm:ss`。
</ResponseField>

<ResponseField name="requestTotalPlatforms" type="integer" required>
  请求对应的平台总数。
</ResponseField>

<ResponseField name="requestRecommendedCount" type="integer" required>
  请求范围内品牌被推荐的总次数。
</ResponseField>

<ResponseField name="requestTotalExposureCount" type="integer" required>
  请求范围内品牌总曝光/可见次数。
</ResponseField>

<ResponseField name="requestRecommendationRate" type="number" required>
  品牌推荐率（百分比数值）。
</ResponseField>

<ResponseField name="data" type="object[]" required>
  各平台的详细检测明细列表。
</ResponseField>

<ResponseField name="data[].platform" type="string" required>
  大模型平台编码（如 `deepseek`、`volcengine` 等）。
</ResponseField>

<ResponseField name="data[].keyword" type="string" required>
  该平台使用的提示词/问题。
</ResponseField>

<ResponseField name="data[].brandKeyword" type="string" required>
  该平台对应的品牌词。
</ResponseField>

<ResponseField name="data[].status" type="string" required>
  该平台监控状态，一般为 `completed` 或 `failed`。
</ResponseField>

<ResponseField name="data[].isRecommended" type="integer" required>
  是否被推荐：`1` 已推荐，`0` 未推荐。
</ResponseField>

<ResponseField name="data[].exposureCount" type="integer" required>
  品牌曝光/可见次数。
</ResponseField>

<ResponseField name="data[].recommendCount" type="integer" required>
  品牌推荐次数。
</ResponseField>

<ResponseField name="data[].countSourceRecord" type="integer" required>
  引用来源条数，即 `sourceRecords` 的数量。
</ResponseField>

<ResponseField name="data[].position" type="integer" required>
  目标品牌排名位置；未找到时为 `0`。
</ResponseField>

<ResponseField name="data[].resultContent" type="string">
  大模型生成的原文回答（文本可能较长；未抓取到时为 `null`）。
</ResponseField>

<ResponseField name="data[].brandRecords" type="object[]" required>
  该平台回答中被提及的所有品牌记录列表。
</ResponseField>

<ResponseField name="data[].brandRecords[].brandName" type="string" required>
  被提及的品牌名称。
</ResponseField>

<ResponseField name="data[].brandRecords[].sentiment" type="string" required>
  情感倾向（如 `正向`、`中性`、`负向`）。
</ResponseField>

<ResponseField name="data[].brandRecords[].visibilityCount" type="integer" required>
  该品牌被提及次数。
</ResponseField>

<ResponseField name="data[].brandRecords[].sentimentScore" type="integer" required>
  情感倾向得分（0 \~ 100）。
</ResponseField>

<ResponseField name="data[].brandRecords[].position" type="integer" required>
  该品牌在回答中的排名位置。
</ResponseField>

<ResponseField name="data[].sourceRecords" type="object[]" required>
  该平台回答中引用的来源网页列表。
</ResponseField>

<ResponseField name="data[].sourceRecords[].websiteName" type="string" required>
  来源网站名称。
</ResponseField>

<ResponseField name="data[].sourceRecords[].title" type="string" required>
  来源文章或网页标题。
</ResponseField>

<ResponseField name="data[].sourceRecords[].url" type="string" required>
  来源网页链接。
</ResponseField>

<ResponseField name="data[].sourceRecords[].domain" type="string" required>
  来源域名。
</ResponseField>

<ResponseField name="data[].sourceRecords[].ranking" type="integer" required>
  该来源在引用列表中的排序序号。
</ResponseField>

<ResponseExample>
  ```json 200 (最终成功 result 结构) theme={null}
  {
    "keyword": "性价比高的智能手机推荐",
    "brandKeyword": "[\"小米\",\"华为\",\"苹果\"]",
    "platforms": ["deepseek", "volcengine", "baidu", "tencent", "aliyun"],
    "totalPlatforms": 5,
    "completedPlatforms": 5,
    "failedPlatforms": 0,
    "requestTime": "2026-09-17 09:00:00",
    "requestTotalPlatforms": 15,
    "requestRecommendedCount": 9,
    "requestTotalExposureCount": 24,
    "requestRecommendationRate": 60.00,
    "data": [
      {
        "requestId": "geo_20260917_abcdef",
        "platform": "deepseek",
        "keyword": "性价比高的智能手机推荐",
        "brandKeyword": "小米",
        "status": "completed",
        "isRecommended": 1,
        "exposureCount": 5,
        "recommendCount": 2,
        "countSourceRecord": 2,
        "position": 2,
        "resultContent": "……大模型原文……",
        "brandRecords": [
          {
            "brandName": "小米",
            "sentiment": "正向",
            "visibilityCount": 5,
            "sentimentScore": 80,
            "position": 2
          }
        ],
        "sourceRecords": [
          {
            "websiteName": "小米官网",
            "title": "小米手机",
            "url": "https://www.mi.com",
            "domain": "mi.com",
            "ranking": 1
          }
        ]
      }
    ]
  }
  ```
</ResponseExample>

## 类型定义

<Tabs>
  <Tab title="TypeScript">
    ```typescript theme={null}
    export interface GeoRankingResult {
      keyword: string;
      brandKeyword: string;
      platforms: string[];
      totalPlatforms: number;
      completedPlatforms: number;
      failedPlatforms: number;
      requestTime: string;
      requestTotalPlatforms: number;
      requestRecommendedCount: number;
      requestTotalExposureCount: number;
      requestRecommendationRate: number;
      data: PlatformRankingDetail[];
    }

    export interface PlatformRankingDetail {
      requestId?: string;
      platform: string;
      keyword: string;
      brandKeyword: string;
      status: "completed" | "failed" | string;
      isRecommended: number;
      exposureCount: number;
      recommendCount: number;
      countSourceRecord: number;
      position: number;
      resultContent: string | null;
      brandRecords: BrandRecord[];
      sourceRecords: SourceRecord[];
    }

    export interface BrandRecord {
      brandName: string;
      sentiment: string;
      visibilityCount: number;
      sentimentScore: number;
      position: number;
    }

    export interface SourceRecord {
      websiteName: string;
      title: string;
      url: string;
      domain: string;
      ranking: number;
    }
    ```
  </Tab>
</Tabs>

## 接入注意事项

1. **不可直接从第一步获取排名结果**：提交请求后，必须从返回中取得 `data.taskId`，再通过任务查询接口轮询。
2. **推荐 10 秒轮询间隔**：由于涉及多个大模型平台实时生成与分析，接口平均耗时在数秒至数十秒之间，请勿频繁发起查询。
3. **平台与品牌列表**：`platforms` 和 `brandKeyword` 为数组类型，平台编码请使用标准枚举（如 `deepseek`、`volcengine`、`baidu`、`tencent`、`aliyun`）。
4. **大模型原文处理**：`resultContent` 字段为大模型回答原文，文本可能较长，建议在数据存储和网络传输时做好合理预算与兼容。
