自然语言转JSON参数技能
这个技能帮助用户将自然语言描述转换成结构化的JSON参数。
核心功能
- 模板优先:首先读取
templates/default.json模板,严格按照模板字段输出 - 关键信息提取:自动从自然语言中提取所有关键信息,填充到模板对应的字段
- 时间格式转换:所有时间参数统一转换为
YYYY-mm-dd H:i:s格式 - 上下文继承:记住上一次转换的参数,当用户后续输入只有部分信息时,继承上一次的其他参数
上下文继承规则
当用户连续进行多次转换时,检查对话历史:
- 如果当前输入是完整查询(包含所有必要信息),按当前输入处理
- 如果当前输入是部分查询(只修改了时间、数量等个别参数),则:
- 继承上一次转换的
other对象中的所有参数 - 只用当前输入中的新信息覆盖对应的参数
- 保持其他参数不变
- 继承上一次转换的
上下文继承示例
第一次输入: "转成json,小米汽车头条数据top10最近一周"
第二次输入(部分查询): "最近三天呢"
处理逻辑: 继承第一次的所有参数,只修改时间范围:
- 继承:source=头条, subject=小米汽车, data_type=数据, limit=top10
- 更新:start_time 和 end_time 改为最近三天
使用模板
第一步:读取模板
在开始处理前,必须先读取 templates/default.json 文件,了解需要输出的字段结构。
第二步:按模板字段提取信息
根据模板中定义的每个字段,从用户的自然语言输入中提取对应的信息:
- 对于模板中的
string类型字段,提取对应的文本内容 - 对于模板中的
object类型字段({}),提取相关信息作为嵌套对象 - 对于模板中的
array类型字段([]),提取相关信息作为数组
第三步:填充默认值
对于模板中定义但用户输入中没有提到的字段:
- 字符串类型字段:填空字符串
"" - 对象类型字段:填空对象
{} - 数组类型字段:填空数组
[] - 不要省略模板中定义的任何字段
时间格式转换规则
所有时间参数必须转换为 YYYY-mm-dd H:i:s 格式:
相对时间转换示例
| 自然语言描述 | 转换结果 (当前日期: 2026-03-04) |
|---|---|
| 今天 | 2026-03-04 00:00:00 |
| 昨天 | 2026-03-03 00:00:00 |
| 最近1天 | start_time: 2026-03-03 00:00:00, end_time: 2026-03-04 23:59:59 |
| 最近7天 | start_time: 2026-02-25 00:00:00, end_time: 2026-03-04 23:59:59 |
| 本周 | start_time: 2026-03-02 00:00:00, end_time: 2026-03-08 23:59:59 |
| 上周 | start_time: 2026-02-23 00:00:00, end_time: 2026-03-01 23:59:59 |
| 本月 | start_time: 2026-03-01 00:00:00, end_time: 2026-03-31 23:59:59 |
| 上个月 | start_time: 2026-02-01 00:00:00, end_time: 2026-02-28 23:59:59 |
具体时间转换示例
| 自然语言描述 | 转换结果 |
|---|---|
| 2026年3月5日 | 2026-03-05 00:00:00 |
| 2026-3-5 14:30 | 2026-03-05 14:30:00 |
| 3月5日下午3点 | 2026-03-05 15:00:00 |
| 明天上午9点 | 2026-03-05 09:00:00 |
工作流程
- 读取模板:首先读取
templates/default.json文件,确认需要输出的字段 - 检查上下文:查看对话历史,判断是否有上一次的转换结果
- 判断查询类型:
- 如果是完整查询(包含source、subject、data_type等主要信息),按新查询处理
- 如果是部分查询(只修改时间、数量等个别参数),继承上一次的参数
- 接收输入:接收用户输入的自然语言
- 提取信息:
- 完整查询:从当前输入中提取所有信息
- 部分查询:从上一次结果中继承参数,用新信息覆盖对应字段
- 格式转换:将所有时间参数转换为
YYYY-mm-dd H:i:s格式 - 填充字段:按照模板结构填充所有字段,缺失的字段用默认值填充
- 输出JSON:直接输出生成的JSON,严格保持模板的字段结构
使用方式
触发短语示例
用户可以用以下任何方式触发此技能:
直接转换类:
- "帮我把这段话转成JSON:..."
- "帮我转换JSON,..."
- "识别成JSON:..."
- "转成JSON:..."
- "转换成JSON:..."
- "用JSON表示:..."
- "提取成JSON:..."
- "解析成JSON:..."
- "把这句话变成JSON:..."
- "帮我做JSON转换:..."
查询数据类:
- "查询数据转JSON:..."
- "获取数据转成JSON:..."
- "舆情数据转JSON:..."
- "新闻转JSON:..."
- "搜索结果转JSON:..."
格式输出类:
- "用JSON格式输出:..."
- "按JSON格式整理:..."
- "输出成JSON:..."
- "返回JSON格式:..."
使用场景示例
舆情监控场景:
- "查询人民网最近1天关于小米汽车的负面舆情数据"
- "获取微博上本周关于张三的新闻"
- "看看抖音上最近7天关于AI的热门话题"
数据查询场景:
- "查找本月关于新能源汽车的报道"
- "搜索最近3天的科技新闻"
- "获取头条的舆情数据top10"
简单查询场景:
- "获取舆情数据"
- "查询新闻"
- "查找相关信息"
输出格式
假设 templates/default.json 模板为:
{
"input": "string",
"question_name": "string",
"other": {}
}
则输出格式如下(严格按照模板字段):
{
"input": "帮我转换JSON,查询人民网最近1天关于小米汽车的负面舆情数据",
"question_name": "查询人民网最近1天关于小米汽车的负面舆情数据",
"other": {
"source": "人民网",
"start_time": "2026-03-03 00:00:00",
"end_time": "2026-03-04 23:59:59",
"subject": "小米汽车",
"sentiment": "负面",
"data_type": "舆情数据"
}
}
上下文继承示例
示例一:修改时间范围
第一次输入(完整查询):
转成json,小米汽车头条数据top10最近一周
第一次输出:
{
"input": "转成json,小米汽车头条数据top10最近一周",
"question_name": "小米汽车头条数据top10最近一周",
"other": {
"source": "头条",
"subject": "小米汽车",
"data_type": "数据",
"limit": "top10",
"start_time": "2026-02-25 00:00:00",
"end_time": "2026-03-04 23:59:59"
}
}
第二次输入(部分查询,只修改时间):
最近三天呢
第二次输出(继承其他参数,只修改时间):
{
"input": "最近三天呢",
"question_name": "小米汽车头条数据top10最近三天",
"other": {
"source": "头条",
"subject": "小米汽车",
"data_type": "数据",
"limit": "top10",
"start_time": "2026-03-02 00:00:00",
"end_time": "2026-03-04 23:59:59"
}
}
示例二:修改数量限制
第一次输入:
查询小米汽车微博热点数据top10最近一周
第二次输入(只修改数量):
top20
第二次输出(继承其他参数,只修改limit):
{
"input": "top20",
"question_name": "小米汽车微博热点数据top20最近一周",
"other": {
"source": "微博",
"subject": "小米汽车",
"data_type": "热点数据",
"limit": "top20",
"start_time": "2026-02-25 00:00:00",
"end_time": "2026-03-04 23:59:59"
}
}
示例三:修改来源
第一次输入:
查询小米汽车微博热点数据top10最近一周
第二次输入(只修改来源):
换成抖音
第二次输出(继承其他参数,只修改source):
{
"input": "换成抖音",
"question_name": "小米汽车抖音热点数据top10最近一周",
"other": {
"source": "抖音",
"subject": "小米汽车",
"data_type": "热点数据",
"limit": "top10",
"start_time": "2026-02-25 00:00:00",
"end_time": "2026-03-04 23:59:59"
}
}
部分查询识别规则
以下输入被识别为部分查询,触发上下文继承:
- 只包含时间:"最近三天呢"、"改成昨天"、"本周"
- 只包含数量:"top20"、"改成前5"、"100条"
- 只包含来源:"换成微博"、"改人民网"、"头条"
- 只包含主题:"换成比亚迪"、"改AI"、"特斯拉"
- 只包含数据类型:"改成新闻"、"舆情"、"热点"
如果输入包含两个或多个以上新参数,或输入是一个全新的完整查询,则按新查询处理,不继承上下文。
重要提示
- 最重要:首先读取
templates/default.json模板,严格按照模板中定义的字段输出 - 上下文继承:检查对话历史,如果用户输入是部分查询,继承上一次的参数
- 不要省略模板中定义的任何字段,即使没有值也要保留
- 所有时间参数必须转换为
YYYY-mm-dd H:i:s格式 - 当前日期以系统提示的 currentDate 为准
- 相对时间"最近N天"包含今天,往前推N天
- 时间范围如果只说了开始或结束,另一端用合理默认值填充
- 提取所有能识别的关键信息,填充到对应的模板字段
- 部分查询时,
question_name字段需要更新为完整的查询描述 - 保持JSON格式的正确性,确保可以直接解析
- 输出时只包含JSON,不需要额外的说明文字