Галоўная / Артыкулы / Сэрвар агента LangGraph для самастаўлення з Postgres і Redis

Сэрвар агента LangGraph для самастаўлення з Postgres і Redis

Дазвольце даклэ научыцца, як Langhost заменяе шар стойкасці LangGraph на Postgres і Redis, чым дазваляе командам самостоятельна запускать незменены Agent Server пад ліцэнзыяй MIT.

1503 слоў

Зберагачыце LangGraph SDK, Studio і Agent Server такімі, якія ўсё. Перакладзіце стойкі стан у Postgres, а задачы коордынацыі перадайце Redis — усё гэта без патрэбы ў ключы ліцензіі для выканання.

Стварэнне агента LangGraph зазвычай ёсць простаю часткой.

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

Сервер агента павінен стежыць за горшым колікствам дадзэнняў, чым можа простая API з механізамам запит-адказ. Дыялогі выклекваюць патрэбу ў стойкіх потах, якія застаюцца актыўнымі межы сесый. Дзеяння іншы раза зупіняюцца у чаканне на апраўдзенне пашагу чалавекам, а потым продовжуюцца значна пазней. Кліенты чакаюць стрэм дзеяння, а не аднальны адказ. Запланаваныя задачы павінны выконвацца роўна адной раз, нават калі калькі працоўнікаў борацца за ўжытак іх. А якшо працоўнік зламаецца пад час выканання, іншы працоўнік павінен перэяняць задачу без спантажвання стану.

langgraph dev падходзіць для локальнага развіцца, а сама дакументацыя LangChain адносі яе да сервера для развіцца, а не да сервера для прыменнага выкарыстоўвання. Яна зберагае стан у памяці і локальной папке. Адпаведны шлях для прыменнага выкарыстоўвання — LangSmith Deployments, які доступны як у варыянце кераванага сервісу, так і пад ліцэнзыяй для самастойнага хоставання.

Langhost пропануе іншы падход. Ён запускае незменены LangGraph Agent Server на базе Postgres і Redis, выкорыстоўваючы рэйтайм-сервіс для зберагання дадзеных, выданы пад ліцэнсам MIT.

На першы погляд, гэта выглядае як незначны змін. І ён дзяйсна незначны. Самэўсёлкі гэта і робіць яго вартым уваги.

Выбор дизайна, які робіць Langhost цікавым

У замест на пераўтворэнне Agent Protocol чы прымусовае викорыстоўванне аплікацый іншага API, Langhost залишае офіцыяльны пакет Agent Server, langgraph-api, недараганым. Зменяецца толькі шар пад ўсім: пакет langgraph-runtime-pg берае на сябе задачу зберагання дадзеных.

Ось прыбліжна, як усе гэта вярнуецца разам:

LangSmith Studio, SDK clients, Chat UI, MCP, A2A
                         |
                   langhost serve
                         |
              stock langgraph-api
                         |
              langgraph-runtime-pg
                    /          \
              Postgres        Redis

Аплікацыі, які вже існуюць, застаюцца з своімі вызначэннямі графаў і файлам langgraph.json без змян. Кліенты продовжаюць вярбавацца з langgraph-sdk. Студія продовжае падключацца через той самы Agent Server API, які ўжо викорыстоўваўся раней. Langhost намеравацельна утрымваецца ад выканання чаго-небудзь значныя на гэтым рубежы, што ўсё адно яўляецца правільным падходам для інфраструктуры.

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

Што робяць Postgres і Redis

Postgres зберагае все, што неабяжна для працы пасля перзапуску: настройкі асистэнта, історыю задаў, записы адработкі, ваказаныя настройкі задаў, пункты контролю і ўсе даны прыкладнай програмы, якія зберагаюцца ў базе. Міграцыі схемы выкананыя чераз Alembic. Для практычнага выкорыстання рэкамендуецца прадзейсцаваць міграцыі ў перадвыпускным перыодзе і выключыць аўтаматычныя міграцыі пад час запуску сервера.

Redis выкорыстоўваецца толькі для короткачасных задач коордынацыі. Ён павядомляе працоўнікі, калі новая адработка падае ў чергу, распрасяючы запісы падзейнаў сервісам, якія з’яўляюцца ў сетцы, і стежыць за станам працоўнікаў.

Гэты падзел становіцца важлівым, калі вы расширяеце систему да калькольвых реплікаў. Калі працоўнік хоча пачаць выкананне запланаванага задання, ён захопляе рэкорд у Postgres за дапамой SKIP LOCKED, што не дазволяе іншым працоўнікам адразу захопіць тое ж заданне. Сігналы жыцця ад Redis паўтараюць, што працоўнік яшчэ працуе; якщо сігнал занякае, черга можа перадаць тое заданне іншаму працоўніку. Набор тэстаў проекту пакрывае эксклюзыўнасць захоплення рэкорда, вярненне після зупінкі працоўніка, адночасныя задання, працэс стрімування, анулюванне і апдэйты статуса, якія выконваюцца пад час ўжо трываючага выканання задання.

Гэта самэ тое, чым прыкрываюцца багато кансалтатаў на тэму „як развіваць ваш агента“. Запуск сервера ASGI — гэта простая справа. Але справжняі інжынерны вызначальнік — гэта перакананне, што власнасць у черзі і процес вярнення після збою працуюць правільна пад адночасным навантажэнням.

