Галоўная / Артыкулы / Практычныя прытамулкі: як ствараць лепшых агентаў AI з LangGraph

Практычныя прытамулкі: як ствараць лепшых агентаў AI з LangGraph

Практычныя нарады: як ствараць лепшых агентаў AI з LangGraph: контракты, перакрыцчы і слоты для коду для команд, якія викорыстоўваюць гэты патэрн.

1873 слоў

Наступныя прыміткі паказваюць практычны шлях для розумэння «Як стварыць лепшыя AI-агенты з LangGraph». Акцэнт ставіцца на контракты, перакрычанняя і месцы для коду, а не на мотывацыйныя аспекты. Калі працуеце на стадіўцы агледзення, спачатку запісайте контракт: неабходныя даны, сігнал успеху і тое, што выканаецца у разе частковага невыпалення. Такі список дапамагае заліцварыць пазнейшыя змены ў кодзе. Документавайце як шлях успеху, так і шлях вярнення да нормы. Перапрыбуткі, людзкія контралі і обработка некоректных паведамленняў є частью продукту, а не пазнейшым дапрацоўкам.

1. Апрант даследжэння: Майстерства агентных рабочых практык

Этап 1 «Апранэнне» плану даследжэння работае наяўней, калі яго спрыяваць як мерыемую структуру. Запісаўце адну «золатую» транскрыпцыю, адны прыклад неудачы і зьмест карэкціі перш чым расширваць масштабы. Валіце маленькія, тэставаныя елементы замест вялікіх скрыптав. Калі якісьць крок не выйшла, прычына неудачы павінна вказваць на адную адпаведальнасць, а не на заплутаны ланцужок задач. Рэзультаты графа павінны быць простымі та з адначыя типамі дадзеных. Вкладаныя структуры маскуюць, калькі вузел запісаў калькія поля, і спакоююць працу пасля перарываў.

2. Рашэння: Самакорэктуючыся агент для пошуку

Этап «2. Рашэнь А» працюе наяўней, калі яго спрыяваць як мерымабельную паверхню. Зафіксавайце адна «золатая» транскрыпцыю, адин прыклад неудачы і запіс пра вярнэнне да пачатковага стану перш чым расширваць масштабы. Спрыявайце гэты этап як кантракт межа вхіднымі даннымі і перакананымі выходнымі рэзультатамі. Дайце назвы артыфактам, задаце критэрыя успеху і адмовіцеся ад тыхоўскага частковага завершэння. Зберагачыце стан графа ў простам і типаванам формате. Вкладзеныя блокі маскуюць, який вузел запісаў канкрэтны поле, і спакшуюць продажчыку роботу пасля перарываў.

Імпорты

Этап імпорту працюе найэфектывней, калі яго розглядаць як меравальную плошчу. Зафіксавце адны ідеальны прыклад, адну справу з бягам і прыметку пра вярнэнне да пачатковага стану перш чым расширваць сферу дзеяння. Запісвайце часы выканання і кост токеноў або запытаў разам з функцыйнальнымі рэзультатамі. Відразлівае прадставленне костаў з самага пачатку запобегае неспакойным рахункам, калі процес пераходзіць з дэмовай среды ў спакульную. Храніце стан графаў у простам і типаваным формате. Вярнутыя структуры маскуюць інфармацыю пра тое, який вузел запісаў канкрэтны поле, і спакшваюць продажчыку роботу пасля перарываў.

import operator
from typing import Annotated, TypedDict, Union
from langgraph.graph import StateGraph, START, END

Спакульны мозг

Этап «Спяшаны ўм» працюе найэфектывней, калі яго розглядаць як вимерную паверхню. Зафіксавайце адна ідеальная транскрыпцыя, адзін прыклад неудачы і запіс пра вярнэнне да попераднего стану, перш чым расширваць сферу дзеяння. Зберагаюце настройкі пазыроўна ад коду прыемлівача. Файлы сераўнавальнага сераўса, хранілішчы секрэтных данных і флагі функцыйяў должны знаходзіцца ў аднам месцы, куда аператары можу выканаць аудыт без неабяжнага чытання всіх дадзеных. Зберагаюце стан графа ў простам і типаваным формате. Вярнутыя блокі дадзеных маскуюць інфармацыю пра тое, який вузел запісаў канкрэтны поле, і спакойваюць працу пасля перерываў.

