A Coding Guide to Build a Tool-Calling ReAct Agent Fusing Prolog Logic with Gemini and LangGraph
В современном мире автоматизации бизнеса искусственный интеллект (ИИ) становится неотъемлемой частью многих процессов. Одним из самых интересных направлений является интеграция символической логики с генеративным ИИ. В этой статье мы рассмотрим, как создать инструмент, который объединяет логику Пролога с Gemini и LangGraph, чтобы разработать мощного агента ReAct. Этот подход не только улучшает качество принятия решений, но и открывает новые горизонты для анализа данных.
Что такое ReAct агент?
ReAct агент — это система, способная выполнять сложные логические операции и взаимодействовать с пользователем на естественном языке. Используя возможности Пролога для обработки логических запросов, а также мощь генеративного ИИ, мы можем создать инструмент, который будет не только отвечать на вопросы, но и выполнять вычисления, анализировать данные и делать выводы.
Преимущества интеграции Пролога с Gemini и LangGraph
- Символическая логика: Пролог позволяет формализовать знания и правила, что делает систему более предсказуемой и управляемой.
- Генеративный ИИ: Gemini предоставляет возможности для обработки естественного языка, что делает взаимодействие с пользователем более интуитивным.
- Гибкость: LangGraph позволяет легко интегрировать различные инструменты и библиотеки, что упрощает разработку.
Практическое применение
Давайте рассмотрим, как можно создать агента, который будет анализировать семейные отношения и выполнять математические операции. Для начала необходимо установить необходимые библиотеки и настроить окружение.
Установка необходимых библиотек
!apt-get install swi-prolog -y !pip install pyswip langchain-google-genai langgraph langchain-core
Импорт библиотек и настройка окружения
import os from pyswip import Prolog from langchain_google_genai import ChatGoogleGenerativeAI from langchain_core.messages import HumanMessage from langchain_core.tools import tool from langgraph.prebuilt import create_react_agent import json GOOGLE_API_KEY = "Ваш API ключ" os.environ["GOOGLE_API_KEY"] = GOOGLE_API_KEY llm = ChatGoogleGenerativeAI(model="gemini-1.5-flash", temperature=0)
Создание интерфейса для Пролога
Создадим класс, который будет взаимодействовать с базой знаний Пролога и выполнять запросы:
class AdvancedPrologInterface:
def __init__(self):
self.prolog = Prolog()
self._load_knowledge_base()
def _load_knowledge_base(self):
"""Загрузка базы знаний Пролога"""
rules = [
"parent(john, mary, alice)",
"parent(john, mary, bob)",
"parent(bob, susan, charlie)",
"parent(alice, david, emma)",
"parent(charlie, lisa, frank)",
"male(john)", "male(bob)", "male(david)", "male(charlie)", "male(frank)",
"female(mary)", "female(alice)", "female(susan)", "female(emma)", "female(lisa)",
"grandparent(X, Z) :- parent(X, _, Y), parent(Y, _, Z)",
"sibling(X, Y) :- parent(P1, P2, X), parent(P1, P2, Y), X \\= Y",
"uncle(X, Y) :- sibling(X, Z), parent(Z, _, Y), male(X)",
"aunt(X, Y) :- sibling(X, Z), parent(Z, _, Y), female(X)",
"cousin(X, Y) :- parent(P1, _, X), parent(P2, _, Y), sibling(P1, P2)"
]
for rule in rules:
try:
self.prolog.assertz(rule)
except Exception as e:
print(f"Предупреждение: Не удалось добавить правило '{rule}': {e}")
def query(self, query_string):
"""Выполнение запроса к Прологу"""
try:
results = list(self.prolog.query(query_string))
return results if results else [{"result": "Решения не найдены"}]
except Exception as e:
return [{"error": f"Запрос не удался: {str(e)}"}]
Создание инструментов для взаимодействия
Теперь мы определим несколько инструментов для работы с базой знаний:
@tool
def family_relationships(query: str) -> str:
"""Запрос семейных отношений в формате Пролога."""
results = prolog_interface.query(query)
return json.dumps(results, indent=2)
Создание агента ReAct
Теперь, когда у нас есть инструменты, мы можем создать агента ReAct:
tools = [family_relationships] agent = create_react_agent(llm, tools)
Запуск анализа семейных отношений
Давайте протестируем нашего агента:
def run_family_analysis():
"""Анализ семейных отношений"""
print("Анализ семейных отношений")
print("=" * 50)
queries = [
"Кто все родители в базе данных семьи?",
"Найдите все отношения бабушка-внук",
"Покажите мне всех братьев и сестер в семье",
"Кто дети Джона и Мэри?"
]
for i, query in enumerate(queries, 1):
print(f"\nЗапрос {i}: {query}")
print("-" * 30)
try:
response = agent.invoke({"messages": [("human", query)]})
answer = response["messages"][-1].content
print(f"Ответ: {answer}")
except Exception as e:
print(f"Ошибка: {str(e)}")
Заключение
Интеграция Пролога с генеративным ИИ через LangChain и Gemini открывает новые возможности для создания мощных инструментов анализа и принятия решений. Пользователи могут расширять базу знаний, добавляя новые правила и факты, адаптируя фреймворк под свои нужды.
Часто задаваемые вопросы (FAQ)
- Что такое Пролог и как он используется в ИИ? Пролог — это язык программирования, основанный на логике, который позволяет формализовать знания и правила.
- Как интегрировать Пролог с другими языками программирования? Используйте библиотеки, такие как pyswip, для взаимодействия между Python и Прологом.
- Какие преимущества дает использование генеративного ИИ? Генеративный ИИ позволяет обрабатывать естественный язык, что делает взаимодействие с пользователем более удобным.
- Каковы лучшие практики при работе с Прологом? Убедитесь, что ваша база знаний хорошо структурирована и содержит все необходимые правила.
- Что делать, если запрос к Прологу не удался? Проверьте синтаксис запроса и убедитесь, что все необходимые правила загружены в базу знаний.
- Как улучшить производительность агента ReAct? Оптимизируйте базу знаний и используйте кэширование для часто запрашиваемых данных.
Теперь вы готовы начать создавать свои собственные инструменты, используя мощь Пролога и генеративного ИИ. Удачи в ваших разработках!





















