Галоўная / Артыкулы

Графы ведаў для агентнага AI: чатыры патэрны за межамі вектарнага RAG

Вектарны пошук знаходзіць падобны тэкст, а не звязаныя факты. Чатыры графавыя патэрны для агентаў: абгрунтаваны промптынг, планаванне, праверка выканання і самавыпраўленне.

Выдавец: REACTAPP.TOP9 хв чытання2051 слоў

Крыніцы: From Retrieval to Reasoning: Building Production-Ready Agentic AI Systems with Knowledge Graphs

Большасць команд, які ствараюць сістэмы AI, сталкваліцца з тым самым працоўным прыемлівам. Ствараецца вектарная база дадзэнняў, дакументы дзеляцца на часткі, падключаецца LLM, і рэзультат атрыбутуецца як канвейер RAG. Усё працуе, пакуль корыстнік не запытае пра ўсё, што вымагае з’едынэння трох фактов з разных домэнаў дадзэнняў. У такі момент сістэма або выдумвае адпаведзь, якая звучыць абавяжліва, або вяртае ўсё тэхнічна правільнае, але бесполезнае ў даным кантэксце.

Зазвычай вінаваты не LLM. Вінаваты ўраджэнны слой для пошуку. Пошук за вектарным сэмабільнасцю па суты ўсё роўна ўсё тое ж пошук фрагментаў, якія звучаць падобна, таму ён знаходзіць тэкст, які ёсць сэмантычна блізкім, але працягваецца па факты, якія з’яўляюцца ў прычыно-наследных або адносовых зв’язках. Для агента, які павінен разважаць па кілька крокаў, выконваць дзеянні і запускаць ланцюгаў рашэнняў, гэтыя обмежэнні ўсё больш паглыбляюцца. Адна паследняя адпаведзь ператвараецца на серыю памылак, якія накапліваюцца ўжо на всім шляху рассуждэння.

Аргумент, якій варта прыслаць значэння, — гэта тое, што граф знанняяў — не проста болей сучасны механізм аднаходжэння інфармацыі. Цэта структурная база, якая дазволяе агенту рассуждаваць, а не проста аднаходзіць даныя.

Основная ідэя

Штучны інтэлект у фармаце агента часта спрыяваецца як модна фраза: дадзіце калькі інструментоў навакола LLM і прызнаеце перамогу. Болей дысцыплінованы падход закладае шар знанняяў спецыяльна для багатоэтапных рассуждэнняў, а не для адгукнення на запытанні за адну спробу.

Пераход ад плоскага модэлю аднаходжэння да структураванага графа, у яком аб’екты, адносіні і кантэкст займаюць першасценнае месца. Граф не проста фіксуе, што Продукт X мае дыфект. Ён фіксуе, што Продукт X вырабляецца Поставіцелем Y, адправляецца у Рэгіон Z і падпадае пад дэскрыпцію Фрэймворку W. Агент, які запытае гэты граф, можа праходзіць па гэтых зв’язках і адкрываць інсайты, якія вектарны пошук ніколі не зможаў бы пазначыць.

Нічога з гэтаго не ўзначальнае новасці ў тэорыі баз дадзеных. Сэрьёзнае прымененне гэтых прыемаў да агентных сістэм являецца новым аспектам, і час ўжыцця гэтых падходаў ёсць правільным. Агентныя пайплайны дастаткова выраслі завдзяк крашчаму рашэнню на базе LLM, удосконаленым API для вызову інструментаў і багатым фрэймворкам кантролю, таму што цяпер бутаўкай стае шар знанняў. Нават бездоганная архітэктура агента продукуе некалькісныя рэзультаты, калі базовая рэпрэзентацыя знанняў ёсць плоскай і несувязанай.

Гэты метод дзеліцца на чатыры архітэктурныя патэрны, кожны з якіх нацэлёваны на іншы этап жыццёвага цыклу агента: закрэпленне знанняў, планаванне, выкананне і самакорэкцыя. Разам яны ствараюць план для прыменення ў практычных сістэмах, а не ў тэорычных эксперыментах.

Чаму гэта важна

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

