Парадуць создаванне спецыяльных API для вашых агентаў AI.
Практычныя нарады па тэме «Не стварайце спецыяльныя API для вашых AI-агентаў: контракты, перакрыцчы і шаблоны коду для команд, якія выкарыстоўваюць гэты патэрн».
Існавайце гэта як перапрацоўаны варыянт ідэй з статті «Не пішыце спецыяльныя API для вашых AI-агентаў: створыце сервер MCP за 5 хвілін» для аператараў: чыстыя этапы, аранжаваныя блакі коду і прыметкі з восстанавлення, якія застаюцца пасля перадачы задання. Адгледжэнне працюе найкраща, калі яго розглядаць як мерыябельную паверхню. Запісаце адна ідеальная транскрыпцыю, адзін прыклад неудачы і прыметкі з вярнення да пачатковага стану прычаму расшырэння масштаба. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісьць крок не выходзіць, прычына неудачы павінна вказываць на адную адпаведальнасць, а не на заплутаны ланцюг задач.
Крок 1: Архітектура і прабныя умовы
Для першага: Архітектура і прабэраліяны, неабходнае для выканання, трэба з’явіць вводныя даны, адміністратара гэтага першага і критэрыя завершэння прычымкі змены коду. Аперацыйныя працавнікі павінны магчымаць перзапуск гэтага першага з вядомай точкі контролю, не падозрываючы схованы стан. Спрыяйце гэтаму этапу як дагавору між вводнымі данымі і параболенымі выходнымі рэзультатамі. Дайце назвы артыфактам, з’явіць перакананні ў успеху і не прымайце часткова завершанне без паведамлення.
pip install mcp
Першы крок: Стварэнне сервера MCP
Для 2-го крока: стварэння сервера MCP, перад тым як зменяць код, неабходна ўзначэння вхідных дадзеных, адпаведальнага за крок і крэтарыяў завершэння. Аператары должны магчымае перзапускіць крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Запісваць трэба час выконання і вартасць токена або запыту разам з функцыйнальнымі рэзултатамі. Відразы вартасці з самага пачатку запобегае неспакоўным рахункам, калі працэс пераходзіць з дэмовай среды ў спакульную.
import sqlite3
import json
import os
import sys
from mcp.server.mcpserver import MCPServer
# Initialize the MCP server
mcp = MCPServer(name="Enterprise_SQL_Agent")
# Force the database to be created in the exact same folder as this script
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
DB_PATH = os.path.join(BASE_DIR, "enterprise.db")
def setup_dummy_db():
"""Create a sample employee database for the demo"""
try:
conn = sqlite3.connect(DB_PATH)
cursor = conn.cursor()
cursor.execute('''CREATE TABLE IF NOT EXISTS employees
(id INTEGER PRIMARY KEY, name TEXT, role TEXT, salary INTEGER)''')
cursor.execute("DELETE FROM employees")
employees = [
("Alice", "Data Scientist", 120000),
("Bob", "DevOps Engineer", 115000),
("Charlie", "AI Researcher", 135000)
]
cursor.executemany("INSERT INTO employees (name, role, salary) VALUES (?, ?, ?)", employees)
conn.commit()
conn.close()
print("Database initialized successfully.", file=sys.stderr)
except Exception as e:
print(f"Database setup error: {e}", file=sys.stderr)
3-й крок: Адкрыць базу дадзеных для AI
Для 3-й стадзіі: адаптавання базы данных для AI, перад тым як зменіць код, неабяжна визначыць параметры вводу, адпаведнага адпаведальнага і крэтыры завершэння. Аператары должны магчымаць перзапуск стадзіі з вядомай точкі контролю, не прабуючы спадарваць схованы стан. Конфігурацыю трэба захаваць пазначыльна коду прыкладнення. Файлы сераўіса, хранальнікі секрэтных дадзеных і флагі функцый належаць у аднам месца, якое аператары можаць пераглядаць без неабяжнай чытанняў усіх элементаў системы. Автентыфікацыя павінна выконвацца на воратах системы, а прабачэнне прав на доступ — на роўні дадзеных. Толькі токэн-носіцель не є межай адпаведальнасці. Для 3-й стадзіі: адаптавання базы данных для AI, перад тым як зменіць код, неабяжна визначыць параметры вводу, адпаведнага адпаведальнага і крэтыры завершэння. Аператары должны магчымаць перзапуск стадзіі з вядомай точкі контролю, не прабуючы спадарваць схованы стан. Лепш выбіраць маленькія, тэставаныя елементы замест большых скрыптов. Калі стадзія не выконваецца, прычына нехарактэрыстыкі павінна вказываць на адну конкрэтную адпаведальнасць, а не на заплутаны ланцоўкі задач.
@mcp.tool()
def query_employee_database(sql_query: str) -> str:
"""
Executes a SQL SELECT query against the enterprise.db database.
The database contains an 'employees' table with columns:
- id (INTEGER PRIMARY KEY)
- name (TEXT)
- role (TEXT)
- salary (INTEGER)
SECURITY: Only READ operations (SELECT) are permitted.
"""
# Safety Check: Block destructive SQL commands
dangerous_keywords = ["DROP", "DELETE", "UPDATE", "INSERT", "ALTER"]
if any(keyword in sql_query.upper() for keyword in dangerous_keywords):
return "Error: Only SELECT queries are authorized for this tool."
try:
conn = sqlite3.connect(DB_PATH)
cursor = conn.cursor()
cursor.execute(sql_query)
results = cursor.fetchall()
# Format the output as JSON so the LLM can read it cleanly
column_names = [description[0] for description in cursor.description]
formatted_results = [dict(zip(column_names, row)) for row in results]
conn.close()
return json.dumps(formatted_results, indent=2)
except Exception as e:
return f"Database error: {str(e)}"
if __name__ == "__main__":
setup_dummy_db()
mcp.run()
Шаг 4: З’єднання з Claude Desktop
Працюючы над шагам 4: З’єднання з Claude Desktop, спачатку запішыце умовы кантракту: неабяжлівыя даны, сигнал успеху та тое, што відбываецца у разе частковага невыпання. Такі список контролю дапамагае залишыцца часовым у змінах коду. Спрытывайце этап як кантракт межа данымі та паверынутымі выходамі. Дайце назвы элементам, задаце перакананні на успех та не падзейцеся частковым завершэнням без паведамлення. Зявляйце інфармацыю пра назву інструмента, хеш аргументаў, час адпаведзі та рэзультат кожнага вызову. Без такога следу дэбагаванне агента, які ціклізуецца, можа забраць гады часу.
{
"mcpServers": {
"enterprise-sql": {
"command": "C:\\Users\\YourName\\.conda\\envs\\your_env\\python.exe",
"args": [
"D:\\Your\\Project\\Path\\mcp_server.py"
]
}
}
}
Шаг 5: Рэзультат
Калі працюеце над 5-м крокам: «Рэзультаты», спачатку запісайце угоду: неабяжлівыя даны, сігнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі список контроля дапамагае заліцварваць будучыя змены ў кодзе. Запісвайце час выканання і кост токена або запыту праза функцыйнальныя рэзультаты. Відразлівасць костаў з самага пачатку запобегае неспакою, калі працэс пераходзіць з дамовай среды ў спакульнаную. Запісвайце назву інструмента, хэш аргументаў, час затрымкі і рэзультат кожнага вызову. Без такога лёгкага следу дэбагаванне агента, які застрягае ў цыклах, займае гадзіны.
Што далей?
Калі працуеце над практыкам «Што далей?», спачатку запісайце умовы викорыстоўвання: неабходныя даны, сігнал успеху і тое, што выходзіць па частковай нявыполненасці. Такі список дапамагае залічыць пазнейшыя змены ў кодзе.
Чэк-ліст для эксплуатацыі
Калі працуеце з чэклістам гэтыя дзейнаў, спачатку запісайце умовы контракту: неабходныя данні, сігнал успеху і тое, што выходзіць пад час частковага абякання. Такі чэкліст дапамагае заставаць змяны коду чыстымі.
Документавайце як шлях успеху, так і шлях вярнення. Перапрыбуткі, людзкія контралі і обработка некоректных паведамленняў є частью продукту, а не дадатковымі правкамі пазней.
Запісвайце назву інструмента, хэш параметраў, час адклікання і рынак кожнага вызову. Без такога лёгкага следу дэбагаванне можа зайняць гады.
Зберагайце стан графа ў простам і типаваным формате. Вярнутыя структуры маскуюць, який вузел запісаў кожны поле, і спакоююць працэс пасля перарываў.
Калі бюджет дазволяе, дадайце тэст, які перабірае критычны шлях у CI з фікстурамі, а не з рэальнымі платнымі API.
Запісвайце часы выконання і кост токенаў аб запытаў разам з функцыйнальнымі рынакамі. Візуабілізація костаў з самага пачатку запобегае неспакойным рахункам, калі шлях пераходзіць з дэмаверсіі ў спяльныя среды.
Перш чым запускать стак, заморозьце версіі, зафіксавце «золаты» транскрыпты для критычнага шляху і паказвце способы абяроны. У спільных средах неабходны ліміты частоты запытанняў, пераконтрольванне прав на выкарыстоўвання ресурсаў і чысткі власнік для змены секрэтных даных. Лепш выбіраць простую надзею на надзейнасць, чым хітрыя експерыментальныя дэманстрацыі.
Прыметкі для aed9f8a61db3: не кладзіце ключы прадаўцаў у репазітарый, задаце ліміт токена на кожную сесію і зберагачыце транскрыпты разам з фіксатрамі для ацэнкі, каб пазнейшыя замены моделяў заставаліся пораўнанымі.