Создание агента
Языковые модели просто генерируют текст и не могут выполнять действия. Разработка агентов — это один из основных сценариев использования GigaChain.
Агенты — системы, использующие LLM для рассуждений и определения действий, которые нужно предпринять, а также входных данных, которые нужно при этом использовать.
Результаты этих действий затем могут быть переданы обратно агенту, чтобы он определил, нужно ли делать что-то еще или можно закончить работу.
В разделе приведен пример агента, который может взаимодействовать с несколькими инструментами: локальной базой данных и поисковой системой. С агентом можно вести разговор и наблюдать, как он вызывает инструменты.
Пример агента
Пример ниже содержит код работающего агента, который использует модель для определения того, какой инструмент нужно вызвать. Агент подготовлен для работы с поисковым инструментом и обладает разговорной памятью, что позволяет использовать его в роли развитого чат-бота.
Ниже в разделе приводится пошаговый разбор каждого из компонентов агента.
# Импортирование необходимой функциональности
from langchain_gigachat.chat_models import GigaChat
from langchain_community.tools.tavily_search import TavilySearchResults
from langchain_core.messages import HumanMessage
from langgraph.checkpoint.memory import MemorySaver
from langgraph.prebuilt import create_react_agent
# Создание агента \{#sozdanie-agenta2}
memory = MemorySaver()
model = GigaChat(
credentials="ключ_авторизации",
scope="GIGACHAT_API_PERS",
model="GigaChat-Pro",
verify_ssl_certs=False,
)
search = TavilySearchResults(max_results=2)
tools = [search]
agent_executor = create_react_agent(model, tools, checkpointer=memory)
# Использование агента
config = {"configurable": {"thread_id": "abc100"}}
for chunk in agent_executor.stream(
{"messages": [HumanMessage(content="Привет! Меня зову Вася. Я живу в Москве")]},
config,
):
print(chunk)
print("----")
for chunk in agent_executor.stream(
{"messages": [HumanMessage(content="Узнай погоду в моем городе")]}, config
):
print(chunk)
print("----")
{'agent': {'messages': [AIMessage(content='Здравствуйте, Вася! Рада слышать вас. Расскажите, могу ли я вам чем-нибудь помочь?', response_metadata={'token_usage': Usage(prompt_tokens=97, completion_tokens=29, total_tokens=126), 'model_name': 'GigaChat-Pro:2.2.25.3', 'finish_reason': 'stop'}, id='run-aad23d97-0cb5-4977-8d2e-b1ce06751157-0')]}}
----
{'agent': {'messages': [AIMessage(content='', additional_kwargs={'function_call': {'name': 'tavily_search_results_json', 'arguments': {'query': 'погода в москве'}}}, response_metadata={'token_usage': Usage(prompt_tokens=140, completion_tokens=23, total_tokens=163), 'model_name': 'GigaChat-Pro:2.2.25.3', 'finish_reason': 'function_call'}, id='run-8989a123-6824-4ae2-839b-77e0290aa584-0', tool_calls=[{'name': 'tavily_search_results_json', 'args': {'query': 'погода в москве'}, 'id': 'fb19fd4f-3bc1-4b7f-9cca-e669ab8d96e4', 'type': 'tool_call'}])]}}
----
{'tools': {'messages': [ToolMessage(content='[{"url": "https://www.gismeteo.ru/weather-moscow-4368/now/", "content": "\\u0423\\u0437\\u043d\\u0430\\u0439\\u0442\\u0435 \\u0444\\u0430\\u043a\\u0442\\u0438\\u0447\\u0435\\u0441\\u043a\\u0443\\u044e \\u043f\\u043e\\u0433\\u043e\\u0434\\u0443 \\u0432 \\u041c\\u043e\\u0441\\u043a\\u0432\\u0435 \\u043d\\u0430 \\u0441\\u0435\\u0433\\u043e\\u0434\\u043d\\u044f \\u0438 \\u043d\\u0430 \\u0431\\u043b\\u0438\\u0436\\u0430\\u0439\\u0448\\u0438\\u0435 \\u0434\\u043d\\u0438. \\u0421\\u043c\\u043e\\u0442\\u0440\\u0438\\u0442\\u0435 \\u043a\\u0430\\u0440\\u0442\\u0443 \\u043e\\u0441\\u0430\\u0434\\u043a\\u043e\\u0432, \\u0442\\u0435\\u043c\\u043f\\u0435\\u0440\\u0430\\u0442\\u0443\\u0440\\u044b, \\u0432\\u0435\\u0442\\u0435\\u0440\\u0430 \\u0438 \\u043e\\u0431\\u043b\\u0430\\u0447\\u043d\\u043e\\u0441\\u0442\\u0438, \\u0430 \\u0442\\u0430\\u043a\\u0436\\u0435 \\u043d\\u043e\\u0432\\u043e\\u0441\\u0442\\u0438 \\u0438 \\u043f\\u0440\\u0438\\u043c\\u0435\\u0442\\u044b."}, {"url": "https://yandex.ru/pogoda/moscow", "content": "\\u0423\\u0437\\u043d\\u0430\\u0439\\u0442\\u0435 \\u043f\\u0440\\u043e\\u0433\\u043d\\u043e\\u0437 \\u043f\\u043e\\u0433\\u043e\\u0434\\u044b \\u0432 \\u041c\\u043e\\u0441\\u043a\\u0432\\u0435 \\u043d\\u0430 \\u0441\\u0435\\u0433\\u043e\\u0434\\u043d\\u044f, \\u0437\\u0430\\u0432\\u0442\\u0440\\u0430 \\u0438 \\u0431\\u043b\\u0438\\u0436\\u0430\\u0439\\u0448\\u0438\\u0435 \\u0434\\u043d\\u0438. \\u0421\\u043c\\u043e\\u0442\\u0440\\u0438\\u0442\\u0435 \\u0442\\u0435\\u043c\\u043f\\u0435\\u0440\\u0430\\u0442\\u0443\\u0440\\u0443, \\u0434\\u0430\\u0432\\u043b\\u0435\\u043d\\u0438\\u0435, \\u0432\\u043b\\u0430\\u0436\\u043d\\u043e\\u0441\\u0442\\u044c, \\u0441\\u043a\\u043e\\u0440\\u043e\\u0441\\u0442\\u044c \\u0432\\u0435\\u0442\\u0440\\u0430 \\u0438 \\u043e\\u0441\\u0430\\u0434\\u043a\\u0438 \\u043d\\u0430 \\u043a\\u0430\\u0440\\u0442\\u0435 \\u0438 \\u0432 \\u0442\\u0430\\u0431\\u043b\\u0438\\u0446\\u0435."}]', name='tavily_search_results_json', tool_call_id='fb19fd4f-3bc1-4b7f-9cca-e669ab8d96e4', artifact={'query': 'погода в москве', 'follow_up_questions': None, 'answer': None, 'images': [], 'results': [{'title': 'Погода В Москве Сейчас | Gismeteo', 'url': 'https://www.gismeteo.ru/weather-moscow-4368/now/', 'content': 'Узнайте фактическую погоду в Москве на сегодня и на ближайшие дни. Смотрите карту осадков, температуры, ветера и облачности, а также новости и приметы.', 'score': 0.9981613, 'raw_content': None}, {'title': 'Прогноз погоды в Москве на 10 дней — Яндекс.Погода', 'url': 'https://yandex.ru/pogoda/moscow', 'content': 'Узнайте прогноз погоды в Москве на сегодня, завтра и ближайшие дни. Смотрите температуру, давление, влажность, скорость ветра и осадки на карте и в таблице.', 'score': 0.99698395, 'raw_content': None}], 'response_time': 2.27})]}}
----
{'agent': {'messages': [AIMessage(content='Погода в Москве сейчас облачная и прохладная. Температура воздуха около 15 градусов по Цельсию.', response_metadata={'token_usage': Usage(prompt_tokens=1744, completion_tokens=29, total_tokens=1773), 'model_name': 'GigaChat-Pro:2.2.25.3', 'finish_reason': 'stop'}, id='run-b864e6be-a222-496d-aeab-2da9bea7ad1b-0')]}}
----
Ключ авторизации — строка, полученная в результате кодирования в Base64 клиентского идентификатора (Client ID) и ключа (Client Secret) API. Вы можете использовать готовый ключ из личного кабинета или самостоятельно закодировать Client ID и Client Secret.
Пример ключа авторизации:
MjIzODA0YTktMDU3OC00MTZmLWI4MWYtYzUwNjg3Njk4MzMzOjljMTI2MGQyLTFkNTEtNGRkOS05ZGVhLTBhNjAzZTdjZjQ3Mw==
Ключ авторизации, Client ID и Client Secret вы можете получить после создания проекта GigaChat API: