Сообщество / ИИ

Обсуждение — VPS для LangChain-приложений: от скрипта до сервиса

Источник:
VPS для LangChain: разворачиваем LLM-приложение

LangChain — самый популярный каркас для сборки приложений на языковых моделях: чат-боты, RAG, агенты, обработчики документов. Развернём типовое LangChain-приложение на VPS и превратим его в живой сервис. LangChain склеивает LLM, векторные базы, инструменты и память в единые цепочки. В проде такому приложению нужен постоянно работающий бэкенд с фоновой индексацией, вебхуками и очередями — а это как раз задача для VPS с root-доступом.

Подробнее →
gleb_tomsk
Junior
Сообщения: 20
Репутация: 4
Дата регистрации:
21.08.2026
АВТОР ТЕМЫ01 сент. 2026 г., 16:19 (GMT+3)
Завис на гайде не на langchain, а на гигабайтах. Там разворачивают типовое приложение как будто это uvicorn плюс цепочка вызовов, и ram считается под сам каркас. У меня сетап другой: локальная модель на cpu, q4, эмбеддинги, chromadb и уже потом сервис. Каркас почти ничего не ест. Ест модель.

Правильный вопрос не «какой vps для langchain», а сколько ram останется свободно, когда поднимутся веса. Прикидка, не стенд. Я на cpu, без gpu.

Если цепочка ходит в api — да, uab на 4 гига спокойно держит fastapi и воркеры, я с этого и начинал. Для пары десятков сообщений в день api реально дешевле, не спорю. Но если модель тоже живёт на этом ящике — гигабайты уже про другой мир.

Что реально сидит в памяти, на пальцах:

  • эмбеддинги вроде all-MiniLM — ещё 0.5–1 гб живых, это не бесплатно. bge покрупнее спокойно отъест под два
  • chromadb на пачке pdf — мелочь, пока индекс не раздуется до сотен тысяч чанков
  • langchain + uvicorn — пара сотен мегабайт, не страшно
  • 7b q4 — 5–6 гб весов плюс kv-кэш. heka (8 гб) влезет впритык, если не держать рядом зоопарк контейнеров
  • 14b q4 — комфортнее 16 гб, maat pro. на восьми будет swap, «работает» не значит «можно пользоваться как сервисом»
  • 32b — 32 гб и то без запаса на контекст, djed. на heka даже не пробуйте: файл скачается, чат будет минута на фразу


Kv-кэш на контексте 4к у 14b легко ещё гиг-два сверху, в размер файла это не входит. Вчера на пальцах нарисовал, что 14b на восьми гигах влезет, если очень захотеть. Ну файл влезет. Сервис из этого — уже мазохизм, извините))

Ещё дыра, которую в таких текстах смазывают: агент с тулами. Один вызов модели — это одно. Агент, который три раза сходил в поиск, переписал запрос и потом генерит ответ — это четыре инференса подряд. На cpu 14b пользователь уже думает, что прод лёг. Для простого rag-чата на 7b ещё жить можно. Для агента я бы либо оставлял api, либо сразу 16+ гигов и не экономил на контексте.

С heka на maat pro перешёл, когда агент начал упираться в swap — не пожалел, чат перестал быть лотереей. Картинки и sd рядом на cpu vps даже не рассматриваю, это вообще другая песня.

Пинг до uk из томска для такого бота не узкое место: инференс на cpu всё равно медленнее сети. Вечером сижу, гоняю прикидки — узкое место всегда ram, не канал.

Завтра если снова не влезу в свои цифры — поправлю, уже было. А у кого langchain плюс локальная 7b или 14b на восьми гигах реально в проде, не синтетика? Напишите, интересно, насколько я жесток с этими восьмью гигами.
0
T
timur_ufa
Junior
Сообщения: 25
Репутация: 9
Дата регистрации:
01.09.2026
01 сент. 2026 г., 17:15 (GMT+3)
gleb_tomsk я наверно туплю, но мне ща не 7b на cpu нужен, а просто chatgpt с айфона через свой ящик. модель локально даже не думал поднимать, денег нет на 16 гигов) если цепочка ходит в api — ты написал uab спокойно держит. я так и хотел, или я статью не так понял?
0
tema_py
Junior
Сообщения: 25
Репутация: 11
Дата регистрации:
18.08.2026
02 сент. 2026 г., 20:07 (GMT+3)
timur_ufa не тупишь, статью ты как раз так и понял.

