fix: 修复AI在查询设备时误调用控制工具的问题
- iot_control: 工具描述添加明确约束,仅在用户明确要求控制时调用 - iot_query: 提示LLM设备状态已注入系统提示词,减少不必要查询 - context builder: 设备状态标题提示LLM无需调用工具查询
This commit is contained in:
@@ -187,7 +187,7 @@ func InjectDeviceContext(devices []DeviceInfo) string {
|
||||
}
|
||||
|
||||
var sb strings.Builder
|
||||
sb.WriteString("[当前IoT设备状态]\n")
|
||||
sb.WriteString("[当前IoT设备状态 — 你已知晓这些设备的状态,无需调用工具查询,直接引用即可]\n")
|
||||
for _, d := range devices {
|
||||
switch d.Type {
|
||||
case "light":
|
||||
|
||||
@@ -20,7 +20,11 @@ func NewIoTControlTool(iotClient *IoTClient) *IoTControlTool {
|
||||
func (t *IoTControlTool) Definition() ToolDefinition {
|
||||
return ToolDefinition{
|
||||
Name: "iot_control",
|
||||
Description: "控制家中智能设备。可以开关灯光、空调、窗帘、门锁等设备,也可以调节温度、亮度、位置、模式、颜色等属性。" +
|
||||
Description: "【仅当开拓者明确要求控制设备时才使用此工具】控制家中智能设备。可以开关灯光、空调、窗帘、门锁等设备,也可以调节温度、亮度、位置、模式、颜色等属性。" +
|
||||
"\n⚠️ 重要约束:" +
|
||||
"\n - 不要在开拓者只是询问设备状态时调用此工具(查询设备请用 iot_query)" +
|
||||
"\n - 不要自行决定执行操作,必须等开拓者明确说出「打开」「关闭」「调到」「设置」等控制指令" +
|
||||
"\n - 不要因为之前对话中提到过某个设备就主动控制它" +
|
||||
"\n支持的操作:toggle(切换开关状态)、turn_on(打开设备)、turn_off(关闭设备)、" +
|
||||
"set_temperature(设置空调温度,需要 value 参数,单位°C)、" +
|
||||
"set_brightness(设置灯光亮度,需要 value 参数,0-100)、" +
|
||||
|
||||
@@ -20,7 +20,7 @@ func NewIoTQueryTool(iotClient *IoTClient) *IoTQueryTool {
|
||||
func (t *IoTQueryTool) Definition() ToolDefinition {
|
||||
return ToolDefinition{
|
||||
Name: "iot_query",
|
||||
Description: "查询家中智能设备状态。可以查看所有设备或指定设备的状态,包括灯光、空调、窗帘、传感器、门锁等。用于了解家中设备当前的状态。",
|
||||
Description: "查询家中智能设备状态。注意:当前设备状态通常已自动注入到系统提示词中,你通常不需要调用此工具即可回答设备状态问题。只有在设备状态信息陈旧或明显不完整时才调用此工具刷新。",
|
||||
Parameters: map[string]interface{}{
|
||||
"type": "object",
|
||||
"properties": map[string]interface{}{
|
||||
|
||||
Reference in New Issue
Block a user