Головна / Статті / Практичні поради: Понад пошуком за схожістю: фільтрація метаданих для RAG з

Практичні поради: Понад пошуком за схожістю: фільтрація метаданих для RAG з

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

1411 слів

Наведені нижче примітки описують практичний підхід до роботи з темою «Beyond Similarity Search: Metadata Filtering for RAG with Amazon S3 Vectors». Основна увага приділяється контрактам, перевіркам та шаблонам коду, а не мотиваційному опису. Під час етапу огляду спочатку запишіть контракт: необхідні вхідні дані, сигнал про успіх та те, що відбувається у разі часткової невдачі. Цей перелік допоможе зберегти чесність пізніших змін у коді. Розглядайте цей етап як контракт між вхідними даними та перевіреними результатами. Призначте назви елементам, визначте критерії успіху та не допускайте безповідомного часткового виконання.

Звідки береться фільтр?

Етап «Де знаходиться фільтр» працює найкраще, якщо його розглядати як вимірювану поверхню. Збережіть один ідеальний зразок результату, один випадок невдачі та примітку про скасування змін перед розширенням обсягу роботи. Записуйте час виконання та витрати на токени чи запити поруч із функціональними результатами. Візуалізація витрат заздалегідь запобігає несподіваним рахункам під час переходу від демо-середовища до спільних середовищ. Розділяйте політику часткового оброблення даних та політику їх пошуку. Зміна однієї з них не повинна змушувати переписувати іншу при зміні показників якості.

User Question +Known Application Context
      ↓
category = returns
      ↓
Vector Search
User Question
      ↓
Query Embedding
      ↓
Vector Search
      ↓
Relevant Results
User Question
      ↓
Query Understanding
      ↓
returns
      ↓
Vector Search
      ↓
category = returns

Додавання метаданих до векторів

Додавання метаданих на етапі розробки найкраще функціонує, якщо його розглядати як вимірювану поверхню. Збережіть один ідеальний зразок транскрипції, один випадок невдачі та примітку про скасування змін перед розширенням обсягу роботи. Тримайте конфігурацію окремо від коду додатку. Файли середовища, сховища конфіденційних даних та флаги функцій мають знаходитися в одному місці, де оператори можуть їх перевіряти, не читаючи весь код. Розділіть політику часткової обробки даних від політики їх отримання. Зміна однієї з них не повинна змушувати переписувати іншу при зміні показників якості.

{
  "document_name": "Return Policy",
  "category": "returns",
  "region": "us",
  "status": "active",
  "chunk_text": "Damaged products can be returned within the allowed return period."
}

Фільтрація пошуку

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

const result = await s3Vectors.send(
  new QueryVectorsCommand({
    vectorBucketName: "rag-demo-vectors",
    indexName: "store-knowledge",
    queryVector: {
      float32: queryEmbedding,
    },
    topK: 5,
    returnMetadata: true,
    returnDistance: true,
  })
);
const result = await s3Vectors.send(
  new QueryVectorsCommand({
    vectorBucketName: "rag-demo-vectors",
    indexName: "store-knowledge",
    queryVector: {
      float32: queryEmbedding,
    },
    topK: 5,
    filter: {
      category: "returns",
    },
    returnMetadata: true,
    returnDistance: true,
  })
);
(Meaning of the Question + category = returns)
        ↓
Amazon S3 Vectors
        ↓
Relevant Return Information

Фільтрувана та нефільтрувана метадана

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

{
  "category": "returns",
  "region": "us",
  "status": "active"
}
{
  "chunk_text": "Damaged products can be returned within the allowed return period."
}
metadataConfiguration: {
  nonFilterableMetadataKeys: ["chunk_text"],
}

Використання більш ніж однієї умови