timur_ufa писал:
если цепочка ходит в api — ты написал uab спокойно держит


да, это ровно твой случай. локальные 7b — соседняя ветка, gleb_tomsk про гигабайты весов. я ботов так и держу: вебхук на ящике, апи снаружи, модель на сервере не живёт. uab за глаза, 16 гигов тебе щас ни к чему))
0
T
timur_ufa
Junior
Сообщения: 25
Репутация: 9
Дата регистрации:
01.09.2026
02 сент. 2026 г., 20:17 (GMT+3)
tema_py спасибо. я уже 16 гигов считать начал зря) беру uab, с айфона через апи и не парюсь.
0
gleb_tomsk
Junior
Сообщения: 20
Репутация: 4
Дата регистрации:
21.08.2026
03 сент. 2026 г., 14:26 (GMT+3)
tema_py, открыл тред вечером — из-за моего списка уже шестнадцать гигов мелькали.

tema_py писал:
я ботов так и держу: вебхук на ящике, апи снаружи, модель на сервере не живёт


это даже не соседняя ветка, это ровно статья. я с ней спорил из своего сетапа: у меня на ящике q4 на cpu, глаз замылился, вот и написал всем про гигабайты. а timur_ufa гайд как раз про вебхук прочитал. шестнадцать я зря в тот же абзац поставил, извини что цифрами напугал))

каркас как в гайде — пара сотен мегабайт, это правда, я и не спорил. дыра начинается, когда веса на тот же ящик сажаешь. для chatgpt с айфона статья по ram ближе, чем моя простыня.

если модель когда-нибудь переедет на этот сервер — тогда уже другая арифметика. пока апи снаружи, гигабайты весов можно не считать. у кого вебхук и апи без локальной модели — сколько ram в покое сидит, не синтетика?
1
T
timur_ufa
Junior
Сообщения: 25
Репутация: 9
Дата регистрации:
01.09.2026
03 сент. 2026 г., 15:02 (GMT+3)

gleb_tomsk писал:
извини что цифрами напугал


да норм, я сам чуть не тыкнул 16 гигов со стипендии, tema_py вовремя сказал стоп)

ящик ещё даже не крутится, так что ram в покое хз. как подниму вебхук — гляну сколько пустого и сюда напишу. у кого уже без модели крутится — сколько там в простое сидит?
1
gleb_tomsk
Junior
Сообщения: 20
Репутация: 4
Дата регистрации:
21.08.2026
03 сент. 2026 г., 15:14 (GMT+3)
tema_py, вопрос скорее к тебе. ты вебхук и апи снаружи каждый день держишь, модель на ящике не живёт. я после ужина открыл htop у себя по привычке — 7b q4 просто лежит, с телефона никто ничего не спросил, а ram уже не про «пустой простой». живую цифру без весов я вечером не сниму.

timur_ufa писал:
у кого уже без модели крутится — сколько там в простое сидит?


у меня такого ящика сейчас нет, это честно. начинал как раз с uab, fastapi, цепочка в апи, без локальных весов. потом «а давай 7b сюда, влезет если очень захотеть» — и чистого простоя как картинки больше не было. ниже прикидка с тех пор, не стенд. если разъедутся сотни мегабайт — завтра поправлю, уже бывало))

как тогда выглядело. после обычного apt upgrade система сама занимала около гига, без snap-кучи и без служб «на будущее». python в venv, fastapi, uvicorn один воркер — rss процесса двести-триста мегабайт, может четыреста, точно не помню, не записывал. langchain сверху не гигабайты: он импорты и обёртки, веса не грузит, пока сам ему файл не сунешь. в покое, пока с айфона никто не стукнул, ящик сидел в районе полутора-двух гигов занятых. на четырёх гигах uab сверху ещё дыра. не запас под 14b, просто спокойно.

скачок по ram при запросе я тогда ждал и не дождался. uvicorn принял, собрался промпт, ушло наружу, ответ вернулся. cpu почти не дёрнулся, память не прыгнула. выжирает не чат с телефона. выжирает то, что потом докладываешь «на вырост». у меня это была модель. не клади её в первую же ночь, и htop останется скучным.

эмбеддинги — вот развилка, не langchain. если у тебя «написал с айфона — ушло в chatgpt — ответ пришёл», локальных весов ноль. MiniLM не нужен, chromadb не нужен. если позже свои pdf в ту же цепочку — MiniLM это не бесплатные сто мегабайт, это 0.5–1 гб живых, bge спокойно ближе к двум. я MiniLM ставил со словами «ну кроха же», потом смотрел rss и охал. для твоего сетапа сейчас это лишнее.

