В этом руководстве мы создадим продвинутый, комплексный обучающий конвейер вокруг Atomic-Agents, объединив типизированные интерфейсы агентов, структурированные запросы и компактный уровень извлечения, который связывает выходные данные с реальной проектной документацией. Также мы покажем, как планировать извлечение, извлекать релевантный контекст, динамически внедрять его в отвечающего агента и запускать интерактивный цикл, который превращает настройку в многократно используемого помощника для исследований по любым новым вопросам Atomic Agents.
Установка необходимых пакетов
Мы устанавливаем все необходимые пакеты, импортируем основные примитивы Atomic-Agents и настраиваем зависимости, совместимые с Colab, в одном месте. Мы надёжно получаем ключ API OpenAI с клавиатуры и сохраняем его в окружении, чтобы нижестоящий код никогда не использовал секреты в жёстко заданном виде. Мы также фиксируем имя модели по умолчанию, сохраняя при этом возможность настройки через переменную окружения.
«`python
import os, sys, textwrap, time, json, re
from typing import List, Optional, Dict, Tuple
from dataclasses import dataclass
import subprocess
subprocess.check_call([sys.executable, «-m», «pip», «install», «-q»,
«atomic-agents», «instructor», «openai», «pydantic»,
«requests», «beautifulsoup4», «scikit-learn»])
from getpass import getpass
if not os.environ.get(«OPENAIAPIKEY»):
os.environ[«OPENAIAPIKEY»] = getpass(«Enter OPENAIAPIKEY (input hidden): «).strip()
MODEL = os.environ.get(«OPENAI_MODEL», «gpt-4o-mini»)
«`
Извлечение текста с веб-страниц
Мы извлекаем веб-страницы из репозитория Atomic Agents и документации, затем очищаем их до простого текста, чтобы извлечение стало надёжным. Мы разбиваем длинные документы на перекрывающиеся сегменты, сохраняя контекст, но делая каждый фрагмент достаточно маленьким для ранжирования и цитирования.
«`python
def fetchurltext(url: str, timeout: int = 20) -> str:
r = requests.get(url, timeout=timeout, headers={«User-Agent»: «Mozilla/5.0»})
r.raiseforstatus()
soup = BeautifulSoup(r.text, «html.parser»)
for tag in soup([«script», «style», «nav», «header», «footer», «noscript»]):
tag.decompose()
text = soup.get_text(«\n»)
text = re.sub(r»[ \t]+», » «, text)
text = re.sub(r»\n{3,}», «\n\n», text).strip()
return text
«`
Построение мини-системы извлечения
Мы строим мини-систему извлечения, используя TF-IDF и косинусное сходство по корпусу сегментированных документов. Мы оборачиваем каждый извлечённый фрагмент в структурированный объект Snippet для отслеживания идентификаторов документов, идентификаторов фрагментов и оценок цитирования. Мы внедряем фрагменты с наивысшим рейтингом в среду выполнения агента через поставщика динамического контекста, сохраняя отвечающего агента на земле.
«`python
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity
@dataclass
class Snippet:
doc_id: str
url: str
chunk_id: int
text: str
score: float
class MiniCorpusRetriever:
def init(self, docs: Dict[str, Tuple[str, str]]):
self.items: List[Tuple[str, str, int, str]] = []
for doc_id, (url, raw) in docs.items():
for idx, ch in enumerate(chunk_text(raw)):
self.items.append((doc_id, url, idx, ch))
if not self.items:
raise RuntimeError(«No documents were fetched; cannot build TF-IDF index.»)
self.vectorizer = TfidfVectorizer(stopwords=»english», maxfeatures=50000)
self.matrix = self.vectorizer.fit_transform([it[3] for it in self.items])
def search(self, query: str, k: int = 6) -> List[Snippet]:
qv = self.vectorizer.transform([query])
sims = cosine_similarity(qv, self.matrix).ravel()
top = sims.argsort()[::-1][:k]
out = []
for j in top:
docid, url, chunkid, txt = self.items[j]
out.append(Snippet(docid=docid, url=url, chunkid=chunkid, text=txt, score=float(sims[j])))
return out
«`
Мы определяем строгие типизированные схемы для входов и выходов планировщика и отвечающего агента и включаем строки документации для удовлетворения требований схемы Atomic Agents. Мы создаём клиента Instructor, завёрнутого в OpenAI, и настраиваем двух агентов Atomic с явными системными подсказками и историей чата. Мы обеспечиваем структурированные выходные данные, чтобы планировщик создавал запросы, а отвечающий агент — цитируемый ответ с чёткими следующими шагами.
В заключение мы завершили рабочий процесс Atomic-Agents в Colab, чётко разделив планирование, извлечение, ответы и обеспечив строгую типизацию. Мы сохранили систему на земле, внедрив только фрагменты документации с наивысшим сигналом в качестве динамического контекста, и ввели дисциплину цитирования, которая делает выходные данные проверяемыми.
Отсюда мы можем масштабировать этот шаблон, добавляя больше источников, заменяя более сильными извлекающими устройствами или переранжировщиками, вводя агентов по использованию инструментов и превращая конвейер в исследовательского помощника промышленного уровня, который остаётся одновременно быстрым и заслуживающим доверия.
1. Какие основные компоненты включает в себя создание продвинутого обучающего конвейера вокруг Atomic-Agents?
Ответ: Создание продвинутого обучающего конвейера вокруг Atomic-Agents включает в себя установку необходимых пакетов, извлечение текста с веб-страниц, построение мини-системы извлечения, определение строгих типизированных схем для входов и выходов планировщика и отвечающего агента, создание клиента Instructor, завёрнутого в OpenAI, и настройку двух агентов Atomic с явными системными подсказками и историей чата.
2. Какие методы используются для извлечения текста с веб-страниц в данном руководстве?
Ответ: В данном руководстве для извлечения текста с веб-страниц используется метод `fetchurltext`, который отправляет GET-запрос к указанному URL, очищает текст от HTML-тегов и лишних символов, разбивает длинные документы на перекрывающиеся сегменты и сохраняет контекст.
3. Какие алгоритмы и методы используются для построения мини-системы извлечения?
Ответ: Для построения мини-системы извлечения используются алгоритмы TF-IDF и косинусное сходство по корпусу сегментированных документов. Мини-система извлечения оборачивает каждый извлечённый фрагмент в структурированный объект Snippet для отслеживания идентификаторов документов, идентификаторов фрагментов и оценок цитирования.
4. Какие преимущества даёт использование строгих типизированных схем для входов и выходов агентов?
Ответ: Использование строгих типизированных схем для входов и выходов агентов обеспечивает чёткую структуру данных и упрощает взаимодействие между различными компонентами системы. Это также позволяет удовлетворить требования схемы Atomic Agents и обеспечить структурированные выходные данные.
5. Какие возможности открываются после завершения рабочего процесса Atomic-Agents в Colab?
Ответ: После завершения рабочего процесса Atomic-Agents в Colab можно масштабировать этот шаблон, добавляя больше источников, заменяя более сильными извлекающими устройствами или переранжировщиками, вводя агентов по использованию инструментов и превращая конвейер в исследовательского помощника промышленного уровня, который остаётся одновременно быстрым и заслуживающим доверия.