Найти в Дзене

LangChain, LangGraph для LLM приложений. AI агент на python.

Оглавление

Привет! :)

АИ агент - сгенерирована нейросетью
АИ агент - сгенерирована нейросетью

В данной статье хочу поделиться рабочим примером запуска AI агента на python с использованием ChatOpenAI, LangChain, LangGraph. Инфы на просторах интернета ни много ни мало, и её актуальность теряется с каждым месяцем, т.к. приведённые инструменты в активной разработке, методы, функции и тд и тп становятся depricated 😁

В статье буду использовать актуальные на сегодня методы и функции, без сильного углубления, пример будет простым и рабочим.

Так же тут не буду рассказывать как запустить llm локальную, с этим проблем по меньше, документации уже более менее сформированы и мануалов много. Но если замечу отклик, напишу какие llm использую и как с ними работать, поднимать.

Приступим.

Для реализации примера нужно локально поднять llamacpp (ссылка по установке llama.cpp). Установка это отдельный гайд, но попробуйте скачать по указанной ссылке в пункте 1 исходные файлы под вашу систему, закинуть в директорию любую (ну почти), и указать в системных переменных путь до того каталога.

Скачиваем любую интересующей вас модель, например эту - https://huggingface.co/yandex/YandexGPT-5-Lite-8B-instruct-GGUF

Запуск llama-server

команда для запуска

llamacpp_run_host

В конце выведет адрес по которому можно даже перейти и увидеть веб интерфейс.

Настройка проекта

Создайте директорию с проектом, и по классике войдите там в виртуальное окружение для питона.

python -m venv .venv

source .venv/bin/activate - для unix

.venv/Scripts/activate - для win

Установите пакеты

pip install langgraph langchain_openai langchain_core langchain_community bs4 duckduckgo-search uv

или pip install -r requirements.txt

requirements

uv будем использовать для запуска проекта через uv run main.py
bs4
- для парсинга html ( в инструменте пригодится для примера )
duckduckgo-search - зависимость для тулзы-поисковика DuckDuckGoSearchAPIWrapper
[ langgraph, langchain_openai, langchain_core, langchain_community ] - пакеты для настройки АИ агента.

Код

main.py

main

tools.py

tools

utils.py

utils

Описание

NOTE: для просмотра кода прям в статье, есть расширение для браузера, которое я разработал, описание тут - https://dzen.ru/a/Z4iJpTw0iG9J0uas

Вкратце, пройдусь по ключевым моментам на что обратить внимание.

В main.py для model урл хоста модели openai_api_base, указать адрес где запущен llama-server ( http://localhost:1000 ).
temperature = 0, меньше фантазий.
В остальном все параметры просто обязательны поля, особенных конфигураций нет, кроме
pre_model_hook - это хук который выполняется перед отправкой сообщений модели, через него я задал обрезку истории сообщений, метод находится в utils.py, там же находится метод print_stream, который обрабатывает стрим сообщений от модели.

Ну и в tools.py находятся инструменты, это по сути та фича агентов, с помощью который подход в использовании АИ становится все интересней.
С помощью инструментов можно "протоптать тропинку" для модели до интернета, файлов, интерфейса и тд. и тп.
В инструменты подадутся данные, типы которых будут указаны в аргументах функции, модель сможет привести к этим типам из вашего сообщения (см
sum_parrots). Инструменту обязательно описание и название.

Инструмент get_tournaments_page простой инструмент и по сути его и так можно вызвать без модели, но если поиграться с ним и передать аргументы, то станет интересней, я специально не стал усложнять, этот пример просто для показа.

Лог чата как результат работы инструментов.

ai-chat-log
================================ Human Message
посчитай попугаев - Адын два три 4 5
==================================Tool Calls:
sum_parrots (5DS1uUcqW30zFM2mF69WioQgY5orpWUh)
Call ID: 5DS1uUcqW30zFM2mF69WioQgY5orpWUh
Args: parrot: {'counts_list': [1, 2, 3, 4, 5]} counts_list=[1, 2, 3, 4, 5]
================================= Tool Message
Name: sum_parrots
Количество - 15
==================================Ai Message
Вызвал инструменты - sum_parrots
Tool Calls: sum_parrots (5DS1uUcqW30zFM2mF69WioQgY5orpWUh) Call ID: 5DS1uUcqW30zFM2mF69WioQgY5orpWUh
Args: parrot: {'counts_list': [1, 2, 3, 4, 5]}
================================== Ai Message
Отлично, сумма попугаев равна 15. Если у вас есть ещё какие-либо вопросы или задачи, пожалуйста, сообщите мне.

Заключение

На этом всё, этих настроек достаточно для запуска ии агента в консоли.
Пишите комментарии, поддержите лайком :)

PS: для просмотра кода прям в статье, есть расширение для браузера, которое я разработал, описание тут - https://dzen.ru/a/Z4iJpTw0iG9J0uas