# 1. State: The agent's shared memory
class AgentState(TypedDict):
  # 'operator.add' lets us append messages instead of overwriting
    messages: Annotated[list[str], operator.add]
    attempts: int
    found_info: bool

Вузлы-рабоцы

Этап «Рабочыя вузлы» працюе найкраща, калі яго розглядаць як вимерную паверхню. Зафіксавце адны ідеальны прыклад роботы, адну ситуацыю неудачы і прыметкі па поверненню да пачатковага стану пры розшырэнні масштаба. Дакументавайце як шлях успеху, так і шлях вярнення да нормальнага стану. Перапрыбуткі, людзкі контроль і обработка некоректных паведамленняў є часткай продукту, а не элементамі пазнейшай дапрацоўкі. Храніце стан графа ў простам і типаваным формате. Вкладныя структуры маскуюць інфармацыю пра тое, який вузел запісаў канкрэтны поле, і спакшуюць возобнавленне роботы пасля перарываў.

# 2. Nodes: Individual 'steps' in the process
def search_node(state: AgentState):
    print(f\n"--- Attempt {state['attempts'] + 1}: Searching ---")
    # Simulating a logic check
    success = state['attempts'] >= 1
    msg = "Success: Found LangGraph info!" if success else "No results found."
    return {"messages": [msg], "attempts": state['attempts'] + 1, "found_info": success}

def refine_query_node(state: AgentState):
    print("\n--- Refining query for better results ---")
    return {"messages": ["System: Query refined."]}

Логіка маршрутацыі

Этап логікі маршрутацыі працюе наяўней, калі яго розглядаць як вимерную структуру. Зафіксавайце адну ідеальную версію, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану, перш чым расширваць сферу дзеяння. Валідзіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выходзіць, прычына неудачы павінна вказываць на адну конкрэтную адпаведальнасць, а не на заплутаны ланцюг дзеяння. Рэжым графа павінен застаўцца простым і з адначыным типам дадзеных. Вярнутыя структуры дадзеных маскуюць інфармацыю пра тое, який вузел запісаў кожны поле, і спакоююць працэс пасля перерываў.

def should_continue(state: AgentState):
    if state["found_info"] or state["attempts"] >= 3:
        return "end"
    return "refine"

Стварэнне графа

Этап стварэння графа працюе наяўней, калі яго спрыяваць як мерыемую паверхню. Зафіксавайце адна ідеальная транскрыпцыю, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану, перш чым расширваць масштабы. Спрыявайце гэты этап як кантракт межа вхіднымі даннымі і паверыжанымі выходнымі рэзультатамі. Даўце назвы артыфактам, задаць критэрыя успеху і адмовіцеся ад тыхняй частковай роботы без паведамлення. Зберагаюце стан графа у простам і типаваным формате. Вярнутыя структуры маскуюць інфармацію пра тое, який вузел запісаў кожны поле, і спакоююць продажчую роботу пасля перарываў.

# 4. Build the Graph
workflow = StateGraph(AgentState)
workflow.add_node("search", search_node)
workflow.add_node("refine", refine_query_node)

workflow.add_edge(START, "search")
workflow.add_conditional_edges("search", should_continue, {"refine": "refine", "end": END})
workflow.add_edge("refine", "search")

Запуск агента

Этап «Запуск агента» працюе найэфектывней, калі яго розглядаць як параметрызаваную сферу. Зафіксавайце адны ідеальны прымер роботы, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану перш чым расширваць масштабы. Запісвайце час выканання задач і кост токеноў або запытаў разам з функцыйнальнымі рэзультатамі. Відразлівае прадставленне костоў запобегае неспакойным рахункам, калі процес пераходзіць з дэмовай среды ў спяльнаныя сераўеры. Храніце стан графа ў простам і типаваным формате. Вярнутыя структуры данных маскуюць інфармацыю пра тое, який вузел запісаў кожны поле, і спакшваюць продовжэнне роботы пасля перарываў.