Перыявленне існуючага проекта

Якщо у вас уже ёсць проект Python LangGraph з файлам langgraph.json, налаштаванне Langhost абсалютна проста задача.

Зінсталюйце яго:

uv add langhost

Потым налаштавце яго на вашы экземпляры Postgres і Redis:

DATABASE_URI=postgresql+asyncpg://postgres:postgres@localhost:5432/langgraph?sslmode=disable
REDIS_URI=redis://localhost:6379/0

І запусціце сервер:

uv run langhost serve --reload

Для працы ў прыметнай средзе неабходна ясна налаштавка падключэння да сетевага інтерфейсу і заданне фіксаванага колькасці працоўнікаў:

uv run langhost serve --host 0.0.0.0 --workers 4

Па значэнню прызначэння яго слухае на порту 31296. Калі ён запускаецца, апісваецца інфармацыя з лінкамі да самага API, яго дакументацыі, LangSmith Studio і інтэрфейсу Agent Chat. Яшчэ існуючы код кліента працуе без змян, продалежачы ад стандартнага SDK:

import asyncio
from langgraph_sdk import get_client
client = get_client(url="http://127.0.0.1:31296")async def main():
    async for chunk in client.runs.stream(
        None,
        "agent",
        input={
            "messages": [
                {"role": "human", "content": "What is LangGraph?"}
            ]
        },
    ):
        print(chunk.event, chunk.data)asyncio.run(main())

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

Тэрміны ліцензыяў трэба адказна прачытаць

Кліентскі інструментарый langhost і langgraph-runtime-pg распространяюцца пад ліцензыяй MIT. Аднак стандартны пакет langgraph-api яшчэ залишаецца пад ліцензыяй Elastic License 2.0. Фактычна Langhost заменяе прыкладны слой на базе Postgres і Redis; гэта не вплывае на тэрміны ліцензыяў самага офіцыйскага пакета сервера.

Гэты нюанс часта застаецца незразумелым, калі люди называюць усю структуру "відкрытым кодам". Слой для зберагання дадзэных, які працюе пад кераваннем Langhost і які можна зменіць, дэйсна падпадае пад ліцензыю MIT. Але серверны компонент, які знаходзится вышэй, застаецца доступным пад ліцензыяй Elastic 2.0, і вы яшчэ прыкреплены да тых тэрмінаў.

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

Што вы беразеце на сябе, самостояльна хостуючы

Langhost скасоўвае обмежэння, зв’язаныя з ліцензіямі та рантаймам. Але ён не скасоўвае операцыйны тырск.

Вы несете адміністратыўную адпаведнасць за планаванне ўместка Postgres, стварэння резервных копій, трэніравання ў разы вялікіх збоў, адмежаванне колькасці запрашэнняў і міграцыю схем. Вы таксама адпаведнае за стабільную роботу Redis і правілы вывалення памяці. Крэм таго, вам патрабуецца можлівасць стежыць за ситуацыяй – показнікі і логі, якія паказваюць, чы робочыя процесы ствараюць резервныя копіі, чы яны застаўляюцься, або чы данні таямна згубляюцца. А перш чым адкрываць API для выходу за межы доверлёвай сеті, неабходна яго належным чынам захаваць.

Памятаце, што гэты проект яшчэ на ранній стадыі. чырвоны вылік на PyPI — это 0.11.1.post1, пазначаны як версія beta. Яна фіксуе конкрэтную версію langgraph-api, што забезпечвае стабільную сумеснасць для гэтага выліку, але таксама значыць, што проект павінен постоянна стежыць за змянамі ў выхадным коде, каб застацца савременным. Набор тэстаў рэпазітарыя запускае як сасвойскія тэсты, так і тэсты інтеграцыі Python SDK проты рэальнага сервера Agent, што ўтаманавае — але гэта не заменяе пераканальвання вашых сопных графаў, патэранаў трафіку, сцэнарыяў абыектаў і процедураў апдэйту.

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

Практычны спосаб его ацэнкі

У замест на тое, каб пачаць зі спісу функцый, взяце копію прыёмнай среды аплікацыі LangGraph, якая вас вже працюе, і настроўце яе на Langhost.

Воспользуйцеся тым самым langgraph.json, тым самым кліентам SDK і тым самым процесам работы ў Studio, на якія вы пакладаецеся сёння. Створыце стойкі поток. Адправляйце данні па стрыму для довгачаснай експансіі. Перарвыце ўсё цэў падчас выканання і запускайце зноў пазней. Запускайце больш адзінаго процеса-рабочага. Заканчыце роботу рабочага процеса падчас выканання задачі і пераканайцеся, што выкананне все ж такі завершыцца правільна. Потым зробіце резервную копію ў Postgres, восстановіце яе ў аднародным сераўеры і пераканайцеся, што історыя потока застаецца недапісанай.

Якщо ваша наладка прыняжна ўсім гэтым пераказам, вы вярнуліся на пытанне, якое на самай справе мае значэння – чы можа Langhost спакойна інтегрувацца ў вашу інфраструктуру, не стаўшы прычыной проблем.

Код выканання, інструкцыі з наладкі і система для стежэння за проблемамі доступныя ў langhost/langhost на GitHub.

Спаднія матэрыялы