Практычныя прытамулкі: Прагматычная інтэграцыя AI: Адходжанне за межы API-экрана
Практычныя прыказкі: Інтэграцыя AI на практычны спосаб: як выйсці за межы API-обертакі — кантракты, перакрыццяі та слоты для коду, якія можна прыўязаць для команд, якія викорыстоўваюць гэты патэрн.
Наступныя прытамакі восстанавляюць практычны шлях для інтэграцыі „Прагматычная AI: Адхоўленне за межы API-рабочага кашулка“. Акцэнт ставіцца на контракты, перакананняя і месцы для коду, які можна легка заменіць, а не на мотывацыйныя аспекты. Калі працуеце на стадзіі агляду, спачатку запісайце контракт: неабяжныя даны, сігнал успеху і тое, што выканаецца у разе частковага нявыпалення. Такі список перакананняя дапамагае залишыцца чыстым пад час пазнейшых зменаў у кодзе. Валіце маленькія, тэставаныя елементы замест абмежлівых скрыптав. Калі якісь крок нявыпаляецца, прычына нявыпалення павінна вказваць на адну конкрэтную адпаведальнасць, а не на заплутаны ланцоўкі задач.
Праблемы інтэграціі API ў рэальным свете
Этап выявлення неудач інтеграцыі API у рэальным свете працюе наяўней, калі яго спрыяваць як мерыемую плошчу. Запісаўце адны ідеальны прыклад, адну справу неудачы і прыметку па абратанні змян перад расшырэнням масштаба. Спрыяйце гэтаму этапу як кантракту межа вхіднымі дадзеннямі і перакананымі выходнымі рэзультатамі. Даўце назвы артыфактам, задаце критэрыя успеху і адмовіцеся ад тыхоўскага частковага завершэння. Раздзеліце політыку часткавай обробкі дадзенняў ад політыки ўтрыманні іх. Змена адной з яных не павинна прымусваць перапісванне другой, калі зменяюцыся паказнікі якосці.
import openai
# Replace with your actual API key or ensure it's set in an
environment variable
# openai.api_key = "YOUR_API_KEY"
model_name = "gpt-5.2" # Hardcoded model name
user_prompt = "Tell me a short, interesting fact about space."
# Simple string prompt
try:
# Make a direct call to the Chat Completions API
client = OpenAI(api_key="YOUR_API_KEY")
response = openai.ChatCompletion.create(
model=model_name,
messages=[
{"role": "user", "content": user_prompt}
]
)
# Print the assistant's reply
print(response.choices[0].message.content)
except openai.OpenAIError as e:
# Catch specific OpenAI API errors
print(f"An OpenAI API error occurred: {e}")
except Exception as e:
# Catch any other unexpected errors
print(f"An unexpected error occurred: {e}")
Стварэнне надзеянага шара інтеграцыі з AI
Процес стварэння моцнага AI працюе наяўней, калі яго спрыявае можласць вимеры рэзультатаў. Перш чым расширваць масштабы, зафіксавайце адны ідеальны прыклад роботы, адзін прыклад неудачы і прыметкі па поверненню да пярвоначальнага стану. Запісваючы час выконання і вартасць токенав або запытаў, дадзіце інформацыю разам з функцыйнальнымі рэзультатамі. Відразлівае відображэння вартасцей запобегае неспакою з боку расчыткаў, калі працэс пераходзіць з дамовай версіі ў спяльныя сераўысы. Раздзеліце правілы часткавага обробкі дадзеных ад правіл ўзяць іх з памяці. Змена аднаго з яных не должна вымагаць перапісвы другога, калі зменяюцца паказнікі якосці.
Адкалэгаванне агентаў AI, якія працуюць на падставе запускаў
Этап рэалізацыі агентаў AI, якія працуюць на адбыванні падзеяў, працуе наякша, калі яго спрыймаюць як мерыемую паверхню. Зберагуце адна ідеальная транскрыпцыя, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану перш чым расширваць масштабы. Храніце настройкі парадульна ад коду прыемліка. Файлы сяродавішча, хранальнікі секрэтных дадзеных і флагі функций должны знаходзіцца ў аднам месцы, куды аператары можаць адбавляць контроль без неабяжнага чытання всіх элементаў. Раздзеляйце політыку часткавання дадзеных ад політыки ўзяць іх. Змена ў одной не должна вымагаць перапісву другой, калі зменяюцыся паказнікі якосці. Этап рэалізацыі агентаў AI, якія працуюць на адбыванні падзеяў, працуе наякша, калі яго спрыймаюць як мерыемую паверхню. Зберагуце адна ідеальная транскрыпцыя, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану перш чым расширваць масштабы. Вядзейце прывялік да маленькіх, тэставаных елементаў прымаўляйчы да вялікіх скрыптаў. Калі якась цэжкае, неудача должна адносіцца да адной адпаведальнасці, а не да заплутанага ланцоўка дзеянняў.
import json
from typing import Dict, Any
def handle_new_ticket_webhook(event_payload: Dict[str, Any]) -> Dict[str, Any]:
"""
Handles a 'new_ticket' webhook event by constructing a prompt and
calling an LLM orchestrator.
"""
event_type = event_payload.get("event_type")
ticket_data = event_payload.get("data", {})
if event_type != "new_ticket":
# Ignore events that are not 'new_ticket'
return {"status": "ignored", "message": "Not a new_ticket event"}
ticket_id = ticket_data.get("ticket_id")
subject = ticket_data.get("subject")
description = ticket_data.get("description")
requester_email = ticket_data.get("requester_email")
if not all([ticket_id, subject, description, requester_email]):
# Validate essential ticket data
return {"status": "error", "message": "Missing essential ticket data"}
# Construct a comprehensive prompt for the LLM based on the new ticket
prompt = (
f"A new support ticket (ID: {ticket_id}) has been created.
"
f"Subject: {subject}
"
f"Description: {description}
"
f"Requester: {requester_email}
"
"Please analyze this ticket. Use internal documentation to find relevant "
"solutions or escalation paths, and if necessary, use communication tools "
"to gather more information or update the requester."
)
try:
# Call the orchestrator with the generated prompt
# The orchestrator is expected to use an LLM with function-calling capabilities
# to interact with various internal APIs (e.g., documentation search, email, chat).
orchestrator_response = call_llm_orchestrator(prompt, ticket_id)
return {"status": "success", "ticket_id": ticket_id, "orchestrator_output": orchestrator_response}
except Exception as e:
# Handle potential errors during the orchestrator call
return {"status": "error", "ticket_id": ticket_id, "message": f"Orchestrator call failed: {e}"}
def call_llm_orchestrator(prompt: str, ticket_id: str) -> Dict[str, Any]:
"""
Placeholder for the function that calls the LLM orchestrator.
In a real scenario, this would interact with an LLM service.
"""
# Simulate an orchestrator response
# This might include actions taken, suggested next steps, or a summary.
print(f"Calling LLM Orchestrator for Ticket ID: {ticket_id} with prompt:
{prompt[:100]}…")
# Example of a function-calling interaction: LLM might decide to search docs
# or draft an email.
# Placeholder for actual LLM interaction and function calling logic
# orchestrator_llm.invoke(prompt, tools=[search_docs, send_email, update_ticket_status])
return {
"action_suggested": "initial assessment complete",
"next_steps": ["search internal knowledge base", "draft initial response"],
"orchestrator_version": "v1.0"
}
# Example usage (simulating a Flask/FastAPI request body)
if __name__ == "__main__":
example_payload = {
"event_type": "new_ticket",
"data": {
"ticket_id": "TKT-2023–001",
"subject": "Email delivery issues for user X",
"description": "User X reports not receiving emails since yesterday morning. Checked spam, nothing there.",
"requester_email": "user.x@example.com",
"priority": "high",
"category": "Email Service"
},
"timestamp": "2023–10–27T10:00:00Z"
}
response = handle_new_ticket_webhook(example_payload)
print("
Webhook Handler Response:")
print(json.dumps(response, indent=2))
# Example of a non-new_ticket event
other_payload = {
"event_type": "ticket_updated",
"data": {"ticket_id": "TKT-2023–001", "status": "pending"},
"timestamp": "2023–10–27T10:30:00Z"
}
response_other = handle_new_ticket_webhook(other_payload)
print("
Webhook Handler Response for other event:")
print(json.dumps(response_other, indent=2))
Оптымізацыя багатамодельных систем AI
Для стадіі оптымізацыі багатамодельных систем AI неабяжна пазначыць вхідныя даны, адпаведальнага за выкананне крока і критэрыі завершэння пры перадзеяванні коду. Аператары должны магчымаць перзапуск крока з вядомай точкі контролю, не прабуючы спадароўваць сустоянне, якое залишылася непазначаным. Спрыймайце гэтую стадію як кантракт межа вхіднымі данымі і перакананымі выходнымі рэзультатамі. Даўце назвы артыфактам, пазначыце критэрыі успеху і не прымайце часткова завершаныя рэзультаты без паведамлення. Калі наступны крок — гэта код або вызов інструмента, валідаванне структураваных выходных дадзенняў за дапамою схемы лепша, чым вільная проза.
Прагматычны шлях да прагрэсу
Для стадіі «Прагматычны шлях даўняй» неабходна практычна з’явіць вхідныя даны, адпаведальнага за выкананне крока і крэтырыя завершэння працы перад змінайом коду. Аператары должны магчыма было перзапускаць крок з вядомай точкі контролю, не падозрываючы прыхованы стан системы. Неабходна фіксаваць час выканання аперацый, а таксама вартасьць токеноў чы запитоў, разам з функцыйнальнымі рэзультатамі. Відразліва візуалізацыя вартасцей запобегае неспакою, калі процес пераходзіць з дэмовай среды ў спакульную. Неабходна цітаваць тыя часткі тексту, якія фактычна лежалі в основе адпаведнай адпаведзі. Без цітатаў аператары не можуць разлічыць галюцинацію ад працэзу індексавання.
Чек-ліст для эксплуатацыі
Для стадіі «Чек-ліст для эксплуатацыі» таксама неабходна практычна з’явіць вхідныя даны, адпаведальнага за выкананне крока і крэтырыя завершэння працы перад змінайом коду. Аператары должны магчыма было перзапускаць крок з вядомай точкі контролю, не падозрываючы прыхованы стан системы.
Запісуйце адзіно ўсе – і шлях успеху, і шлях вярнення да нормальнага стану. Практыкі павторных спроб, людзкія контралі і обработка некоректных паведамленняў є часткай самага продукту, а не чымсь, што дадаецца пазней.
Указуйце тыя часткі тексту, якія фактычна лежаць у падставе адпаведнай адказы. Без ціх цитатаў аператары не зможуць разлічыць галюцинацію ад працягу ў індексаванні.
Напісце кароткі посібнік: як зменяць кантрольныя клучы, як спрачысці чергу запытанняў, як вярнуць стан да пярэдніх настаўкі.
Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выйшае, адказ за гэтыя проблемы павінен быць спрямованы на адзін конкрэтны элемент, а не на вялікі, заплутаны ланцюг задач.
Указуйце тыя часткі тексту, якія фактычна лежаць у падставе адпаведнай адказы. Без ціх цитатаў аператары не зможуць разлічыць галюцинацію ад працягу ў індексаванні.
Перш чым запускать стак, заморозьце версіі, зафіксавце «золаты» транскрыпты для критычных лянцоў і паказваце спосабы атрыбуцыі. У спадзеленых средах неабходны ліміты частоты, перакананні ў належнасці та чысты власнік для ротацыі секрэтных дадзеных. Лепш выбіраць простую надзею на надзейнасць, чым хітрыя експерыментальныя дэманстрацыі.
Прыметка для 1eebfcb599d4: не кладзіце ключы прадаўцаў у репазітарый, задаце верхнюю межу токенаў на сесію і зберагачыце транскрыпты празаўседы ў фікстурах ацэнкі, каб пазнейшыя замены модэляў заставаліся пораўнанымі.