Перейти к содержимому

Анализ данных с помощью LLM

LLM может превратить вопрос о наборе данных в код Python. Выполняйте такой код в песочнице, а не в процессе приложения. Из структурированного результата можно получить таблицы, графики и текст для пользователя.

Основной сценарий выглядит так:

  1. Загрузите набор данных в песочницу.
  2. Передайте модели путь к файлу и описание столбцов.
  3. Добавьте инструмент, который принимает код Python.
  4. Выполните вызов инструмента через runCode или run_code.
  5. Прочитайте текст, таблицы, графики или ошибки из результата выполнения.

В примерах ниже используется небольшой CSV-файл. Полученный график сохраняется в sales.png.

OpenAI

npm install openai @abox-dev/code-interpreter

Перед запуском задайте OPENAI_API_KEY и AGENTBOX_API_KEY. Пример использует Responses API и модель gpt-5.6-luna.

mjs
const openai = new OpenAI();
const sandbox = await Sandbox.create("code-interpreter");

try {
  await sandbox.files.write(
    "/tmp/sales.csv",
    `month,revenue
January,120
February,165
March,210
April,195
`,
  );

  const response = await openai.responses.create({
    model: "gpt-5.6-luna",
    input:
      "The file /tmp/sales.csv has month and revenue columns. Create a bar chart of revenue by month and finish with plt.show().",
    tools: [
      {
        type: "function",
        name: "run_python",
        description: "Run Python code in an AgentBox sandbox",
        parameters: {
          type: "object",
          properties: { code: { type: "string" } },
          required: ["code"],
          additionalProperties: false,
        },
        strict: true,
      },
    ],
  });

  const toolCall = response.output.find(
    (item) => item.type === "function_call" && item.name === "run_python",
  );
  const { code } = JSON.parse(toolCall.arguments);
  const execution = await sandbox.runCode(code);
  const chart = execution.results.find((result) => result.png);

  await writeFile("sales.png", Buffer.from(chart.png, "base64"));
  console.log("Saved sales.png");
} finally {
  await sandbox.kill();
}

Anthropic

npm install @anthropic-ai/sdk @abox-dev/code-interpreter

Перед запуском задайте ANTHROPIC_API_KEY и AGENTBOX_API_KEY. Этот вариант использует Messages API и модель claude-sonnet-5.

mjs
const anthropic = new Anthropic();
const sandbox = await Sandbox.create("code-interpreter");

try {
  await sandbox.files.write(
    "/tmp/sales.csv",
    `month,revenue
January,120
February,165
March,210
April,195
`,
  );

  const response = await anthropic.messages.create({
    model: "claude-sonnet-5",
    max_tokens: 1024,
    messages: [
      {
        role: "user",
        content:
          "The file /tmp/sales.csv has month and revenue columns. Create a bar chart of revenue by month and finish with plt.show().",
      },
    ],
    tools: [
      {
        name: "run_python",
        description: "Run Python code in an AgentBox sandbox",
        input_schema: {
          type: "object",
          properties: { code: { type: "string" } },
          required: ["code"],
        },
      },
    ],
  });

  const toolCall = response.content.find(
    (block) => block.type === "tool_use" && block.name === "run_python",
  );
  const execution = await sandbox.runCode(toolCall.input.code);
  const chart = execution.results.find((result) => result.png);

  await writeFile("sales.png", Buffer.from(chart.png, "base64"));
  console.log("Saved sales.png");
} finally {
  await sandbox.kill();
}

Работа с кодом от модели

Считайте созданный моделью код недоверенным, даже если он выполняется в песочнице. Ограничивайте время выполнения и размер вывода, контролируйте доступные файлы и передавайте ошибки обратно модели только тогда, когда нужен повторный запуск. После анализа всегда останавливайте песочницу.

Подробнее о форматах результата читайте в разделах Графики и Библиотеки.