You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
-[`ctx.replyWithHtmlStream`](/ref/stream/streamcontextextension#replywithhtmlstream): потокова передача HTML
20
+
21
+
Потокова передача звичайного тексту (перший варіант) надсилає звичайні текстові повідомлення.
22
+
Інші два методи використовують [розширені повідомлення](https://core.telegram.org/bots/api#rich-messages) Telegram і рекомендуються для більшості випадків.
16
23
17
24
> Потокова передача повідомлень дуже швидко виконує дуже багато запитів до API.
18
25
> Настійно рекомендується використовувати [плагін `auto-retry`](./auto-retry) разом із плагіном `stream`.
@@ -137,7 +144,7 @@ bot.chatType("private")
137
144
});
138
145
139
146
// Автоматично передаємо відповідь потоково за допомогою grammY:
140
-
awaitctx.replyWithStream(textStream);
147
+
awaitctx.replyWithMarkdownStream(textStream);
141
148
});
142
149
```
143
150
@@ -154,47 +161,14 @@ bot.chatType("private")
154
161
});
155
162
156
163
// Автоматично передаємо відповідь потоково за допомогою grammY:
157
-
awaitctx.replyWithStream(textStream);
164
+
awaitctx.replyWithMarkdownStream(textStream);
158
165
});
159
166
```
160
167
161
168
:::
162
169
163
170
Не забудьте замінити `gemini-2.5-flash` на найновішу модель.
164
171
165
-
## Потокова передача стилізованих повідомлень
166
-
167
-
Це _значно_ складніше, ніж здається.
168
-
169
-
1. LLM генерують _імовірнісний_ Markdown.
170
-
Він часто правильний, але не завжди.
171
-
Він не дотримується жодного конкретного стандарту.
172
-
Зокрема, **LLM не завжди генерують Markdown, сумісний із Telegram**.
173
-
Це означає, що спроба надіслати або передати його потоково до Telegram не вдасться.
174
-
2. LLM генерують _часткові_ сутності Markdown.
175
-
Навіть якщо результат ідеально відповідає специфікації [MarkdownV2](https://core.telegram.org/bots/api#markdownv2-style) від Telegram, **окремі вихідні фрагменти можуть бути неправильними**.
176
-
Якщо ви почнете курсивний текст, але завершите його лише в наступному фрагменті, потокова передача обірветься і жодне повідомлення не буде надіслане.
177
-
3. LLM іноді генерують форматування, яке не підтримується Telegram (навіть якщо ви інструктуєте їх не робити цього).
178
-
Наприклад, більшість LLM _обожнюють_**таблиці, марковані та нумеровані списки**.
179
-
Клієнти Telegram не можуть відображати ці елементи.
180
-
181
-
> Telegram також приймає [HTML-форматування](https://core.telegram.org/bots/api#html-style).
182
-
> Воно має точно такі самі проблеми, як і Markdown.
183
-
> Крім того, HTML споживає значно більше токенів, що є зайвою витратою.
184
-
185
-
Тож... що тепер?
186
-
187
-
На жаль, гарного рішення немає.
188
-
Проте ось кілька ідей:
189
-
190
-
- Попросіть вашу LLM виводити текст без форматування.
191
-
- Сподівайтеся, що ваша LLM не помилиться у генеруванні Markdown, і просто повторіть запит зі звичайним текстом, якщо це не вдасться.
192
-
- Використовуйте HTML-форматування і сподівайтеся, що це трохи покращить ситуацію.
193
-
- Напишіть власний [перетворювач](../advanced/transformers), який автоматично повторюватиме невдалі запити.
194
-
- Використовуйте потоковий парсер Markdown і створюйте власні масиви [`MessageEntity`](https://core.telegram.org/bots/api#messageentity) для форматування кожного [`MessageDraftPiece`](/ref/stream/messagedraftpiece).
195
-
- Передавайте Markdown у вигляді звичайного тексту, а потім застосовуйте форматування за допомогою звичайного парсера Markdown лише після завершення потокової передачі та надсилання всіх повідомлень.
196
-
- Придумайте геніальне рішення, про яке ніхто ще не здогадався, і розкажіть нам про нього у [груповому чаті](https://t.me/grammyjs).
0 commit comments