Гэта мае вялікое значэнне ў рэгулююцыхся сектарах. Охорона здароў’я, фінансы і тэхналогіі юрыдычных службаў маюць спадзяванні ў AI, якая можа паказаць, як яна выконвае сваю работу. Сістэма, якая адзвяртае ўвагу на тры вузлы графа і два крокі ў стосунках, якія лежачы за адпаведзю, можа быць перапрацаваная, тады як тая, якая адзвяртае ўвагу толькі на рэзультат косай косынкі, гэтага не можа. Для команд, якія розвіваюць AI пад строгім санкцыйным наглядам, гэта ёсць разлік межа між тым, што можна запусціць, і концэпцыяй, якая ніколі не выходзіць за межы лабараторыі.

Існуе таксама прыклад надзеямасці. Агентныя сістэмы выконваюць некарэктныя дзеянні асабліво, калі адна паследня некорэктная рашынка на пачатку ланцуга парадузіць усе, што следуе за ёю. Граф працуе як структурны захоўнік: агенты можаць пераканацца ў правільнасці проміжных вывадоў па яму перш чым працаваць далей і такім чынам рана выявіць адхыленні. Гэта супамінае пераканальнік фактав, убудованы ў цыкл аргументацыі, а не той, што прыўязаны ў канцы.

Можа, найменаважанейшая перадчыннае прызначэнне — гэта аднавленне ведамаў без паўторнага навучэння. З адмішчаннямі дадзеныях адносна часта значыць перадмішчанне вялікіх частак і, можа, парадузенне існуючага спосабу аднаходжэння інформацыі. З графам вы прыўязуеце вузлы і рэшткі, і аргументацыя агента негаразду яе адбівае. У сферах з быстрым развіццём, такіх як фінансавыя рынкі, медычныя даследжэнні і эвалюючыя програмныя екосістэмы, гэта ёсць справжняе працоўнае прыроста.

Чатыры мадэлі ў практыцы

1. Прыкладкі, апараныя на ведамасцях

Першы выклік закрэпляе пачатковы кантэкст агента ў структураваных фактах, а не ў рэзультатах размытага сэроднечнасці. У змену таму, каб запрашваць абрывкі, якія здаюцца сэроднімі, трэба запытаць граф аб падграфе, які ўзможлівае адпаведнае выконанне намеру карыстальніка, і включыць гэты структураваны кантэкст у запрошэнне.

from neo4j import GraphDatabase
import json

def get_grounded_context(user_query: str, entity_extractor, driver) -> str:
    # Step 1: Extract entities from the user query
    entities = entity_extractor(user_query)  # e.g., ["Product X", "Supplier Y"]

    # Step 2: Pull a relevant subgraph from Neo4j
    with driver.session() as session:
        result = session.run(
            """
            MATCH (e)-[r]-(connected)
            WHERE e.name IN $entities
            RETURN e.name AS entity,
                   type(r) AS relationship,
                   connected.name AS related_entity,
                   connected.attributes AS attributes
            LIMIT 50
            """,
            entities=entities
        )
        subgraph = [record.data() for record in result]

    # Step 3: Format subgraph as structured context
    context_str = json.dumps(subgraph, indent=2)

    grounded_prompt = f"""
    You are a reasoning agent. Use ONLY the following structured knowledge to answer.
    If the answer isn't derivable from this context, say so explicitly.

    KNOWLEDGE GRAPH CONTEXT:
    {context_str}

    USER QUERY: {user_query}
    """
    return grounded_prompt

Паглядзіце, што тут выходзіць. Агент не шукае дакументы, які падобаюцца да запіта. Ён выдлівае конкрэтныя энтытэты, запрашвае іх адносны арэал і вводзіць гэты арэал як структураваны кантэкст. LLM отрымае карту, тады калі раней яно отрымала толькі набор параграфаў, якія былі толькі слабкаяя зв’язаныя.

2. Планаванне пад кераваннем графа

Другі патэрн стосуецца багатоэтапнага планавання. Агенты раздзеляюць складныя цялі на выкональныя крокі, і гэтыя крокі должны базавацца на тым, што на самай працэ ў момент данага стану знанняў ёсць можлівым. Граф робіць планаванне значна менш свабодным.

