Cliffford AI — 工具 & 技能包完整参考手册
2026/02/24 08:1151
最后更新:2026-02-24
文件位置:pages/api/ai-chat/index.js
一、架构总览
路由系统(Skill Router)
用户消息 → Router (gpt-5.1-codex-mini) → 分类标签 → 选择技能包 → 注入工具+提示词
| 配置项 | 值 | 说明 |
|---|---|---|
AI_ROUTER_ENABLED | 1 | 路由开关 |
AI_ROUTER_MODEL | gpt-5.1-codex-mini | 路由分类模型(复用 AI_BASE_URL/AI_API_KEY) |
技能包分组
| 技能包 | 标签 | 包含工具 | 估算 Token |
|---|---|---|---|
| search | search | search_vehicles, get_vehicle_detail, compare_vehicles, get_vehicle_stats | ~800 |
| garage | garage | get_user_garage, check_user_vehicle | ~600 |
| weekly | weekly | get_weekly_updates, get_weekly_recommendations | ~300 |
| 全量 | — | 全部 8 个工具 | ~2,200 |
路由标签
Router 输出以下标签(可多选):
| 标签 | 含义 | 后端 | 示例问题 |
|---|---|---|---|
chat | 闲聊/角色对话/不需数据 | Grok 无工具 | "崔佛是不是疯子?" |
search | 搜索/比较/查看载具 | 主力模型 + search 技能包 | "200万内最快跑车" |
garage | 个人车库/拥有状态 | 主力模型 + garage 技能包 | "我有多少车?" |
weekly | 本周更新/折扣/推荐 | 主力模型 + weekly 技能包 | "本周有什么折扣?" |
组合示例:search,garage → 同时注入 search + garage 两个技能包
路由模式
| 模式 | 触发条件 | 后端 | 提示词 |
|---|---|---|---|
chat | 仅有 chat 标签 | Grok | GROK_SYSTEM_PROMPT(角色扮演) |
data | 有 search/garage/weekly,无 chat | 主力模型 | PROMPT_BASE + 对应技能提示词 |
hybrid | chat + 数据标签同时出现 | 主力模型 | PROMPT_BASE + 技能提示词 + PROMPT_PERSONA |
粘性策略
- 上轮技能存入 Redis:
router_skills:{conversationId},60 分钟过期 - 若 Router 判定纯 chat 但上轮有数据技能 → 惯性保留为 hybrid,避免上下文断裂
二、工具详细说明
1. search_vehicles — 搜索载具
所属技能包:search
用途:按条件搜索全库载具,返回符合条件的列表。
参数:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
class | string | 否 | 载具类型(如:跑车、SUV、直升机) |
manufacturer | string | 否 | 制造商名称(如:佩嘉西、绝品) |
max_price | number | 否 | 最高价格 |
min_price | number | 否 | 最低价格 |
has_hao | boolean | 否 | 是否支持阿浩改装 |
has_imani | boolean | 否 | 是否支持伊玛尼科技 |
has_missile_protection | boolean | 否 | 是否有导弹干扰 |
has_limited_livery | boolean | 否 | 是否有限定涂装 |
is_removed | boolean | 否 | true=只查下架车, false=只查在售(默认在售) |
keyword | string | 否 | 关键词搜索(车名或现实原型,用英文) |
sort_by | string | 否 | 排序字段:price/top_speed/lap_time/acceleration |
sort_order | string | 否 | asc(升序)或 desc(降序,默认) |
limit | number | 否 | 返回数量(默认 10,最大 20) |
check_owned | boolean | 否 | 同时返回用户是否已拥有(需登录) |
返回格式:
[
{ "id": 123, "n": "T20", "p": 2200000, "tp": 1650000, "spd": 231.25, "lap": "1:01.2", "owned": true }
]
返回字段:id=ID, n=中文名, p=价格, tp=贸易价, spd=极速, lap=圈速, owned=是否拥有
2. get_vehicle_detail — 载具详情(支持批量)
所属技能包:search
用途:获取单个或多个载具的完整详细信息。
参数(四选一):
| 参数 | 类型 | 说明 |
|---|---|---|
vehicle_id | number | 单个载具 ID |
vehicle_ids | number[] | 批量 ID(最多 10 个) |
vehicle_name | string | 单个载具名称(中/英) |
vehicle_names | string[] | 批量名称(最多 10 个) |
返回格式(单个):
{
"id": 123, "n": "T20", "name_en": "T20",
"class": "超级跑车", "manufacturer": "佩嘉西",
"p": 2200000, "tp": 1650000,
"spd": 231.25, "lap": "1:01.2",
"stats": { "speed": 8.5, "acc": 8.0, "brake": 3.0, "handle": 7.0 },
"hao": false, "imani": false, "missile": false,
"based_on": "McLaren P1"
}
批量返回:{ vs: [...], c: 数量 }
3. compare_vehicles — 比较多车性能
所属技能包:search
用途:对比多个载具的性能数据。
参数(二选一):
| 参数 | 类型 | 说明 |
|---|---|---|
vehicle_ids | number[] | 要比较的 ID 列表 |
vehicle_names | string[] | 要比较的名称列表 |
返回格式:
[
{
"id": 123, "name": "T20", "class": "超级跑车",
"price": 2200000, "top_speed": 231.25, "lap_time": "1:01.2",
"stats": { "speed": 8.5, "acceleration": 8.0, "braking": 3.0, "handling": 7.0 },
"features": ["阿浩"]
}
]
4. get_vehicle_stats — 载具统计
所属技能包:search
用途:获取载具库的统计信息。
参数:
| 参数 | 类型 | 可选值 | 说明 |
|---|---|---|---|
stat_type | string | total / by_class / by_manufacturer / special_features | 统计类型 |
返回示例:
total→{ total_vehicles: 835 }by_class→{ by_class: [{ class_name: "超级跑车", count: 60 }, ...] }by_manufacturer→{ by_manufacturer: [{ manufacturer: "佩嘉西", count: 35 }, ...] }(前 15)special_features→{ hao_upgrade: 45, imani_tech: 30, drift_tune: 20, missile_protection: 15 }
5. get_user_garage — 用户车库查询
所属技能包:garage
用途:查询当前用户的车库信息。功能非常丰富,通过 info_type 参数选择不同模式。
参数:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
info_type | string | 是 | 查询模式(见下表) |
garage_id | number | 否 | 车库配置 ID(仅 garage_vehicles 用) |
garage_name | string | 否 | 车库名称模糊匹配(仅 garage_vehicles 用) |
filter | object | 否 | 筛选条件(仅 filter_vehicles 和 missing_vehicles 用) |
info_type 模式详解
| info_type | 用途 | 返回数据 |
|---|---|---|
summary | 车库总览统计 | 总车数、总车库数、总价值、改装统计、Top5 类型/制造商 |
garages | 车库列表 | 所有车库名称、地址、容量、已停车辆数 |
garage_vehicles | 指定车库车辆 | 需提供 garage_id 或 garage_name,返回该车库所有车辆 |
filter_vehicles | 筛选用户已拥有的车 | 按 filter 条件筛选(最多 30 条) |
missing_vehicles | 用户未拥有的车 | 按 filter 条件筛选在售但用户没有的车(最多 20 条) |
missing_removed | 用户未拥有的下架车 | 查询用户不拥有的已下架车辆(最多 50 条) |
filter 支持的字段
| 字段 | 类型 | 说明 | 适用 info_type |
|---|---|---|---|
vehicle_name | string | 按车名模糊匹配 | filter_vehicles |
vehicle_names | string[] | 批量按车名筛选 | filter_vehicles, missing_vehicles |
manufacturer | string | 制造商名称 | filter_vehicles, missing_vehicles |
class | string | 载具类别(如"跑车") | filter_vehicles, missing_vehicles |
is_removed | boolean | 是否已下架 | filter_vehicles |
user_modified | boolean | 是否已改装 | filter_vehicles |
has_hao_upgrade | boolean | 是否支持阿浩改装 | filter_vehicles, missing_vehicles |
has_imani_upgrade | boolean | 是否支持伊玛尼科技 | filter_vehicles, missing_vehicles |
user_hao_status | boolean | 用户是否已改装阿浩 | filter_vehicles |
user_imani_status | boolean | 用户是否已改装伊玛尼 | filter_vehicles |
user_drift_status | boolean | 用户是否已改装漂移 | filter_vehicles |
user_missile_status | boolean | 用户是否已改装导弹干扰 | filter_vehicles |
has_limited_livery | boolean | 车辆有稀有涂装可选 | filter_vehicles |
user_has_limited_livery | boolean | 用户已选用稀有涂装 | filter_vehicles |
max_price | number | 最高价格 | missing_vehicles |
min_price | number | 最低价格 | missing_vehicles |
count_only | boolean | 只返回数量不返回列表 | filter_vehicles |
常用调用示例
推荐我没有的便宜肌肉车
→ get_user_garage(info_type="missing_vehicles", filter={class:"肌肉车", max_price:500000})
我有多少辆跑车
→ get_user_garage(info_type="filter_vehicles", filter={class:"跑车", count_only:true})
我有哪些下架车
→ get_user_garage(info_type="filter_vehicles", filter={is_removed:true})
哪些车没改装过
→ get_user_garage(info_type="filter_vehicles", filter={user_modified:false})
给我推荐200万以下我没有的车
→ get_user_garage(info_type="missing_vehicles", filter={max_price:2000000})
返回字段编码
状态码 s 的值:
0= 无特殊状态1= 阿浩改装2= 伊玛尼改装3= 漂移调教4= 导弹干扰5= 限定涂装6= 下架车辆
多个状态逗号分隔,如 1,2 = 阿浩+伊玛尼
6. check_user_vehicle — 检查用户是否拥有某车
所属技能包:garage
用途:快速检查用户是否拥有一辆特定车辆,返回拥有状态和所在车库。
参数(二选一):
| 参数 | 类型 | 说明 |
|---|---|---|
vehicle_name | string | 车辆名称(中/英,支持"制造商 车名"格式) |
vehicle_model | string | 车辆 model 名称 |
返回格式:
未拥有:
{ "owned": false, "msg": "用户未拥有该车辆" }
拥有:
{
"owned": true, "id": 123, "c": 2, "n": "T20",
"locs": [
{ "g": "花园银行塔 奢车库", "s": "1,2" },
{ "g": "霍伊克1号公路 办公室车位", "s": "0" }
]
}
7. get_weekly_updates — 本周更新内容
所属技能包:weekly
用途:获取本周 GTA Online 的更新信息,包括:
- 赌场展台、车友会奖品、豪华汽车展厅、西米恩车店
- 本周折扣、奖励活动
- 武器厢型车、时间挑战
- 每日/每周任务、废车场通缉载具
参数:无
返回格式:
{
"week_id": "2026-W09",
"date": "2026-02-20",
"sections": [
{ "title": "赌场展台", "items": [{ "name": "T20", "id": 123 }] },
{ "title": "本周折扣", "items": [{ "category": "超级跑车", "discount": "30%" }] },
{ "title": "时间挑战", "items": [{ "type": "常规时间挑战", "name": "机场", "target": "1:48.3" }] }
]
}
数据来源:Redis 缓存 weekly_updates:summary → fallback 到 /api/weekly-updates API
8. get_weekly_recommendations — 本周推荐未拥有车辆
所属技能包:weekly
用途:从本周更新中的所有车辆中,筛选出用户未拥有的,作为购买推荐。优先使用此工具回答"本周有什么值得买的"类问题。
参数:无
返回格式:
{
"owned_count": 3,
"total_count": 8,
"missing": [
{
"id": 123, "n": "T20", "p": 2200000,
"source": "豪华汽车展厅",
"free": false,
"discount": "30%",
"discountPrice": 1540000,
"removed": false,
"hao": false, "imani": false, "missile": false
}
]
}
来源(source)可能的值:
赌场展台(免费)车友会奖品(免费,需完成挑战)豪华汽车展厅西米恩车店好麦坞俱乐部
三、系统提示词结构
模块化组成
| 模块 | 变量名 | 大小 | 注入条件 |
|---|---|---|---|
| 基础规则 | PROMPT_BASE | ~500 chars | 所有带工具的请求 |
| 搜索说明 | PROMPT_SKILL_SEARCH | ~350 chars | skills 含 search |
| 车库说明 | PROMPT_SKILL_GARAGE | ~450 chars | skills 含 garage |
| 周更说明 | PROMPT_SKILL_WEEKLY | ~250 chars | skills 含 weekly |
| 角色人格 | PROMPT_PERSONA | ~120 chars | hybrid 模式 |
| Grok 角色 | GROK_SYSTEM_PROMPT | ~600 chars | chat 模式 |
| 全量(兼容) | SYSTEM_PROMPT | ~1,550 chars | Router 关闭时 |
关键规则
- 【最重要】只能推荐工具返回的车辆,绝对禁止编造
- 链接格式:
[车名](/vehicles/ID),n 和 id 必须来自工具返回的 vs 数据 - 禁止向用户暴露工具名/函数名/API/JSON/SQL 等内部细节
- keyword 用英文,回复用中文
- 效率:争取 1 轮工具调用完成,最多 3 轮
四、返回数据字段缩写对照
| 缩写 | 全称 | 说明 |
|---|---|---|
n | name | 车辆中文名 |
p | price | 价格 |
tp | trade_price | 贸易价 |
spd | speed | 极速(测试值) |
lap | lap_time | 圈速 |
g | garage | 车库名/位置 |
gid | garage_id | 车库配置 ID |
c | count | 数量 |
s | status | 状态码 |
vs | vehicles | 车辆列表 |
t | total | 总数 |
nt | note | 提示信息(如"仅显示前20辆") |
五、工具返回数据限制
| 工具 | 最大返回条数 |
|---|---|
search_vehicles | 20 条 |
get_vehicle_detail(批量) | 10 条 |
compare_vehicles | 不限(按输入) |
get_vehicle_stats | 15 条(by_manufacturer) |
get_user_garage — filter_vehicles | 30 条 |
get_user_garage — missing_vehicles | 20 条 |
get_user_garage — missing_removed | 50 条 |
check_user_vehicle | 不限 |
get_weekly_updates | 15 条(折扣) |
get_weekly_recommendations | 不限 |
六、前端模式与后端对应
| 前端选项 | aiMode 值 | 后端行为 |
|---|---|---|
| Cliffford Auto | auto | 调用 Router → 自动分发 |
| Cliffford X | chat | 强制 Grok,无工具 |
| Cliffford DB | data | 强制主力模型 + 全量工具 |
| Cliffford TR | test | 测试模型 |
51 浏览1 评论
评论 (1)
暂无评论,快来抢沙发吧~