В этом руководстве мы рассмотрим настройку продвинутого AI-агента с использованием фреймворка Microsoft Agent-Lightning. Мы будем работать непосредственно в Google Colab, что позволит нам экспериментировать как с серверными, так и с клиентскими компонентами в одном месте. Определив небольшого агента для вопросов и ответов (QA), подключив его к локальному серверу Agent-Lightning и обучив его с помощью нескольких системных подсказок, мы сможем наблюдать, как фреймворк поддерживает обновление ресурсов, постановку задач в очередь и автоматическую оценку.
Установка необходимых библиотек и импорт основных модулей
Мы начинаем с установки необходимых библиотек и импорта всех основных модулей, которые нам понадобятся для Agent-Lightning. Мы также безопасно настраиваем ключ API OpenAI и определяем модель, которую будем использовать для руководства.
“`python
!pip -q install agentlightning openai nest_asyncio python-dotenv > /dev/null
import os, threading, time, asyncio, nest_asyncio, random
from getpass import getpass
from agentlightning.litagent import LitAgent
from agentlightning.trainer import Trainer
from agentlightning.server import AgentLightningServer
from agentlightning.types import PromptTemplate
import openai
if not os.getenv(“OPENAIAPIKEY”):
try:
os.environ[“OPENAIAPIKEY”] = getpass(” Введите OPENAIAPIKEY (оставьте пустым, если используете локальную базу или прокси): “) or “”
except Exception:
pass
MODEL = os.getenv(“MODEL”, “gpt-4o-mini”)
“`
Определение класса QAAgent
Мы определяем простого QAAgent, расширяя LitAgent, где мы обрабатываем каждый этап обучения, отправляя запрос пользователя в LLM, собирая ответ и оценивая его по сравнению с эталонным ответом. Мы разрабатываем функцию вознаграждения для проверки правильности, совпадения токенов и лаконичности, позволяя агенту учиться и выдавать краткие и точные результаты.
“`python
class QAAgent(LitAgent):
def trainingrollout(self, task, rolloutid, resources):
“””Given a task {‘prompt’:…, ‘answer’:…}, ask LLM using the server-provided system prompt and return a reward in [0,1].”””
sysprompt = resources[“systemprompt”].template
user = task[“prompt”]; gold = task.get(“answer”,””).strip().lower()
try:
r = openai.chat.completions.create(
model=MODEL,
messages=[{“role”:”system”,”content”:sys_prompt},
{“role”:”user”,”content”:user}],
temperature=0.2,
)
pred = r.choices[0].message.content.strip()
except Exception as e:
pred = f”[error]{e}”
def score(pred, gold):
P = pred.lower()
base = 1.0 if gold and gold in P else 0.0
gt = set(gold.split()); pr = set(P.split());
inter = len(gt & pr); denom = (len(gt)+len(pr)) or 1
overlap = 2*inter/denom
brevity = 0.2 if base==1.0 and len(P.split())<=8 else 0.0
return max(0.0, min(1.0, 0.7base + 0.25overlap + brevity))
return float(score(pred, gold))
“`
Настройка задач и подсказок
Мы определяем небольшой бенчмарк с тремя задачами QA и подбираем несколько кандидатных системных подсказок для оптимизации. Затем мы применяем nest_asyncio и устанавливаем хост и порт локального сервера, что позволяет нам запускать сервер Agent-Lightning и клиенты в рамках одной среды выполнения Colab.
“`python
TASKS = [
{“prompt”:”Capital of France?”,”answer”:”Paris”},
{“prompt”:”Who wrote Pride and Prejudice?”,”answer”:”Jane Austen”},
{“prompt”:”2+2 = ?”,”answer”:”4″},
]
PROMPTS = [
“You are a terse expert. Answer with only the final fact, no sentences.”,
“You are a helpful, knowledgeable AI. Prefer concise, correct answers.”,
“Answer as a rigorous evaluator; return only the canonical fact.”,
“Be a friendly tutor. Give the one-word answer if obvious.”
]
nest_asyncio.apply()
HOST, PORT = “127.0.0.1”, 9997
“`
Запуск сервера и поиск
Мы запускаем сервер Agent-Lightning и перебираем наши кандидатные системные подсказки, обновляя общий system_prompt перед постановкой каждой задачи обучения. Затем мы опрашиваем о завершённых развёртываниях, вычисляем средние вознаграждения по подсказкам, сообщаем о наиболее эффективной подсказке и корректно останавливаем сервер.
“`python
async def runserverand_search():
server = AgentLightningServer(host=HOST, port=PORT)
await server.start()
print(” Сервер запущен”)
await asyncio.sleep(1.5)
results = []
for sp in PROMPTS:
await server.updateresources({“systemprompt”: PromptTemplate(template=sp, engine=”f-string”)})
scores = []
for t in TASKS:
tid = await server.queue_task(sample=t, mode=”train”)
rollout = await server.pollcompletedrollout(tid, timeout=40) # waits for a worker
if rollout is None:
print(” Таймаут ожидания развёртывания; продолжаем…”)
continue
scores.append(float(getattr(rollout, “final_reward”, 0.0)))
avg = sum(scores)/len(scores) if scores else 0.0
print(f” Средняя оценка подсказки: {avg:.3f} | {sp}”)
results.append((sp, avg))
best = max(results, key=lambda x: x[1]) if results else (“
print(“\n ЛУЧШАЯ ПОДСКАЗКА:”, best[0], ” | оценка:”, f”{best[1]:.3f}”)
await server.stop()
“`
Запуск клиента в отдельном потоке
Мы запускаем клиента в отдельном потоке с двумя параллельными работниками, что позволяет ему обрабатывать задачи, отправленные сервером. В то же время мы запускаем цикл сервера, который оценивает разные подсказки, собирает результаты развёртывания и сообщает о лучшей системной подсказке на основе среднего вознаграждения.
“`python
def runclientin_thread():
agent = QAAgent()
trainer = Trainer(n_workers=2)
trainer.fit(agent, backend=f”http://{HOST}:{PORT}”)
clientthr = threading.Thread(target=runclientinthread, daemon=True)
client_thr.start()
asyncio.run(runserverand_search())
“`
В заключение мы увидим, как Agent-Lightning позволяет нам создать гибкий конвейер агентов с помощью всего нескольких строк кода. Мы можем запустить сервер, запустить параллельных клиентских работников, оценить различные системные подсказки и автоматически измерить производительность — и всё это в рамках одной среды Colab. Это демонстрирует, как фреймворк упрощает процесс создания, тестирования и оптимизации AI-агентов структурированным образом.
1. Какие библиотеки и модули необходимо установить для работы с Microsoft Agent-Lightning в Google Colab?
Для работы с Microsoft Agent-Lightning в Google Colab необходимо установить следующие библиотеки и модули: `agentlightning`, `openai`, `nest_asyncio`, `python-dotenv`, `os`, `threading`, `time`, `asyncio`, `random`, `getpass`.
2. Как определяется класс QAAgent в данном руководстве?
Класс `QAAgent` определяется путём расширения класса `LitAgent`. В нём обрабатывается каждый этап обучения, отправляя запрос пользователя в LLM, собирая ответ и оценивая его по сравнению с эталонным ответом.
3. Какие задачи используются для бенчмаркинга в данном руководстве?
Для бенчмаркинга используются три задачи QA:
* Capital of France? (Столица Франции?) — ответ: Paris (Париж).
* Who wrote Pride and Prejudice? (Кто написал «Гордость и предубеждение»?) — ответ: Jane Austen (Джейн Остин).
* 2+2 = ? — ответ: 4.
4. Какие системные подсказки используются для оптимизации в данном руководстве?
Для оптимизации используются следующие системные подсказки:
* You are a terse expert. Answer with only the final fact, no sentences. (Ты лаконичный эксперт. Отвечай только конечным фактом, без предложений.)
* You are a helpful, knowledgeable AI. Prefer concise, correct answers. (Ты полезный, знающий ИИ. Предпочитай краткие, правильные ответы.)
* Answer as a rigorous evaluator; return only the canonical fact. (Отвечай как строгий оценщик; возвращай только канонический факт.)
* Be a friendly tutor. Give the one-word answer if obvious. (Будь дружелюбным наставником. Дай однословный ответ, если очевидно.)
5. Как запускается сервер Agent-Lightning в данном руководстве?
Сервер Agent-Lightning запускается с помощью класса `AgentLightningServer`. Для этого необходимо указать хост и порт, а затем вызвать метод `start()`. После запуска сервера можно обновлять общие ресурсы, ставить задачи обучения и опрашивать о завершённых развёртываниях.