🤖 А что если LLM сам решает, какие функции использовать?
Легко! В этом поможет LangGraph с супер-инструментом Tools 🛠
🔥 Смотрите, что происходит:
Пользователь задает один сложный вопрос:
> "Сложи 100 + 123432134 и расскажи о погоде в Краснодаре на сегодня"
🧠 LLM анализирует и сам принимает решения:
⚡️ Результат - молниеносно!
Математика:
Погода:
🚀 Почему это круто?
✅ Умное планирование - LLM сам определяет нужные инструменты
✅ Параллельное выполнение - несколько задач одновременно
✅ Естественное общение - один запрос, полный ответ
✅ Масштабируемость - можно добавлять любые функции
💡 Представьте возможности:
Один запрос: *"Проанализируй это фото, найди в базе похожие товары и отправь результат на email"*
LLM автоматически: Анализ → SQL → Email ✨
🎯 Главная фишка:
Вы пишете функции → LLM сам решает, когда их использовать
Больше никаких if/else и сложной логики! Просто опишите, что умеет каждая функция, а ИИ сам составит план выполнения.
LangGraph превращает набор функций в умного помощника, который знает, что и когда делать! 🤖✨
Легко! В этом поможет LangGraph с супер-инструментом Tools 🛠
🔥 Смотрите, что происходит:
Пользователь задает один сложный вопрос:
> "Сложи 100 + 123432134 и расскажи о погоде в Краснодаре на сегодня"
🧠 LLM анализирует и сам принимает решения:
# Шаг 1: LLM понимает, что нужно 2 разные задачи
AIMessage: "Я выполню оба ваших запроса - сложу числа и получу информацию о погоде"
# Шаг 2: Автоматически вызывает СРАЗУ 2 инструмента
tool_calls: [
{'name': 'add_tool', 'args': {'a': 100, 'b': 123432134}},
{'name': 'get_weather_tool', 'args': {'city': 'Краснодар'}}
]
⚡️ Результат - молниеносно!
Математика:
100 + 123432134 = 123432234
✅ Погода:
🌤 37.21°C, небольшая облачность, влажность 33%
🌡🚀 Почему это круто?
✅ Умное планирование - LLM сам определяет нужные инструменты
✅ Параллельное выполнение - несколько задач одновременно
✅ Естественное общение - один запрос, полный ответ
✅ Масштабируемость - можно добавлять любые функции
💡 Представьте возможности:
@tool
def analyze_image(image_path: str) -> str:
"""Анализирует изображение с помощью ИИ"""
@tool
def send_email(to: str, subject: str, body: str) -> str:
"""Отправляет email"""
@tool
def query_database(sql: str) -> str:
"""Выполняет SQL запрос"""
Один запрос: *"Проанализируй это фото, найди в базе похожие товары и отправь результат на email"*
LLM автоматически: Анализ → SQL → Email ✨
🎯 Главная фишка:
Вы пишете функции → LLM сам решает, когда их использовать
Больше никаких if/else и сложной логики! Просто опишите, что умеет каждая функция, а ИИ сам составит план выполнения.
LangGraph превращает набор функций в умного помощника, который знает, что и когда делать! 🤖✨
2👍21🔥16❤5⚡3🎉1👌1🤨1🤝1
🎉 Друзья, нас уже больше 4 000!
Огромное спасибо каждому из вас за поддержку, за интерес к каналу и за то, что остаетесь здесь, даже несмотря на то, что в последнее время я редко выходил с новым контентом.
Это очень ценно. Обещаю не пропадать надолго и продолжать делиться простыми и понятными вещами из мира Python, искусственного интеллекта и мира IT в целом. 💻🐍
Спасибо, что вы со мной! 🙌
Огромное спасибо каждому из вас за поддержку, за интерес к каналу и за то, что остаетесь здесь, даже несмотря на то, что в последнее время я редко выходил с новым контентом.
Это очень ценно. Обещаю не пропадать надолго и продолжать делиться простыми и понятными вещами из мира Python, искусственного интеллекта и мира IT в целом. 💻🐍
Спасибо, что вы со мной! 🙌
9🔥63❤18👍11🎉6🥰3🕊1🏆1🤗1
🚀 MCP + LangGraph + AI-агенты: играем по-взрослому
Слышали про LangGraph, tool-юзинг, агентов, MCP — но в голове каша?
Пора навести порядок. В новой статье разложу всё по полочкам — просто, с примерами и кодом:
🔹 Подключим готовый MCP-сервер как внешний инструмент
🔹 Напишем свой мини FastMCP-сервер с простыми функциями
🔹 Разберёмся, как работает режим «чёрного ящика» (ReactAgent) и чем он отличается от ручного биндинга тулзов
🔹 Поговорим, как, когда и зачем модель вызывает инструменты, и кто вообще всё это решает
💡 Будет интересно, если вы:
– хотите реально пощупать LangGraph
– ищете идеи для интеграции своих сервисов
– устали от теории и хотите живой код
Будете ждать? 🤔⏳
Слышали про LangGraph, tool-юзинг, агентов, MCP — но в голове каша?
Пора навести порядок. В новой статье разложу всё по полочкам — просто, с примерами и кодом:
🔹 Подключим готовый MCP-сервер как внешний инструмент
🔹 Напишем свой мини FastMCP-сервер с простыми функциями
🔹 Разберёмся, как работает режим «чёрного ящика» (ReactAgent) и чем он отличается от ручного биндинга тулзов
🔹 Поговорим, как, когда и зачем модель вызывает инструменты, и кто вообще всё это решает
💡 Будет интересно, если вы:
– хотите реально пощупать LangGraph
– ищете идеи для интеграции своих сервисов
– устали от теории и хотите живой код
Будете ждать? 🤔⏳
20👍80🔥25🎉5💯5❤3🙏3🙉2✍1🤔1👾1
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥29❤7🎉2👌2🤝2🕊1🍾1
📝 Материал готов — осталось оформить!
Закончил подготовку материала для новой статьи на Хабре. Остается только структурировать всё в осмысленную статью.
🎯 О чём будет статья:
Снова погружаемся в тему MCP серверов и кастомных tools — как и обещал!
🔧 Пока ждёте статью, изучите два репозитория:
1️⃣ Полноценный MCP-сервер + клиент для тестирования:
👉 https://github.com/Yakvenalex/FastMCP-Match-Example
Что внутри:
• Базовая структура математического MCP-сервера
• Подходы к масштабированию (подобие роутеров)
• Клиент для тестирования MCP
2️⃣ Примеры интеграции Tools и MCP (как собственного так и готовых) с LangGraph и LangChain:
👉 https://github.com/Yakvenalex/LangGraphExample
Что внутри:
• Интеграция MCP с LangGraph и LangChain
• Работа с кастомными тулзами и инструментами из MCP серверов
• Практические примеры использования
💡 Главный принцип: поймете код — поймете разработку MCP серверов любой сложности!
📊 Материала накопилось уже на полноценный курс по Langchain + LangGraph + FastMCP. Если увижу вашу активность — обязательно сделаю!
Следите за обновлениями 🚀
Закончил подготовку материала для новой статьи на Хабре. Остается только структурировать всё в осмысленную статью.
🎯 О чём будет статья:
Снова погружаемся в тему MCP серверов и кастомных tools — как и обещал!
🔧 Пока ждёте статью, изучите два репозитория:
1️⃣ Полноценный MCP-сервер + клиент для тестирования:
👉 https://github.com/Yakvenalex/FastMCP-Match-Example
Что внутри:
• Базовая структура математического MCP-сервера
• Подходы к масштабированию (подобие роутеров)
• Клиент для тестирования MCP
2️⃣ Примеры интеграции Tools и MCP (как собственного так и готовых) с LangGraph и LangChain:
👉 https://github.com/Yakvenalex/LangGraphExample
Что внутри:
• Интеграция MCP с LangGraph и LangChain
• Работа с кастомными тулзами и инструментами из MCP серверов
• Практические примеры использования
💡 Главный принцип: поймете код — поймете разработку MCP серверов любой сложности!
📊 Материала накопилось уже на полноценный курс по Langchain + LangGraph + FastMCP. Если увижу вашу активность — обязательно сделаю!
Следите за обновлениями 🚀
GitHub
GitHub - Yakvenalex/FastMCP-Match-Example: FastMCP Match Example
FastMCP Match Example. Contribute to Yakvenalex/FastMCP-Match-Example development by creating an account on GitHub.
6🔥48👍11❤8🙈2🤯1🎃1
Друзья, только что вышла моя новая большая статья про MCP (Model Context Protocol) — технологию, которая позволяет научить нейросети работать с вашим кодом и инструментами!
• Разбираем отличия MCP от обычных tools
• Создаём собственные инструменты для ИИ
• Подключаем готовые MCP-серверы и обычные тулзы через LangGraph
• Пишем полноценный математический MCP-сервер с нуля
• Деплоим в облако и тестируем с реальными агентами
📖 Читать статью:
👉 https://habr.com/ru/companies/amvera/articles/931874/
💻 Исходный код из статьи:
1️⃣ Полноценный MCP-сервер + клиент для тестирования:
👉 https://github.com/Yakvenalex/FastMCP-Match-Example
2️⃣ Примеры интеграции Tools и MCP с LangGraph и LangChain (полные примеры кода из новой и предыдущей статьи):
👉 https://github.com/Yakvenalex/LangGraphExample
Статья получилась объёмная, но без воды — только практика и рабочий код. После неё сможете создавать собственные MCP-серверы и подключать их к любым ИИ-агентам 🔥
P.S. Если тема зайдёт — планирую серию по LangGraph с детальным разбором графов состояний. Пишите, интересно ли вам!
Please open Telegram to view this post
VIEW IN TELEGRAM
Хабр
Как создать MCP-сервер и научить ИИ работать с любым кодом и инструментами через LangGraph
Всё стремительнее на глазах формируется новый виток в развитии инструментов для работы с искусственным интеллектом: если ещё недавно внимание разработчиков было приковано к no-code/low-code платформам...
4🔥49👍10❤8👎1🤔1🕊1🙈1
Легкий путь в Python
Дополнил репозиторий: https://github.com/Yakvenalex/LangGraphExample недостающим кодом. Теперь там, действительно, полный пример кода из предыдущей и новой статьи.
GitHub
GitHub - Yakvenalex/LangGraphExample: LangGraphExample
LangGraphExample. Contribute to Yakvenalex/LangGraphExample development by creating an account on GitHub.
👍16🔥12🤝2❤1✍1🎄1💘1
Друзья, тема AI-агентов набирает просто космические обороты! 📈
Что происходит:
• Все больше компаний внедряют агентов в рабочие процессы
• LangGraph становится стандартом для сложных AI-систем
• Спрос на разработчиков AI-агентов растет как на дрожжах
• Но качественных материалов на русском языке катастрофически мало
Проблема в том, что большинство туториалов:
❌ Поверхностные - показывают только "hello world"
❌ Разрозненные - кусочки информации без системы
❌ Без практики - теория без реальных примеров
❌ Устаревшие - технологии развиваются быстрее материалов
💡 Поэтому я решил создать мини-курс из 4 статей
Каждая статья = практическое погружение с работающим кодом
📚 План курса:
Часть 1: Архитектура агентов
Фундамент графов состояний - узлы, рёбра, логика без AI
Цель: понять, как думают графы
Часть 2: Диалоговые агенты
Память, сообщения, контекст - интеграция LLM в графы
Цель: создать умного собеседника
Часть 3: Реактивные агенты
Инструменты, действия, MCP - агенты, которые умеют ДЕ-ЛАТЬ
Цель: от слов к реальным действиям
Часть 4: Intelligent RAG
Продвинутая работа с документами как граф состояний
Цель: система, которая умнее обычного RAG
🎯 Что получите:
✅ Системное понимание LangGraph от основ до продвинутых паттернов
✅ Готовый код для каждого примера - копируй и адаптируй
✅ Практические кейсы - решения реальных задач
✅ Пошаговые инструкции - без пропущенных деталей
✅ Архитектурные решения - как строить масштабируемые системы
📅 Расписание:
Старт: через неделю
Периодичность: раз в неделю
Длительность: 4 недели
Формат: статьи на Хабре + эксклюзивные материалы здесь в канале
🔥 Почему сейчас самое время:
2025 год - это год массового внедрения AI-агентов. Те, кто освоит технологии сейчас, получат огромное преимущество на рынке.
Готовы погрузиться в мир умных агентов?
Пишите в комментариях, какие задачи планируете решать с помощью AI-агентов - учту в примерах! 👇
P.S. Все исходники будут доступны в канале. Плюс планирую разборы ваших вопросов в отдельных постах, так что включайте уведомления
Please open Telegram to view this post
VIEW IN TELEGRAM
32🔥107👍20❤7🤝7👏2🎉2🙏2🏆1🫡1🙊1
🔥 Как ГАРАНТИРОВАННО получать JSON из LLM с LangChain
Устали от того, что ваша модель возвращает "почти JSON" или обертывает ответ в лишний текст?
Сегодня покажу bulletproof решение с LangChain! 💪
🎯 Проблема
❌ Куча лишнего текста
❌ Нестабильный формат
❌ Ошибки парсинга
✅ Решение: JsonOutputParser + Pydantic
🚀 Результат
🔍 Что происходит под капотом?
LLM видит ТОЧНУЮ схему → возвращает правильный JSON!
💡 Pro Tips:
🔸
🔸
🔸 Всегда оборачивайте в try-catch для продакшена
🔸 Используйте Pydantic для валидации типов
🎁 Бонус: Отладка цепочки
🏆 Итог
JsonOutputParser + Pydantic = стабильный JSON в 100% случаев!
Больше никаких регулярок для извлечения JSON из текста 🙅♂️
Устали от того, что ваша модель возвращает "почти JSON" или обертывает ответ в лишний текст?
Сегодня покажу bulletproof решение с LangChain! 💪
🎯 Проблема
# Обычный запрос к LLM
response = model.invoke("Расскажи о Франции в JSON")
# Получаем: "Конечно! Вот информация о Франции: {"capital": "Париж"...} Надеюсь, это помогло!"
❌ Куча лишнего текста
❌ Нестабильный формат
❌ Ошибки парсинга
✅ Решение: JsonOutputParser + Pydantic
from langchain_core.output_parsers import JsonOutputParser
from langchain_core.prompts import PromptTemplate
from pydantic import BaseModel, Field
# 1️⃣ Определяем СТРОГУЮ структуру
class CountryInfo(BaseModel):
capital: str = Field(description="Столица страны")
population: int = Field(description="Население")
country_name: str = Field(description="Название страны")
# 2️⃣ Создаем умный парсер
parser = JsonOutputParser(pydantic_object=CountryInfo)
# 3️⃣ Магия format_instructions!
prompt = PromptTemplate(
template="""Информация о стране в JSON:
Страна: {country}
{format_instructions}
ТОЛЬКО JSON, никакого лишнего текста!""",
input_variables=["country"],
partial_variables={"format_instructions": parser.get_format_instructions()}
)
🚀 Результат
chain = prompt | model | parser
result = chain.invoke({"country": "Египет"})
# Получаем чистый dict:
{
"capital": "Каир",
"population": 104000000,
"country_name": "Египет"
}
🔍 Что происходит под капотом?
format_instructions
автоматически генерирует инструкции:The output should be formatted as a JSON instance that conforms to the JSON schema below.
{"properties": {"capital": {"title": "Capital", "type": "string"}, ...}}
LLM видит ТОЧНУЮ схему → возвращает правильный JSON!
💡 Pro Tips:
🔸
temperature=0.0
для максимальной стабильности🔸
max_tokens=500
чтобы не получить роман вместо JSON🔸 Всегда оборачивайте в try-catch для продакшена
🔸 Используйте Pydantic для валидации типов
🎁 Бонус: Отладка цепочки
def debug_chain(input_data):
step1 = prompt.invoke(input_data) # Смотрим промпт
step2 = model.invoke(step1) # Смотрим ответ модели
step3 = parser.invoke(step2) # Смотрим парсинг
return step3
🏆 Итог
JsonOutputParser + Pydantic = стабильный JSON в 100% случаев!
Больше никаких регулярок для извлечения JSON из текста 🙅♂️
🔥38❤11👍6🙏2🤔1🍾1👻1
В ней я рассказал про фундаментальные основы LangGraph — те самые "киты", на которых строятся все современные ИИ-агенты:
📖 Читать на Хабре: "Создание умных AI-агентов: полный курс по LangGraph от А до Я. Часть 1. Архитектура: графы, узлы и состояния"
🧑💻Исходный код: GitHub
Кто уже прочитал? Все ли было понятно?
Please open Telegram to view this post
VIEW IN TELEGRAM
Хабр
Создание умных AI-агентов: полный курс по LangGraph от А до Я. Часть 1. Архитектура: графы, узлы и состояния
Приветствую! Дошли руки для того, чтобы оформить свои знания по теме LangGraph и LangChain в оконченный мини-курс. Сейчас вы читаете первую часть из моей 4-х серийной работы. Как вы поняли из...
14🔥69❤13👍10🥰1🤔1🤯1👌1
Бесплатное сообщество «Легкий путь в Python» 🐍
Друзья, хочу напомнить, что кроме основного канала, где уже свыше 4250 участников, есть отдельное сообщество для общения и обсуждения идей.
💬 Там можно:
— Задавать вопросы и получать ответы от единомышленников
— Обсуждать Python, бэкенд и смежные технологии
— Делиться опытом, проектами и находками
Присоединяйтесь: @PythonPathMasterCommunity
Чем нас будет больше — тем живее и полезнее будут обсуждения.🚀
Друзья, хочу напомнить, что кроме основного канала, где уже свыше 4250 участников, есть отдельное сообщество для общения и обсуждения идей.
💬 Там можно:
— Задавать вопросы и получать ответы от единомышленников
— Обсуждать Python, бэкенд и смежные технологии
— Делиться опытом, проектами и находками
Присоединяйтесь: @PythonPathMasterCommunity
Чем нас будет больше — тем живее и полезнее будут обсуждения.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13❤5👍2😁1🍌1🤝1😘1
OpenAI выкатили две open‑source модели с открытыми весами:
* gpt‑oss‑20B — запускается даже на ноутбуке с 16 ГБ памяти 💻
* gpt‑oss‑120B — почти уровень o4‑mini, для серверов и H100
ollama pull gpt-oss:20b
ollama run gpt-oss:20b
Теперь мощь GPT у вас локально, с открытым кодом и без ограничений по API.
А Сэм Альтман тем временем намекает на скорый релиз GPT‑5
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥40👍11❤5🤯2😍2🎄2😘1
🚀 Подключаем нейросеть к PostgreSQL за 5 минут - минимум кода!
Показываю самый простой способ дать любой нейросети доступ к вашей базе данных PostgreSQL. Всего 30 строк кода! 💪
🔧 Установка зависимостей:
📝 Создаем .env файл:
💻 Полный рабочий код (30 строк!):
🎯 Пример вывода:
✨ Что получаем:
• Нейросеть сама пишет и выполняет SQL запросы
• Отвечает на естественном языке
• Работает с любой PostgreSQL базой
• Всего 30 строк кода!
🔄 Смена нейросети:
Замените
-
-
-
💡 Примеры вопросов:
- "Сколько активных пользователей?"
- "Покажи заказы за вчера"
- "Найди самый популярный товар"
- "Кто не заходил более месяца?"
Просто спрашивайте на обычном языке - нейросеть все поймет! 🚀
Показываю самый простой способ дать любой нейросети доступ к вашей базе данных PostgreSQL. Всего 30 строк кода! 💪
🔧 Установка зависимостей:
# MCP сервер для PostgreSQL
npm install -g mcp-postgres-server
# Python библиотеки
pip install langchain-deepseek langchain-mcp-adapters langgraph python-dotenv
📝 Создаем .env файл:
DB_HOST=localhost
DB_PORT=5432
DB_NAME=your_database
DB_USER=your_user
DB_PASSWORD=your_password
DEEPSEEK_API_KEY=your_api_key
💻 Полный рабочий код (30 строк!):
import asyncio
from dotenv import load_dotenv
from langchain_deepseek import ChatDeepSeek
from langchain_mcp_adapters.client import MultiServerMCPClient
from langgraph.prebuilt import create_react_agent
import os
load_dotenv()
async def get_all_tools():
"""Получение инструментов для работы с PostgreSQL"""
mcp_client = MultiServerMCPClient(
{
"postgres": {
"command": "npx",
"args": ["-y", "mcp-postgres-server"],
"env": {
"PG_HOST": os.getenv("DB_HOST"),
"PG_PORT": os.getenv("DB_PORT"),
"PG_USER": os.getenv("DB_USER"),
"PG_PASSWORD": os.getenv("DB_PASSWORD"),
"PG_DATABASE": os.getenv("DB_NAME"),
},
"transport": "stdio",
},
}
)
return await mcp_client.get_tools()
async def main():
# Получаем инструменты PostgreSQL
tools = await get_all_tools()
# Создаем агента с нейросетью
agent = create_react_agent(
model=ChatDeepSeek(model="deepseek-chat"),
tools=tools,
prompt="Ты помощник для работы с PostgreSQL базой данных.",
)
# Делаем запрос на естественном языке
result = await agent.ainvoke(
{
"messages": [
{
"role": "user",
"content": "Расскажи про пользователя с id 1",
}
]
}
)
# Выводим финальный ответ нейросети
final_message = result["messages"][-1]
print(final_message.content)
# Запуск
asyncio.run(main())
🎯 Пример вывода:
Пользователь с id 1 имеет следующие данные:
- **Имя**: Алексей (админ)
- **Email**: mr.mnogo@gmail.com (подтверждён)
- **Телефон**: не указан
- **Тип входа**: EMAIL
- **Роль**: 1 (предположительно администратор)
- **Юридическое лицо**: нет
- **Физическое лицо**: да
Пароль зашифрован и хранится в хешированном виде.
✨ Что получаем:
• Нейросеть сама пишет и выполняет SQL запросы
• Отвечает на естественном языке
• Работает с любой PostgreSQL базой
• Всего 30 строк кода!
🔄 Смена нейросети:
Замените
ChatDeepSeek
на:-
ChatOpenAI
для GPT-
ChatAnthropic
для Claude -
ChatOllama
для локальных моделей💡 Примеры вопросов:
- "Сколько активных пользователей?"
- "Покажи заказы за вчера"
- "Найди самый популярный товар"
- "Кто не заходил более месяца?"
Просто спрашивайте на обычном языке - нейросеть все поймет! 🚀
🔥43❤11👍10❤🔥1🥰1🦄1
🚀 GPT‑5 теперь с нами — и умнее, чем когда-либо!
OpenAI не просто выкатили GPT‑5. Они сделали кое-что круче — внедрили автоматическую маршрутизацию моделей. Что это значит?
🤖 Больше не нужно выбирать модель вручную.
ChatGPT сам понимает, насколько сложный у тебя запрос, и:
- простые задачи решает супербыстрая mini‑модель,
- а вот на сложные рассуждения подключается мощнейшее ядро GPT‑5 (reasoning engine).
💡 В итоге:
- ты получаешь максимум скорости там, где это нужно,
- и глубокие, логичные ответы там, где нужна «мозговитость».
✨ Что нового принесла GPT‑5?
✅ Ещё более человеческий стиль ответов
✅ Улучшено логическое и цепочечное мышление
✅ Повышена точность кода, формул, reasoning
✅ Быстрее, экономнее, умнее
✅ Всё работает *на лету* — не надо переключать модели
🟢 Доступен всем — даже на бесплатном плане.
🔥 Plus / Pro / Team — получают полный доступ к reasoning‑ядру без серьёзных ограничений.
📺 Презентация и детали
OpenAI не просто выкатили GPT‑5. Они сделали кое-что круче — внедрили автоматическую маршрутизацию моделей. Что это значит?
🤖 Больше не нужно выбирать модель вручную.
ChatGPT сам понимает, насколько сложный у тебя запрос, и:
- простые задачи решает супербыстрая mini‑модель,
- а вот на сложные рассуждения подключается мощнейшее ядро GPT‑5 (reasoning engine).
💡 В итоге:
- ты получаешь максимум скорости там, где это нужно,
- и глубокие, логичные ответы там, где нужна «мозговитость».
✨ Что нового принесла GPT‑5?
✅ Ещё более человеческий стиль ответов
✅ Улучшено логическое и цепочечное мышление
✅ Повышена точность кода, формул, reasoning
✅ Быстрее, экономнее, умнее
✅ Всё работает *на лету* — не надо переключать модели
🟢 Доступен всем — даже на бесплатном плане.
🔥 Plus / Pro / Team — получают полный доступ к reasoning‑ядру без серьёзных ограничений.
📺 Презентация и детали
Openai
GPT-5 is here
Our smartest, fastest, and most useful model yet, with thinking built in. Available to everyone.
❤13🔥12🎉4😱1🕊1😘1