跳转到主要内容
POST
/
api
/
v1
/
Analytics
自定义 Analytics 查询
curl --request POST \
  --url https://server.codeium.com/api/v1/Analytics \
  --header 'Content-Type: application/json' \
  --data '
{
  "service_key": "<string>",
  "group_name": "<string>",
  "query_requests": [
    {
      "data_source": "<string>",
      "selections": [
        {
          "field": "<string>",
          "name": "<string>",
          "aggregation_function": "<string>"
        }
      ],
      "filters": [
        {
          "name": "<string>",
          "filter": "<string>",
          "value": "<string>"
        }
      ],
      "aggregations": [
        {
          "field": "<string>",
          "name": "<string>"
        }
      ]
    }
  ]
}
'
{
  "queryResults": [
    {
      "responseItems": [
        {
          "item": {}
        }
      ]
    }
  ]
}

概览

Custom Analytics API 提供灵活的查询能力,可对 Autocomplete、Chat 和 Command 的数据进行可自定义的 selections、过滤、aggregations 和排序。

请求

service_key
string
必填
具有“Analytics Read”权限的服务密钥
group_name
string
将结果筛选为特定用户组内的用户(可选)
query_requests
array
必填
定义要检索的数据的查询请求对象数组

查询请求结构

每个查询请求对象包含:
  • data_source(必需):要查询的数据源
  • selections(必需):要检索的字段 selections 数组
  • filters(可选):要应用的过滤条件数组
  • aggregations(可选):用于分组的 aggregations 数组

Selections

Selections 用于定义要检索的字段以及对其进行聚合的方式。
  • field(必填):要选择的字段名
  • name(可选):字段的别名
  • aggregation_function(可选):要应用的聚合函数

选择示例

{
  "field": "num_acceptances",
  "name": "total_acceptances",
  "aggregation_function": "QUERY_AGGREGATION_SUM"
}

筛选器

筛选器用于将数据限定为满足特定条件的元素。
  • name(必填):要进行筛选的字段名称
  • filter(必填):筛选操作
  • value(必填):用于比较的值

筛选示例

{
  "name": "language",
  "filter": "QUERY_FILTER_EQUAL",
  "value": "PYTHON"
}

Aggregations

aggregations 根据指定条件对数据进行分组。
  • field (required): 用于分组的字段名
  • name (required): 该聚合字段的别名

聚合示例

{
  "field": "ide",
  "name": "ide_type"
}

可用字段

用户数据

所有用户数据按用户、按小时汇总。
字段名称描述可用聚合
api_key用户 API 密钥的哈希值UNSPECIFIED, COUNT
date自动补全的 UTC 日期UNSPECIFIED, COUNT
date UTC-x带时区偏移的日期(例如,“date UTC-8” 表示 PST)UNSPECIFIED, COUNT
hour自动补全的 UTC 小时UNSPECIFIED, COUNT
language编程语言UNSPECIFIED, COUNT
ide使用的 IDEUNSPECIFIED, COUNT
versionWindsurf 版本UNSPECIFIED, COUNT
num_acceptancesAutocomplete 接受次数SUM, MAX, MIN, AVG
num_lines_accepted接受的代码行数SUM, MAX, MIN, AVG
num_bytes_accepted接受的字节数SUM, MAX, MIN, AVG
distinct_users去重用户数UNSPECIFIED, COUNT
distinct_developer_days去重的(用户,日期)二元组UNSPECIFIED, COUNT
distinct_developer_hours去重的(用户,小时)二元组UNSPECIFIED, COUNT

Chat 数据

所有 Chat 数据均指 Chat 模型的回复,而非用户提问。
字段名称描述可用 aggregations
api_key用户 API key 的哈希值UNSPECIFIED, COUNT
model_idChat 模型 IDUNSPECIFIED, COUNT
dateChat 回复的 UTC 日期UNSPECIFIED, COUNT
date UTC-x带时区偏移的日期UNSPECIFIED, COUNT
ide使用的 IDEUNSPECIFIED, COUNT
versionWindsurf 版本UNSPECIFIED, COUNT
latest_intent_typeChat 意图类型(见下方 Intent Types)UNSPECIFIED, COUNT
num_chats_received接收到的 Chat 消息数量SUM, MAX, MIN, AVG
chat_accepted是否接受该回复(点赞)SUM, COUNT
chat_inserted_at_cursor是否点击了“Insert”按钮SUM, COUNT
chat_applied是否点击了“Apply Diff”按钮SUM, COUNT
chat_loc_used来自 Chat 的已使用代码行数SUM, MAX, MIN, AVG

