Практычныя прытамулкі: Langchain, частка 17 — Стварэнне агента з початку до канцоў
Практычныя прытамулкі: Langchain, частка 17 — Стварэнне агента з початку до канцоў: контракты, пераказы та слоты для коду для команд, якія викорыстоўваюць гэты патэрн.
У гэтым карыце парадоксу перадстаўляецца шлях ад сыр'ёчных матэрыялаў да рабочай системы для: Langchain Частка 17 — Стварэнне агента з початку да канца. Акцэнт ставіцься на практычныя крокі, чыстае перакананне і код, які можна проста дадаць у репазітарый без неабяснення меты. У стадзіі агульнага відгледу неабходна практычна апісацыя вхідных дадзенняў, адпаведальнага за крок і крэатарыяў завершэння працы перш чым зменіць код. Аператары должны магчымае перадзваніць крок з вядомай точкі контролю без неабяснення схованых станоў. Конфігурацыю трэба залічыць парадзельной ад коду прыкладнення. Файлы сераўіса, хранільнікі секрэтных дадзенняў і флагі функций должны знаходзіцца ў аднам месцы, якое аператары можаць пераглядаць без падчытання всіх элементаў системы.
Характэрыстыкі AI-агента
Калі працуеце над стадзіяй «Характэрыстыкі AI», спачатку запісайце контракт: неабяжлівыя даннэ, сігнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі список контроля дапамагае заліцварыць змяны ў кодзе.
КОД:
Калі працуеце на стадыі КОД, спачатку запісайце умовы працы: неабяжлівыя даны, сігнал успеху і тое, што выходзіць пад частыя неудачы. Такі список контролю дапамагае залічваць змяны ў кодзе чыста. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выйшае, неудача должна вказваць на адну конкрэтную адпаведальнасць, а не на заплутаны ланцюг задач. Зробіце перапактаванне пасля дорогіх крокаў. Програма не должна зноў ставіць плату за той самы вызов LLM, калі аператар праказвае спробу на болей пазнім элементе.
from langchain_openai import ChatOpenAI
from langchain_core.tools import tool
import requests
from langchain_community.tools import DuckDuckGoSearchRun
from langchain.agents import create_react_agent, AgentExecutor
from langchain import hub # It is a place from where we can get many type of prompts, so if we want any predefined prompt, we can get it from here
# Step 1: Creating tool definitions
search_tool = DuckDuckGoSearchRun()
@tool
def get_weather_data(city: str) -> str:
"""
This function fetches the current weather data for a given city
"""
url = f'https://api.weatherstack.com/current?access_key=4d1d8ae207a8c845a52df8a67bf3623e&query={city}'
response = requests.get(url)
return response.json()
llm = ChatOpenAI()
# Step 2: Pull the ReAct prompt from LangChain Hub
prompt = hub.pull("hwchase17/react") # pulls the standard ReAct agent prompt
# The agent which we are gonna make is a ReAct agent (reasoning + action = ReAct)
# ReAct is a design pattern
# Step 3: Create the ReAct agent manually with the pulled prompt
agent = create_react_agent(
llm=llm,
tools=[search_tool, get_weather_data],
prompt=prompt
)
# Step 4: Wrap it with AgentExecutor
agent_executor = AgentExecutor(
agent=agent,
tools=[search_tool, get_weather_data],
verbose=True # whatever the agent thinks, it will be visible to us
)
# Step 5: Invoke
response = agent_executor.invoke({"input": "Find the capital of Madhya Pradesh, then find it's current weather condition"})
print(response)
'''
Entering new AgentExecutor chain...
I should first find out the capital of Madhya Pradesh and then check the current weather condition for that city.
Action: duckduckgo_search
Action Input: "capital of Madhya Pradesh" Madhya Pradesh, state of India that is situated in the heart of the country. It has no coastline and no international frontier. Its physiography is characterized by low hills, extensive plateaus, and river valleys. The capital is Bhopal, in the west-central part of the state. Bhopal, city, capital of Madhya Pradesh state, central India. Situated in the fertile plain of the Malwa Plateau, the city lies just north of the Vindhya Range, along the slopes of a sandstone ridge. It is a major rail junction and has an airport. Pop. (2001) 1,437,354; (2011) 1,798,218. Bhopal was Indore (/ ɪ n ˈ d ɔːr / ⓘ; ISO: Indaura, Hindi: [ɪn̪d̪ɔːr]) is the largest and most populous city in the Indian state of Madhya Pradesh. [15] It is the commercial hub of Madhya Pradesh. It is consistently ranked as the cleanest city in India. [16] It serves as the headquarters of both the Indore District and the Indore Division.It is also considered the state education hub and ... In 1956, Bhopal became part of the state of Madhya Pradesh. Bhopal district was carved out on October 2, 1972, and is one of the 45 districts in the state. 4. Why is Bhopal famous? Bhopal is the capital city of the Indian state of Madhya Pradesh. It is known as the City of Lakes due to the presence of various natural and artificial lakes. In 1948, Madhya Bharat was created, with Indore designated as its summer capital and Gwalior as its winter capital. This arrangement highlights Indore's significance even then. However, Madhya Bharat was a temporary entity, and the map of central India was soon to be redrawn. The Creation of Madhya PradeshNow that I know the capital of Madhya Pradesh is Bhopal, I can use the get_weather_data function to check its current weather condition.
Action: get_weather_data
Action Input: Bhopal {'request': {'type': 'City', 'query': 'Bhopal, India', 'language': 'en', 'unit': 'm'}, 'location': {'name': 'Bhopal', 'country': 'India', 'region': 'Madhya Pradesh', 'lat': '23.267', 'lon': '77.400', 'timezone_id': 'Asia/Kolkata', 'localtime': '2025-05-01 17:52', 'localtime_epoch': 1746121920, 'utc_offset': '5.50'}, 'current': {'observation_time': '12:22 PM', 'temperature': 40, 'weather_code': 116, 'weather_icons': ['https://cdn.worldweatheronline.com/images/wsymbols01_png_64/wsymbol_0002_sunny_intervals.png'], 'weather_descriptions': ['Partly Cloudy '], 'astro': {'sunrise': '05:47 AM', 'sunset': '06:48 PM', 'moonrise': '08:38 AM', 'moonset': '11:01 PM', 'moon_phase': 'Waxing Crescent', 'moon_illumination': 15}, 'air_quality': {'co': '510.6', 'no2': '1.665', 'o3': '180', 'so2': '10.175', 'pm2_5': '29.045', 'pm10': '68.635', 'us-epa-index': '2', 'gb-defra-index': '2'}, 'wind_speed': 12, 'wind_degree': 302, 'wind_dir': 'WNW', 'pressure': 1005, 'precip': 0, 'humidity': 7, 'cloudcover': 25, 'feelslike': 40, 'uv_index': 1, 'visibility': 6, 'is_day': 'yes'}}The current weather condition in Bhopal, Madhya Pradesh is partly cloudy with a temperature of 40°C.
Final Answer: The capital of Madhya Pradesh is Bhopal, and the current weather condition in Bhopal is partly cloudy with a temperature of 40°C.
> Finished chain.
{'input': "Find the capital of Madhya Pradesh, then find it's current weather condition", 'output': 'The capital of Madhya Pradesh is Bhopal, and the current weather condition in Bhopal is partly cloudy with a temperature of 40°C.'}
'''
response['output']
# The capital of Madhya Pradesh is Bhopal, and the current weather condition in Bhopal is partly cloudy with a temperature of 40°C.
ReAct
Калі працуеце з фазай ReAct, спачатку запісуйце контракт: неабяжлівыя данні, сигнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі список перакладоў заходзіць пазнейшыя змены коду ў правільным направленні. Спрыяйце цій фазе як контракту межа даннімі і перакананымі выходамі. Дайце назву артыфактам, задаць правіла пераканання успеху і адмовіцеся ад тыхоўскага частковага завершэння. Зробіце перапытаку пасля дорогіх крокаў. Система вярнення не павінна зноў ставіць плату за той самы вызов LLM, калі аператар прабуе зноў запрацаваць пазнейшы вузел. Калі працуеце з фазай ReAct, спачатку запісуйце контракт: неабяжлівыя данні, сигнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі список перакладоў заходзіць пазнейшыя змены коду ў правільным направленні. Зберагачыце настройкі параду ўнутры коду прыемлівача. Файлы сераў, хранільнікі секрэтных дадзеных і флагі функций павінны знаходзіцца ў аднам месцы, якое аператары можаць пераглядаць без неабяжлівага чытання всей структуры.
Прыклад:
Этап «Прыцэп» працюе найкраща, калі яго спрыяваць як мерыемую паверхню. Зафіксавце адна ідеальная версія, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану перш чым расширваце сферу дзейнасці. Дакументавайце як шлях успеху, так і шлях вярнэння. Перапрыбуткі, людзкія контраліны і обработка некоректных паведамленняў ёсць частью продукту, а не пасляднім дапрацоўкам. Храніце стан графа ў простым і типаванам формате. Вярнутыя блокі маскуюць, який вузел запісаў канкрэтны поле, і спакшуюць продовжэнне роботы пасля перарываў.
Answer the following questions as best you can. You have access to the following tools:
{tools}
Use the following format:
Question: the input question you must answer
Thought: you should always think about what to do
Action: the action to take, should be one of [{tool_names}]
Action Input: the input to the action
Observation: the result of the action …
(this Thought/Action/Action Input/Observation can repeat N times)
Thought: I now know the final answer
Final Answer: the final answer to the original input question
Begin!
Question: {input}
Thought:{agent_scratchpad} —
Чаму яго называюць «Scratchpad»?
Прынцып «Чаму» работае найкраща, калі яго спрыяваць як мерыемую паверхню. Запісаце адна «золатая» транскрыпцыя, адзін прыклад неудачы і прыметку па адвярненні роботы, прытаму як толькі пачнёце расширяць масштабы. Вольба якраз на корыстце маленькіх, тэставаных елементаў прыместа большым скрыптам. Калі якісь крок не выйшае, прычына неудачы павінна вказываць на адну конкрэтную адпаведальнасць, а не на заплутаны ланцюг задач. Рэжым графа павінен застацца простым і з адначыным типам дадзеных. Вярнутыя структуры дадзеных маскуюць інфармацыю пра тое, канферны ўзел запісаў канкрэтнае поле, і спакойваюць працу пасля перарываў.
Разлік между Agent і AgentExecutor
Разлік меж агента і етапу найкраща працюе, калі яго розглядаюць як вимерную паверхню. Зафіксуйце адзін ідеальны прыем дадзеных, адзін кейс неудачы і прыказку па вярненні да пачатковага стану пры расшырэнні масштаба. Разглядзайце гэты етап як кантракт меж вхіднымі дадзенымі і паўнастацэннымі выхіднымі результатамі. Дайце назвы артыфактам, задаце критэрыя успеху і адмовіцеся ад тыхоўскага частковага завершэння. Храніце стан графа ў простам і типаваным формате. Вкладзеныя блокі маскуюць, який вузел запісаў канкрэтны поле, і спакшуюць продажчыку працэю пасля перарываў. Разлік меж агента і етапу найкраща працюе, калі яго розглядаюць як вимерную паверхню. Зафіксуйце адзін ідеальны прыем дадзеных, адзін кейс неудачы і прыказку па вярненні да пачатковага стану пры расшырэнні масштаба. Храніце настройкі за межамі коду прыемленае. Файлы сераўіса, хранальнікі секрэтных дадзеных і флагі функцыйяў должны знаходзіцца ў аднам месцы, куды аператары можаць адбавляць контроль без неабходнасці чытання всего графа.
Прыклад: Мы хачамы знайсці тэмпературу ў Делі і хачамы, каб яя была падвоўжана на 10
Для прыкладу, які мы хачам выконаць, пярэд тым, як зменіць код, неабходна ўзгадка прынтаваў, адпаведальнага за крок і крэтарыяў завершэння. Аператары должны магчымае перазваляць крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Неабходна задокументаваць як шлях успеху, так і шлях вярнення. Перапрыбуткі, людзкія перакрыцця і обработка некоректных паведамленняў є часткай продукту, а не чымсь, што дадаецца пазней. Неабходна людзкая апраўка для тых крокаў, якіе выкорыстоўваюць грошы або зменяюць даны варабочага прыемніка. Працэс складання коду не ўзроўнаважваецца цэлыснасцю бізнес-процэса.
Рабочы процес межу Агента-выконавца і Агентам
Для рабочага практыку між стадзіям Выканніка задачы неабходна ўскладніць вхідныя даны, адпаведальную особу за кожны крок і критэрыя завершэння пры перадзеіснавленні коду. Аператары должны магчымаць перзапуск крока з вядомай точкі контролю, не прабуючы спадарожваць схованы стан. Лепш выбіраць маленькія, тэставаныя елементы замест большых скрыптов. Калі крок не выканаецца, прычына нехасабності должна вказываць на адну конкрэтную адпаведальнасць, а не на заплутаны ланцюг задач. Неабходна людская апраўда для тых крокаў, якія выкарыстоўваюць грошы або зміняюць даны ў працэсе виробніцтва. Праця ў часе компілявання не є гарантыяй полнай адпрацоўкі бізнес-процэса.
Абмежэння Langchain
Для стадіі Limitation of Langchain неабяжна ўзначыць вхідныя даны, адпаведальнага за крок і крэтырыя завершэння пры зміне коду. Аперацыйныя працавнікі должны магчымае запускаць крок з вядомай точкі контролю, не падозрываючы схованы стан. Спрыяць гэтай стадіі як кантракту межа вхіднымі данымі і перакананымі выходнымі рэзультатамі. Даць назвы артыфактам, узначыць перакананні успеху і адмовіцца ад тых падчасовых завершэнняў, калі няма чыткай інформаціі. Заставіць людзкую апраўдку для тых крокаў, якія выкарыстоўваюць грошы або зміняюць даны для працы. Компіляцыйныя налашчэнні не ўзначаюць павнае выпанення бізнес-задач.
1. Проблема «Чорнай скрынкі»
Для стадіі «1 The Black Box» неабяжна ўзначыць вхідныя даны, адпаведальнага за крок і крэтырыя завершэння пры зміне коду. Аперацыйныя працавнікі должны магчымае запускаць крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Запісваць час выконання і кост токеноў або запытаў праза функцыйнае рэзультат. Відкрытыя даны пра косцы запобегаюць неспакоўным рахункам, калі траекторыя пераходзіць з дэмавай версіі ў спяльныя среды. Пры кроках, якія витрачаюць грошы або зменяюць даны ў працэсе, неабяжна ўключыць людзкія апраўданні. Прыўязка на час компілявання не ўзначае повнайсткі рэалізавання бізнес-функцыйяў.
Прыклад:
Для стадіі Прыклад неабяжна ўзначыць вхідныя даны, адпаведальнага за крок і крэтыяры завершэння пры змены коду. Аперацыйныя працавнікі павінны магчымае перазапускаць крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Конфігурацыю трэба залічыць пазначкай ад коду прыемленае. Файлы сераўіса, хранільнікі секрэтных дадзеных і флагі функцыйяў павінны знаходзіцца ў адном месцы, якое працавнікі можуць пераглядаць, не чытаючы весь граф. Прыявленне людзкага аправарэння павінна быць прыеўключана для рэшэнняў, якія витрачаюць грошы або зменяюць даны ў працэсе. Прыўязка на час компілявання не є падтверджэннем полнайасці бізнес-процэсаў.
2. Цыклі і петлі (частка «Граф»)
Для стадіі 2 «Цыклы і петлі» неабяжна ўзначыць вхідныя даны, адпаведальнага за крок і крэтырыя завершэння пры перадзеі коду. Аперацыйныя працавнікі должны магчымае запускаць крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Неабяжна задокументаваць як шлях успеху, так і шлях вярнення. Перапрыбуткі, людзкіе пераказы і обробка некоректных паведамленняў є часткай продукту, а не яго пазнейшай дапрацоўкі. Неабяжна атрымаць людзкую згоду для тых крокоў, якія выкарыстоўваюць грошы або зменяюць даны праўдзівай роботы. Працэс кампіляцыі не ўзначае повнайшага адпрацоўвання продукту з точкі зору бізнеса.
Прыклад:
Для стадіі Прыклад задаюцься вхідныя даны, адміністратар крока і крэтэрыя завершэння пры зміне коду. Аперацыйныя працавнікі должны магчымаю ціха перазапускаць крок з вядомай точкі контролю, не падозрываючы схованы стан. Лепш выбіраць маленькія, тэставаныя елементы замест большых скрыптов. Калі крок не выконваецца, прычына неудачы должна вказываць на адзін конкрэтны аспект, а не на заплутаны процес. Пры роботах, якія витрачаюць грошы або зменяюць даны у працэйнай сістэме, неабходна людская празглядка. Працэ на этапе компіляцыі не ўзначае повнайсткай реалізацыі бізнес-функцый.
3. Кантроль стану (частка «Стойкасць»)
Для стадіі 3 State Management неабяжна ўзначыць вхідныя даны, адпаведальнага за крок і крэтырыя завершэння пры зміне коду. Аперацыйныя працавнікі должны магчымае перайсці на гэты крок з вядомага пункта контролю, не спрабоўваючы здогадвацца пра схованы стан. Спрацавляйце гэтую стадію як кантракт межа вхіднымі данымі і перакананымі выходнымі рэзультатамі. Даўце назвы артыфактам, узначыце крэтырыі успеху і адмовіцеся ад беззвучнага частковага завершэння. Заставіце людзкую апраўду на тых элементах, якія витрачаюць грошы або зменяюць даны для працы. Підключэнне пад час компілявання не ўзначае повнасці бізнес-процэсу. Для стадіі 3 State Management неабяжна ўзначыць вхідныя даны, адпаведальнага за крок і крэтырыя завершэння пры зміне коду. Аперацыйныя працавнікі должны магчымае перайсці на гэты крок з вядомага пункта контролю, не спрабоўваючы здагадвацца пра схованы стан. Зберагачыце настройкі параду ад коду прыемліка. Файлы сераўіса, хранільнікі секрэтных данных і флагі функцыйяў должны знаходзіцца ў аднам месцы, якое працавнікі можу аудытаваць, не чытаючы весь ланцуг прыемліка.
Прыёмак:
Калі працуеце над стадзіяй «Прыёмак», спачатку запісайце умовы контракту: неабяжлівыя данні, сигнал успеху і тое, што выходзіць па частый неякосці. Такі список пераканае ў тым, што пазнейшыя змены коду буду чыстымі. Запісуйце адно «вдалае» выкананне і адна сцэнараў неякосці разам. Перапрыбуткі, людзкія контралі і обработка некоректных паведамленняў є частью продукту, а не пазнейшым дапрацоўкам. Зробіце перакан пасля дорогіх крокаў. Програма не должна зноў вырачываць адпаведную плата за вызов LLM, калі аператар перапрыбуе пазнейшы вузел.
Контрольны список для эксплуатацыі
Стадзія «Контрольны список для эксплуатацыі» працюе найэфектывней, калі яе спрыямаць як мерыемую плошчу. Запісайце адна ідеальная транскрыпцыю, адну сцэнаруў неякосці і прыметку па анулюванню змян перш чым расширваце масштаб. Запісуйце часы выканання і кост токеноў або запытаў разам з функцыйнальнымі рэзультатамі. Відразлівасць костаў з самага пачатку запобегае неспакойным вырачункам, калі процес пераходзіць з дэмаверсіі ў спяльныя сераўы.
Зберагаюце стан графа ў простам і типаваным формате. Вкладаныя блобы маскуюць інфармацію пра тое, який вузел запісаў якое поле, і спакошуюць продовжэнне роботы пасля перерываў.
Калі дозволяе бюджет, дадзіце тэст на перакананне, які працюе з критычным шляхам у CI за дапамою фікстураў, а не реальных платных API.
Конфігурацыю трэба зберагаць паза кодам прыкладнай програмы. Файлы сераўнавання, хранільнікі секрэтных данных і флагі функцыяй должны знаходзіцца ў аднам месцы, куда аператары можу працаваць без неабяжнага чытання всего графа.
Зберагаюце стан графа ў простам і типаваным формате. Вкладаныя блобы маскуюць інфармацію пра тое, який вузел запісаў якое поле, і спакошуюць продовжэнне роботы пасля перерываў.
Перш чым апранаваць стек, заморозьце версіі, зафіксуйце ідеальны транскрыпт для критычнага шляху і паказваце крокі для атрыбутавання. У спакульнаваных сераўнаваннях неабходны ліміты швайнасці, перакананні ў прыналежнасці і чыстае вялоўнік для змены секрэтных данных. Валіце надзейнасць працы над красавім разовым дэманстрацыйным прыкладам.
Запіскі для пакета 261dc94d9d46: не класты ключі прадаўцоў у репазітарыю, задаць максымальны тэрмін дзейнасці токена на кожную сесію, а таксама зберагчы транскрыпціі празь як фіксатуры для ацэнкі, каб пазнейшыя замены моделяў заставаліся пораўнанымі.