НачатьНачать бесплатно

Разрешение сущностей на основе графа

Вот незадача! Даже при тщательно выверенном промпте, примерах few-shot и всех принятых мерах предосторожности языковая модель всё равно «придумала» персонажа по имени Romeo Capulet и добавила ему несколько реплик в базе данных.

{
  "id": "romeo-capulet",
  "name": "Romeo Capulet",
  "family": "Montague"
}

К счастью, вы можете использовать связи в графе знаний, чтобы определить, не является ли этот узел случайным дубликатом узла Romeo Montague.

Cypher-запрос similarity_cypher использует связи MEMBER_OF и INTERACTS_WITH для построения произвольной оценки схожести со следующими свойствами:

Условие Cypher Модификатор баллов
Связь MEMBER_OF с одним и тем же семейством af = bf +1
Одинаковое значение свойства name a.name = b.name +2
Доля общих персонажей, с которыми взаимодействуют a и b size(inCommon) / size(aInteractsWith) Умножается на долю персонажей b, с которыми взаимодействует a

Исходя из предметных знаний, оценка 2 свидетельствует о высокой степени совпадения.

Это упражнение является частью курса

Graph RAG с LangChain и Neo4j

Посмотреть курс

Инструкции к упражнению

  • Выполните запрос к graph с помощью Cypher-запроса (similarity_cypher), чтобы рассчитать оценки схожести между "romeo-capulet" и остальными узлами персонажей.
  • Извлеките "bId", "bFamily" и "score" — именно в таком порядке — из каждой строки row в results.

Интерактивное практическое упражнение

Попробуйте выполнить это упражнение, дополнив этот пример кода.

# Query the graph with similarity_cypher
result = ____

# Extract and print the results
for row in result:
    print(row['____'], 'from', row['____'], 'has similarity score of ', row['____'])
Редактировать и запускать код