Сортаваць квіты з Яўом, застосоўваць яго правілы на Python і выкорыстоўваць LLM.
Практычныя інструкцыі па обробцы квитакоў з адной дапамогай Jev, прыменэ ўсіх яго правілаў у Python і викорыстоўванне LLM: контракты, перакрыцчы і спецыяльныя слоты для коду для команд, якія викорыстоўваюць гэты патэрн.
Наступныя прытамлівкі паказваюць практычны спосаб працы з тэмай «Сортаванне квітакоў за дапамойкай Jev, прыменэ яго правілаў у Python і выкарыстоўванне LLM для падготавкі адпаведзі: конкрэтны нарадчык з NOVA». Акцэнс ставіцца на контракты, перакананняя і месцы для коду, а не на мотывацыйны падход. Калі працуеце на стадзіі агляду, спачатку запісайце контракт: неабходныя вхідныя даны, сігнал успеху і тое, што выканаецца у разе частковага невыпання. Такі список перакананняя дапамагае заліцьваты пазнейшыя змены ў кодзе. Спрэцьвуйце гэтую стадзію як контракт межа вхіднымі данымі і перакананымі выходнымі рэзультатамі. Дайце назвы элементам, задаце критэрыя успеху і не падтрымайце частковае завершэння без адпаведзення.
Jev не заменяе модель, якая пішаць
Jev не заменяецца стэйдж-працай; ён працуе наякраща, калі яго розглядаць як вимерную паверхню. Запісаўце адна «золатая» транскрыпцыю, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану перад расшырэнням масштаба. Запісвайце часы выканання і кост токена або запиту праза функцыональныя рэзультаты. Відразувая візуабельнасць костаў запобегае неспакойным рахункам, калі парадокс пераходзіць з дэмавайнага режыма ў спяльныя сераўеры. Закрепіце інтэрпретара і файл з блокаванням залежнасцяў перад тым, як выучаць цікл. Разніця межы ноутбукам і CI ёсць найпашчэрэйшым таямным перывам у дэмавайных працэсах API.
Архітектура да коду
Архітектура L avant le stage працюе наякшы, калі яе розглядаць як вимерную паверхню. Запісаўце адна «золатая» транскрыпцыя, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану перш чым расширваць масштабы. Зберагаўце настройкі праза код аплікацыі. Файлы сераўнавання, хранальнікі секрэтных дадзеных і флагі функцыйяў должны знаходзіцца ў аднам месцы, куды аператары можаць адбавляць контроль без неабяжнага чытання всіх дадзеных. Закрепіце інтэрпретара і файл з блокаванням залежнасцяў перш чым выкладзаць працэс ціклу. Разніця межы ноутбукам і средой CI ёсць найчастэйшым тыхім бягам для дэманстрацый API.
Message client + historique
↓
Jev : service, urgence, frustration
↓
Python : validation et règles métier
↓
Agent LangChain + LLM
↓
Consultation des commandes et procédures
↓
Dossier pour l’équipe support + brouillon de réponse
Падготовка сераўнавання
Этап прыпарацовкі сяродавішча працюе наўжоўды лепш, калі яго спрыятаць як вимерную паверхню. Зафіксавайце адны ідеальны прымер роботы, адзін кейс неудачы і прыметкі па адвярнуцьцю роботы пры расшырэнні масштаба. Дакументавайце як шлях успеху, так і шлях вяснавання разам. Перапрыбуткі, людзкія контралі і обработка некоректных паведамленняў ёсць часткай продукту, а не пасляднім дапрацоўкам. Забезпечыце фіксацію інтэрпретара і файлу блакітаў залежнасцяў пры навучэнні циклу. Разлік межаў між ноутбукам і системай CI ёсць найчастэйшым таямным абрывам для дэманстрацый API. Этап прыпарацовкі сяродавішча працюе наўжоўды лепш, калі яго спрыятаць як вимерную паверхню. Зафіксавайце адны ідеальны прымер роботы, адзін кейс неудачы і прыметкі па адвярнуцьцю роботы пры расшырэнні масштаба. Спрыяйце гэты этап як кантракт межаў вхідных дадзенняў і перакананых выходных рэзультатаў. Падберіце назвы артыфактаў, задаць критэрыя успеху і адмовіцеся ад таямнай частковай завершэння.
TYPESAFE_API_KEY=ta_cle_typesafe
OPENAI_API_KEY=ta_cle_openai
JEV_MODEL=jev-latest
OPENAI_MODEL=gpt-4.1-mini
jev = TypeSafeClassifier(
model=os.getenv("JEV_MODEL") or "jev-latest",
timeout=30,
)
modele = ChatOpenAI(
model=os.getenv("OPENAI_MODEL") or "gpt-4.1-mini",
timeout=60,
max_retries=1,
)
Тры прымітывы: Выбор, Ноль і Рэйтинг
Для стадіі «Тры прымітывы: Выбор» неабяжна з’явіць вхідныя даны, адпаведальнага за крок і крэтарыя выходу пры перадзеіснавленні коду. Аператары должны магчымаць перзапуск кроку з вядомай точкі контролю, не падозрываючы схованы стан. Запісваць час выконання і вартасць токеноў або запытак праза функцыйнальныя рэзултаты. Відразлівасць вартасцей з самага пачатку запобегае неспакоўным рахункам, калі траекторыя пераходзіць з дэмовай среды ў спакульную. Аддзельваць стварэнне кліента ад цыклу паведамленняў, каб можна было змяніць прадастаўцаў без перапісвання машыны стану канверсаціі.
Выбор: выбраць службу
Для выбору практычнага выканання неабяжна пазначыць параметры, адпаведальнага за крок і критэрыі завершэння пры змяне коду. Аператары должны магчымаць перзапуск кроку з вядомай точкі контролю, не падозрываючы схованы стан. Конфігурацыю трэба залічыць пазначальна ад коду прыемніка. Файлы сераўіса, хранальнікі секрэтных дадзеных і флагі функцияў должны знаходзіцца ў аднам месцы, якое аператары можаць пераглядаць, не чытаяўшы весь граф. Аддзельце стварэнне кліента ад цыклу паведамленняў, каб было можна змяніць прадаўцоў без перапісвання машыны стану размовы.
Новае: ацэнка пытання «так/нет»
Для стадіі «Noul valuer une question», перш чым зменяць код, неабходна дэфініцыя вхідных даных, адпаведальнага за шаг і крэтарыяў выходу. Аператары должны магчыма было перзапусціць шаг з вядомай точкі контролю, не спрабоўваючы здагадвацца пра схованы стан. Неабходна задокументаваць як «шчаслівы» шлях, так і шлях вярнення. Перапрыбуткі, людзкіе перакрыцця і обробка некоректных паведамленняў ёсць часткай продукту, а не пасляднім дапрацоўкам. Аддзельнае стварэнне кліента ад цыклу паведамленняў дазволяе змініць прадаўцоў без перапісвання машыны стану размовы. Для стадіі «Noul valuer une question», перш чым зменяць код, неабходна дэфініцыя вхідных даных, адпаведальнага за шаг і крэтарыяў выходу. Аператары должны магчыма было перзапусціць шаг з вядомай точкі контролю, не спрабоўваючы здагадвацца пра схованы стан. Спрыяйце таму, каб гэтая стадія выступала як контракт межа вхіднымі данымі і перакананымі выходнымі рэзультатамі. Назвайце артыфакты, задаць крэтарыяў успеху і не падтрымайце бяспечнае частковае завершэння.
Рэйтынг: адзначэнне ступеня фрустраціі
Калі працуеце над этапам адзначэння ступеня фрустраціі, спачатку запісайте умовы: неабяжлівыя данні, сігнал успеху і тое, што выходзіць пад часты нявынік. Такі список контроля дапамагае залишыцца чыстым пад будучыя змены коду. Запісвайце час выканання і кост токена або запыту пад функцыйнальнымі рэзултатамі. Відразы відомасці коста запобегае неспакою, калі праця пераходзіць з дэмовай среды ў спакульную. Запісвайце ID запытку, ID модэлю і час затрымкі праз кожны вызов. Без такога лёгасу періодычныя памылкі прадаўцу выглядаюць як багі ў прыемніку.
from langchain_typesafe import Choice, Noul, Score
def questions_triage():
return {
"service": Choice(
instructions=(
"Quel service doit traiter en priorité la dernière demande du client ? "
"Utilise le contexte seulement pour comprendre cette demande."
),
criteria={
"livraison": "Retard, suivi ou réception d'une commande.",
"facturation": "Paiement, facture ou remboursement.",
"technique": "Panne ou utilisation d'un produit.",
"autre": "Demande ambiguë ou sans rapport avec les catégories précédentes.",
},
),
"urgence": Noul(
instructions=(
"Les faits décrits nécessitent-ils une prise en charge immédiate, "
"plutôt qu'un traitement normal ? Ne te fonde pas seulement sur le ton."
)
),
"frustration": Score(
instructions="Quel niveau de frustration le client exprime-t-il ?",
criteria=[
"Le client s'exprime calmement, sans insatisfaction.",
"Le client exprime une insatisfaction tout en restant mesuré.",
"Le client exprime une forte colère ou des réclamations répétées.",
],
),
}
Аналіз першага тыкету
Калі працуеце з першым этапам дзяловага тікета ў аналізаторы, спачатку запісайце умовы контракту: неабяжныя даны, сігнал успеху і тое, што выканаецца у разе частковага нявыпалення. Такі список пераканальвае ў тым, што пазнейшыя змены коду будуць чыстымі. Зберагайце настройкі парадульна ад коду прыемліка. Файлы сераўіснага сэрвісу, храненні секретных данных і флагі функцыйяў должны знаходзіцца ў аднам месцы, куды аператары можаць адбавіць аудыт без неабяжнага чытання всіх элементаў. Запісвайце ID запытку, ID модэлю і час адклікання праз кожны вызов. Без такога лёгку, інтэрмітентных каштоў прадаўцы выглядаюць як багі прыемліка.
reponse_jev = jev.invoke(requete_triage(ticket))
print("Service :", reponse_jev.choices["service"].choice)
print("Urgence :", reponse_jev.nouls["urgence"].noul)
print("Frustration sur 2 :", reponse_jev.scores["frustration"].score)
Service : livraison
Urgence : 0.76
Frustration sur 2 : 1.93
Дзяловыя правіла застаюцца ў програме
Калі працуеце над стадзіяй «Les r gles m», спачатку запісайце контракт: неабяжлівыя даны, сигнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі список пераконвае ў тым, што пазнейшыя змены коду будуць чыстымі. Документавайце як шлях успеху, так і шлях вяснавання ситуацыі. Перапрыбуткі, людзкія контралі і обработка некоректных паведамленняў ёсць частью продукту, а не пазнейшым дапрацоўкам. Зявляйце логі з ідэнтыфікаторам запиту, ідэнтыфікаторам моделі і часам адліку за кожны вызов. Без такога следу періодычныя памылкі прадаўцоў выглядаюць як багі ў прыемніку. Калі працуеце над стадзіяй «Les r gles m», спачатку запісайце контракт: неабяжлівыя даны, сигнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі список пераконвае ў тым, што пазнейшыя змены коду будуць чыстымі. Спрыймайце гэтую стадзію як контракт межа данымі і перакананымі выходнымі даннымі. Даўце назвы элементам, задайце критэрыя успеху і адмовіцеся ад беззвучнага частковага завершэння.
def orienter_ticket(analyse, seuil_urgence=0.8, seuil_confiance=0.6):
raisons = []
if analyse["urgence"] >= seuil_urgence:
raisons.append("urgence élevée")
if analyse["frustration"] >= 1.5:
raisons.append("forte frustration")
if analyse["confiance_service"] < seuil_confiance:
raisons.append("service incertain")
if analyse["service"] == "autre":
raisons.append("demande à clarifier") return {
"service": analyse["service"],
"priorite": "haute" if analyse["urgence"] >= seuil_urgence else "normale",
"revue_humaine": bool(raisons),
"raisons": raisons or ["traitement courant"],
}
{
"service": "livraison",
"priorite": "normale",
"revue_humaine": true,
"raisons": ["forte frustration"]
}
Адказаць NOVA інфармацыяй, якую можна адзірваць
Этап адказаць NOVA інфармацыяй працуе наўлучна, калі яго спрыяваць як мерыемую паверхню. Запісаце адна ідеальная транскрыпцыя, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану перш чым расширваць масштаб. Запісвайце часы выканання і кост токенаў або запытаў праза функцыйнае рэзультат. Відкрытыя данні пра косцы з’являюцца рана, таму не будзе неспакоўных счытанняў, калі праця пераходзіць з дэмавай версіі ў спяльныя сераўы. Закрепіце інтэрпретара і файл з блокаванням залежнасцей пры навучэнні циклу. Разлік межаў межы лэптопа і CI ёсць найчастэйшым таямным перывам у дэмавай версіі API.
Складанне агента LangChain
Агент Assembler з платформы LangChain працюе найэфектывней, калі яго розглядаць як параметрызаваную суперфісу. Зафіксавце адна ідеальная версія выходу, адзин случай неудачы і прыметкі па поверненню да пачатковага стану пры розширэнні масштаба. Храніце настройкі пазначыта ўне з кодам прыемліка. Файлы сераўнавання средовыя, базы з секрэтнымі даннымі і флагі функцыйяў должны знаходзіцца ў аднам месцы, куда аператары можуць адбавляць контроль без неабяжнага чытання всіх элементаў. Закрепіце інтерпретара і файлы з інформацыяй пра залежнасці ўне, перш чым научыце алгорытм цікла. Разніця ў роботе межу лептапам і системай CI являецца найчастэйшым таямным факторам, які спрабоюея абарыць дэманстраціі API.
def creer_agent(modele, analyse, orientation):
contexte = json.dumps(
{"analyse_jev": analyse, "orientation": orientation},
ensure_ascii=False,
)
return create_agent(
model=modele,
tools=[consulter_commande, consulter_procedure],
system_prompt=(
ROLE_NOVA
+ "\nContexte de traitement fourni par le programme :\n"
+ contexte
),
)
Што паказваюць тэсты ноутбука
«Ce que montrent les stage» працюе найкраща, калі яе розглядаць як вимерную паверхню. Зафіксавайце адны «золаты» транскрыпт, адны прыклад неудачы і запіс пра відворачэнне роботы перш чым расширваць масштабы. Дакументавайце як шлях успеху, так і шлях вярнення да нормальнага стану. Перапрыбуткі, людзкі контроль і обработка некоректных паведамленняў є частью продукту, а не наступным етапам дорабатка. Зафіксавайце інтэрпретара і файл з блокірацыяй залежнасцей пры тым, як выучаце цікл. Разніця межу лептапам і системай CI ёсць найпасёлейшым таямным збоем у дэмантах API. «Ce que montrent les stage» працюе найкраща, калі яе розглядаць як вимерную паверхню. Зафіксавайце адны «золаты» транскрыпт, адны прыклад неудачы і запіс пра відворачэнне роботы перш чым расширваць масштабы. Разглядвайце гэты этап як кантракт межу вхіднымі даннымі і перакананымі выходнымі рэзультатамі. Падберіце назвы артыфактаў, задаць критэрыя успеху і не падтрымвайце таямныя частковыя завершэння.
suivi = traiter_ticket(
"Quel article contient cette commande ?",
modele,
jev,
historique=dossier["messages"],
)
print(suivi["reponse"])
Што я бы застаў для справжньага проекту
Для этапа «Ce que je garderais» неабяжна прадзефінаваць вхідныя даны, адпраўніка крока і крэтыяры выходу пры змены коду. Аператары должны магчымае перзапускаць крок з вядомай точкі контролю, не падозрываючы прыхованы стан.
Чэк-ліст для эксплуатацыі
Для этапа чэк-ліста для эксплуатацыі неабяжна прадзефінаваць вхідныя даны, адпраўніка крока і крэтыяры выходу пры змены коду. Аператары должны магчымае перзапускаць крок з вядомай точкі контролю, не падозрываючы прыхованы стан.
Лепшыя маленькія, тэставаныя елементы чым велікія скрыпты. Калі якісь крок не выйшае, адказка за гэта паталогія должна быць спрямована на адзін конкрэтны элемент, а не на заплутаны ланцюг задач.
Раздзеліце стварэнне кліента ад цыклу обмена паведамленнямі, ў такі спосаб працэдуры можна будзе заменіць без перапісва машыны стану дыялогу.
Зберагаюце у кэшы стабільныя інструкцыі системы та схемы інструментаў. Перадзесланне ідэнтычных паведамленняў — частая прычына зайвых витрацоў ресурсаў.
Фіксуйце версіі залежнасцяў та запісвуйце хэш зображэння, якое было выкарыстоўвана для дэманстрацыі. Возможнасць перадарабаткі важнейшая за традыцыйныя знаёмства.
Зберагаюце настройкі праза код аплікацыі. Файлы сераўіса, храненнія секрэтных данных та флагі функцыйяў должны знаходзіцца ў аднам месцы, куды аператары можаць адбавіць аудыт без неабяжнага чытання всіх элементаў структуры.
Перш чым запускать стак, заморозьце версіі, зафіксавце «золаты» транскрыпты для критычнага шляху і паказвце способы абяроны. У спільных средах неабходны ліміты частоты запытоў, пераканання ў належнасці тэнантам і чысткі власнік для ротацыі секрэтных даных. Валіце простую надзейнасць працы над крэатіўнымі разовымі дамах.
Прыметка для cf51dd985f5e: не кладзіце ключы прадастальніка ў репазітарый, задаце верхнюю межу токена на сесію і зберагачыце транскрыпты празаўседы ў фікстурах eval, каб пазнейшыя замены модэляў заставаліся пораўнанымі.