Chat 意图类型

  • CHAT_INTENT_GENERIC - 常规 Chat
  • CHAT_INTENT_FUNCTION_EXPLAIN - 函数说明代码镜头
  • CHAT_INTENT_FUNCTION_DOCSTRING - 函数文档字符串代码镜头
  • CHAT_INTENT_FUNCTION_REFACTOR - 函数重构代码镜头
  • CHAT_INTENT_CODE_BLOCK_EXPLAIN - 代码块说明代码镜头
  • CHAT_INTENT_CODE_BLOCK_REFACTOR - 代码块重构代码镜头
  • CHAT_INTENT_PROBLEM_EXPLAIN - 问题说明代码镜头
  • CHAT_INTENT_FUNCTION_UNIT_TESTS - 函数单元测试代码镜头

Command 数据

Command 数据包含所有命令,包括被拒绝的命令。使用 accepted 字段可仅筛选已接受的命令。
字段名称描述可用 aggregations
api_key用户 API key 的哈希UNSPECIFIED, COUNT
date命令的 UTC 日期UNSPECIFIED, COUNT
timestamp命令的 UTC 时间戳UNSPECIFIED, COUNT
language编程语言UNSPECIFIED, COUNT
ide使用的 IDEUNSPECIFIED, COUNT
versionWindsurf 版本UNSPECIFIED, COUNT
command_sourceCommand 触发来源(见下方 Command Sources)UNSPECIFIED, COUNT
provider_source生成或编辑模式UNSPECIFIED, COUNT
lines_added新增代码行数SUM, MAX, MIN, AVG
lines_removed移除代码行数SUM, MAX, MIN, AVG
bytes_added新增字节数SUM, MAX, MIN, AVG
bytes_removed移除字节数SUM, MAX, MIN, AVG
selection_lines选中行数(生成时为 0)SUM, MAX, MIN, AVG
selection_bytes选中字节数(生成时为 0)SUM, MAX, MIN, AVG
accepted命令是否被接受SUM, COUNT

Command 来源

  • COMMAND_REQUEST_SOURCE_LINE_HINT_CODE_LENS
  • COMMAND_REQUEST_SOURCE_DEFAULT - 常规的 Command 用法
  • COMMAND_REQUEST_SOURCE_RIGHT_CLICK_REFACTOR
  • COMMAND_REQUEST_SOURCE_FUNCTION_CODE_LENS
  • COMMAND_REQUEST_SOURCE_FOLLOWUP
  • COMMAND_REQUEST_SOURCE_CLASS_CODE_LENS
  • COMMAND_REQUEST_SOURCE_PLAN
  • COMMAND_REQUEST_SOURCE_SELECTION_HINT_CODE_LENS

提供方来源

  • PROVIDER_SOURCE_COMMAND_GENERATE - 生成模式
  • PROVIDER_SOURCE_COMMAND_EDIT - 编辑模式

PCW 数据

Percent Code Written 数据,分别统计 Autocomplete 和 Command 的贡献。
字段名称描述可用聚合
percent_code_written计算方式:codeium_bytes / (codeium_bytes + user_bytes)UNSPECIFIED
codeium_bytesCodeium 生成的总字节数UNSPECIFIED
user_bytes用户编写的总字节数UNSPECIFIED
total_bytescodeium_bytes + user_bytesUNSPECIFIED
codeium_bytes_by_autocomplete来自 Autocomplete 的 Codeium 字节数UNSPECIFIED
codeium_bytes_by_command来自 Command 的 Codeium 字节数UNSPECIFIED

PCW 过滤器

字段名描述示例
language编程语言KOTLIN, GO, JAVA
ide所用 IDEjetbrains, vscode
versionWindsurf 版本1.28.0, 130.0
在 PCW 查询中进行日期筛选时,请在主请求体中使用 start_timestampend_timestamp

示例请求

用户数据示例

curl -X POST --header "Content-Type: application/json" \
--data '{
  "service_key": "your_service_key_here",
  "query_requests": [
    {
      "data_source": "QUERY_DATA_SOURCE_USER_DATA",
      "selections": [
        {
          "field": "num_acceptances",
          "name": "total_acceptances",
          "aggregation_function": "QUERY_AGGREGATION_SUM"
        },
        {
          "field": "num_lines_accepted",
          "name": "total_lines",
          "aggregation_function": "QUERY_AGGREGATION_SUM"
        }
      ],
      "filters": [
        {
          "name": "date",
          "filter": "QUERY_FILTER_GE",
          "value": "2024-01-01"
        },
        {
          "name": "date",
          "filter": "QUERY_FILTER_LE",
          "value": "2024-02-01"
        }
      ]
    }
  ]
}' \
https://server.codeium.com/api/v1/Analytics

Chat 数据示例

