跳到主要内容

API:自然语言查数

概述

AskTable 提供了一个用于从自然语言查询生成 SQL 并直接返回查询结果的 API 接口。通过该 API,开发者可以利用 AskTable 的自然语言处理能力,快速获取数据库中的信息。这对于需要简化查询过程和提高开发效率的场景尤为适用。

适应场景

  1. 开发者希望用户能直接通过自然语言查询获取数据,而不需要自行处理 SQL 语句的生成和执行。
  2. 开发者不想使用 AskTable 的 UI 界面,想自己实现一个 UI 界面,直接展示查询结果。
  3. 开发者希望提供灵活的查询方式,适用于多种用户场景。

API 端点

POST /single-turn/q2a

请求 Payload

请求的 payload 需要包含以下字段:

{
"datasource_id": "string",
"role_id": "string",
"role_variables": {},
"question": "string",
"max_rows": 0
}

字段说明

  • datasource_id (必填): 数据源 ID,指定要查询的数据源。
  • role_id (可选): 用户角色的 ID,用于权限控制。
  • role_variables (可选): 角色相关的变量,通常用于细化权限控制。
  • question (必填): 用户的自然语言查询问题。
  • max_rows (可选): 限制返回结果的最大行数,设置为 0 则返回所有结果。

示例请求

以下是一个示例请求,用于生成 SQL 查询并获取查询结果:

请求示例代码 (Python)

import requests

url = "https://api.asktable.com/v1/single-turn/q2a"
headers = {
"Authorization": "Bearer API_KEY_or_TEMP_TOKEN",
"Content-Type": "application/json"
}
payload = {
"datasource_id": "example_datasource_id",
"role_id": 1,
"role_variables": {"user_id": 123},
"question": "有多少国家?",
"max_rows": 10
}

response = requests.post(url, json=payload, headers=headers)
print(response.json())

响应

成功的响应将返回查询的结果,包括查询生成的 SQL、执行时间、以及查询结果等信息。典型的响应示例如下:

{
"status": "OK",
"elapsed_time": 6,
"text": "共有206个国家。",
"files": null,
"charts": null,
"query_insights": [
{
"datasource_id": "ds_32r3zkHMPKn21O6SMPlF0u",
"question": "有多少国家?",
"step": "generate",
"insight": [
{
"name": "get_cache",
"duration": 0.3,
"detail": {
"cached_query": {
"prepared_statement": "SELECT COUNT(*) FROM olympics2024.athletes",
"params": {}
},
"cache_id": "74550b5a-0538-516a-804d-7d8615bd358f"
}
},
{
"name": "rewrite_cache",
"duration": 1.8,
"detail": {
"rewritten_query": {
"prepared_statement": "SELECT COUNT(DISTINCT country) FROM olympics2024.athletes",
"params": {}
}
}
}
]
},
{
"datasource_id": "ds_32r3zkHMPKn21O6SMPlF0u",
"question": "有多少国家?",
"step": "execute",
"insight": [
{
"name": "exec_query",
"duration": 0.1,
"detail": {}
},
{
"name": "save_cache",
"duration": 0.1,
"detail": {
"cache_id": "7a620814-e4fd-5314-b30d-080aaf8f6416"
}
}
]
}
],
"payload": {
"recognized_addresses": null,
"error_type": "",
"error_msg": ""
}
}

响应字段说明

  • status: 请求的状态,一般为 "OK"。
  • elapsed_time: 查询执行的总时间(以秒为单位)。
  • text: 基于查询结果生成的自然语言答案。
  • files: 生成的文件(如果有)。
  • charts: 生成的图表(如果有)。
  • query_insights: 查询执行的详细步骤和时间,包括生成 SQL、执行查询、缓存处理等信息。
  • payload: 请求中的相关信息,包括错误类型和错误信息等。

总结

通过 AskTable 提供的自然语言查数 API,用户可以轻松地从数据库中获取所需信息,无需编写复杂的 SQL 查询。这种方式不仅简化了查询过程,还确保了数据的准确性和及时性,适用于各种需要快速获取数据的场景。

如对 API 使用有更多疑问,请访问 AskTable 文档 获取详细信息。