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

Выкананне таго жа цыклу чату OpenAI локальна з адказам Ollama

Заўярніце той самы цыкл чату з OpenAI локальна за дапамою Ollama: націсціце Python SDK ад OpenAI на localhost і застаўце свой код. Няма ключа API, няма плата за токены, няма выходу дадзенняў.

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

Крыніцы: Part 5 — Run the Same Loop on Ollama (no API key, OpenAI dialect)

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

Той самы дыялект, іншая машына

Ollama — гэта локальны сервер модэляў. Пасля яго установкі вы запрашваеце модэль аднойчы, і вагі завантажваюцца так сама, як і зображэнні Docker. Пасля чаго сервер прымае HTTP-запыты на localhost:11434. Што робіць гэта зручным, так гэта, што Ollama намеравана наследуе API Chat Completions ад OpenAI: той самы маршрут /v1/chat/completions, той самы спіс паведамленняў з атрыбутамі ролі, той самы фармат адпаведзі з choices[0].message.content і тыя ж самыя лічыльнікі выкарыстоўвання.

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

Настройка і адна роўна

Заўяжыце Ollama з ollama.com. Ён інсталюецца за адну хвіліну і запускае сервер у фоне. Пасля таго завантажыце маленькі модэль — llama3.2, розмерам прыблізна 2 ГБ, які ўзначае разумны стандартны варыянт. На стороне Python нічога новага не трэба, адколі стандартны пакет openai проста паказвае на іншую адрэсу:

from openai import OpenAI

# Part 2's SDK, different address
client = OpenAI(
    base_url="http://localhost:11434/v1",
    api_key="ollama",  # required, unused
)

resp = client.chat.completions.create(
    model="llama3.2",
    messages=[
        {
            "role": "system",
            "content": "You are a concise "
                       "assistant.",
        },
        {
            "role": "user",
            "content": "Where are you running "
                       "right now?",
        },
    ],
    temperature=0,
)
print(resp.choices[0].message.content)

Два настройкі патрабуюць увагі. Калі base_url нацэлёваны на localhost, усі запыткі перэнаправляюцца не да OpenAI. Строка api_key="ollama" здаецца беззначна, але такая не ўсё: SDK адмовляецца ствараць кліента без ключа, тады як сам Ollama ігнаруе все, што вы надаеце, таму падойдзе будзь-які непусты тэкст. Нарэшце, model павінен быць іменем, якое вы вялі раней. Не існуе выбору цэновага рывня, толькі тое, што знаходзіцца на вашым дыску, што будзе выведацца за дапамою ollama list.

Цыкл історыі застаецца тым жа

Хорашы тэст „таго ж дыялекта“ — гэта перакананне, чы ранейшая функцыя ask() працюе з Ollama без жадных змян. Яна працюе. Разлічаецца толькі код, які стварае кліента.

Короткая беседа падтверджае гэта, пачынаючыся з сістэмнага паведамлення і развіваючыся далей:

msgs = [{
    "role": "system",
    "content": "You are a concise assistant.",
}]

def ask(text: str) -> str:
    msgs.append(
        {"role": "user", "content": text}
    )
    resp = client.chat.completions.create(
        model="llama3.2",
        messages=msgs,  # full history
        temperature=0,
    )
    reply = resp.choices[0].message.content
    msgs.append({
        "role": "assistant",
        "content": reply,
    })
    return reply

print(ask("Define a context window."))
print(ask("Now for a five-year-old."))
print(ask("Which answer was shorter?"))

Трэція запытка яшчэ раз паказвае механізм історыі, і все, што было выучана з версіі на серверэ, пераходзіць далей. Сервер нічога не памятае між вызваннямі. Растучый спіс msgs ёсць прычыной таго, чаму пазнейшыя запыткі трываюць дольша. Хоць тут вас не беруць у рахунак, вы працуеце за секунды, і спагляданне таго, як локальны мадэль сповольняецца з ростам історыі, робіць вартасць кантэксту рэальной у спосабе, якога ніколі не зможа скарынка.

Установіце адпаведныя ачакванні. Мадэль з прыблізна 3 мільярдамі параметраў значна менш эфектыва, чым GPT-4o чыў Claude. Яна можа далека забегаць ад сістэмнага запрошэння чы прасіцца па аднаковасці, напрыклад, калі які з двух элементаў быў корачэй. Гэта не баг у цікле. Гэта тое, што дае 3 мільярды параметраў, і бачыце гэтыя разлікі на власныя вочы навучае больш, чым чытанне показнікаў.

Адрыхтаванне прыкладу

Для этага патрэбны тры каманды. Першая інсталюе модэль, другая — залежнасці Python, а трэця запускае скрыпт:

# one-time: install from ollama.com, then
ollama pull llama3.2

pip install -r requirements.txt
python examples/part05_ollama.py

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

Калі ўсё пайшло не так

  • Памылка „model not found“ означае, што гэты конкрэтны таг яшчо не быў завантажан, таму трэба запусціць ollama pull llama3.2.
  • Памылка з’ўязку означае, што сервер не працюе. Яго трэба запусціць за дапамогою ollama serve, хоця версіі для настольных камп’ютараў запускаюць яго автаматычна.
  • Першыя калькі пасля першага выкарыстання з’являюцца пасля кількаго секунднага паузы — гэта час, які трэба на завантажэння модэлі ў памяць. Нічога не застаўляеся.
  • Чаму местны канцэнтрык ёсць выгодным

    Эксперыменты з агентамі адбываюцца без канца. Каналы адзыскання даных перабудовуюцца, ціклы аналізу выконваюць калькі модэлі для аднаго запітання, а робочыя працэсы на основе графа перазапускаюцца пасля кожных незначных корэктаванняў. Адплата за кожны токен у такіх выпадках стае значнаю, тады як бесплатны местны канцэнтрык дазволяе эксперыментаваць без старанняў з контралем вітрачання. Паколькі Ollama вікорыстоўвае дыялект OpenAI, любы прыклад можа працаваць у будзь-якім варыянцы проста па зміне базовага URL і назвы модэлі, больш нічога. Рэзультатам являецца сандбокс з необмежаным колькасцю токенав.

    Наступныя очывіцеўныя тэмы — гэта RAG. Модэлі не можаць знаваць вашы дакументы, таму справжнім пытаннем стае тое, якія токены заслуговуюць на месца ў вікні кантэксту.

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

  • Як стаць інжынерам АІ у 2026 годзе без дыплома па інформатыцы — План ад нуля да працавання як інжынер АІ у 2026 годзе без дыплома па інформатыцы: семь сфер навыкаў, маленькія праекты, практычны дазнаўчы досвяд і розумнае налагоджэнне контактав.