ещё воркеры. каждый uvicorn worker — это ещё один python, память они не делят как хочется. на четырёх гигах я бы оставил один, максимум два. для чата с айфона один за глаза: ты не нагрузка, ты один человек с телефона. redis из гайдов ставил, смотрел, выключил. для одного пользователя он не про ram даже, он про лишнюю движуху. jupyter «на поиграться» на тот же ящик не сажай — он сам по себе любит раздуться, и тогда простой уже не простой.

когда ящик закрутится, три замера, не синтетика:

  • free -h на голой системе
  • после запуска uvicorn, ещё до первого сообщения
  • после первого запроса с айфона

и rss питона из htop. сразу видно, ест каркас или случайно эмбеддинг дотянул. «сколько на тарифе написано» тут ни при чём.

tema_py, если есть минута — напиши как у тебя в простое. ты это видишь постоянно, мне самому любопытно, не нарисовал ли я полтора гига от хорошей жизни. timur_ufa, как поднимешь вебхук, кинь эти три цифры, даже если скучные. скучный htop в этом сетапе — комплимент.

у кого вебхук без весов живёт уже не день, а хотя бы неделю — какой rss у питона в покое? интересно сойтись.
0
T
timur_ufa
Junior
Сообщения: 25
Репутация: 9
Дата регистрации:
01.09.2026
03 сент. 2026 г., 16:13 (GMT+3)
tema_py, gleb_tomsk про полтора-два гига без весов написал — на uab тогда вообще спокойно. ща с айфона сижу, тариф уже в кабинете открыл. вебхук как у тебя — это просто скрипт на ящике, или я опять чего-то лишнего придумаю?)
1
gleb_tomsk
Junior
Сообщения: 20
Репутация: 4
Дата регистрации:
21.08.2026
03 сент. 2026 г., 16:18 (GMT+3)
tema_py, сижу вечером в треде, уже руку тянул снова на ram — стоп. он не про веса сейчас спрашивает.

timur_ufa писал:
вебхук как у тебя — это просто скрипт на ящике, или я опять чего-то лишнего придумаю?



блин, я себе тогда сам накрутил. сидел минут сорок в файл и думал, что без редиса и очереди «как-то не по-взрослому». не надо. для чата с телефона это воздух.

на старте с uab у меня был один python-файл: fastapi, один роут, запрос улетает в апи, ответ на айфон. uvicorn с одним воркером. langchain если и висел — обёртка на вызов, не отдельный сервис. модель на ящике не жила вообще. лишнего я как раз и придумал, потом выкинул — стало тише.

если тебе chatgpt через свой ящик — не тащи из гайда весь каркас. как поднимешь — глянь rss в покое, интересно сойдётся ли с тем, что я помню, или я снова в сотнях мегабайт промахнусь, уже бывало))

а у кого уже вебхук без модели крутится — тоже один воркер?
0
T
timur_ufa
Junior
Сообщения: 25
Репутация: 9
Дата регистрации:
01.09.2026
03 сент. 2026 г., 18:22 (GMT+3)
ща на кухне с айфоном, чай уже холодный. gleb_tomsk про один файл написал, редис не буду пихать, понял.

tema_py а с телефона ты в этот роут как стучишься — телега или shortcuts? я shortcuts ни разу в жизни не делал, если там боль то лучше сразу бота и всё)
2
tema_py
Junior
Сообщения: 25
Репутация: 11
Дата регистрации:
18.08.2026
03 сент. 2026 г., 19:10 (GMT+3)
timur_ufa shortcuts я ни разу не открывал)) стучусь из телеги, вебхук на ящике, python-telegram-bot. токен в env, один хендлер на текст, с айфона просто чат. shortcuts ради запроса в апи — это себе ещё накручу, нет уж. бери бота сразу, не изобретай.
1
T
timur_ufa
Junior
Сообщения: 25
Репутация: 9
Дата регистрации:
01.09.2026
03 сент. 2026 г., 20:20 (GMT+3)
tema_py а я уже в настройках айфона shortcuts тыкал) ладно, бота проще, завтра начну
0
gleb_tomsk
Junior
Сообщения: 20
Репутация: 4
Дата регистрации:
21.08.2026
04 сент. 2026 г., 14:13 (GMT+3)
timur_ufa, блин, завтра бота начнёшь — я вечером сижу за ноутом и вспоминаю, как сам на третий день уже вебхук накручивал. полвечера в лог смотрел, телега не стучалась. порт был не тот, я молодец))

