小艺开放平台最佳实践实践案例 | Vibe Coding场景化编排——同程程心Skill
本文档为Vibe Coding 生成 Skill 标准开发实战案例,以同程旅行自研大模型程心对应的同程程心Skill为核心范本,面向Skill开发者提供完整的产品设计、能力定义、路由规则、账号认证、接口封装、输出规范、错误处理全流程开发指引。
产品设计
在正式进入Skill的开发流程前,先梳理一下当前Skill的核心设计:
核心设计原则
同程程心Skill整体采用意图驱动、结构化解析、透传兜底、原样输出的极简架构,规避大模型二次加工导致的信息失真、格式错乱问题,核心原则如下:
- 意图驱动路由:从用户自然语言对话中精准提取核心业务意图,一对一映射至专属领域查询接口,单一意图对应单一查询能力,避免多接口乱调用、重复调用。
- 结构化字段+自由文本透传:出发地、目的地、车次、航班号等核心固定参数做结构化精准提取;用户的修饰性、个性化、弱约束需求,全部统一放入extra字段透传给后端接口,不丢弃、不简化、不改写。
- 接口原样输出:后端API原始返回体即为最终用户答复内容,大模型不做二次总结、不改写字段、不删减数据、不编造内容,保障数据100%真实权威。
能力边界定义
同程程心是同程旅行基于自研大模型程心打造的全品类实时旅游搜索Skill,所有数据均来源于同程官方生产系统,支持实时查询、结构化展示、一键跳转预订,覆盖七大旅游出行核心领域,完整能力边界如下:
|
查询域 |
核心能力说明 |
|
机票 |
城市间航班搜索、航班号精准查询、特价/低价机票推荐、空铁联运接驳补偿方案 |
|
火车票 |
城市间车次搜索、车次精准查询、车站精准查询、车型/席位/时间个性化筛选 |
|
酒店 |
城市酒店全域搜索、位置偏好筛选、星级/设施/价格筛选、入住日期个性化匹配 |
|
景区 |
城市景区搜索、主题/特色筛选、票务价格查询、游玩时长及配套服务介绍 |
|
长途汽车 |
城市间客运班次搜索、客运站精准查询、时间段偏好筛选 |
|
度假产品 |
交通+酒店+景区一站式搭配、跟团游/自由行套餐、多日行程规划、UGC真实攻略查询 |
|
智能交通 |
火车、机票、汽车多出行方式并行推荐,智能对比最优出行方案 |
意图路由决策规则
Skill严格按照用户输入语义匹配优先级执行路由,精准分发至对应领域查询接口,无意图、意图模糊时统一引导用户明确需求,完整路由逻辑如下:
用户输入
│
├─ 包含"特价/低价/便宜 + 机票"
│ └─ flight-query --low-price
│
├─ 包含"机票/航班/飞/飞机"
│ ├─ 有航班号 → flight-query --flight-number "CA1234"
│ └─ 有出发地 ± 目的地 → flight-query --departure ... --destination ...
│
├─ 包含"火车/高铁/动车/车次"
│ ├─ 有车次号 → train-query --train-number "G1234"
│ ├─ 有站名 → train-query --departure-station ... --arrival-station ...
│ └─ 有城市 → train-query --departure ... --destination ...
│
├─ 包含"酒店/住宿/入住"
│ └─ hotel-query --destination ... [--extra "..."]
│
├─ 包含"景区/景点/门票/好玩"
│ └─ scenery-query --destination ... [--extra "..."]
│
├─ 包含"汽车票/大巴/客运/长途汽车/班车"
│ └─ bus-query
│
├─ 包含"旅游团/跟团游/自由行/玩几天/几日游/规划行程/度假"
│ └─ travel-query
│
├─ 包含"怎么走/交通方式" 或 仅有出发地+目的地未指定交通
│ └─ traffic-query
│
└─ 意图不明确
└─ 引导用户明确:交通方式?酒店?景点?度假?
账号凭证认证流程(强制规范)
核心强制规则
每次调用技能执行查询脚本前,必须重新检查凭证状态,禁止复用历史会话校验结果。即使同一次对话中已完成过查询,再次触发查询仍需重新校验凭证有效性,确保每一次请求安全合规。
技能凭证统一存储路径:
/home/sandbox/.openclaw/.xiaoyienv
- 1.
全局认证方式:统一使用apikey请求头完成接口鉴权。
三级认证流程
步骤一:优先读取本地凭证文件
读取.xiaoyienv文件,校验两个核心字段:<clientId>_login_token、<clientId>_login_token_expire_time。
- 有值且未过期(当前时间小于过期时间):凭证就绪,直接执行业务查询脚本;
- 为空、文件不存在、已过期:进入第二步工具刷新流程。
步骤二:调用工具刷新授权凭证
每次检测到凭证异常,必须调用huawei_id_tool工具刷新凭证,固定参数:clientId、skillName。
- 授权成功:重新读取本地.xiaoyienv文件获取最新token,凭证就绪;
- 授权失败/无响应/用户拒绝:进入第三步兜底认证。
步骤三:环境变量兜底认证
仅第二步授权失败时生效,读取系统环境变量CHENGXIN_API_KEY作为兜底凭证,放入apikey请求头完成鉴权。
Skill封装规范
产品特性和分发规则明确后,开发者需要对Skill的各个模块接口进行开发与封装,让模块能力变成Agent友好的技能路书。
通用调用范式
所有领域查询脚本统一遵循固定调用格式,基于NodeJS脚本执行,统一网关、超时与公共参数规范。
node scripts/<domain>-query.js [业务参数] --channel <渠道> --surface <界面>
- 请求协议:全部基于HTTPS POST调用业务网关;
- 网关基础地址:https://tc-chengxin/cases/api/(示例地址);
- 接口超时时间:固定15秒;
- 公共参数:--channel、--surface为全局必传参数,不可省略。
全领域接口详细规范
1. 机票查询(flight-query)
(1)API端点:POST /flightResource
|
参数 |
类型 |
必填 |
说明 |
示例 |
|
--departure |
string |
条件必填 |
出发地城市 |
"北京" |
|
--destination |
string |
条件必填 |
目的地城市 |
"上海" |
|
--flight-number |
string |
条件必填 |
航班号精确查询 |
"CA1234" |
|
--low-price |
flag |
可选 |
触发特价/低价查询逻辑,存在即生效 |
- |
|
--extra |
string |
可选 |
日期、舱位、航司、时间偏好等修饰文本 |
"明天 最早 直飞" |
|
--channel |
string |
必填 |
通信渠道标识 |
"webchat" |
|
--surface |
string |
必填 |
交互界面类型 |
"webchat" |
(2)合法参数组合(三选一):
- departure+destination:常规城市航线搜索;
- flight-number:航班号精准匹配查询;
- departure+low-price:出发地低价航班推荐,可搭配destination指定航线。
(3)--low-price子模式规则:该参数为独立查询开关,用于切换接口低价专属逻辑,可与extra共存,分别承载低价策略和用户个性化需求。
(4)响应结构示例
{
"code": "0",
"data": {
"flightDataList": [{
"desc": "北京 → 上海 2026-04-21",
"flightList": [{
"flightNo": "MF8561",
"airlineName": "厦门航空",
"depAirportName": "北京大兴国际机场",
"arrAirportName": "上海浦东国际机场",
"depDate": "2026-04-21",
"depTime": "07:50",
"arrDate": "2026-04-21",
"arrTime": "09:45",
"runTime": "1时55分",
"price": "327",
"superlinkRedirectUrl": "https://...",
"redirectAppUrl": "tctclient://..."
}]
}]
}
}
(5)空铁联运降级策略:当接口返回无航班结果(code=1)时,自动推荐邻近枢纽机场,二次重试查询,并可补充火车、汽车接驳交通方案,完善出行链路。
(6)强制约束:所有航班数据、价格、链接必须来源于脚本原始输出,禁止人工编造、修改数据。
2. 火车票查询(train-query)
(1)API端点:POST /trainResource
|
参数 |
类型 |
必填 |
说明 |
示例 |
|
--departure |
string |
条件必填 |
出发地城市 |
"北京" |
|
--destination |
string |
条件必填 |
目的地城市 |
"上海" |
|
--departure-station |
string |
条件必填 |
出发精准车站名 |
"北京南站" |
|
--arrival-station |
string |
条件必填 |
到达精准车站名 |
"上海虹桥站" |
|
--train-number |
string |
条件必填 |
车次精准查询 |
"G1234" |
|
--extra |
string |
可选 |
日期、车型、席位、时间、价格偏好 |
"明天 高铁 一等座" |
|
--channel |
string |
必填 |
通信渠道 |
"webchat" |
|
--surface |
string |
必填 |
交互界面 |
"webchat" |
(2)合法参数组合(三选一):departure+destination、train-number、departure-station+arrival-station
(3)响应结构示例
3. 酒店查询(hotel-query)
(1)API端点:POST /hotelResource
|
参数 |
类型 |
必填 |
说明 |
示例 |
|
--destination |
string |
必填 |
目的地城市 |
"上海" |
|
--extra |
string |
可选 |
入住日期、位置、星级、设施、服务偏好 |
"明天入住 外滩附近 五星级 含早餐" |
|
--channel |
string |
必填 |
通信渠道 |
"webchat" |
|
--surface |
string |
必填 |
交互界面 |
"webchat" |
(2)特殊规则:目的地为必填项,参数缺失时直接引导用户补充目的地信息。
(3)响应结构示例
{
"code": "0",
"data": {
"hotelDataList": [{
"desc": "上海酒店推荐",
"hotelList": [{
"name": "上海虹桥新华联索菲特大酒店",
"image": "https://xxx.jpg",
"price": "1512",
"star": "豪华型",
"score": "4.8",
"commentNum": "7493",
"describe": "交通便利,设施齐全,服务优质。",
"address": "泰虹路666号",
"countyName": "闵行区",
"brandName": "索菲特",
"facilities": "停车场;免费wifi",
"distance": "距虹桥火车站800m",
"superlinkRedirectUrl": "https://..."
}]
}]
}
}
(4)输出规范:酒店资源强制卡片样式展示,优先渲染顶部图片,预订链接优先使用superlinkRedirectUrl。
4. 景区查询(scenery-query)
(1)API端点:POST /sceneryResource
|
参数 |
类型 |
必填 |
说明 |
示例 |
|
--destination |
string |
必填 |
目的地城市 |
"杭州" |
|
--extra |
string |
可选 |
景区主题、特色、等级、人群偏好 |
"适合亲子 5A景区 免费" |
|
--channel |
string |
必填 |
通信渠道 |
"webchat" |
|
--surface |
string |
必填 |
交互界面 |
"webchat" |
(2)响应结构示例
{
"code": "0",
"data": {
"sceneryDataList": [{
"desc": "杭州景区推荐",
"sceneryList": [{
"name": "杭州宋城",
"image": "https://xxx.jpg",
"cityName": "杭州",
"star": "4A",
"score": "4.8",
"commentNum": "14186",
"price": "260",
"openTime": "09:00-21:00",
"playTime": "半天-1天",
"describe": "世界三大名秀之一",
"theme": "演出赛事",
"superlinkRedirectUrl": "https://..."
}],
"needExtend": false
}]
}
}
(3)扩展模式:当needExtend=true时,自动追加交通指引、多票种信息、优惠政策、详细介绍及温馨提示。
5. 长途汽车查询(bus-query)
(1)API端点:POST /busResource
|
参数 |
类型 |
必填 |
说明 |
示例 |
|
--departure |
string |
条件必填 |
出发地城市 |
"北京" |
|
--destination |
string |
条件必填 |
目的地城市 |
"上海" |
|
--departure-station |
string |
条件必填 |
精准出发客运站 |
"北京六里桥客运站" |
|
--arrival-station |
string |
条件必填 |
精准到达客运站 |
"上海长途汽车客运站" |
|
--extra |
string |
可选 |
日期、时间段偏好 |
"明天 上午" |
|
--channel |
string |
必填 |
通信渠道 |
"webchat" |
|
--surface |
string |
必填 |
交互界面 |
"webchat" |
(2)路由同义词:汽车票、大巴票、客运、长途汽车、班车,统一路由至bus-query。
6. 度假产品查询(travel-query)
(1)API端点:POST /travelResource
|
参数 |
类型 |
必填 |
说明 |
示例 |
|
--departure |
string |
可选 |
出发地城市,传参后触发完整行程规划 |
"苏州" |
|
--destination |
string |
必填 |
目的地城市/景区区域 |
"杭州" |
|
--extra |
string |
可选 |
游玩天数、出行类型、人群偏好、假期需求 |
"3天2晚 自由行" |
|
--channel |
string |
必填 |
通信渠道 |
"webchat" |
|
--surface |
string |
必填 |
交互界面 |
"webchat" |
(2)一站式返回六大模块:交通推荐、酒店推荐、景区推荐、打包度假产品、每日行程规划、UGC用户攻略。
(3)智能补偿机制:返回结果缺失任一核心模块时,自动输出补偿查询指令,引导补充调用对应领域脚本,完善整套出行方案。
7. 智能交通查询(traffic-query)
(1)API端点:POST /trafficResource
|
参数 |
类型 |
必填 |
说明 |
示例 |
|
--departure |
string |
必填 |
出发地城市 |
"北京" |
|
--destination |
string |
必填 |
目的地城市 |
"上海" |
|
--extra |
string |
可选 |
日期、交通方式优先级偏好 |
"明天 高铁优先" |
|
--channel |
string |
必填 |
通信渠道 |
"webchat" |
|
--surface |
string |
必填 |
交互界面 |
"webchat" |
(2)调用优先级强制规则:用户明确指定单一交通方式时,优先调用对应专属接口;仅用户未指定交通方式、仅提供起止城市时,才使用智能交通综合查询。
通用参数设计规范
1. 渠道与界面公共参数
|
参数 |
类型 |
可选值 |
核心作用 |
|
--channel |
string |
webchat、wechat、app、workbuddy |
区分客户端渠道,适配不同输出格式策略 |
|
--surface |
string |
webchat、mobile、desktop、table、card |
强制覆盖表格/卡片渲染策略,统一界面展示形态 |
2. extra自由文本参数设计哲学
核心原则:优先精准提取结构化核心参数,用户所有修饰、偏好、个性化需求,全部原样拼接存入extra字段,不丢弃、不简化、不二次处理。
|
需求类型 |
关键词示例 |
标准化处理方式 |
|
时间偏好 |
最早、最晚、上午、下午、晚上 |
统一存入extra透传 |
|
价格偏好 |
最便宜、低价、经济型 |
存入extra,机票可搭配low-price开关 |
|
服务等级 |
高铁、动车、一等座、商务舱、五星 |
统一存入extra透传 |
|
行程偏好 |
直飞、中转、少换乘、自驾 |
统一存入extra透传 |
|
人群偏好 |
亲子、情侣、老人、宠物友好 |
统一存入extra透传 |
|
特色筛选 |
免费、夜景、夜游、赏花、海景 |
统一存入extra透传 |
统一输出格式规范
|
资源类型 |
输出格式 |
图片渲染规则 |
预订链接规则 |
|
酒店 |
强制卡片展示 |
image非空时渲染顶部大图 |
仅展示APP预订链接 |
|
景区 |
强制卡片展示 |
image非空时渲染顶部大图 |
仅展示APP预订链接 |
|
机票/火车/汽车/度假 |
按渠道策略自动适配 |
不单独渲染图片 |
仅展示APP预订链接 |
请求头与安全规范
1. 标准化请求头
|
场景 |
请求头配置 |
|
本地凭证有效 |
apikey: ${<clientId>_login_token} |
|
兜底凭证场景 |
apikey: ${CHENGXIN_API_KEY} |
|
通用全局 |
Content-Type: application/json |
|
通用全局 |
User-Agent: TC-Chengxin-NodeJS/1.0.0 |
2. 网络安全规范
- 协议强制约束:生产环境仅允许HTTPS,仅本地回环地址可使用HTTP;
- 域名白名单:凭证与请求数据仅下发至官方域名;
- 请求体规范:统一JSON格式,固定携带版本号version: "1.0.0"。
3. 数据隐私规范
- 数据传输仅包含结构化业务参数与extra透传文本,无多余隐私数据;
- 所有请求仅对接同程官方API,无第三方数据流转;
- Skill不存储查询日志、不采集用户遥测数据;
- 所有预订链接均指向同程官方合规域名。
错误处理规范
- 凭证异常:每次查询强制重试凭证校验,过期/失效自动触发工具刷新,刷新失败启用兜底密钥,无有效凭证时直接返回授权失败提示,引导用户重新授权;
- 参数缺失:核心结构化参数缺失时,精准引导用户补充对应信息,不盲目调用接口;
- 接口无数据:机票无结果自动触发空铁联运降级策略,其他场景友好告知无匹配资源,并推荐相近方案;
- 接口超时:15秒超时触发失败回调,返回网络异常提示,禁止返回空数据或编造内容;
- 数据异常:严格原样返回接口报错信息,不篡改错误码、不屏蔽异常提示,便于问题排查。
Skill 完整开发流程
基于Vibe Coding开发同程程心Skill,遵循平台创建-需求录入-问题澄清-结果校验-真机测试-审核上架标准化闭环流程,结合本文档既定的接口规范、认证规则、输出标准完成全流程落地,具体步骤如下:
步骤一:平台创建与需求录入
登录小艺开放平台,进入【Skill】-【Vibe Coding】,完成基础项目初始化与需求录入,具体操作如下:
1. 上传本文档完整的同程程心Skill产品设计规范文档,作为开发核心依据;
2. 录入开发需求,指令示例如下:基于本次上传的MD规范文档,完整开发同程程心Skill,严格遵循文档内所有接口字段、调用规则、认证流程与输出规范,补全所有领域接口的TS实现文件,完成整套Skill全流程开发落地。

