<НА ГЛАВНУЮ

Создание агентного ИИ для анализа литературы

Создайте ИИ-рамку, анализирующую литературу, генерирующую гипотезы, планирующую эксперименты и создающую отчеты.

В этом учебном пособии мы шаг за шагом создаем полный агент для научного открытия и познаем, как каждый компонент взаимодействует друг с другом для формирования целостного исследовательского процесса. Мы начинаем с загрузки нашего литературного корпуса, построения модулей поиска и 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

Switch to English