Реализация системы автодополнения текста (Text Completion)
Автодополнение текста подсказывает пользователю следующие слова или фразы в процессе ввода. Диапазон применений — от поисковых подсказок до полноценного AI-ассистента в текстовом редакторе.
Типы автодополнения
Следующее слово/токен (predictive typing): предсказание одного-двух следующих слов. Используется в мобильных клавиатурах, поиске. Модели: небольшие n-gram или RNN, latency < 20ms критична.
Завершение фразы (phrase completion): на основе начала предложения предложить несколько вариантов завершения. Пример: поисковые саджесты Google.
Paragraph completion (full AI assist): GitHub Copilot-style — завершение параграфа или блока текста. Требует более мощную модель.
Реализация с LLM
from openai import OpenAI
client = OpenAI()
def autocomplete(text_prefix: str, context: str = "") -> list[str]:
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "system", "content": f"Ты помогаешь писать тексты. Контекст: {context}"},
{"role": "user", "content": f"Продолжи текст тремя разными вариантами:\n{text_prefix}"}
],
max_tokens=50,
n=3, # несколько вариантов
temperature=0.7,
)
return [choice.message.content for choice in response.choices]
Оптимизация latency для real-time
Для живого ввода latency должна быть < 200ms. Стратегии:
Streaming: возвращать токены по мере генерации через SSE (Server-Sent Events). Первый токен появляется через 100–200ms, ощущение быстрого ответа.
Speculative decoding: маленькая модель генерирует черновик, большая проверяет — в 2–3x быстрее при том же качестве.
Кэширование: если пользователь не изменил последние N символов — вернуть кэшированное предложение.
Debouncing: запускать completion только после 300–500ms паузы в вводе.
Контекстная адаптация
Качество автодополнения резко улучшается с контекстом документа. Передавайте в промпт: тему документа, стиль (технический/деловой/разговорный), предыдущие параграфы. Для специализированных редакторов (юридических, медицинских): системный промпт с доменным словарём.