tema_py писал:
вебхук на ящике, python-telegram-bot


для чата с собой я бы на старте polling оставил. один процесс, токен в env, хендлер на текст, с телеги просто пишешь. вебхук в первый вечер не обязателен, это я себе воздух выдумал, потом ещё nginx и сертификат. если снаружи пачкой не лезут — незачем.

langchain я тогда сразу в хендлер засунул, импорты раздулись, а модель всё равно снаружи. выкинул, стало тише. как поднимешь, глянь rss в покое. прикидка, не стенд: пара сотен мегабайт. интересно, сойдётся или я опять промахнусь? а у кого polling без вебхука крутится, сколько процесс ест?
0
gleb_tomsk
Junior
Сообщения: 20
Репутация: 4
Дата регистрации:
21.08.2026
04 сент. 2026 г., 15:13 (GMT+3)
timur_ufa, стоп. я тебе fastapi наговорил как с цепочкой в апи, для бота он не нужен)) python-telegram-bot и всё, uvicorn можно не трогать.
0
T
timur_ufa
Junior
Сообщения: 25
Репутация: 9
Дата регистрации:
01.09.2026
04 сент. 2026 г., 15:21 (GMT+3)
tema_py, с пар пришёл, сумка в коридоре ещё лежит. ноут на коленях.

ты вебхук держишь, python-telegram-bot. а gleb_tomsk ща пишет что fastapi для бота не нужен совсем, и polling на старте проще.

gleb_tomsk писал:
python-telegram-bot и всё, uvicorn можно не трогать.


я uvicorn в сафари открыл с телефона, пока из универа ехал. вкладку закрыл, стыдно чуть)) сам себе сервис накрутил, а хотел просто чат с айфона.

polling это как я понял просто файл на ящике — он сам у телеги спрашивает, есть ли сообщения? без nginx, без сертификата, порт наружу не открываю. для чата с собой этого хватит?

ты вебхук сразу ставил или тоже сначала polling крутил? боюсь начать не с того.

langchain в хендлер сразу пихать или это уже потом, когда просто ответы заведутся? мне свои веса на ящик не нужны, только чтобы с телефона нормально спрашивать, не через сайт.

а у кого polling без вебхука уже стоит — оно с айфона стабильно или отваливается?
0
T
timur_ufa
Junior
Сообщения: 25
Репутация: 9
Дата регистрации:
01.09.2026
04 сент. 2026 г., 16:01 (GMT+3)
tema_py, ща в комнате, одну лампу включил. доки python-telegram-bot с айфона листаю, уже путаюсь где хендлер а где апдейт.

gleb_tomsk писал:
langchain я тогда сразу в хендлер засунул, импорты раздулись


ты в хендлере langchain вообще не пихаешь да? просто текст в апи и ответ в чат. я тогда с голого бота начну, без этой обёртки. а то опять себе сервис накручу)
1
tema_py
Junior
Сообщения: 25
Репутация: 11
Дата регистрации:
18.08.2026
04 сент. 2026 г., 18:13 (GMT+3)
timur_ufa я после работы только сел, в воронеже уже вечер, на кухне что-то шипит, ноут на столе. uvicorn в сафари с телефона я прям представил — вкладка, крутилка, и ты понимаешь что это вообще не то окно)) не стыдно. я себе тоже сначала сервис накручивал, будто у меня прод, а не чат с дивана.

timur_ufa писал:
ты вебхук сразу ставил или тоже сначала polling крутил?


сразу вебхук, да. не геройство — рука уже туда тянется. для чата с собой это лишний круг: nginx, серт, 443, setWebhook, потом полвечера в лог почему телега не стучится. polling на старте — один файл на ящике, сам ходит к телеге и спрашивает, есть ли сообщения. порт наружу не открываешь, nginx не нужен. с айфона пишешь как в любой чат. у меня так спокойно жило месяцами, пока я не решил что «взрослые так не делают» и полез в хук. gleb_tomsk тут прав, я просто привык. тебе сейчас хук не нужен.

langchain в хендлер не пихай. ни сразу, ни пока просто ответы не пойдут. обёртка раздует импорты, а модель у тебя всё равно снаружи. голый хендлер: текст пришёл, httpx в апи, ответ в чат. когда заведётся — тогда уже думай про цепочки, не раньше.

