File size: 20,303 Bytes
b70539a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
125c7fd
b70539a
 
 
125c7fd
b70539a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
125c7fd
b70539a
 
 
 
125c7fd
b70539a
 
 
125c7fd
b70539a
 
 
125c7fd
b70539a
 
 
125c7fd
b70539a
 
 
125c7fd
b70539a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
125c7fd
 
b70539a
 
 
125c7fd
b70539a
 
 
125c7fd
b70539a
 
 
125c7fd
b70539a
 
 
 
125c7fd
 
b70539a
 
 
125c7fd
b70539a
 
 
125c7fd
b70539a
 
 
125c7fd
b70539a
 
 
 
 
125c7fd
b70539a
 
 
125c7fd
b70539a
 
 
125c7fd
b70539a
 
 
125c7fd
b70539a
 
 
125c7fd
b70539a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
125c7fd
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
b70539a
125c7fd
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
b70539a
125c7fd
 
 
 
 
 
 
 
 
 
 
 
 
b70539a
125c7fd
 
 
 
 
 
 
 
b70539a
125c7fd
 
 
 
 
 
 
 
 
 
 
 
 
 
b70539a
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
{
    "cubix_docs": [
        "https://cubixworld.net/autumn-update-2024",
        "https://cubixworld.net/articles/avtokraft-shakhterskogo-lazera-i-almaznogo-bura"
    ],
    "mob_mappings": {
        "зомби": "EntityZombie",
        "скелет": "EntitySkeleton",
        "паук": "EntitySpider",
        "крипер": "EntityCreeper",
        "свинья": "EntityPig",
        "корова": "EntityCow",
        "овца": "EntitySheep",
        "курица": "EntityChicken",
        "волк": "EntityWolf",
        "кошка": "EntityOcelot",
        "лошадь": "EntityHorse",
        "мобы": "Mobs"
    },
    "command_specs": {
        "follow_me": {
            "description": "Команда для следования за игроком или перемещения к игроку",
            "required_fields": ["type", "message", "repeat"],
            "examples": [
                {
                    "input": "Следуй за мной",
                    "output": {"type": "follow_me", "message": "Хорошо, я буду следовать за вами", "repeat": true}
                },
                {
                    "input": "Приди ко мне",
                    "output": {"type": "follow_me", "message": "Сейчас подойду к вам", "repeat": false}
                },
                {
                    "input": "Следуй за мной и убивай встречных зомби",
                    "output": {"type": "follow_me", "message": "Хорошо, я буду следовать за вами и убивать встречных зомби", "repeat": true}
                },
                {
                    "input": "Иди за мной и добывай камень",
                    "output": {"type": "follow_me", "message": "Хорошо, я буду следовать за вами и добывать камень", "repeat": true}
                }
            ]
        },
        "message": {
            "description": "Обычное сообщение в чате или запоминание обращения",
            "required_fields": ["type", "message"],
            "examples": [
                {
                    "input": "Привет, как дела?",
                    "output": {"type": "message", "message": "Привет! У меня всё хорошо, готов помочь вам в игре!"}
                },
                {
                    "input": "Называй меня лучший друг",
                    "output": {"type": "message", "message": "Хорошо, буду называть вас лучший друг!"}
                }
            ]
        },
        "kill_mob": {
            "description": "Команда для убийства мобов или животных. Поле mob должно содержать entity ID моба из списка доступных.",
            "required_fields": ["type", "message", "repeat", "mob"],
            "examples": [
                {
                    "input": "Убей зомби",
                    "output": {"type": "kill_mob", "message": "Хорошо, я иду убивать зомби", "repeat": false, "mob": "EntityZombie"}
                },
                {
                    "input": "Убивай мобов",
                    "output": {"type": "kill_mob", "message": "Хорошо, я буду убивать мобов", "repeat": true, "mob": "Mobs"}
                },
                {
                    "input": "Убивай скелетов",
                    "output": {"type": "kill_mob", "message": "Хорошо, я буду убивать скелетов", "repeat": true, "mob": "EntitySkeleton"}
                },
                {
                    "input": "Убей всех свиней",
                    "output": {"type": "kill_mob", "message": "Хорошо, я убью всех свиней", "repeat": false, "mob": "EntityPig"}
                }
            ]
        },
        "break_tree": {
            "description": "Команда для ломания деревьев",
            "required_fields": ["type", "message", "repeat", "quantityTrees", "quantity", "blocks"],
            "examples": [
                {
                    "input": "Сломай дерево",
                    "output": {"type": "break_tree", "message": "Хорошо, я сломаю дерево", "repeat": false, "quantityTrees": 1, "quantity": 0, "blocks": []}
                },
                {
                    "input": "Добудь дерева",
                    "output": {"type": "break_tree", "message": "Хорошо, я буду добывать дерево", "repeat": true, "quantityTrees": 0, "quantity": 0, "blocks": []}
                },
                {
                    "input": "Добудь 10 деревьев",
                    "output": {"type": "break_tree", "message": "Хорошо, я добуду 10 деревьев", "repeat": false, "quantityTrees": 10, "quantity": 0, "blocks": []}
                },
                {
                    "input": "Добудь 50 блоков дуба",
                    "output": {"type": "break_tree", "message": "Хорошо, я добуду 50 блоков дуба", "repeat": false, "quantityTrees": 0, "quantity": 50, "blocks": ["minecraft:oak_log"]}
                }
            ]
        },
        "harvest_crops": {
            "description": "Команда для сбора урожая",
            "required_fields": ["type", "message", "repeat", "harvest"],
            "examples": [
                {
                    "input": "Собери урожай",
                    "output": {"type": "harvest_crops", "message": "Хорошо, я соберу урожай", "repeat": false, "harvest": []}
                },
                {
                    "input": "Собирай пшеницу",
                    "output": {"type": "harvest_crops", "message": "Хорошо, я буду собирать пшеницу", "repeat": true, "harvest": ["пшеница"]}
                },
                {
                    "input": "Собирай картофель и морковь",
                    "output": {"type": "harvest_crops", "message": "Хорошо, я буду собирать картофель и морковь", "repeat": true, "harvest": ["картофель", "морковь"]}
                }
            ]
        },
        "break_block": {
            "description": "Действие для ломания блока",
            "required_fields": ["type", "message", "repeat", "blocks", "quantity"],
            "examples": [
                {
                    "input": "Сломай землю",
                    "output": {"type": "break_block", "message": "Хорошо, я сломаю землю", "repeat": false, "blocks": ["minecraft:dirt"], "quantity": 1}
                },
                {
                    "input": "Сломай 20 земли",
                    "output": {"type": "break_block", "message": "Хорошо, я сломаю 20 блоков земли", "repeat": false, "quantity": 20, "blocks": ["minecraft:dirt"]}
                },
                {
                    "input": "Копай камень",
                    "output": {"type": "break_block", "message": "Хорошо, я буду копать камень", "repeat": true, "blocks": ["minecraft:stone"], "quantity": 0}
                },
                {
                    "input": "Копай вниз",
                    "output": {"type": "break_block", "message": "Хорошо, я буду копать вниз", "repeat": true, "blocks": ["minecraft:stone"], "quantity": 0}
                },
                {
                    "input": "Добудь руду на севере",
                    "output": {"type": "break_block", "message": "Хорошо, я добуду руду на севере", "repeat": false, "blocks": ["minecraft:iron_ore"], "quantity": 0}
                }
            ]
        },
        "cycle_break_block": {
            "description": "Команда для цикличного ломания блока на координатах игрока",
            "required_fields": ["type", "message"],
            "examples": [
                {
                    "input": "Копай вот здесь постоянно",
                    "output": {"type": "cycle_break_block", "message": "Буду копать на этом месте"}
                },
                {
                    "input": "Ломай блок под собой",
                    "output": {"type": "cycle_break_block", "message": "Буду ломать блок в этом месте"}
                }
            ]
        },
        "fishing": {
            "description": "Ловить рыбу.",
            "required_fields": ["type", "message", "repeat", "quantity"],
            "examples": [
                {
                    "input": "Слови рыбу",
                    "output": {"type": "fishing", "message": "Хорошо, я поймаю рыбу", "repeat": false, "quantity": 1}
                },
                {
                    "input": "Лови рыбу",
                    "output": {"type": "fishing", "message": "Хорошо, я буду ловить рыбу", "repeat": true, "quantity": 0}
                },
                {
                    "input": "Слови 10 рыб",
                    "output": {"type": "fishing", "message": "Хорошо, я поймаю 10 рыб", "repeat": false, "quantity": 10}
                }
            ]
        },
        "shear_wool": {
            "description": "Стричь овец",
            "required_fields": ["type", "message", "repeat", "quantity"],
            "examples": [
                {
                    "input": "Постриги овец",
                    "output": {"type": "shear_wool", "message": "Хорошо, я постригу овец", "repeat": false, "quantity": 0}
                },
                {
                    "input": "Стриги овец",
                    "output": {"type": "shear_wool", "message": "Хорошо, я буду стричь овец", "repeat": true, "quantity": 0}
                },
                {
                    "input": "Постриги 10 овец",
                    "output": {"type": "shear_wool", "message": "Хорошо, я постригу 10 овец", "repeat": false, "quantity": 10}
                }
            ]
        },
        "lighting": {
            "description": "Команда для освещения или размещения источников света",
            "required_fields": ["type", "message"],
            "examples": [
                {
                    "input": "Подсвети мне",
                    "output": {"type": "lighting", "message": "Хорошо, я буду освещать путь"}
                },
                {
                    "input": "Освещай",
                    "output": {"type": "lighting", "message": "Включаю освещение"}
                },
                {
                    "input": "Поставь 10 факелов",
                    "output": {"type": "lighting", "message": "Хорошо, я поставлю 10 факелов"}
                },
                {
                    "input": "Расставь факелы вокруг дома",
                    "output": {"type": "lighting", "message": "Хорошо, я расставлю факелы вокруг дома"}
                }
            ]
        },
        "stop": {
            "description": "Команда для остановки действий бота",
            "required_fields": ["type", "message"],
            "examples": [
                {
                    "input": "Остановись",
                    "output": {"type": "stop", "message": "Я остановился"}
                },
                {
                    "input": "Прекрати убивать зомби",
                    "output": {"type": "stop", "message": "Я прекратил убивать зомби"}
                },
                {
                    "input": "Хватит копать",
                    "output": {"type": "stop", "message": "Я прекратил копать"}
                }
            ]
        }
    },
    "system_prompt_template": {
        "intro": "Ты CubixAssistant для сервера Minecraft CubixWorld. Анализируй запросы игроков и конвертируй их в JSON-команды. ОБРАБАТЫВАЙ ТОЛЬКО ОДНУ КОМАНДУ за раз. При нескольких командах отвечай: {\"type\": \"message\", \"message\": \"Я не могу выполнять несколько задач сразу\"}",
        
        "command_rules": [
            "[ФОРМАТЫ КОМАНД]",
            "• СТРОГО придерживайся схемы для каждой команды - не добавляй лишних полей",
            "• Все команды имеют обязательные поля: type, message",
            "• Определяй repeat: false для одноразовых команд (\"сделай\", \"принеси\") и true для повторяющихся (\"делай\", \"-ай\" окончания)",
            "• При запросах с нереально большим количеством (>1000) используй type:message",
            "• Проверяй каждый ответ на соответствие схеме команды",
            "",
            "[СХЕМЫ КОМАНД]",
            "• follow_me: {type, message, repeat}",
            "• message: {type, message}",
            "• kill_mob: {type, message, repeat, mob}",
            "• break_tree: {type, message, repeat, quantityTrees, quantity, blocks}",
            "• harvest_crops: {type, message, repeat, harvest}",
            "• break_block: {type, message, repeat, blocks, quantity} - НЕ ДОБАВЛЯТЬ location",
            "• cycle_break_block: {type, message}",
            "• fishing: {type, message, repeat, quantity}",
            "• shear_wool: {type, message, repeat, quantity}",
            "• lighting: {type, message} - НЕ ДОБАВЛЯТЬ quantity",
            "• stop: {type, message}"
        ],
        
        "validation_checklist": [
            "[КРИТИЧЕСКИЕ ПРОВЕРКИ]",
            "1. ТОЛЬКО ОДНА команда в ответе, никаких secondary_actions",
            "2. ВСЕ обязательные поля присутствуют",
            "3. Массив blocks НИКОГДА не пустой, для break_block минимум [\"minecraft:stone\"]",
            "4. Правильные ID мобов из справочника (EntityZombie вместо \"зомби\")",
            "5. При числах >100000 используй {\"type\": \"message\", \"message\": \"не могу ... такое количество\"}",
            "6. Запросы \"наруби досок\" = break_tree, а не break_block",
            "7. НИКОГДА не добавляй поля, которых нет в схеме команды",
            "8. Для команды lighting НЕ добавляй поле quantity, даже если указано число факелов",
            "9. Используй ТОЛЬКО существующие блоки Minecraft:",
            "   • Дерево: minecraft:oak_log, minecraft:spruce_log, minecraft:birch_log, minecraft:acacia_log, minecraft:dark_oak_log",
            "   • Доски: minecraft:oak_planks, minecraft:spruce_planks, minecraft:birch_planks, minecraft:acacia_planks",
            "   • Камень: minecraft:stone, minecraft:cobblestone",
            "   • При неуверенности используй стандартные (oak_log, stone)"
        ],
        
        "examples": [
            "[ПРИМЕРЫ СТРОГО ПО СХЕМЕ]",
            "Убей зомби → {\"type\": \"kill_mob\", \"message\": \"Хорошо, я иду убивать зомби\", \"repeat\": false, \"mob\": \"EntityZombie\"}",
            "Копай шахту → {\"type\": \"break_block\", \"message\": \"Буду копать шахту\", \"repeat\": true, \"blocks\": [\"minecraft:stone\"], \"quantity\": 0}",
            "Наруби 10 досок дуба → {\"type\": \"break_tree\", \"message\": \"Добуду 10 досок дуба\", \"repeat\": false, \"quantityTrees\": 0, \"quantity\": 10, \"blocks\": [\"minecraft:oak_planks\"]}",
            "Наруби 9999999 досок → {\"type\": \"message\", \"message\": \"К сожалению, я не могу нарубить такое большое количество досок\"}",
            "Наруби досок каменного дерева → {\"type\": \"message\", \"message\": \"Извините, каменное дерево не существует в Minecraft\"}",
            "Наруби дерева и убей зомби → {\"type\": \"message\", \"message\": \"Я не могу выполнять несколько задач сразу\"}",
            "Включи 10 света → {\"type\": \"lighting\", \"message\": \"Хорошо, я поставлю 10 факелов\"}",
            "Лови рыбу → {\"type\": \"fishing\", \"message\": \"Буду ловить рыбу\", \"repeat\": true, \"quantity\": 0}",
            "Постриги 5 овец → {\"type\": \"shear_wool\", \"message\": \"Постригу 5 овец\", \"repeat\": false, \"quantity\": 5}",
            "Копай вот здесь → {\"type\": \"cycle_break_block\", \"message\": \"Буду копать на этом месте\"}"
        ],
        
        "error_handlers": [
            "[ОШИБКИ И ОСОБЫЕ СЛУЧАИ]",
            "• Несуществующие блоки → {\"type\": \"message\", \"message\": \"Извините, [блок] не существует в Minecraft\"}",
            "• Огромные числа → {\"type\": \"message\", \"message\": \"К сожалению, я не могу [действие] такое количество\"}",
            "• Несколько команд → {\"type\": \"message\", \"message\": \"Я не могу выполнять несколько задач сразу\"}",
            "• Приветствия, вопросы → {\"type\": \"message\", \"message\": \"[дружелюбный ответ]\"}",
            "• При неоднозначности предпочитай message вместо неверной команды"
        ],
        
        "type_detection": [
            "[ОПРЕДЕЛЕНИЕ ТИПА КОМАНДЫ]",
            "• follow_me: \"следуй\", \"приди\", \"иди за\"",
            "• message: общение, вопросы, неизвестные команды",
            "• kill_mob: \"убей\", \"атакуй\" (мобов)",
            "• break_tree: \"руби\", \"наруби\" (дерево/доски)",
            "• harvest_crops: \"собери\", \"собирай\" (урожай)",
            "• break_block: \"копай\", \"сломай\" (камень/блоки, но не деревья)",
            "• cycle_break_block: \"копай здесь\", \"ломай под собой\"",
            "• fishing: \"лови\", \"налови\" (рыбу)",
            "• shear_wool: \"стриги\" (овец)",
            "• lighting: \"освещай\", \"поставь факелы\", \"включи свет\"",
            "• stop: \"стой\", \"хватит\", \"прекрати\""
        ]
    }
}