В этом руководстве мы реализуем продвинутого ИИ-агента на основе графа, используя фреймворк GraphAgent и модель Gemini 1.5 Flash. Мы определяем направленный граф узлов, каждый из которых отвечает за определённую функцию: планировщик для разбиения задачи, маршрутизатор для управления потоками, узлы для исследований и вычислений, писатель для синтеза ответа и критик для проверки и уточнения результата.
Мы интегрируем Gemini через оболочку, которая обрабатывает структурированные JSON-запросы, а локальные функции Python действуют как инструменты для безопасной математической оценки и поиска документов. Выполнив этот конвейер от начала до конца, мы демонстрируем, как рассуждения, поиск и проверка модульно организованы в единой согласованной системе.
Импорт библиотек
Мы начинаем с импорта основных библиотек Python для обработки данных, синхронизации и безопасной оценки, а также помощников dataclasses и typing для структурирования нашего состояния. Мы также загружаем клиент google.generativeai для доступа к Gemini и, при необходимости, NetworkX для визуализации графа.
“`python
import os, json, time, ast, math, getpass
from dataclasses import dataclass, field
from typing import Dict, List, Callable, Any
import google.generativeai as genai
try:
import networkx as nx
except ImportError:
nx = None
“`
Определение модели
Мы определяем помощника для настройки и возврата модели Gemini с пользовательской системной инструкцией, а также другую функцию, которая вызывает LLM с запросом, контролируя температуру. Мы используем эту настройку, чтобы наш агент получал структурированные, краткие выходные данные последовательно.
“`python
def makemodel(apikey: str, model_name: str = “gemini-1.5-flash”):
genai.configure(apikey=apikey)
return genai.GenerativeModel(modelname, systeminstruction=(
“You are GraphAgent, a principled planner-executor. “
“Prefer structured, concise outputs; use provided tools when asked.”
))
“`
Инструменты для агента
Мы реализуем два ключевых инструмента для агента: безопасный математический вычислитель, который анализирует и проверяет арифметические выражения с помощью ast перед выполнением, и простой поиск документов, который извлекает наиболее релевантные фрагменты из небольшого корпуса в памяти. Мы используем их, чтобы дать агенту надёжные возможности вычислений и поиска без внешних зависимостей.
“`python
def safeevalmath(expr: str) -> str:
node = ast.parse(expr, mode=”eval”)
allowed = (ast.Expression, ast.BinOp, ast.UnaryOp, ast.Num, ast.Constant,
ast.Add, ast.Sub, ast.Mult, ast.Div, ast.Pow, ast.Mod,
ast.USub, ast.UAdd, ast.FloorDiv, ast.AST)
def check(n):
if not isinstance(n, allowed): raise ValueError(“Unsafe expression”)
for c in ast.iterchildnodes(n): check(c)
check(node)
return str(eval(compile(node, “
Определение состояния
Мы определяем типизированный класс State для сохранения задачи, плана, доказательств, заметок и управляющих флагов по мере выполнения графа.
“`python
@dataclass
class State:
task: str
plan: str = “”
scratch: List[str] = field(default_factory=list)
evidence: List[str] = field(default_factory=list)
result: str = “”
step: int = 0
done: bool = False
“`
Запуск графа
Мы определяем функцию rungraph для запуска графа, передавая задачу и ключ API. Мы регистрируем функции узлов в NODES и выполняем итерацию в rungraph до тех пор, пока не будет выполнено условие.
“`python
def rungraph(task: str, apikey: str) -> State:
model = makemodel(apikey)
state = State(task=task)
cur = “plan”
max_steps = 12
while not state.done and state.step < max_steps:
state.step += 1
nxt = NODES[cur](state, model)
if nxt == “end”: break
cur = nxt
return state
“`
В заключение мы демонстрируем, как агент с графической структурой позволяет разрабатывать детерминированные рабочие процессы вокруг вероятностной LLM. Мы наблюдаем, как узел планировщика обеспечивает декомпозицию задачи, маршрутизатор динамически выбирает между исследованиями и математикой, а критик обеспечивает итеративное улучшение достоверности и ясности. Gemini действует как центральный механизм рассуждений, а узлы графа обеспечивают структуру, проверки безопасности и прозрачное управление состоянием.
Мы завершаем работу с полностью функциональным агентом, который демонстрирует преимущества объединения графической оркестрации с современной LLM, позволяя расширять такие возможности, как пользовательские цепочки инструментов, многооборотная память или параллельное выполнение узлов в более сложных развёртываниях.
1. Какие ключевые компоненты включает в себя структура ИИ-агента, описанного в статье, и как они взаимодействуют между собой?
В статье описывается ИИ-агент с графической структурой, включающий в себя такие компоненты, как планировщик, маршрутизатор, узлы для исследований и вычислений, писатель и критик. Эти компоненты взаимодействуют между собой для выполнения задач, управления потоками данных и обеспечения итеративного улучшения результатов.
2. Какие инструменты и библиотеки используются для реализации ИИ-агента и какие функции они выполняют?
Для реализации ИИ-агента используются библиотеки Python, такие как google.generativeai для работы с Gemini, NetworkX для визуализации графа, а также dataclasses и typing для структурирования состояния. Инструменты включают в себя безопасный математический вычислитель и простой поиск документов.
3. Как обеспечивается безопасность и надёжность вычислений в ИИ-агенте?
Безопасность и надёжность вычислений в ИИ-агенте обеспечиваются с помощью безопасного математического вычислителя, который анализирует и проверяет арифметические выражения перед выполнением. Это предотвращает выполнение небезопасных выражений и обеспечивает корректность вычислений.
4. Какие преимущества даёт использование графической структуры для разработки детерминированных рабочих процессов вокруг вероятностной LLM?
Использование графической структуры позволяет разрабатывать детерминированные рабочие процессы, обеспечивая чёткую организацию и управление задачами. Это также способствует более эффективному взаимодействию между компонентами и улучшает контроль над выполнением задач.
5. Какие возможности открываются при расширении функциональности ИИ-агента, например, через пользовательские цепочки инструментов или параллельное выполнение узлов?
Расширение функциональности ИИ-агента открывает возможности для создания более сложных и гибких систем. Например, пользовательские цепочки инструментов могут быть использованы для интеграции дополнительных функций и возможностей, а параллельное выполнение узлов может ускорить обработку данных и выполнение задач.