Пораўняйце планаванне автапарады без карты і з картою. Без яе маршрут ёсць проста правдападобным. З яе маршрут вырахоўваецца з урахоўваннем рэальных дарог, адстаней і обмежэнняў. Граф выполняе ролю карты.

def plan_with_graph(goal: str, graph_schema: dict, llm) -> list[dict]:
    schema_str = json.dumps(graph_schema, indent=2)

    planning_prompt = f"""
    You are a planning agent. Given the goal below, decompose it into steps.
    Each step must reference a valid entity type or relationship from the schema.
    Do not invent steps that require knowledge outside this schema.

    GRAPH SCHEMA:
    {schema_str}

    GOAL: {goal}

    Return a JSON list of steps. Each step must include:
    - "action": what to do
    - "graph_query": the Cypher query to retrieve required context
    - "depends_on": list of prior step indices this step requires
    """

    raw_plan = llm.complete(planning_prompt)
    plan = json.loads(raw_plan)
    return plan

Ключовым элементам ёсць включэнне graph_schema у прыстрой планавання. Агент можа планаваць толькі тые крокі, якія структурна падтрымваецца графам, што значна зменшае колькасць халюцынаваных планаў, адколі ён не можа прызначыць дзеянні, якія залежаць ад стосункаў межаў, якіх няма ў модэлі знанняў.

3. Выкананне з перакананнем графа

Пад час выканання агент дзеяў і генеруе частковыя рэзультаты па ходу. Трэція модэль радзіць пераканваць кожны проміжны рэзультат па графу пры яго прыняцці. Спадзяймося, агент вырашыў, што прадавець Y стаў прычыной дыфекта, знайдзенага ў продукцыі X. Сістэма павінна негайна паўнестаць, чы граф мае стосунак межаў межаў між тым прадавцам і тым продуктом, і пазначыць такое тверджэнне, калі гэтага няма.

def execute_with_validation(step: dict, intermediate_result: str, driver, llm) -> dict:
    # Extract claims from the intermediate result
    claim_extraction_prompt = f"""
    Extract all factual claims from this text as a list of (subject, predicate, object) triples.
    TEXT: {intermediate_result}
    Return as JSON array.
    """
    claims = json.loads(llm.complete(claim_extraction_prompt))

    validation_results = []
    with driver.session() as session:
        for claim in claims:
            result = session.run(
                """
                MATCH (s {name: $subject})-[r]-(o {name: $object})
                WHERE type(r) = $predicate OR $predicate IN r.aliases
                RETURN count(r) AS match_count
                """,
                subject=claim["subject"],
                predicate=claim["predicate"],
                object=claim["object"]
            )
            record = result.single()
            validation_results.append({
                "claim": claim,
                "validated": record["match_count"] > 0
            })

    unvalidated = [v for v in validation_results if not v["validated"]]

    return {
        "result": intermediate_result,
        "validated": len(unvalidated) == 0,
        "flagged_claims": unvalidated
    }

Можна сказаць, што самэўсёлкаванне ў гэтым моменты ўтварае найбольшую частку якосці працы. У цыкле выканання ствараецца непаўзлівы дэтэктар халюцінацый як структурная частка працэсу разумовага аналізу, а не як ўзлётнае рашэння. Непарабяненыя тверджэнні не спрычыняюць зупінкі сістэмы. Яны пазначаюцца, ўжо калі агент можа іх парабяніць або перадаць на перагляд чалавека.

4. Самакорэкцыя праз праходжэнне па графе

Чэтырты ўзор заканчывае цыкл. Калі агент выявляе несупараднасці або атрымлівае негатыўныя адзывы, ён не працуе слепа. Ён праходзіць па графе, шукаючы альтэрнатыўныя шляхі разумовага аналізу, што адзначае агента, які грацыязна справляецца з проблемамі, ад таго, які вечна застрэчаецца на некальканосных даных.

