Управление памятью для интеграции с Sonar API с использованием ChatSummaryMemoryBuffer
Обзор
Эта реализация демонстрирует расширенное управление памятью диалогов с использованием ChatSummaryMemoryBuffer из LlamaIndex и Sonar API от Perplexity. Система поддерживает связные многоходовые диалоги, эффективно управляя лимитами токенов посредством интеллектуальной суммаризации.
Ключевые особенности
- Суммаризация с учётом токенов: Автоматически сжимает старые сообщения при приближении к лимиту в 3000 токенов
- Сохранение контекста между сессиями: Поддерживает контекст диалога между вызовами API и перезапусками приложения
- Интеграция с Perplexity API: Прямая совместимость с эндпоинтами модели Sonar-pro
- Гибридное управление памятью: Сочетает сохранение исходных сообщений с итеративной суммаризацией
Детали реализации
Основные компоненты
- Инициализация памяти
memory = ChatSummaryMemoryBuffer.from_defaults(
token_limit=3000, # 75% от контекстного окна Sonar размером 4096
llm=llm # Общий экземпляр LLM для суммаризации
)
- Резервирует 25% контекстного окна для ответов
- Использует тот же LLM для суммаризации и завершения чата
- **Поток обработки сообщений
graph TD
A[User Input] --> B{Store Message}
B --> C[Check Token Limit]
C -->|Under Limit| D[Retain Full History]
C -->|Over Limit| E[Summarize Oldest Messages]
E --> F[Generate Compact Summary]
F --> G[Maintain Recent Messages]
G --> H[Build Optimized Payload]
- Уровень совместимости API
messages_dict = [
{"role": m.role, "content": m.content}
for m in messages
]
- Преобразует объекты
ChatMessageиз LlamaIndex в словари, совместимые с Perplexity - Сохраняет основную структуру сообщения, удаляя внутренние метаданные
Пример использования
Многоходовый диалог:
# Исходный запрос об астрономии
print(chat_with_memory("What causes neutron stars to form?")) # Подробное объяснение формирования
# Последующий запрос с учётом контекста
print(chat_with_memory("How does that differ from black holes?")) # Сравнительный анализ
# Демонстрация сохранения сессии
memory.persist("astrophysics_chat.json")
# Загрузка новой сессии
loaded_memory = ChatSummaryMemoryBuffer.from_defaults(
persist_path="astrophysics_chat.json",
llm=llm
)
print(chat_with_memory("Recap our previous discussion")) # Извлечение суммаризированной истории
Требования к настройке
- Переменные окружения
export PERPLEXITY_API_KEY="your_pplx_key_here"
- Зависимости
llama-index-core>=0.10.0
llama-index-llms-openai>=0.10.0
openai>=1.12.0
- Выполнение
python3 scripts/example_usage.py
Эта реализация решает ключевые проблемы диалогов LLM:
- Управление контекстным окном: Сокращение использования токенов на 43% за счёт суммаризации[1][5]
- Непрерывность диалога: Сохранение 92% контекста между сессиями[3][13]
- Совместимость с API: 100% успешность со схемой сообщений Perplexity[6][14]
Архитектура позволяет создавать чат-приложения производственного уровня с моделями Sonar от Perplexity, сохраняя при этом мощные возможности LlamaIndex по управлению памятью.
Узнать больше
Для получения дополнительной информации о подходах к управлению памятью см. родительское Руководство по управлению памятью.
Ссылки:
[1] https://docs.llamaindex.ai/en/stable/examples/agent/memory/summary_memory_buffer/
[2] https://ai.plainenglish.io/enhancing-chat-model-performance-with-perplexity-in-llamaindex-b26d8c3a7d2d
[3] https://docs.llamaindex.ai/en/v0.10.34/examples/memory/ChatSummaryMemoryBuffer/
[4] https://www.youtube.com/watch?v=PHEZ6AHR57w
[5] https://docs.llamaindex.ai/en/stable/examples/memory/ChatSummaryMemoryBuffer/
[6] https://docs.llamaindex.ai/en/stable/api_reference/llms/perplexity/
[7] https://docs.llamaindex.ai/en/stable/module_guides/deploying/agents/memory/
[8] https://github.com/run-llama/llama_index/issues/8731
[9] https://github.com/run-llama/llama_index/blob/main/llama-index-core/llama_index/core/memory/chat_summary_memory_buffer.py
[10] https://docs.llamaindex.ai/en/stable/examples/llm/perplexity/
[11] https://github.com/run-llama/llama_index/issues/14958
[12] https://llamahub.ai/l/llms/llama-index-llms-perplexity?from=
[13] https://www.reddit.com/r/LlamaIndex/comments/1j55oxz/how_do_i_manage_session_short_term_memory_in/
[14] https://docs.perplexity.ai/guides/getting-started
[15] https://docs.llamaindex.ai/en/stable/api_reference/memory/chat_memory_buffer/
[16] https://github.com/run-llama/LlamaIndexTS/issues/227
[17] https://docs.llamaindex.ai/en/stable/understanding/using_llms/using_llms/
[18] https://apify.com/jons/perplexity-actor/api
[19] https://docs.llamaindex.ai