Практычныя прыемы: стварэнне та адпрацоўка спецыяльнага модэлю з Azure ML, а пасля ўз’ём у сістэму
Практычныя прыказкі: стварэнне та адпрацоўка спецыяльнага модэлю з Azure ML, а таксама інструкцыі па налагоджэнні: кантракты, перакрыцчы і месца для коду для команд, якія викорыстоўваюць гэты патэрн.
У гэтым керавані зноў ствараецца парадокс ад сыр'ёў да рабочай системы для: стварэння та аддачы спецыяльнага модэлю за дапамою Azure ML, а пасля ўжыцця яго ў агента Foundry. Акцэнт ставіцца на практычныя крокі, чыстае перакананне ў правильнасці дзействаў та код, які можна проста падставіць у репазітарый без неабязковасці з'ясоўвання намеру. У стадіі агульнага перакладу неабходна з'явіць вхідныя даны, адпаведальнага за крок та критэрыя завершэння пры перадзеі коду. Аперацыйныя працавнікі должны магчымае перадзеі крок з вядомай точкі контролю, не падозрюючы пра схованы стан. Неабходна аддаткова задокументаваць як шлях успеху, так і шлях вяснавання проблем. Перапрыбуткі, людзкія перакананні та обработка некоректных паведамленняў є часткай продукту, а не чымсь, што дадаецца пазней.
Спачатку ментальны модэль
Калі працюеце над першым этапам «Ментальнага модэлю», спачатку запісайце умовы: неабяжлівыя данні, сігнал успеху і тое, што выходзіць пад частыя неудачы. Такі список контроля дапамагае залічваць змяны ў кодзе чыста. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выйшае, неудача должна вказваць на адну адпаведальнасць, а не на заплутаны ланцюг задач. Зберагаеце у кэшы стабільныя інструкцыі системы і схемы інструментаў. Перадзял у тое ж самае прамаргінале — частая прычына витрачання ресурсаў.
Прыямыя прычыны
Калі працюеце над стадзіяй прабэральных умов, спачатку запісайце контракт: неабяжлівыя данні, сігнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі список пераконтроўвае чыстасць пазнейшых змян у кодзе. Спрыятліва ставіцеся да гэтай стадзіі як да контракту межа даннімі і перакананымі выходамі. Дайце назву рэзультатам, задаце критэрыя успеху і не падтрымвайце тыхі частковыя завершэння. Зберагаце ў кешы стабільныя інструкцыі системы і схемы інструментаў. Перадача таго ж прамэра ёсць частым выклікам зношвання ресурсаў.
pip install azure-ai-ml azure-ai-projects azure-identity
from azure.ai.ml import MLClient
from azure.identity import DefaultAzureCredential
ml_client = MLClient(
DefaultAzureCredential(),
subscription_id="<subscription-id>",
resource_group_name="<resource-group>",
workspace_name="<aml-workspace-name>",
)
Шаг 1: адучанне модэлю
Калі працуеце над стадзіяй адучэння з 1-го крока, спачатку запісайце контракт: неабяжлівыя даннэ, сігнал успеху і тое, што выходзіць пад частыя неудачы. Такі список контроля дапамагае заліцьварыць пазнейшыя змены коду. Запісвайце час выканання і кост токеноў або запытаў праза функцыйнае рэзультат. Відкрытыя данні пра косцы з’являюцца раней, таму не будзе неспакою, калі процес пераходзіць з дэмаверсіі ў спяльныя среды. Зберагаеце у кэшы стабільныя інструкцыі системы і схемы інструментаў. Перасылка ідэнтычных прамуслов ёсць частым выклікам для ресурсаў. Калі працуеце над стадзіяй адучэння з 1-го крока, спачатку запісайце контракт: неабяжлівыя даннэ, сігнал успеху і тое, што выходзіць пад частыя неудачы. Такі список контроля дапамагае заліцьварыць пазнейшыя змены коду. Аддокументавайце як шлях успеху, так і шлях вяснавання. Перапрыбуткі, людзкія контрольныя пункты і обработка некоректных паведамленняў ёсцю частынай продукту, а не пазнейшым дапрацоўкам.
from azure.ai.ml import command, Input, Output
train_job = command(
code="./src",
command="python train.py --data ${{inputs.training_data}} --model_output ${{outputs.model_output}}",
inputs={"training_data": Input(type="uri_folder", path="azureml://datastores/workspaceblobstore/paths/churn-training/")},
outputs={"model_output": Output(type="uri_folder")},
environment="azureml://registries/azureml/environments/sklearn-1.5/labels/latest",
compute="cpu-cluster",
display_name="churn-model-training",
)
returned_job = ml_client.jobs.create_or_update(train_job)
ml_client.jobs.stream(returned_job.name)
2-й крок: зарэўнаваць адучаны модель
На другым кроку регистрацыі этапа найкращае працюе, калі яго спрыяваць як вимерную паверхню. Запісаўце адна «золатая» транскрыпцыя, адин прыклад неудачы і прыметку па анулюванні змян перш чым расширваць масштаб. Валіце малыя, тэставаныя елементы замест большых скрыптаў. Калі крок не выйшоў, прычына неудачы павінна вказываць на адную адпаведальнасць, а не на заплутаны ланцюг задач. Задаўце ліміт токенав на кожны раунд і на кожную сесію. Інструменты-агенты агрэсывна расширваюць контекст; строгі ліміты не дазволяюць дэмам ператварыцца на неспакоўлівыя рахункі.
from azure.ai.ml.entities import Model
from azure.ai.ml.constants import AssetTypes
model = ml_client.models.create_or_update(
Model(
path=f"azureml://jobs/{returned_job.name}/outputs/model_output",
name="churn-classifier",
type=AssetTypes.MLFLOW_MODEL,
description="Customer churn classifier, trained on 18 months of account history.",
)
)
Крок 3: размістіце яго за кераваным канцэнтрам
Этап 3, які выконуецца пасля развертвання, працюе найэфектыўней, калі яго розглядаць як мерыябельную плошчу. Зафіксавайце адна ідеальная версія рэзультата, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану перш чым расширваць масштабы. Разглядзайце гэты этап як кантракт межа вхіднымі даннымі і перакананымі выходнымі рэзультатамі. Дайце назвы артыфактам, задаць критэрыя успеху і не падзеўляйцеся частым, непূরным выкананням задач. Задаць ліміт токенав на кожны раунд і на кожную сесію. Інструменты-агенты агрэсывна расширваюць контекст; жорсткія ліміты не дазволяюць дэмам ператварыцца на неспакоўлівыя рахункі.
from azure.ai.ml.entities import ManagedOnlineEndpoint, ManagedOnlineDeployment
endpoint = ManagedOnlineEndpoint(name="churn-endpoint", auth_mode="key")
ml_client.online_endpoints.begin_create_or_update(endpoint).result()
deployment = ManagedOnlineDeployment(
name="blue",
endpoint_name="churn-endpoint",
model=model,
instance_type="Standard_DS3_v2",
instance_count=1,
)
ml_client.online_deployments.begin_create_or_update(deployment).result()
endpoint.traffic = {"blue": 100}
ml_client.online_endpoints.begin_create_or_update(endpoint).result()
Этап 4: паказваць, што все працуе, перш чым хтось іншы будзе з яго працаваць
На стадыі 4 «Пакутная перакананне» лепша працюе, калі яе розглядаць як вимерную паверхню. Зберажыце адны ідеальны прыклад роботы, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану перш чым расширваць масштабы. Запісвайце час выканання і кост токеноў або запытаў праза функцыйнае рэзультат. Відразлівае паказанне костаў з’являецца перашкоду неспакою, калі процес пераходзіць з дэмаверсіі ў спяльныя среды. Задаце бюджет токеноў на кожны раунд і на кожную сесію. Агентныя інструменты агрэсывна расширваюць контекст; строгі ліміты не дазволяюць дэмаверсіям ператварыцца на неспакойныя рахункі.
import json
test_input = {"input_data": {"columns": ["tenure_months", "monthly_spend", "support_tickets"], "data": [[14, 89.50, 3]]}}
response = ml_client.online_endpoints.invoke(
endpoint_name="churn-endpoint",
request_file=None,
deployment_name="blue",
input_data=json.dumps(test_input),
)
print(response)
На стадыі 4 «Пакутная перакананне» лепша працюе, калі яе розглядаць як вимерную паверхню. Зберажыце адны ідеальны прыклад роботы, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану перш чым расширваць масштабы. Дакументавайце як шлях успеху, так і шлях вярнэння да нормальнага стану. Перапрыбуткі, людзкія контрольныя пункты і обработка некоректных запытаў є часткай продукту, а не чымсь, што дадаецца пазней.
Шаг 5: абгорткі канцэнтраў як функцыя інструмента агента Foundry
Для пятага крока, пры зміне коду, спачатку неабяжна абгародзіць этап, задаць вхідныя даны, адпаведальнага за крок і критэрыі завершэння. Аперацыяныя працавнікі павінны магчымае перазапускаць крок з вядомай точкі контролю, не прабуючы здагадвацца пра схованы стан. Лепш выбіраць маленькія, тэставаныя елементы замест большых скрыптов. Калі крок не выконваецца, прычына неудачы павінна вказываць на адзін конкрэтны элемент, а не на заплутаны ланцюг задач. Калі наступны крок — це код або вызов інструмента, лепш выкарыстоўваць структураваныя выходныя даны з пераканальваннем схэмы, замест вольнага формата тэксту.
import os
import requests
from azure.ai.projects import AIProjectClient
from azure.ai.projects.models import PromptAgentDefinition, Tool, FunctionTool
from azure.identity import DefaultAzureCredential
def get_churn_score(tenure_months: int, monthly_spend: float, support_tickets: int) -> dict:
payload = {"input_data": {"columns": ["tenure_months", "monthly_spend", "support_tickets"], "data": [[tenure_months, monthly_spend, support_tickets]]}}
resp = requests.post(
"https://churn-endpoint.<region>.inference.ml.azure.com/score",
headers={"Authorization": f"Bearer {os.environ['AML_ENDPOINT_KEY']}", "Content-Type": "application/json"},
json=payload,
timeout=10,
)
resp.raise_for_status()
return {"churn_probability": resp.json()[0]}
func_tool = FunctionTool(
name="get_churn_score",
description="Predict churn probability for a customer given tenure, spend, and support ticket history.",
parameters={
"type": "object",
"properties": {
"tenure_months": {"type": "integer", "description": "How many months the customer has been active."},
"monthly_spend": {"type": "number", "description": "Average monthly spend in dollars."},
"support_tickets": {"type": "integer", "description": "Number of support tickets in the last 90 days."},
},
"required": ["tenure_months", "monthly_spend", "support_tickets"],
"additionalProperties": False,
},
strict=True,
)
project = AIProjectClient(endpoint=os.environ["FOUNDRY_PROJECT_ENDPOINT"], credential=DefaultAzureCredential())
tools: list[Tool] = [func_tool]
agent = project.agents.create_version(
agent_name="retention-agent",
definition=PromptAgentDefinition(
model="gpt-4.1-mini",
instructions="Help the team assess churn risk. Call get_churn_score whenever specific customer numbers are provided.",
tools=tools,
),
)
Крок 6: запуск з початку да канца
Для выканання 6-го кроку неабяжна падзець на яго стадыі: перад змянайом коду трэба задаць вхідныя даны, адпаведальнага за крок і критэрыі завершэння. Аперацыяныя працавнікі павінны магчымае пераканаць крок з вядомай точкі контролю, не падозрываючы схованы стан. Спрыяць гэтую стадыю як кантракт межа вхіднымі данымі і перакананымі выходнымі рэзультатамі. Даць назвы артыфактам, задаць перакананні на успех і адмовіцца ад тыхняе частковага завершэння без паведамлення. Калі наступны крок — гэта код або вызов інструмента, лепш выкарыстоўваць структураваныя выходныя даны з перакананнем схэмы, чым вольныя тэкстовыя форматы.
import json
from openai.types.responses.response_input_param import FunctionCallOutput
openai_client = project.get_openai_client()
conversation = openai_client.conversations.create()
response = openai_client.responses.create(
input="A customer's been with us 14 months, spends about $90/month, and filed 3 tickets recently. Churn risk?",
conversation=conversation.id,
extra_body={"agent_reference": {"name": agent.name, "type": "agent_reference"}},
)
for item in response.output:
if item.type == "function_call" and item.name == "get_churn_score":
result = get_churn_score(**json.loads(item.arguments))
follow_up = openai_client.responses.create(
input=[FunctionCallOutput(type="function_call_output", call_id=item.call_id, output=json.dumps(result))],
conversation=conversation.id,
extra_body={"agent_reference": {"name": agent.name, "type": "agent_reference"}},
)
print(follow_up.output_text)
Як гэта пасляўляецца да большага кантэксту
Для вярнення адказу на пытанне «Дзе гэта паслужыць у стадіі?» неабходна ўзгадка пра вхідныя даны, адпаведальнага за крок і крэтарыя выходу пры змены коду. Аператары должны магчымае перайсці на выкананне кроку з вядомага пункта контролю, не спрабоўваючы здагадвацца пра схованы стан. Запісвайце час выканання і кост токенаў або запыткаў разам з функцыйнальнымі рэзултатамі. Відразы костаў з самага пачатку запобегае неспакойным рахункам, калі процес пераходзіць з дэмаверсіі ў спяльныя среды. Калі наступны крок — гэта код або вызов інструмента, лепш выкарыстоўваць структураваныя адказы з перакананнем схэмы, чым вольныя тэксты. Для вярнення адказу на пытанне «Дзе гэта паслужыць у стадіі?» неабходна ўзгадка пра вхідныя даны, адпаведальнага за крок і крэтарыя выходу пры змены коду. Аператары должны магчымае перайсці на выкананне кроку з вядомага пункта контролю, не спрабоўваючы здагадвацца пра схованы стан. Неабходна аддзеўнаваць дакументацыю пра стандартны і адновальны патэрыны роботы. Перапробы, людзкія контрольны пункты і обработка некоректных запыткаў є часткай продукту, а не чымсь, што дадаецца пазней.
Аспекты вырабаткі пры падготовцы да запуску
Калі працуеце над аспектамі вырабаткі пры падготовцы да запуску, спачатку запісайте умовы контракту: неабяжлівыя данні, сігнал успеху і тое, што выканаецца у разы частковага невясковасці. Такі список контроля дапамагае залічваць пазнейшыя змены ў кодзе чыста. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выйшае, невясковасць должна вказваць на адну конкрэтную адпаведальнасць, а не на заплутаны ланцюг задач. Зберагаеце у кэшы стабільныя інструкцыі системы та схемы інструментавання. Перадзесланне ідэнтычных даных — частая прычына зайвых витрацоў.
Што застаецца пасля гэтага
Калі працюеце над этапам «Дзе гэта застаўляе вас», спачатку запісайце контракт: неабходныя даны, сігнал успеху і тое, што выканаецца у разы частковага нявыпання. Такі список пераконтроўкаў дапамагае заліцвачыць пазнейшыя змены ў кодзе. Спрыймайце гэты этап як контракт межа данымі і перакананымі выходамі. Дайце назву рэзультатам, задаць тэсты на успех і не падпішывайцеся на частковае завершэння без паведамлення. Зберагачыце у кэшы стабільныя інструкцыі системы і схемы інструментаў. Перадача ідэнтычных прамулкіў — частая прычына некароткага часу выканання.
Справы
Калі працюеце на стадыі Рэферэнсаў, спачатку запішыце кантракт: неабходныя даннэ, сігнал успеху і тое, што выканаецца у разы частковага нявыпалення. Такі список пераканальвае залічваць усі змяны коду адпаведна. Запішыце час выканання і кост токенаў або запытаў праза функцыйнае рэзультат. Відкрытыя данні пра косцы з’являюцца рана, таму не будзе неспакою, калі працэс перейдзе з дамавайна на спяльныя среды. Зберагаце ў кэшы стабільныя інструкцыі системы і схемы інструментаў. Перадача тых самых прамэраў занова — частая прычына некалькіх разоў выкарыстоўвання ресурсаў. Калі працюеце на стадыі Рэферэнсаў, спачатку запішыце кантракт: неабходныя даннэ, сігнал успеху і тое, што выканаецца у разы частковага нявыпалення. Такі список пераканальвае залічваць усі змяны коду адпаведна. Аддзеўжыце дакументацыю як пра стандартны ход задачы, так і пра шлях ўстранення проблем. Перапрыбуткі, людзкія контралі і обработка некантактных паведамленняў є часткай продукту, а не чымсь, што дадаецца пазней.
Чэк-ліст для эксплуатацыі
Этап перагляду канцэлекту працюе наяўней, калі яго спрыяваць як мерыемую структуру. Зафіксавайце адну ідеальную версію дадзеных, адны прыклад неудачы і запіс пра анулювання змян перш чым расширваць сферу дзеяння.
Зберагаюце настройкі пазырочна ад коду прыемліка. Файлы сяродавішча, хранільнікі секрэтных дадзеных і пазначкі функцыйяў должны знаходзіцца ў аднам месцы, куды аператары можаць адбавляць контроль без неабяжнага чытання всіх дадзеных.
Установіце ліміты бюджэту на кожны раунд і кожную сесію. Інструменты з автонамным кераванням агрэсіўна расширваюць контекст; жорсткія ліміты не дазволяюць, каб дэманстрацыі ператварыліся на неспакоўныя рахункі.
Забезпечыце людзкую апраўдку для тых крокаў, якія витрачаюць грошы або зменяюць данні ў працэсе вырабніцтва. Праця ў часе компілявання не абавязкова значыць повную адпраўненасць бізнес-процэсаў.
Напісце кароткі путаводзіцель: як зменяць канфігурацыйныя ключы, як спрабаваць очысці чергу, як анулюваць пярэднія змены.
Спрытваце гэты ўраг як кантракт межа вхіднымі дадзеннямі і пасвярджанымі выходнымі рэзультатамі. Даўце назвы артыфактам, задаце критэрыя успеху і не падтрымвайце безсловеснае часткова завершэння.
Перад павышэнням рангу стака заморозьце версіі, зафіксуйце «золаты» транскрыпты для критычнага маршруту і падтвердзіце крокі для абраткі. У спадзяльных сэрвісах неабходны ліміты частоты запытоў, перакананні ў прыналежнасці і чыстае адпаведальнае аб’екта для змены секрэтных даных. Валіце надзейнасць працы над крэатывнымі разовымі дамазамі.
Прыметка для 2117731bf26b: не кладзіце ключы прадастаўцаў у репазітарый, задаце максімальную кантэнцыю токена на сесію і храніце транскрыпты празаўседы ў фіксатырах ацэнкі, каб пазнейшыя замены моделяў заставаліся пораўнанымі.