共计 1885 个字符,预计需要花费 5 分钟才能阅读完成。
背景痛点:新手开发者的困惑
作为一个刚接触大模型技能开发的新手,我最初遇到不少困惑。最大的问题就是不清楚一个技能(skill)和普通对话有什么区别。比如,我想让 AI 帮我查天气,但每次都要完整描述需求,AI 才能理解,效率很低。

另一个常见问题是意图识别不准确。有时候用户说 ” 明天会下雨吗 ” 和 ” 明天需要带伞吗 ”,AI 会给出完全不同的回答,但实际上它们应该是同一个意图。
核心概念:什么是大模型 skill
简单来说,大模型 skill 就是赋予 AI 一个特定的能力。与普通 prompt 不同,skill 具有:
- 明确的边界:只处理特定领域的请求
- 结构化的输入输出:有定义的参数和返回格式
- 上下文记忆:能记住对话状态
- 可组合性:多个 skill 可以协同工作
实战:构建天气查询 skill
1. 技能描述定义
我们先定义一个 JSON 格式的技能描述文件:
{
"skill_name": "weather_query",
"description": "查询城市天气情况",
"intents": [
{
"name": "query_weather",
"description": "查询某地天气",
"parameters": {"city": {"type": "string", "required": true},
"date": {"type": "string", "required": false}
}
}
],
"examples": [
"北京今天天气怎么样",
"明天上海会下雨吗"
]
}
2. Python 代码实现
接下来是处理意图和调用天气 API 的代码:
import requests
import json
class WeatherSkill:
def __init__(self):
self.api_key = "YOUR_WEATHER_API_KEY"
def parse_intent(self, user_input):
"""解析用户意图和参数"""
# 这里简化处理,实际应该用 NLU 模型
if "天气" in user_input or "下雨" in user_input:
params = {"intent": "query_weather"}
# 提取城市名 (简化版)
if "北京" in user_input:
params["city"] = "北京"
elif "上海" in user_input:
params["city"] = "上海"
# 提取日期 (简化版)
if "今天" in user_input:
params["date"] = "today"
elif "明天" in user_input:
params["date"] = "tomorrow"
return params
return None
def execute(self, intent):
"""执行天气查询"""
if intent["intent"] == "query_weather":
city = intent.get("city", "北京")
date = intent.get("date", "today")
# 调用天气 API(模拟)
url = f"https://api.weather.com/v1/{city}/{date}?apiKey={self.api_key}"
response = requests.get(url)
return response.json()
return {"error": "未知意图"}
# 使用示例
skill = WeatherSkill()
user_query = "北京明天天气怎么样"
intent = skill.parse_intent(user_query)
if intent:
result = skill.execute(intent)
print(result)
避坑指南
- 上下文丢失问题
- 现象:用户说 ” 北京天气 ”,然后问 ” 那上海呢 ”,AI 不理解
-
解决:维护对话状态,记录最近提到的城市
-
意图识别过度严格
- 现象:必须说 ” 查询天气 ” 才能触发,说 ” 会下雨吗 ” 就不行
-
解决:使用更宽松的关键词匹配或 NLU 模型
-
API 响应慢
- 现象:等待天气 API 返回导致整体响应延迟
- 解决:设置合理超时,使用缓存结果
性能优化技巧
- 减少 LLM 调用
- 先进行简单规则匹配,必要时才调用大模型
-
缓存常见问题的回答
-
并行处理
-
在等待外部 API 时,可以准备其他响应内容
-
精简 prompt
- 只包含必要上下文,减少 token 数量
扩展思考
如何设计一个支持多轮对话的餐厅预订 skill?需要考虑哪些状态和上下文?
从这次实践中我学到,一个好的 AI 技能应该像一位专业的服务员 – 知道自己的职责范围,能准确理解需求,并且记住对话的上下文。虽然刚开始有些挑战,但通过明确技能定义、结构化参数和优化响应流程,我们完全可以构建出实用的 AI 能力模块。
正文完
