Пайплайн для фильтрации и анализа научных публикаций и патентов
Система состоит из 3-х основных модулей:
Поэтапная гибкая обработка: получение патентов → анализ → экспорт
from pathlib import Path
from src.orchestration import create_patent_orchestrator
from src.constants import PATENTS_PER_BATCH
if __name__ == "__main__":
orchestrator = create_patent_orchestrator(patent_per_batch=PATENTS_PER_BATCH)
orchestrator.run(initial_context={"documents_path": Path("patents")})
def create_patent_orchestrator(
patent_per_batch: int = 10, checkpoint_file: Path = Path("checkpoints/patents.pkl")
) -> FlexibleOrchestrator:
"""
Создает стандартный оркестратор с полным циклом работы:
Поиск и скачивание патентов ->
Извлечение текстов ->
Сбор документов ->
Обработка документов <-> Сохранение результатов
Args:
patent_per_batch: Количество патентов для обработки за раз
checkpoint_file: Путь к файлу чекпоинтов
Returns:
FlexibleOrchestrator: Стандартный оркестратор с полным циклом работы
"""
from src.orchestration.steps import (
CheckPatentsStep,
ExtractTextsStep,
CollectDocumentsStep,
ProcessDocumentsStep,
SaveResultsStep,
)
steps = [
CheckPatentsStep(patent_per_batch),
ExtractTextsStep(),
CollectDocumentsStep(),
ProcessDocumentsStep(),
SaveResultsStep(),
]
return FlexibleOrchestrator(steps, checkpoint_file)
Поиск патентов
Скачивание PDF
Экстракция текстов
Обработка документов
Сохранение результатов
Ручной просмотр
class Pipeline:
def __init__(self, txt_document: TxtDocument, output_dir: Path):
self.searcher_agent = Agent(
name="SearcherAgent",
instructions=...,
model=DEFAULT_MODEL,
output_type=SearcherAgentResults
)
self.bioinf_agent = Agent(
name="BioinfAgent",
instructions=...,
model=DEFAULT_MODEL,
output_type=BioinfAgentResults
)
self.supervisor_agent = Agent(
name="SupervisorAgent",
instructions=...,
model=DEFAULT_MODEL,
output_type=SupervisorAgentResults
)
self.fix_agent = Agent(
name="FixAgent",
instructions=...,
model=DEFAULT_MODEL,
output_type=BioinfAgentResults
)
SearcherAgent: определяет наличие лиганд-белковых взаимодействий с оценкой уверенности
class Pipeline:
def __init__(self, txt_document: TxtDocument, output_dir: Path):
self.searcher_agent = Agent(
name="SearcherAgent",
instructions=...,
model=DEFAULT_MODEL,
output_type=SearcherAgentResults
)
self.bioinf_agent = Agent(
name="BioinfAgent",
instructions=...,
model=DEFAULT_MODEL,
output_type=BioinfAgentResults
)
self.supervisor_agent = Agent(
name="SupervisorAgent",
instructions=...,
model=DEFAULT_MODEL,
output_type=SupervisorAgentResults
)
self.fix_agent = Agent(
name="FixAgent",
instructions=...,
model=DEFAULT_MODEL,
output_type=BioinfAgentResults
)
BioinfAgent: извлекает взаимодействия, параметры (Ki, IC50, Kd, EC50), названия лигандов и белков
class Pipeline:
def __init__(self, txt_document: TxtDocument, output_dir: Path):
self.searcher_agent = Agent(
name="SearcherAgent",
instructions=...,
model=DEFAULT_MODEL,
output_type=SearcherAgentResults
)
self.bioinf_agent = Agent(
name="BioinfAgent",
instructions=...,
model=DEFAULT_MODEL,
output_type=BioinfAgentResults
)
self.supervisor_agent = Agent(
name="SupervisorAgent",
instructions=...,
model=DEFAULT_MODEL,
output_type=SupervisorAgentResults
)
self.fix_agent = Agent(
name="FixAgent",
instructions=...,
model=DEFAULT_MODEL,
output_type=BioinfAgentResults
)
SupervisorAgent: проверяет корректность результатов, определяет возможность исправления
class Pipeline:
def __init__(self, txt_document: TxtDocument, output_dir: Path):
self.searcher_agent = Agent(
name="SearcherAgent",
instructions=...,
model=DEFAULT_MODEL,
output_type=SearcherAgentResults
)
self.bioinf_agent = Agent(
name="BioinfAgent",
instructions=...,
model=DEFAULT_MODEL,
output_type=BioinfAgentResults
)
self.supervisor_agent = Agent(
name="SupervisorAgent",
instructions=...,
model=DEFAULT_MODEL,
output_type=SupervisorAgentResults
)
self.fix_agent = Agent(
name="FixAgent",
instructions=...,
model=DEFAULT_MODEL,
output_type=BioinfAgentResults
)
FixAgent: исправляет некорректные результаты на основе объяснений супервайзера и редактирует данные BioinfAgent
Критерии отбора:
Итоговым выбором стала модель Qwen3:
ollama pull qwen3
uv sync - можно
запустить проект командой
uv run main.py
uv run gradio-ui.py
Сценарий работы (Python)
Client("http://localhost:7860/")
predict() отправляет данные на нужный api_name
handle_file() для передачи пути или URL файла
from gradio_client import Client
client = Client("http://localhost:7860/")
result = client.predict(
"text",
api_name="/process_single_text"
)
/process_single_text — анализ переданного текста ИИ агентами/process_uploaded_file — то же, что и предыдущий, но для загружаемого файла/download_patents — скачивание патентов на сервере Gradio с параметрами ключевых слов и
ограничением по количеству/run_full_pipeline — полный цикл обработки, такой же, как при обычном запуске проекта/download_pdf_file, /download_csv_file — скачивание файлов с сервера Gradio/create_combined_export — объединение данных отдельных патентов в один CSVНе смотря на то, что это скорее прототип большей системы, я надеюсь, что этот проект может стать частью чего-то большего, или просто вдохновить на это.
Пусть технологии помогают создавать новые возможности для всех нас, давая любому внести свой вклад в настощие открытия.
"От патента к биоактивности — за минуты, а не часы.""
Спасибо за внимание!
→ Давайте строить будущее уже сейчас