Агентный анализ
Определения LLM-инструментов для AI-управляемой физики
NextStat предоставляет 31 операцию в 12+ статистических вертикалях как стандартизированные определения инструментов, совместимые с OpenAI function calling, LangChain и Model Context Protocol (MCP). Это позволяет AI-агентам — GPT-4o, Llama 4, Claude, локальным Ollama-моделям — обнаруживать и вызывать регрессию, survival-анализ, проверки гипотез, каузальный вывод, временные ряды и многое другое — программно.
Ключевая идея
Физик говорит: "Проверь, как меняется значимость, если убрать систематику JES, и построй график."Агент вызывает nextstat_fit, сравнивает до/после и строит график без написания скрипта.
Доступные инструменты
| Инструмент | Описание |
|---|---|
| HEP / HistFactory | |
| nextstat_fit | MLE-фит → bestfit параметры, неопределённости, NLL, сходимость |
| nextstat_hypotest | Асимптотическая CLs-проверка гипотезы при заданном μ |
| nextstat_hypotest_toys | CLs-проверка гипотезы на toy-экспериментах |
| nextstat_upper_limit | 95% CL верхний предел через CLs-скан |
| nextstat_ranking | Ранкинг влияния систематик (важность признаков) |
| nextstat_discovery_asymptotic | Значимость открытия Z₀ (тест только фона) |
| nextstat_scan | Скан профильного правдоподобия по значениям μ |
| nextstat_workspace_audit | Аудит совместимости workspace |
| nextstat_read_root_histogram | Чтение TH1-гистограммы из ROOT-файла |
| Регрессия и байесовские методы | |
| nextstat_glm_fit | GLM-фит (линейная, логистическая, Пуассон, NB) → коэффициенты, SE |
| nextstat_bayesian_sample | NUTS-семплинг для любой модели → постериор, ESS, R̂, диагностика |
| Survival и клиника | |
| nextstat_survival_fit | Cox PH / Weibull / Log-Normal AFT / Exponential MLE-фит |
| nextstat_kaplan_meier | Кривая KM + опциональный log-rank тест |
| nextstat_competing_risks | Aalen–Johansen CIF, тест Грея, Fine–Gray регрессия |
| Эконометрика и каузальность | |
| nextstat_panel_fe | Panel FE (within-оценка) с кластерными робастными SE |
| nextstat_did | Difference-in-Differences (TWFE) → ATT с кластерными SE |
| nextstat_iv_2sls | IV / 2SLS с диагностикой слабых инструментов |
| nextstat_event_study | Динамический DiD event study с лидами/лагами |
| nextstat_aipw | Дважды-робастный ATE/ATT (AIPW) с диагностикой propensity |
| Временные ряды и волатильность | |
| nextstat_kalman | Фильтр Калмана / сглаживание / прогноз |
| nextstat_garch_fit | GARCH(1,1) / EGARCH / GJR-GARCH / стохастическая волатильность |
| nextstat_meta_analysis | Мета-анализ фиксированных/случайных эффектов с I², Q, τ² |
| nextstat_churn_retention | Кривая удержания по данным tenure/event |
| nextstat_chain_ladder | Страховое резервирование (chain ladder / Mack) |
| Фарма и PK/PD | |
| nextstat_pharma_fit | Популяционный PK-фит (FOCE/FOCEI/SAEM) для 1/2/3-камерных моделей |
| nextstat_pharma_vpc | Visual Predictive Check — симуляция + диагностика |
| nextstat_trial_simulate | Монте-Карло симуляция клинического исследования |
| nextstat_bioequivalence | ABE (TOST) + RSABE с мощностью и размером выборки |
| nextstat_dose_response | Emax / Sigmoid-Emax моделирование доза-ответ |
| Надёжность | |
| nextstat_fault_tree_mc | Дерево отказов — Монте-Карло (CPU/CUDA/Metal) |
| nextstat_fault_tree_ce_is | Дерево отказов — CE-IS importance sampling (p~1e-16) |
OpenAI function calling
import json, openai
from nextstat.tools import get_toolkit, execute_tool
# 1. Получить определения инструментов (OpenAI-совместимый JSON Schema)
tools = get_toolkit()
# 2. Отправить их в модель
response = openai.chat.completions.create(
model="gpt-4o",
messages=[
{"role": "user", "content": "Сфить этот workspace и скажи мне силу сигнала"},
],
tools=tools,
)
# 3. Выполнить tool calls от агента
for call in response.choices[0].message.tool_calls:
result = execute_tool(call.function.name, json.loads(call.function.arguments))
print(json.dumps(result, indent=2))Интеграция с LangChain
from nextstat.tools import get_langchain_tools
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain.agents import create_tool_calling_agent, AgentExecutor
tools = get_langchain_tools() # list of StructuredTool
llm = ChatOpenAI(model="gpt-4o")
prompt = ChatPromptTemplate.from_messages([
("system", "You are a HEP physicist assistant with NextStat tools."),
("human", "{input}"),
("placeholder", "{agent_scratchpad}"),
])
agent = create_tool_calling_agent(llm, tools, prompt)
executor = AgentExecutor(agent=agent, tools=tools)
result = executor.invoke({
"input": "Какова значимость открытия (Z₀) для этого workspace?"
})MCP (Model Context Protocol)
Для MCP-based tool servers (Windsurf, Cursor, Claude Desktop):
from nextstat.tools import get_mcp_tools, handle_mcp_call
# Зарегистрировать инструменты на MCP-сервере
tools = get_mcp_tools() # список {name, description, inputSchema}
# Обработать входящий вызов инструмента
result = handle_mcp_call("nextstat_fit", {"workspace_json": ws_str})Локальные агенты (Ollama / vLLM)
Схемы инструментов работают с любой моделью, поддерживающей вызов инструментов (function calling). Для локальных моделей через Ollama или vLLM:
import json, requests
from nextstat.tools import get_toolkit, execute_tool
tools = get_toolkit()
# Ollama с вызовом инструментов (function calling)
response = requests.post("http://localhost:11434/api/chat", json={
"model": "llama3.1",
"messages": [{"role": "user", "content": "Сделай фит этого workspace"}],
"tools": tools,
})
# Распарсить и выполнить
for call in response.json()["message"]["tool_calls"]:
result = execute_tool(call["function"]["name"], call["function"]["arguments"])Справка API
| Функция | Возвращает |
|---|---|
| get_toolkit() | OpenAI-совместимые определения инструментов (список dict) |
| execute_tool(name, args) | Выполнение вызова инструмента → JSON-сериализуемый dict |
| get_langchain_tools() | Экземпляры LangChain StructuredTool |
| get_mcp_tools() | MCP-совместимые определения инструментов |
| get_tool_names() | Список имён доступных инструментов |
| get_tool_schema(name) | JSON Schema для конкретного инструмента |
Серверный режим (nextstat-server)
Если вы запускаете nextstat-server, агенты могут получать определения инструментов и выполнять их через HTTP, без импорта Python:
- ›Реестр tools:
GET /v1/tools/schema - ›Выполнение инструмента:
POST /v1/tools/execute
from nextstat.tools import get_toolkit, execute_tool
server_url = "http://127.0.0.1:3742"
tools = get_toolkit(transport="server", server_url=server_url)
out = execute_tool(
"nextstat_hypotest",
{"workspace_json": "...", "mu": 1.0, "execution": {"deterministic": True}},
transport="server",
server_url=server_url,
)
# server_url можно задать через переменную окружения NEXTSTAT_SERVER_URL
# fallback_to_local=False отключает локальный fallbackПолная документация сервера: сервер NextStat.