# 5. Execute
app = workflow.compile()
for output in app.stream({"messages": [], "attempts": 0, "found_info": False}):
    print(output)
--- Attempt 1: Searching ---
{'search': {'messages': ['No results found.'], 'attempts': 1, 'found_info': False}}

--- Refining query for better results ---
{'refine': {'messages': ['System: Query refined.']}}

--- Attempt 2: Searching ---
{'search': {'messages': ['Success: Found LangGraph info!'], 'attempts': 2, 'found_info': True}}

Этап «Запуск агента» працюе найэфектывней, калі яго розглядаць як параметрызаваную сферу. Зафіксавайце адны ідеальны прымер роботы, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану перш чым расширваць масштабы. Дакументавайце як шлях успеху, так і шлях вяснавання проблем. Перапрыбуткі, людзкі контроль і обработка некоректных паведамленняў є часткай продукту, а не чымсь, што дадаецца пазней.

3. Пяць саветаў, як паспрабаваць падняць свой рэванш у LangGraph

Для трэйна «3 пяць советаў» неабходна перад зменым коду визначыць вхідныя даны, адпаведальнага за крок і критэрыя завершэння. Аператары должны магчымае перайсці на гэты крок з вядомага пункта контролю, не спрабоўваючы здогадвацца пра схованы стан. Валіце маленькія, тэставальныя елементы замест большых скрыптаў. Калі крок не выйшоў, прычына неудачы должна вказываць на адну конкрэтную адпаведальнасць, а не на заплутаны процес. Заставляйце людзей апраўдваць тыя крокі, якія ведуць да витрачання грошаў або змены дадзэнняў у прыемным режыме. Компіляцыйныя налашчэння не ўзроўнаўцуюцься з повнай адпаведальнасцю ў бізнесе.

Совет 1: Чыткая схема стану

Для параграфа 1 «Успешна рэалізацыя», перш чым зменіць код, неабходна ясная ваказка пра вхідныя даны, адпаведальнага за кожны крок і критэрыя завершэння. Аператары должны магчымаць перзапуск кроку з вядомай точкі контролю, не прабуючы спадарожваць схованы стан. Спрэчывайце гэты крок як даговор між вхіднымі данымі і перакананымі выходнымі рэзультатамі. Даўце назвы артыфактам, ваказайце критэрыя успеху і не прабывайце прыймаць часткова завершаныя рэзультаты без падтверджэння. Заставьце людзкія падтверджэння для тых крокаў, якія выкалічваюць грошы або зменяюць даны праработкі. Компіляцыйныя налашчэння не є адпаведнікамі пачатковай цэлесообразнасі проекту.

Парада 2: Майстэрства умовных крокаў

Для стадіі Tip 2 Master Conditional неабяжна ўзначыць вхідныя даны, адпаведальнага за крок і крэтыры завершэння пры змяне коду. Аперацыйныя працавнікі должны магчымае запускаць крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Запісваць час выконання і кост токенаў або запытаў разам з функцыйнальнымі рэзултатамі. Відразы костаў з самага пачатку запобегае неспакойным рахункам, калі траекторыя пераходзіць з дэмавай версіі ў спяльныя среды. Апраўдка чалавека неабходна для тых крокаў, якія выкарыстоўваюць грошы або зміняюць даны ў працэсе. Працэс складання коду не ўзначае повнайсткі готовасці продукту для эксплуатацыі. Для стадіі Tip 2 Master Conditional неабяжна ўзначыць вхідныя даны, адпаведальнага за крок і крэтыры завершэння пры змяне коду. Аперацыйныя працавнікі должны магчымае запускаць крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Неабяжна задокументаваць як шлях успеху, так і шлях вярнення да нормальнага стану. Перапрыбуткі, апраўдка чалавека і обработка непрацэсуючых паведамленняў є часткай продукту, а не елементамі, якія дадаюцца пазней.