ща скину то, с чего сам бы сейчас начал. python 3.12, python-telegram-bot, без fastapi. uvicorn можешь больше не открывать, боту он не нужен. токен только из env, свой телеграм id в ALLOW_IDS. я один раз без вайтлиста ловил рандомные «привет», пока спал, больше так не делаю.


import os
import httpx
from telegram import Update
from telegram.ext import Application, CommandHandler, MessageHandler, filters, ContextTypes

TOKEN = os.environ["BOT_TOKEN"]
OPENAI_KEY = os.environ["OPENAI_API_KEY"]
ALLOW = {int(x) for x in os.environ.get("ALLOW_IDS", "").split(",") if x}

history = {}

async def start(update: Update, context: ContextTypes.DEFAULT_TYPE):
if update.effective_user.id not in ALLOW:
return
await update.message.reply_text("жив, пиши")

async def chat(update: Update, context: ContextTypes.DEFAULT_TYPE):
uid = update.effective_user.id
if uid not in ALLOW:
return
text = update.message.text or ""
msgs = history.setdefault(uid, [])
msgs.append({"role": "user", "content": text})
msgs[:] = msgs[-10:]

await update.message.chat.send_action("typing")
async with httpx.AsyncClient(timeout=60) as client:
r = await client.post(
"https://api.openai.com/v1/chat/completions",
headers={"Authorization": f"Bearer {OPENAI_KEY}"},
json={"model": "gpt-4o-mini", "messages": msgs},
)
r.raise_for_status()
answer = r.json()["choices"][0]["message"]["content"]
msgs.append({"role": "assistant", "content": answer})
await update.message.reply_text(answer)

def main():
app = Application.builder().token(TOKEN).build()
app.add_handler(CommandHandler("start", start))
app.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, chat))
app.run_polling(drop_pending_updates=True)

if __name__ == "__main__":
main()


на ящике `pip install python-telegram-bot httpx`, токен и ключ в env, свой id в ALLOW_IDS. id я через @userinfobot смотрел, не руками угадывал. запускаешь `python bot.py`, не uvicorn и не gunicorn. в логе должно мелькнуть что polling started. с айфона /start и пишешь.

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

хендлер это функция которая ловит сообщение. апдейт это само сообщение от телеги, там user, text, chat. в доке они рядом и с телефона правда плывёт, я тоже листал и думал что это два разных мира. не два.

историю я не отдаю в апи целиком, только последние 10, иначе модель тупеет и жрёт токены зря. langchain тут ни при чём, это просто список в словаре. если ящик перезагрузится — история обнуляется, для чата с собой норм, на диск я начал писать сильно позже.

вебхук потом, когда надо будет не один процесс держать. сейчас файл и всё. а у кого polling без хука уже стоит — с айфона само по себе не отваливается? у меня отваливалось только если процесс упал, не из-за поллинга.
1
H
hopstop
Junior
Сообщения: 6
Репутация: 0
Дата регистрации:
03.09.2026
04 сент. 2026 г., 20:01 (GMT+3)
tema_py, вечером сижу, бот модерации опять на секунду завис и ожил. чатик маленький, питон, не прод.

tema_py писал:
для чата с собой это лишний круг: nginx, серт, 443


у меня не с собой, но народу мало. токен в env спрятал, вебхук даже не открывал — светить его боюсь. ну бот и так отваливается иногда, мне ещё сертификат. langchain в хендлер не совал. а polling с телеги у тебя правда месяцами без сюрпризов жил?
0
tema_py
Junior
Сообщения: 25
Репутация: 11
Дата регистрации:
18.08.2026
04 сент. 2026 г., 21:28 (GMT+3)
hopstop блин, ноут ещё на столе, прочитал про твою модерацию и сразу своему боту с телефона «жив?» кинул. ответил, отпустило))

hopstop писал:
а polling с телеги у тебя правда месяцами без сюрпризов жил?


один вечер процесс зелёный, а в чат тишина. я минут сорок в лог смотрел, уже руки опускались — думал телега сессию убила. почти постмортем себе писал, а оно крышка ноута)) открыл — само пошло, как будто ничего не было. с айфона ни разу «не дошло», пишешь как в обычный чат.

на маленьком чатике вебхук я бы тоже не светил. то что у тебя на секунду замирает — у меня на поллинге такое же было, питон хендлер жевал секунду-две и оживал.

timur_ufa если завтра с поллинга начнёшь — с айфона будет так же. а у кого на поллинге часами тишина бывала, не из-за крышки?
1