Для етапу «Використання більш ніж одного» необхідно визначити вхідні дані, власника кроку та критерії завершення перед зміною коду. Оператори повинні мати можливість перезапустити крок з відомої точки контролю, не намагаючись визначити прихований стан. Конфігурацію слід тримати окремо від коду додатку. Файли середовища, сховища конфіденційних даних та флаги функціоналу мають знаходитися в одному місці, де оператори можуть їх перевіряти, не читаючи весь код. Наводьте уривки тексту, які фактично лягли в основу відповіді. Без посилань оператори не зможуть відрізнити галюцинацію від проблем з індексуванням.

filter: {
  $and: [
    {
      category: {
        $eq: "returns",
      },
    },
    {
      region: {
        $eq: "us",
      },
    },
    {
      status: {
        $eq: "active",
      },
    },
  ],
}
filter: {
  category: {
    $in: ["returns", "warranty"],
  },
}

Якомога раніше думайте про метадані

На етапі «Думайте про метадані заздалегідь» необхідно визначити вхідні дані, власника кроку та критерії завершення перед зміною коду. Оператори повинні мати можливість перезапустити крок з відомої точки контролю, не намагаючись вгадати прихований стан. Необхідно документувати як шлях успішного виконання, так і шлях відновлення. Повторні спроби, людський контроль та обробка некоректних повідомлень є частиною продукту, а не етапом подальшої оптимізації. Наводьте цитати з тексту, які фактично підтримують вашу відповідь. Без цитат оператори не зможуть відрізнити галюцинації від проблем з індексуванням. На етапі «Думайте про метадані заздалегідь» необхідно визначити вхідні дані, власника кроку та критерії завершення перед зміною коду. Оператори повинні мати можливість перезапустити крок з відомої точки контролю, не намагаючись вгадати прихований стан. Розглядайте цей етап як контракт між вхідними даними та перевіреними результатами. Називайте елементи продукту, визначайте критерії успіху та не допускайте безповідомного часткового виконання завдань.

{
  "document_name": "Return Policy",
  "category": "returns",
  "region": "us",
  "status": "active",
  "chunk_text": "..."
}

Схожість та метадані працюють разом

Під час роботи над етапом «Схожість та метадані» спочатку запишіть умови використання: необхідні дані вхіду, сигнал про успіх та наслідки часткової невдачі. Такий перелік допомагає зберігати чесність у подальших змінах коду. Запишіть час виконання та витрати на токени або запити поруч із функціональними результатами. Чітке бачення витрат заздалегідь запобігає несподіваним рахункам, коли процес переходить від демо-версії до спільних середовищ. Перед налаштуванням запитів виміряйте рівень відтворення інформації на фіксованому наборі запитань. Часта зміна формулювань запитів рідко допомагає покращити ефективність пошуку.

User Question
      ↓
(Semantic Similarity + Reliable Metadata Context)
      ↓
Amazon S3 Vectors
      ↓
More Focused Results

Висновок

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

Чек-лист для експлуатації

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

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

Наведіть уривки, які фактично лежать в основі відповіді. Без посилань оператори не зможуть відрізнити галюцинацію від проблем із індексуванням.

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

Розглядайте цей етап як контракт між вхідними даними та перевіреними результатами. Позначте всі елементи, визначте критерії успіху та не погоджуйтесь на мовчазне часткове виконання завдань.

Наведіть уривки, які фактично лежать в основі відповіді. Без посилань оператори не зможуть відрізнити галюцинацію від проблем із індексуванням.

Перш ніж запускати стек у продакшн, заморозьте версії, створіть «золотий» запис для критичного шляху та підтвердьте кроки відкату. У спільних середовищах необхідні обмеження на частоту використання, перевірки прав доступу та чіткий власник для зміни секретів. Віддавайте перевагу надійності перед креативними одноразовими демонстраціями.

Примітка до пакету 5ab755d9f682: не включайте ключі постачальника до репозиторію, встановіть ліміт токенів на сеанс та зберігайте записи поруч із фікстурами для оцінки, щоб подальша заміна моделей залишалася порівнянною.