Парадакт 3: Не забывайце прымкласць (стварэнне пунктавых контролі)

Кал працуеце над парадактом 3 «Не стварайце стэйджы», спачатку запісуйце умовы: неабяжлівыя данні, сигнал успеху і тое, што выходзіць па частковай нявыполненасці. Такі список контролю дапамагае залічваць пазнейшыя змены ў кодзе чыста. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Кал якісь крок не выйшоў, прычына нявыполненасці павінна вказываць на адну конкрэтную адпаведальнасць, а не на заплутаны ланцюг задач. Стварайце пунктавыя контролі пасля дорогіх крокаў. Програма не павинна зноў выканаць той самы вызов LLM, калі аператар праканае пазнейшы вузел.

Парадакт 4: Акцэптуйце участку чалавека

Калі працюеце над патронам 4 «Прыемліце стадію», спачатку запісайце контракт: неабяжлівыя даны, сигнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі список пераконтроўкаў дапамагае заліцвачыць пазнейшыя змены ў кодзе. Спрыймайце гэтую стадію як контракт межа данымі і перакананымі выходамі. Дайце назву артыфактам, задаце перакананні успеху і адмовіцеся ад тыхоўскага частковага завершэння. Зробіце пераконтроўку пасля дорогіх крокаў. Система вярнення не павінна знову ставіць плату за той самы вызов LLM, калі аператар прабуе зноў запрацаваць пазнейшы вузел.

Патран 5: Чыніце вашы вузлы маленькімі

Калі працуеце за падказкай №5 «Зберагачыце свой этап», спачатку запісайце умовы викорыстання: неабяжлівыя данні, сигнал успеху і тое, што выканаецца у разе частковага нявыполнення. Такі список контролю дапамагае заліцвачыць пазнейшыя змены ў коде. Запісвайце час выконання і кост токеноў або запытаў праза функцыйнае рэзультат. Відразлівасць костаў з самага пачатку запобегае неспакойным рахункам, калі процес пераходзіць з дэмаверсіі ў спяльныя сераўы. Стварайце контрольныя пункты пасля дорогіх крокаў. Система вярнення не павінна знову нараховваць косты за той самы вызыв LLM, калі аператар прабуе зноў выконаць пазнейшы элемент. Калі працуеце за падказкай №5 «Зберагачыце свой этап», спачатку запісайце умовы викорыстання: неабяжлівыя данні, сигнал успеху і тое, што выканаецца у разе частковага нявыполнення. Такі список контролю дапамагае заліцвачыць пазнейшыя змены ў коде. Дакументавайце як шлях успеху, так і шлях вярнення да нормы. Прабулі, людзкія контрольныя пункты і обработка некоректных запытаў ёсць часткай продукту, а не пазнейшым дапрацоўкам.

Практычны прыемлень

Этап практычнага прыцэшання работае наяўней, калі яго спрыяваць як мерыемую паверхню. Зберагучы адны ідеальны прыклад, адзін кейс неудачы і запіс пра вярнэнне да пачатковага стану, перш чым расширваць масштаб. Валідзіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выйшае, неудача павінна вказваць на адную адпаведальнасць, а не на заплутаны ланцюг задач. Рэзультаты графа павінны быць простымі та з адначытаемым типам. Вярнутыя структуры маскуюць інфармацыю пра тое, який вузел запісаў канкрэтны поле, і спакшуюць продовжэнне роботы пасля перерываў.

Справакі

Этап справак работае наяўней, калі яго спрыяваць як мерыемую паверхню. Зберагучы адны ідеальны прыклад, адзін кейс неудачы і запіс пра вярнэнне да пачатковага стану, перш чым расширваць масштаб. Спрыявайце гэты этап як даговор межа вхіднымі данымі та перакананымі выходнымі рэзультатамі. Даўайце назвы артыфактам, задаюце критэрыя успеху та адмовляйцеся ад беззвучнага частковага завершэння.

Чек-ліст для эксплуатацыі