Падзеймім, што агент расследуе прычыну неудачы перагляду саўстанавлення. Пачынаючы з аб’екта, які спрычыніў неудачу, ён працуе па зв’язках на зовні і знаходзіць прычыну — напрыклад, ажыткаванне правіла, якое ўжо не паўязана з адпаведной катэгорыяю продуктам. Гэта прасоў у графе, а не ў LLM, і агент можа яго чытка адзвярнуць: вывад не могаў быць падтверджаны, таму што зв’язак між ажыткаваным правілам і катэгорыяю медычных продуктам не існуе. Гэта практычная памылка, а не галюцынацыя.

Што робіць з гэтым

Не спешыце знімаць базу дадзеных вектараў. Пачніце з запытання: дзе ў данай галіні важліва структура? Спісавайце усіяе ўчастковыя элементы і зв’язкі між імі, пасля чаго рассмотрыце запытанні, на якія павінен адпаведаць агент, і падсчытайце, сколькі з іх вымагае пераходу па зв’язках між кількома фактамі паспялова. Калі большасць складных запытанняў адпавядае гэтаму, то асновная проблема — графічная проблема.

О паводзе з інструментамі Neo4j ёсць найболей усталеная база дадзеных графаў, а яе Python SDK добра інтэгруецца з LangChain і LlamaIndex. Amazon Neptune і Memgraph ўтвараюць хорашыя альтэрнатывы залежна ад таго, дзе вы ўжываеце іх. Для оркестрацыі рассмотрыце LangGraph — яго методы керавання станам прымаюць форму перахода па графе. Стан аргументаціі агента ужо знаходзіцца ў графічной структуры, таму прыўязка званчайнай графічной базы дадзеных выглядае прыродна.

Эфектыўны парадок пачынаецца з першага шаблону, які прасіць аб наяўнасці самых маленькіх змян у сістэме RAG, якаю вы ужо выкарыстоўваеце. Спачатку створыце першую графіку на аднойчынных элементах і зв’язках, якія маюць наібольшое значэнне, а пасля параваньце рэштыцы галюцынацый для прамптав, якія маюць чыстыя даны, з вашым базовым рэштыцам. Як толькі ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо

Гэта ведае да агенты выходзяць за межы простага запошуку і стварэння інфармацыі. Яны падтрымліваюць развіваючыся, структураваны мадэль света, у яком працуюць, і выкарыстоўваюць яе для логічных выводам, планавання і самаактуалізаціі. Тое, што адзіляе ІІ, якая проста ўтварае адпаведзі на запытанні, ад ІІ, якая рашае проблемы, гэта пераважна спосаб прэдставлення знанняў, а графы ўваходзяць у чысло найэфектывнейшых структурных рашэнняў.

Прабуйце гэта на будзь-якай сістэме: якшо агент завтра вынесе неправільную рашынку, чы можна будзе знайсці точную прычыну? Калі гэта немагчыма, працэсы ведуцца без чыткага керавання. Гэтыя чатыры прынцыпы апісваюць агенты, якія адкрываюць своія логічныя выводы, перакантролююць своія вынікі і дапускаюць помылкі, якія можна адлагодзіць, і гэта і форма, якую патрэбуе ІІ высокага ступеня для прыменення ў працэсах вырабніцтва. Команды, якія дасягнуць гэтага першыя, пераможуць тыя, якія яшчэ разглядаюць косайныя коефіцыенты і задаюцца пытанням, чаму ўжо агенты продовжаюць робіць помылкі.

Супаўзеўныя матэрыялы

  • Стварэнне асістэнта на адміністрацыі API: ад хакатона да версіі Beta — асістэнт LangGraph, які адказвае на запытанні пра API, пішае код і выкананае толькі чытальныя запытанні: два рэжымы, самавідлагоджваючыся цыкл OData, памяць артыкулаў, оцэнка за дапамою LLM, можлівасць самастойнага доступу.
  • Git да GCS для Spark: канвей стварэння і аплодавання на Scala SBT, гатовы для вікорыстання агентамі — дэтэрміністычны Python-канвей, які клонуе рэпазітарый на Scala, стварае масіўны JAR-файл на Java 11 за дапамою SBT і аплодвае яго ў GCS; створаны так, каб агент ADK могаў выкананае як інструмент.
  • З адзінакоў да агентаў, які самі сабе паспрабоўваюць паспрабаваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўваць паспрабоўвац