curl -X POST --header "Content-Type: application/json" \
--data '{
  "service_key": "your_service_key_here",
  "query_requests": [
    {
      "data_source": "QUERY_DATA_SOURCE_CHAT_DATA",
      "selections": [
        {
          "field": "chat_loc_used",
          "name": "lines_used",
          "aggregation_function": "QUERY_AGGREGATION_SUM"
        }
      ],
      "filters": [
        {
          "name": "latest_intent_type",
          "filter": "QUERY_FILTER_EQUAL",
          "value": "CHAT_INTENT_FUNCTION_DOCSTRING"
        }
      ],
      "aggregations": [
        {
          "field": "ide",
          "name": "ide_type"
        }
      ]
    }
  ]
}' \
https://server.codeium.com/api/v1/Analytics

Command 数据示例

curl -X POST --header "Content-Type: application/json" \
--data '{
  "service_key": "your_service_key_here", // 请在此处填写您的服务密钥
  "query_requests": [
    {
      "data_source": "QUERY_DATA_SOURCE_COMMAND_DATA",
      "selections": [
        {
          "field": "lines_added",
          "name": "total_lines_added",
          "aggregation_function": "QUERY_AGGREGATION_SUM"
        },
        {
          "field": "lines_removed",
          "name": "total_lines_removed",
          "aggregation_function": "QUERY_AGGREGATION_SUM"
        }
      ],
      "filters": [
        {
          "name": "provider_source",
          "filter": "QUERY_FILTER_EQUAL",
          "value": "PROVIDER_SOURCE_COMMAND_EDIT"
        },
        {
          "name": "accepted",
          "filter": "QUERY_FILTER_EQUAL",
          "value": "true"
        }
      ],
      "aggregations": [
        {
          "field": "language",
          "name": "programming_language"
        }
      ]
    }
  ]
}' \
https://server.codeium.com/api/v1/Analytics

PCW 数据示例

curl -X POST --header "Content-Type: application/json" \
--data '{
  "service_key": "your_service_key_here",
  "start_timestamp": "2024-01-01T00:00:00Z",
  "end_timestamp": "2024-12-22T00:00:00Z",
  "query_requests": [
    {
      "data_source": "QUERY_DATA_SOURCE_PCW_DATA",
      "selections": [
        {
          "field": "percent_code_written",
          "name": "pcw"
        },
        {
          "field": "codeium_bytes",
          "name": "ai_bytes"
        },
        {
          "field": "total_bytes",
          "name": "total"
        },
        {
          "field": "codeium_bytes_by_autocomplete",
          "name": "autocomplete_bytes"
        },
        {
          "field": "codeium_bytes_by_command",
          "name": "command_bytes"
        }
      ],
      "filters": [
        {
          "filter": "QUERY_FILTER_EQUAL",
          "name": "language",
          "value": "GO"
        }
      ]
    }
  ]
}' \
https://server.codeium.com/api/v1/Analytics

响应

queryResults
array
查询结果数组,其中每个元素对应一个查询请求
responseItems
array
结果条目数组
item
object
包含所选字段及其值的对象

示例回复

用户数据响应

{
  "queryResults": [
    {
      "responseItems": [
        {
          "item": {
            "total_acceptances": "125",
            "total_lines": "863"
          }
        }
      ]
    }
  ]
}

Chat 数据响应

{
  "queryResults": [
    {
      "responseItems": [
        {
          "item": {
            "lines_used": "74",
            "ide_type": "jetbrains"
          }
        },
        {
          "item": {
            "lines_used": "41",
            "ide_type": "vscode"
          }
        }
      ]
    }
  ]
}

Command 数据响应

{
  "queryResults": [
    {
      "responseItems": [
        {
          "item": {
            "programming_language": "PYTHON",
            "total_lines_added": "21",
            "total_lines_removed": "5"
          }
        },
        {
          "item": {
            "programming_language": "GO",
            "total_lines_added": "31",
            "total_lines_removed": "27"
          }
        }
      ]
    }
  ]
}

PCW 数据返回

{
  "queryResults": [
    {
      "responseItems": [
        {
          "item": {
            "ai_bytes": "6018",
            "autocomplete_bytes": "4593",
            "command_bytes": "1425",
            "pcw": "0.61",
            "total": "9900"
          }
        }
      ]
    }
  ]
}

重要说明

  • PCW(Percent Code Written,代码编写百分比)在单个自然日内或不同用户之间波动较大——建议按周聚合以获得更可靠的分析结果
  • 所有 selection 字段要么全部使用聚合函数,要么全部不使用(不能混用)
  • 名称符合 “distinct_*” 模式的字段不能用于 aggregations
  • 字段别名在所有 selections 和 aggregations 中必须唯一
  • 如果未指定聚合函数,则默认为 UNSPECIFIED