Пошук у кеші

Вузол, який шукає збережену відповідь на такий самий запит і, якщо знаходить, дає флоу відповісти без виклику моделі.

3 хв читання

Пошук у кеші питає кеш, чи вже була відповідь на такий самий запит. При влучанні флоу відповідає збереженою відповіддю й ні за що не платить; при промаху він викликає модель, і Запис у кеш зберігає нову відповідь.

Вузол
Пошук у кеші
Тип
cache_lookup
Категорія
Кеш
Порти
  • Влучання hit підключення обовʼязкове
  • Промах miss підключення обовʼязкове
Завершує шлях
Ні

Що робить вузол

Вузол складає із запиту ключ і шукає його.

  • Влучання виходить через Влучання зі збереженою відповіддю як виходом вузла. Нічого не утримується й нічого не витрачається: модель заради нього не викликається, і кредити клієнта не списуються.

  • Промах виходить через Промах і залишає свій ключ для вузла Запис у кеш нижче, який зберігає під ним відповідь моделі.

Коли відповідь виконання — та, що повернуло влучання, виконання несе cache.hit, що дорівнює true, і cached_at — момент, коли відповідь було збережено. Вкладка Метрики вузла показує, скільки заощадили його влучання, як Заощаджено, за оцінкою — за оцінкою, за яку було оплачено збережену відповідь.

Коли використовувати

Ставте його перед AI-модель у флоу, запити якого повторюються слово в слово: те саме питання, той самий документ для переказу.

  • Ключ — точний збіг. Промпт, який відрізняється одним пробілом, — інший промпт.

  • Контексту виклику в ключі немає. Два клієнти, які надіслали однаковий вхід, ділять одну відповідь, і з другого нічого не списується.

Налаштування

НалаштуванняДля чого воно
scopeХто ділить відповідь — operation, запити операції на опублікованій версії, яка її зберегла, або project, усі запити проєкту. Вузол без scope бере operation.
key_fieldsШляхи всередині входу, з яких складається ключ, записані без input на початку — messages, а не input.messages. Порожній список робить ключем увесь вхід.

У конструкторі налаштування — Спільний доступ у межах і Поля ключа.

Спільний доступ у межахХто ділить відповідь
Ця операціяЗапити операції на опублікованій версії, яка її зберегла. Нова версія починає з порожнім кешем; відкат знаходить те, що зберегла та версія, поки воно зберігається
Весь проєктКожен запит проєкту з тим самим ключем, хоч би якими були його операція та версія

Поля ключа — шляхи входу, з яких складається ключ, записані без input. на початку: messages, а не input.messages. Без них ключем є весь вхід. Поле ключа, якого в запиті немає, вважається null: ключ такого запиту складається лише з інших його полів ключа.

Порти

Вузол має два порти, Влучання і Промах, і обидва обов’язкові. Флоу, в якому будь-який із них нікуди не веде, не публікується.

Вихід

При влучанні вихід — відповідь, яку модель дала, коли її зберігали, — вихід вузла AI-модель з usage того виклику. При промаху вузол нічого не залишає. Повернути відповідь із джерелом Останній вивід моделі відповідає збереженою відповіддю, коли влучання — остання відповідь на шляху.

Помилки

Помилок вузол не кидає: коли кеш не може відповісти, вузол виходить через Промах, а подія warning у трасуванні каже чому. Ось попередження, які пише вузол:

JSON
[
  { "type": "warning", "node_key": "lookup", "payload": { "code": "cache_unavailable" } },
  { "type": "warning", "node_key": "lookup", "payload": { "code": "cache_key_unresolved" } },
  { "type": "warning", "node_key": "lookup", "payload": { "code": "cache_key_partial" } }
]
КодЩо сталося
cache_unavailableСховище кешу недоступне. Ключ однаково залишається для Запис у кеш
cache_key_unresolvedЖодного поля ключа немає у вході, тому ключ нічого не каже про запит. Кеш не питають, і під таким ключем нічого не зберігається
cache_key_partialДеяких полів ключа немає у вході. Ключ використовується без них

Налаштування перевіряються під час перевірки флоу та під час його публікації. Спершу відхиляється область, відмінна від двох вище:

В API запис issues називає таку перевірку в params.detail; його code — invalid_node_config.

ПеревіркаПовідомлення в конструкторі
cache_unsupported_scope«{node}» використовує неіснуючу область кешу.

Потім перевіряються поля ключа:

В API запис issues називає таку перевірку в params.detail; його code — invalid_node_config.

ПеревіркаПовідомлення в конструкторі
cache_key_fields_not_listПоля ключа «{node}» мають бути списком шляхів у вхідних даних.
cache_key_fields_empty_entryОдне з полів ключа «{node}» порожнє.
cache_key_fields_rooted_path«{node}» будує ключ кешу за «{path}», але поля ключа читаються лише всередині вхідних даних: шлях там не починається з «{root}».
cache_key_fields_padded_path«{node}» будує ключ кешу за «{path}», а шлях має пробіли по краях: поля ключа читаються саме так, як написані.

Приклад

  • Запит — Типовий → Пошук у кеші
  • Пошук у кеші — Влучання → Повернути відповідь
  • Пошук у кеші — Промах → AI-модель
  • AI-модель — Успіх → Запис у кеш
  • Запис у кеш — Типовий → Повернути відповідь

Промах викликає модель, і Запис у кеш зберігає її відповідь. Влучання йде просто в Повернути відповідь, який відповідає збереженою відповіддю.

Зібрано з openapi b070e1f, sdk contract 5cc7055, php ae4a53b, node 84bc62d