Анализ данных с помощью LLM
LLM может превратить вопрос о наборе данных в код Python. Выполняйте такой код в песочнице, а не в процессе приложения. Из структурированного результата можно получить таблицы, графики и текст для пользователя.
Основной сценарий выглядит так:
- Загрузите набор данных в песочницу.
- Передайте модели путь к файлу и описание столбцов.
- Добавьте инструмент, который принимает код Python.
- Выполните вызов инструмента через
runCodeилиrun_code. - Прочитайте текст, таблицы, графики или ошибки из результата выполнения.
В примерах ниже используется небольшой CSV-файл. Полученный график сохраняется в sales.png.
OpenAI
npm install openai @abox-dev/code-interpreterПеред запуском задайте OPENAI_API_KEY и AGENTBOX_API_KEY. Пример использует Responses API и модель gpt-5.6-luna.
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.
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();
}Работа с кодом от модели
Считайте созданный моделью код недоверенным, даже если он выполняется в песочнице. Ограничивайте время выполнения и размер вывода, контролируйте доступные файлы и передавайте ошибки обратно модели только тогда, когда нужен повторный запуск. После анализа всегда останавливайте песочницу.
Подробнее о форматах результата читайте в разделах Графики и Библиотеки.