LangChain проти LangGraph: ролі, користувачі та коли варто обрати кожен з них
Що належить LangChain та що належить LangGraph: ланцюги проти стійких графів, для кого насправді призначена кожна бібліотека, та чек-лист для вибору однієї з них.
У цьому посібнику створюється функціональний шлях для керування проектом: LangChain та LangGraph Explained: що це таке, хто ними користується та як створювати AI-агентів за їх допомогою. Особлива увага приділяється контрактам, перевіркам та коду, який можна додати до репозиторію без необхідності здогадуватися щодо його призначення. Для отримання загального огляду необхідно визначити вхідні дані, власника кроку та критерії завершення перед зміною коду. Оператори повинні мати можливість перезапустити крок з відомої точки контролю, не здогадуючись про прихований стан. Конфігурацію слід тримати окремо від коду програми. Файли середовища, сховища конфіденційних даних та флаги функцій мають знаходитися в одному місці, яке оператори можуть перевірити, не читаючи весь граф.
llm = ChatOpenAI()
if (userAskedForFlights()) {
callFlightApi();
}
if (resultsAvailable()) {
summarizeResults();
}
User Question
↓
Reason
↓
Search Tool
↓
Analyze Result
↓
Answer
User Request
|
+---- Search
|
+---- Database
|
+---- Human Approval
|
v
Continue
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
model="gpt-4o"
)
def get_weather(city):
return weather_api(city)
tools = [get_weather]
Need weather information
weather = get_weather("Bangalore")
{
"temperature": 34,
"condition": "Sunny"
}
The current temperature in Bangalore is 34°C and the weather is sunny.
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
model="gpt-4o"
)
response = llm.invoke(
"Explain microservices in simple terms."
)
print(response.content)
User Request
|
v
Analyze Request
|
+---- Search Agent
|
+---- Database Agent
|
+---- Human Review
|
v
Generate Final Response
from langgraph.graph import StateGraph
builder = StateGraph(AgentState)
builder.add_node("search", search_node)
builder.add_node("answer", answer_node)
builder.set_entry_point("search")
builder.add_edge("search", "answer")
graph = builder.compile()
class AgentState(TypedDict):
question: str
search_result: str
answer: str
Example:
{
"question": "What is LangGraph?",
"search_result": "",
"answer": ""
}
def search_node(state):
...
builder.add_node("search", search_node)
builder.add_node("answer", answer_node)
builder.add_edge(
"search",
"answer"
)
builder.set_entry_point("search")
graph = builder.compile()
State
│
▼
┌─────────────┐
│ Search │ ← Node
└─────────────┘
│
│ ← Edge
▼
┌─────────────┐
│ Answer │ ← Node
└─────────────┘
│
▼
Updated State
Повідомлення від AI Mind
Для проекту «Повідомлення від AI Mind» необхідно перед зміною коду визначити вхідні дані, власника кроку та критерії завершення. Оператори мають змогу перезапустити крок з відомої точки контролю, не намагаючись вгадати прихований стан. Необхідно одночасно задокументувати шлях успішного виконання та шлях відновлення. Повторні спроби, людський контроль та обробка некоректних повідомлень є частиною продукту, а не етапом подальшої оптимізації. Схеми інструментів слід суворо обмежити. Широкі параметри у вигляді вільного тексту сприяють втручанню ззовні та ускладнюють аудити.
Чек-лист операцій
Для контрольного списку операцій необхідно визначити вхідні дані, відповідальну особу за кожен крок та критерії завершення перед зміною коду. Оператори повинні мати можливість перезапустити крок з відомої точки контролю, не намагаючись вгадати прихований стан.
Записуйте час виконання та витрати поруч із функціональними результатами. Рання видимість допомагає уникнути несподіваних рахунків під час переходу від демо-середовища до спільних.
Створюйте точки контролю після дорогих викликів моделей, щоб повторна спроба не призводила до подвійного оплати однакової роботи.
Зберігайте стан графа у простій та типованій формі. Вкладені структури приховують інформацію про те, який вузол заповнив яке поле, що ускладнює продовження роботи після перерв.
Напишіть короткий посібник: як змінювати ключі, як спорожнювати чергу, як скасовувати останні зміни.
Віддавайте перевагу невеликим, тестованим одиницям коду перед складними скриптами. Коли крок зазнає невдачі, причина має вказувати на конкретну відповідальність, а не на заплутану послідовність операцій.
Перш ніж запускати стек у продакшн, заморозьте версії, створіть ідеальний запис для критичного шляху та підтвердьте кроки відкату. У спільних середовищах необхідні обмеження на частоту запитів, перевірки прав власності та чіткий власник для зміни секретів. Краще обирати надійність, ніж креативні одноразові демонстрації.
Для посилення безпеки, згідно з приміткою 0, необхідно визначити вхідні дані, власника кроку та критерії завершення ще до зміни коду. Оператори повинні мати можливість перезапустити крок з відомої точки контролю, не здогадуючись про прихований стан.
Зберігайте конфігурацію окремо від коду додатку. Файли середовища, сховища секретів та флаги функцій мають знаходитися в одному місці, яке оператори можуть перевіряти, не читаючи весь кодовий граф.
Розділяйте планування та виконання інструментів. Планувальник пропонує; виконавець здійснює зміни; перевіряючий порівнює результати з поставленими цілями.
Для примітки щодо посилення безпеки 1 необхідно визначити вхідні дані, власника кроку та критерії завершення перед зміною коду. Оператори повинні мати можливість перезапустити крок з відомої точки контролю, не намагаючись вгадати прихований стан.
Краще використовувати невеликі, тестовані одиниці коду замість об’ємних скриптів. Коли крок зазнає невдачі, причина має вказувати на конкретну відповідальність, а не на складну структуру обробки даних.
Суворо обмежуйте схеми інструментів. Широкі параметри у вигляді вільного тексту сприяють втручанню ззовні та ускладнюють аудити.
Для примітки щодо посилення безпеки 2 також необхідно визначити вхідні дані, власника кроку та критерії завершення перед зміною коду. Оператори повинні мати можливість перезапустити крок з відомої точки контролю, не намагаючись вгадати прихований стан.
Фіксуйте час виконання та витрати разом із функціональними результатами. Чітка відстежуваність запобігає несподіваним витратам під час переходу з демо-середовища до спільних середовищ.
Пункт перевірки після дорогих викликів моделей, щоб повторна спроба не стягувала плату за ту саму роботу.
Для пункту 3 щодо посилення безпеки необхідно визначити вхідні дані, власника кроку та критерії завершення перед зміною коду. Оператори повинні мати можливість знову виконати крок з відомого пункту перевірки, не здогадуючись про прихований стан.
Документуйте як успішний, так і відновлювальний сценарії. Повторні спроби, людський контроль та обробка некоректних повідомлень є частиною продукту, а не етапом подальшої оптимізації.
Розділіть планування від виконання інструментами. Планувальник пропонує; виконавець здійснює зміни; перевіряючий порівнює результати з поставленими цілями.