0900086000300134184.20201216095126.86523331460016843504112994983392.png
步骤二:开发交互与问题澄清(核心选型)
Vibe Coding会基于开发规范自动生成核心疑问,需结合业务场景与环境现状完成选型确认,明确技术落地标准。

0900086000300134184.20201216095126.86523331460016843504112994983392.png
步骤三:生成结果合规校验
Vibe Coding 自动生成全套Skill代码、TS接口实现文件及配置文件后,需对照本文档规范完成全方位校验,核心校验维度包括:
- 接口规范:核对机票、火车、酒店、景区等七大领域接口的请求参数、API端点、参数组合规则,确保与文档一致;
- 认证逻辑:校验鉴权方式、请求头配置、环境变量读取逻辑符合简化后的认证规范;
- 输出规范:验证卡片渲染、数据返回、预订链接展示、错误处理逻辑完全匹配既定标准;
- 代码规范:确认所有接口均为TS实现,代码结构清晰、参数类型定义完整,无缺失、错配问题。

0900086000300134184.20201216095126.86523331460016843504112994983392.png
步骤四:真机测试
开发成果校验无误后,部署至测试环境,在小艺APP内完成真机测试,覆盖核心能力:
- 各领域常规查询、精准参数查询、个性化偏好透传场景测试;
- 参数缺失、接口无数据、网络异常、凭证异常等边界场景测试;
- 页面渲染、预订链接跳转、数据真实性全量验证,确保线上交互效果符合预期。

0900086000300134184.20201216095126.86523331460016843504112994983392.png
步骤五:审核上架与发布
真机测试全部通过、无功能bug与规范偏差后,一键提交平台上架审核;上架与发布审核通过后完成Skill正式上架技能市场,实现同程程心旅游查询Skill的全流程落地应用。
本文参考鸿蒙官方文档
更多推荐



所有评论(0)