Що насправді пропонує LangChain окрім простого виклику інструментів
Ручно створені цикли інструментів навчають машинне обладнання; LangChain переміщує схеми, історію та оркестрацію агентів за абстракціями, щоб логіка продукту залишалась у фокусі.
Додатки на основі ШІ можуть безпосередньо викликати API LLM та контролювати кожну деталь. У цьому підході є справжня перевага — логіка керування є видимою. Однак він також має свої витрати. Як тільки продукт починає обробляти більше ніж один етап розмови, з’являється багато коду, який насправді не є частиною логіки продукту.
Типові етапи включають:
- Визначення інструментів та схем
- Надсилання інструментів до моделі
- Обробка відповідей від інструментів
- Виконання запитуваних функцій
- Повернення результатів інструментів
- Зберігання історії розмов
- Координація кількох викликів інструментів
- Керування циклом модель↔інструмент
Ці кроки чудово підходять для навчання. У додатку для доставки їх повторення вручну стає основною роботою.
Фреймворки на кшталт LangChain існують для того, щоб усунути це повторення.
Витрати від виконання всього вручну
User
↓
LLM API
↓
LLM requests calculator
↓
Our code detects the request
↓
Our code executes calculator()
↓
Our code sends the result back
↓
LLM generates the final answer
from langchain.tools import tool
def calculator(a: float, b: float, operation: str):
"""Perform a mathematical calculation."""
if operation == "add":
return a + b
elif operation == "subtract":
return a - b
elif operation == "multiply":
return a * b
elif operation == "divide":
if b == 0:
return "Cannot divide by zero."
return a / b
return "Unknown operation."
from langchain_google_genai import ChatGoogleGenerativeAI
model = ChatGoogleGenerativeAI(
model="gemini-3.5-flash-lite"
)
model_with_tools = model.bind_tools([calculator])
from langchain_google_genai import ChatGoogleGenerativeAI
model = ChatGoogleGenerativeAI(
model="gemini-3.5-flash-lite"
)
model_with_tools = model.bind_tools([calculator])
response = model_with_tools.invoke(
"What is 2 + 6?"
)
Модель може відповісти структурованим запитом на використання інструменту, наприклад:
calculator(
a=2,
b=6,
operation="add"
)
bind_tools() не запускає калькулятор. Він лише інформує про наявність інструменту: модель може звернутися до нього за потреби.
Де проявляється абстракція
Уручну інженер керує довгою послідовністю операцій:
Create function
↓
Create tool schema
↓
Send schema to LLM
↓
Receive tool call
↓
Extract arguments
↓
Execute function
↓
Create tool result
↓
Send result back to LLM
↓
Check if another tool call is needed
↓
Repeat
За допомогою LangChain більша частина цієї послідовності знаходиться у середовищі виконання агента. Увага зосереджується на:
What capability does my application need?
↓
Define the tool
↓
Give it to the model
↓
Build the application
Складність не зникла — вона просто перемістилася за певну межу.
Що насправді досягається
LangChain не винаходить механізми виклику інструментів; сирі API вже підтримують їх. Користь полягає не у повторному створенні схем, циклів та механізмів обробки історії для кожної функції. Час витрачається на розв’язання питань, пов’язаних із продуктом:
- Що повинен вміти робити асистент?
- Які інструменти мають бути у сфері дії?
- Що відбувається, коли інструмент не працює?
Чи повинен кожен проект використовувати фреймворк?
Не завжди. Використання ручно створених інструментів залишається найкращим способом навчання. Один раз пройшовши весь процес:
LLM
↓
Tool call
↓
Application
↓
Tool execution
↓
Tool result
↓
LLM
зробить подальшу роботу з фреймворком менш загадковою. Використання абстракцій без розуміння проблеми, яку вони вирішують, ускладнює дебаггінг.
Стабільна звичка: спочатку вивчити основні механізми, а потім використовувати абстракції, щоб не переписувати ці механізми для кожного завдання. Команди, які пропускають перший крок, часто сприймають LangChain як щось магічне та зупиняються, коли схема інструменту чи політика повторних спроб починає працювати некоректно. Команди, які зберігають обидві навички, просуваються швидше, не втрачаючи можливості переходити до базових рішень у разі виникнення проблем у продакшені.