create-voltagent
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseCreate VoltAgent Skill
创建VoltAgent Skill
Complete guide for creating new VoltAgent projects. Includes the CLI flow and a full manual setup.
Official documentation: https://voltagent.dev/docs/
Start Here
开始
When a user wants to create a VoltAgent project, ask:
"How would you like to create your VoltAgent project?"
- Automatic Setup - run and handle prompts
npm create voltagent-app@latest - Interactive Guide - walk through each step and confirm choices
- Manual Installation - set up dependencies and a full working example
Based on their choice:
- Option 1: run the CLI, capture server and provider choices, and finish setup
- Option 2: gather server, provider, and API key, then run the CLI
- Option 3: follow the manual steps below
当用户想要创建VoltAgent项目时,询问:
"你希望通过哪种方式创建VoltAgent项目?"
- 自动设置 - 运行并处理提示
npm create voltagent-app@latest - 交互式引导 - 逐步引导并确认各项选择
- 手动安装 - 配置依赖并搭建完整可用示例
根据用户选择执行:
- 选项1:运行CLI,获取服务器与服务商选择,完成设置
- 选项2:收集服务器、服务商及API密钥信息,再运行CLI
- 选项3:遵循下方手动步骤操作
Before You Start
准备工作
- Node.js 20+ (>= 20.19.0 recommended)
- Git (optional, for auto git init)
- An API key for your model provider (not needed for Ollama)
- Node.js 20+(推荐版本 ≥ 20.19.0)
- Git(可选,用于自动初始化git仓库)
- 模型服务商的API密钥(使用Ollama时无需提供)
Fast Path
快速路径
Create a new VoltAgent project with one command:
bash
npm create voltagent-app@latestOther package managers:
bash
pnpm create voltagent-app@latest
yarn create voltagent-app@latest
bun create voltagent-app@latest通过一条命令创建新的VoltAgent项目:
bash
npm create voltagent-app@latest其他包管理器命令:
bash
pnpm create voltagent-app@latest
yarn create voltagent-app@latest
bun create voltagent-app@latestCLI Flow
CLI流程
The create-voltagent-app command:
- Asks for a project name (default: )
my-voltagent-app - Prompts for a server framework (Hono or Elysia)
- Prompts for an AI provider (OpenAI, Anthropic, Google, Groq, Mistral, Ollama)
- Prompts for an API key when required
- Installs dependencies and scaffolds the project
- Writes ,
.env,README.md,tsconfig.json, and Docker filestsdown.config.ts - Initializes a git repo when available
create-voltagent-app命令执行步骤:
- 询问项目名称(默认值:)
my-voltagent-app - 提示选择服务器框架(Hono或Elysia)
- 提示选择AI服务商(OpenAI、Anthropic、Google、Groq、Mistral、Ollama)
- 必要时提示输入API密钥
- 安装依赖并生成项目骨架
- 写入、
.env、README.md、tsconfig.json及Docker相关文件tsdown.config.ts - 若Git可用则初始化git仓库
CLI Walkthrough
CLI操作指引
-
Run:bash
npm create voltagent-app@latest -
When prompted:
- Choose a server (Hono recommended or Elysia)
- Choose an AI provider
- Enter your API key (skip if using Ollama)
-
Start the dev server:bash
cd <your-project-directory> npm run dev -
If you chose Ollama:bash
ollama pull llama3.2
-
运行命令:bash
npm create voltagent-app@latest -
出现提示时:
- 选择服务器框架(推荐Hono或Elysia)
- 选择AI服务商
- 输入API密钥(使用Ollama可跳过)
-
启动开发服务器:bash
cd <你的项目目录> npm run dev -
若选择Ollama,需执行:bash
ollama pull llama3.2
CLI Flags and Examples
CLI参数与示例
Create in a specific directory:
bash
npm create voltagent-app@latest my-voltagent-appDownload an example from the VoltAgent repo:
bash
npm create voltagent-app@latest -- --example with-workflowpnpm / yarn / bun equivalents:
bash
pnpm create voltagent-app@latest -- --example with-workflow
yarn create voltagent-app@latest -- --example with-workflow
bun create voltagent-app@latest -- --example with-workflowNotes:
- Examples are pulled from https://github.com/voltagent/voltagent/tree/main/examples
- Some package managers require before
--.--example - After an example download, run and
npm install.npm run dev
在指定目录创建项目:
bash
npm create voltagent-app@latest my-voltagent-app从VoltAgent仓库下载示例项目:
bash
npm create voltagent-app@latest -- --example with-workflowpnpm / yarn / bun对应命令:
bash
pnpm create voltagent-app@latest -- --example with-workflow
yarn create voltagent-app@latest -- --example with-workflow
bun create voltagent-app@latest -- --example with-workflow注意事项:
- 示例项目来源:https://github.com/voltagent/voltagent/tree/main/examples
- 部分包管理器需要在前添加
--example-- - 下载示例后,需执行和
npm installnpm run dev
Generated Layout
生成的项目结构
my-voltagent-app/
|-- src/
| |-- index.ts
| |-- tools/
| | |-- index.ts
| | `-- weather.ts
| `-- workflows/
| `-- index.ts
|-- .env
|-- .voltagent/
|-- Dockerfile
|-- .dockerignore
|-- .gitignore
|-- README.md
|-- package.json
|-- tsconfig.json
`-- tsdown.config.tsIf you run the docs sync script in this repo, you may also see generated.
packages/core/docsmy-voltagent-app/
|-- src/
| |-- index.ts
| |-- tools/
| | |-- index.ts
| | `-- weather.ts
| `-- workflows/
| `-- index.ts
|-- .env
|-- .voltagent/
|-- Dockerfile
|-- .dockerignore
|-- .gitignore
|-- README.md
|-- package.json
|-- tsconfig.json
`-- tsdown.config.ts若运行仓库中的文档同步脚本,还会生成目录。
packages/core/docsEnv Keys
环境变量密钥
The CLI writes with your provider key (or a placeholder). Common keys:
.envenv
OPENAI_API_KEY=...
ANTHROPIC_API_KEY=...
GOOGLE_GENERATIVE_AI_API_KEY=...
GROQ_API_KEY=...
MISTRAL_API_KEY=...
OLLAMA_HOST=http://localhost:11434
VOLTAGENT_PUBLIC_KEY=...
VOLTAGENT_SECRET_KEY=...CLI会在文件中写入服务商密钥(或占位符)。常见密钥如下:
.envenv
OPENAI_API_KEY=...
ANTHROPIC_API_KEY=...
GOOGLE_GENERATIVE_AI_API_KEY=...
GROQ_API_KEY=...
MISTRAL_API_KEY=...
OLLAMA_HOST=http://localhost:11434
VOLTAGENT_PUBLIC_KEY=...
VOLTAGENT_SECRET_KEY=...Manual Setup (Full)
完整手动设置
If you prefer not to use the CLI, follow these steps:
若不想使用CLI,可遵循以下步骤:
Step 1: Create the project directory
步骤1:创建项目目录
bash
mkdir my-voltagent-app && cd my-voltagent-app
npm init -y
mkdir -p src/tools src/workflows .voltagentbash
mkdir my-voltagent-app && cd my-voltagent-app
npm init -y
mkdir -p src/tools src/workflows .voltagentStep 2: Install dependencies
步骤2:安装依赖
Choose one server package:
bash
npm install @voltagent/core @voltagent/libsql @voltagent/logger @voltagent/server-hono @voltagent/cli ai zod dotenvor
bash
npm install @voltagent/core @voltagent/libsql @voltagent/logger @voltagent/server-elysia @voltagent/cli ai zod dotenvDev dependencies:
bash
npm install -D typescript tsx tsdown @types/node @biomejs/biome选择一款服务器包:
bash
npm install @voltagent/core @voltagent/libsql @voltagent/logger @voltagent/server-hono @voltagent/cli ai zod dotenv或
bash
npm install @voltagent/core @voltagent/libsql @voltagent/logger @voltagent/server-elysia @voltagent/cli ai zod dotenv开发依赖:
bash
npm install -D typescript tsx tsdown @types/node @biomejs/biomeStep 3: Add scripts to package.json
步骤3:为package.json添加脚本
json
{
"scripts": {
"dev": "tsx watch --env-file=.env ./src",
"build": "tsdown",
"start": "node dist/index.js",
"lint": "biome check ./src",
"lint:fix": "biome check --write ./src",
"typecheck": "tsc --noEmit",
"volt": "volt"
}
}voltinitdeployevalpromptstunnelupdatejson
{
"scripts": {
"dev": "tsx watch --env-file=.env ./src",
"build": "tsdown",
"start": "node dist/index.js",
"lint": "biome check ./src",
"lint:fix": "biome check --write ./src",
"typecheck": "tsc --noEmit",
"volt": "volt"
}
}voltinitdeployevalpromptstunnelupdateStep 4: Configure TypeScript
步骤4:配置TypeScript
Create :
tsconfig.jsonjson
{
"compilerOptions": {
"target": "ES2022",
"module": "ES2022",
"moduleResolution": "bundler",
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true,
"strict": true,
"outDir": "dist",
"skipLibCheck": true
},
"include": ["src"],
"exclude": ["node_modules", "dist"]
}创建文件:
tsconfig.jsonjson
{
"compilerOptions": {
"target": "ES2022",
"module": "ES2022",
"moduleResolution": "bundler",
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true,
"strict": true,
"outDir": "dist",
"skipLibCheck": true
},
"include": ["src"],
"exclude": ["node_modules", "dist"]
}Step 5: Add tsdown config
步骤5:添加tsdown配置
Create :
tsdown.config.tstypescript
import { defineConfig } from "tsdown";
export default defineConfig({
entry: ["./src/index.ts"],
sourcemap: true,
outDir: "dist",
});创建文件:
tsdown.config.tstypescript
import { defineConfig } from "tsdown";
export default defineConfig({
entry: ["./src/index.ts"],
sourcemap: true,
outDir: "dist",
});Step 6: Create .env
步骤6:创建.env文件
env
OPENAI_API_KEY=your-api-key-here
VOLTAGENT_PUBLIC_KEY=your-public-key
VOLTAGENT_SECRET_KEY=your-secret-key
NODE_ENV=developmentFor Ollama:
env
OLLAMA_HOST=http://localhost:11434env
OPENAI_API_KEY=your-api-key-here
VOLTAGENT_PUBLIC_KEY=your-public-key
VOLTAGENT_SECRET_KEY=your-secret-key
NODE_ENV=development使用Ollama时的配置:
env
OLLAMA_HOST=http://localhost:11434Step 7: Create a tool
步骤7:创建工具
Create :
src/tools/weather.tstypescript
import { createTool } from "@voltagent/core";
import { z } from "zod";
export const weatherTool = createTool({
name: "getWeather",
description: "Get the current weather for a specific location",
parameters: z.object({
location: z.string().describe("City or location to get weather for"),
}),
execute: async ({ location }) => {
return {
weather: {
location,
temperature: 21,
condition: "Sunny",
humidity: 45,
windSpeed: 8,
},
message: `Current weather in ${location}: 21 C and sunny.`,
};
},
});Create :
src/tools/index.tstypescript
export { weatherTool } from "./weather";创建文件:
src/tools/weather.tstypescript
import { createTool } from "@voltagent/core";
import { z } from "zod";
export const weatherTool = createTool({
name: "getWeather",
description: "Get the current weather for a specific location",
parameters: z.object({
location: z.string().describe("City or location to get weather for"),
}),
execute: async ({ location }) => {
return {
weather: {
location,
temperature: 21,
condition: "Sunny",
humidity: 45,
windSpeed: 8,
},
message: `Current weather in ${location}: 21 C and sunny.`,
};
},
});创建文件:
src/tools/index.tstypescript
export { weatherTool } from "./weather";Step 8: Create a workflow
步骤8:创建工作流
Create :
src/workflows/index.tstypescript
import { createWorkflowChain } from "@voltagent/core";
import { z } from "zod";
export const expenseApprovalWorkflow = createWorkflowChain({
id: "expense-approval",
name: "Expense Approval Workflow",
purpose: "Process expense reports with manager approval for high amounts",
input: z.object({
employeeId: z.string(),
amount: z.number(),
category: z.string(),
description: z.string(),
}),
result: z.object({
status: z.enum(["approved", "rejected"]),
approvedBy: z.string(),
finalAmount: z.number(),
}),
})
.andThen({
id: "check-approval-needed",
resumeSchema: z.object({
approved: z.boolean(),
managerId: z.string(),
comments: z.string().optional(),
adjustedAmount: z.number().optional(),
}),
execute: async ({ data, suspend, resumeData }) => {
if (resumeData) {
return {
...data,
approved: resumeData.approved,
approvedBy: resumeData.managerId,
finalAmount: resumeData.adjustedAmount || data.amount,
managerComments: resumeData.comments,
};
}
if (data.amount > 500) {
await suspend("Manager approval required", {
employeeId: data.employeeId,
requestedAmount: data.amount,
category: data.category,
});
}
return {
...data,
approved: true,
approvedBy: "system",
finalAmount: data.amount,
};
},
})
.andThen({
id: "process-decision",
execute: async ({ data }) => {
return {
status: data.approved ? "approved" : "rejected",
approvedBy: data.approvedBy,
finalAmount: data.finalAmount,
};
},
});创建文件:
src/workflows/index.tstypescript
import { createWorkflowChain } from "@voltagent/core";
import { z } from "zod";
export const expenseApprovalWorkflow = createWorkflowChain({
id: "expense-approval",
name: "Expense Approval Workflow",
purpose: "Process expense reports with manager approval for high amounts",
input: z.object({
employeeId: z.string(),
amount: z.number(),
category: z.string(),
description: z.string(),
}),
result: z.object({
status: z.enum(["approved", "rejected"]),
approvedBy: z.string(),
finalAmount: z.number(),
}),
})
.andThen({
id: "check-approval-needed",
resumeSchema: z.object({
approved: z.boolean(),
managerId: z.string(),
comments: z.string().optional(),
adjustedAmount: z.number().optional(),
}),
execute: async ({ data, suspend, resumeData }) => {
if (resumeData) {
return {
...data,
approved: resumeData.approved,
approvedBy: resumeData.managerId,
finalAmount: resumeData.adjustedAmount || data.amount,
managerComments: resumeData.comments,
};
}
if (data.amount > 500) {
await suspend("Manager approval required", {
employeeId: data.employeeId,
requestedAmount: data.amount,
category: data.category,
});
}
return {
...data,
approved: true,
approvedBy: "system",
finalAmount: data.amount,
};
},
})
.andThen({
id: "process-decision",
execute: async ({ data }) => {
return {
status: data.approved ? "approved" : "rejected",
approvedBy: data.approvedBy,
finalAmount: data.finalAmount,
};
},
});Step 9: Create the entry point
步骤9:创建入口文件
Create :
src/index.tstypescript
import "dotenv/config";
import {
Agent,
Memory,
VoltAgent,
VoltAgentObservability,
VoltOpsClient,
} from "@voltagent/core";
import { LibSQLMemoryAdapter, LibSQLObservabilityAdapter } from "@voltagent/libsql";
import { createPinoLogger } from "@voltagent/logger";
import { honoServer } from "@voltagent/server-hono";
import { expenseApprovalWorkflow } from "./workflows";
import { weatherTool } from "./tools";
const logger = createPinoLogger({ name: "my-voltagent-app", level: "info" });
const memory = new Memory({
storage: new LibSQLMemoryAdapter({
url: "file:./.voltagent/memory.db",
logger: logger.child({ component: "libsql" }),
}),
});
const observability = new VoltAgentObservability({
storage: new LibSQLObservabilityAdapter({
url: "file:./.voltagent/observability.db",
}),
});
const agent = new Agent({
name: "my-voltagent-app",
instructions: "A helpful assistant that can check weather and help with various tasks",
model: "openai/gpt-4o-mini",
tools: [weatherTool],
memory,
});
new VoltAgent({
agents: { agent },
workflows: { expenseApprovalWorkflow },
server: honoServer(),
logger,
observability,
voltOpsClient: new VoltOpsClient({
publicKey: process.env.VOLTAGENT_PUBLIC_KEY || "",
secretKey: process.env.VOLTAGENT_SECRET_KEY || "",
}),
});Model format is . Examples:
provider/modelopenai/gpt-4o-minianthropic/claude-3-5-sonnetgoogle/gemini-2.0-flashgroq/llama-3.3-70b-versatilemistral/mistral-large-latestollama/llama3.2
If you chose Elysia, replace with and update the import.
honoServerelysiaServer创建文件:
src/index.tstypescript
import "dotenv/config";
import {
Agent,
Memory,
VoltAgent,
VoltAgentObservability,
VoltOpsClient,
} from "@voltagent/core";
import { LibSQLMemoryAdapter, LibSQLObservabilityAdapter } from "@voltagent/libsql";
import { createPinoLogger } from "@voltagent/logger";
import { honoServer } from "@voltagent/server-hono";
import { expenseApprovalWorkflow } from "./workflows";
import { weatherTool } from "./tools";
const logger = createPinoLogger({ name: "my-voltagent-app", level: "info" });
const memory = new Memory({
storage: new LibSQLMemoryAdapter({
url: "file:./.voltagent/memory.db",
logger: logger.child({ component: "libsql" }),
}),
});
const observability = new VoltAgentObservability({
storage: new LibSQLObservabilityAdapter({
url: "file:./.voltagent/observability.db",
}),
});
const agent = new Agent({
name: "my-voltagent-app",
instructions: "A helpful assistant that can check weather and help with various tasks",
model: "openai/gpt-4o-mini",
tools: [weatherTool],
memory,
});
new VoltAgent({
agents: { agent },
workflows: { expenseApprovalWorkflow },
server: honoServer(),
logger,
observability,
voltOpsClient: new VoltOpsClient({
publicKey: process.env.VOLTAGENT_PUBLIC_KEY || "",
secretKey: process.env.VOLTAGENT_SECRET_KEY || "",
}),
});模型格式为,示例:
provider/modelopenai/gpt-4o-minianthropic/claude-3-5-sonnetgoogle/gemini-2.0-flashgroq/llama-3.3-70b-versatilemistral/mistral-large-latestollama/llama3.2
若选择Elysia服务器,需将替换为并更新导入语句。
honoServerelysiaServerStep 10: Run the dev server
步骤10:启动开发服务器
bash
npm run devbash
npm run dev