Создание агентного ИИ для анализа литературы
Создайте ИИ-рамку, анализирующую литературу, генерирующую гипотезы, планирующую эксперименты и создающую отчеты.
В этом учебном пособии мы шаг за шагом создаем полный агент для научного открытия и познаем, как каждый компонент взаимодействует друг с другом для формирования целостного исследовательского процесса. Мы начинаем с загрузки нашего литературного корпуса, построения модулей поиска и LLM, а затем собираем агентов, которые ищут статьи, генерируют гипотезы, разрабатывают эксперименты и создают структурированные отчеты.
Литературный корпус и зависимости
import sys, subprocess
def install_deps():
pkgs = ["transformers", "scikit-learn", "numpy"]
subprocess.check_call([sys.executable, "-m", "pip", "install", "-q"] + pkgs)
try:
from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity
import numpy as np
except ImportError:
install_deps()
from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity
import numpy as np
np.random.seed(42)
LITERATURE = [...] # Данные литературы
corpus_texts = [p["abstract"] + " " + p["title"] for p in LITERATURE]
vectorizer = TfidfVectorizer(stop_words="english")
corpus_matrix = vectorizer.fit_transform(corpus_texts)
MODEL_NAME = "google/flan-t5-small"
tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
model = AutoModelForSeq2SeqLM.from_pretrained(MODEL_NAME)Мы заложили основы для нашего научного агента, загрузив библиотеки и подготовив литературный корпус. С загруженной моделью и структурированными данными мы создаем вычислительную основу для всего, что последует далее.
Компонент поиска литературы
@dataclass
class PaperHit:
paper: Dict[str, Any]
score: float
class LiteratureAgent:
def __init__(self, vectorizer, corpus_matrix, papers: List[Dict[str, Any]]):
...
def search(self, query: str, k: int = 3) -> List[PaperHit]:
q_vec = self.vectorizer.transform([query])
sims = cosine_similarity(q_vec, self.corpus_matrix)[0]
idxs = np.argsort(-sims)[:k]
hits = [PaperHit(self.papers[i], float(sims[i])) for i in idxs]
return hitsМы внедрили компонент поиска литературы нашего агента, чтобы определить наиболее релевантные статьи с использованием косинусного сходства. Это дает нашей системе основание в наиболее подходящей предыдущей работе.
Проектирование экспериментов
@dataclass
class ExperimentPlan:
....
class ExperimentAgent:
def design_experiment(self, question: str, hypothesis: str, hits: List[PaperHit]) -> ExperimentPlan:
...
def run_experiment(self, plan: ExperimentPlan) -> ExperimentResult:
base = 0.78 + 0.02 * np.random.randn()
gain = abs(0.05 + 0.01 * np.random.randn())
metrics = {"baseline_AUROC": round(base, 3), "augmented_AUROC": round(base + gain, 3)}
return ExperimentResult(plan=plan, metrics=metrics)Мы проводим эксперименты на основе извлеченной литературы и сгенерированных гипотез, что позволяет создать целесообразные планы экспериментов.
Генерация отчетов
class ReportAgent:
def write_report(self, question: str, hits: List[PaperHit], plan: ExperimentPlan, result: ExperimentResult) -> str:
...Мы создаем полноценный отчет в стиле научного исследования с помощью LLM, собрав гипотезу, протокол, результаты и связанные работы в структурированный документ.
В заключение, мы видим, как компактная база кода может эволюционировать в функционирующего ИИ-соисследователя, способного искать, рассуждать, моделировать и подводить итоги. Каждый фрагмент вносит свой вклад в общий процесс. С простой, но богатой архитектурой мы можем расширять функциональность, чтобы улучшить наше научное исследование.
Switch Language
Read this article in English