# Vercel 完整指南 > 本文档基于 Vercel 官方文档整理,涵盖 Vercel 平台的所有核心功能和使用方法。 --- ## 目录 1. [平台概述](#一平台概述) 2. [快速入门](#二快速入门) 3. [模板市场](#三模板市场) 4. [项目与部署](#四项目与部署) 5. [Git 集成](#五git-集成) 6. [Vercel Functions](#六vercel-functions) 7. [路由中间件](#七路由中间件) 8. [环境变量](#八环境变量) 9. [域名管理](#九域名管理) 10. [存储服务](#十存储服务) 11. [AI SDK](#十一ai-sdk) 12. [分析与监控](#十二分析与监控) 13. [安全功能](#十三安全功能) 14. [图片优化](#十四图片优化) 15. [定时任务](#十五定时任务) 16. [CLI 命令行工具](#十六cli-命令行工具) 17. [REST API](#十七rest-api) 18. [框架支持](#十八框架支持) 19. [部署保护](#十九部署保护) 20. [计费与限制](#二十计费与限制) 21. [最佳实践](#二十一最佳实践) --- ## 一、平台概述 ### 什么是 Vercel? Vercel 是 AI 云平台,为开发者提供构建、部署和扩展 AI 驱动应用的统一平台。支持部署 Web 应用、代理工作负载以及介于两者之间的所有内容。 ### 核心特性 - **零配置部署**:支持主流框架的零配置部署 - **全球 CDN**:内容分发至全球数据中心 - **自动 HTTPS**:免费 SSL 证书 - **预览环境**:每次 Git 推送自动生成预览 URL - **Serverless Functions**:无需管理服务器的后端函数 - **边缘网络**:全球低延迟执行 ### 订阅计划 | 计划 | 适用场景 | 价格 | |------|----------|------| | **Hobby** | 个人项目、学习 | 免费 | | **Pro** | 专业开发者、团队 | $20/用户/月 | | **Enterprise** | 大型企业 | 定制 | --- ## 二、快速入门 ### 创建账户 1. 访问 [vercel.com/signup](https://vercel.com/signup) 2. 选择 Git 提供商登录或使用邮箱 3. 完成邮箱和手机验证 ### 安装 CLI ```bash # npm npm i -g vercel # pnpm pnpm i -g vercel # yarn yarn global add vercel # bun bun i -g vercel ``` ### 首次部署 ```bash # 进入项目目录 cd your-project # 部署到生产环境 vercel --prod ``` ### 部署流程 ``` ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ 本地开发 │ ──▶ │ Git 推送 │ ──▶ │ 自动构建 │ └─────────────┘ └─────────────┘ └─────────────┘ │ ▼ ┌─────────────┐ ┌─────────────┐ │ 生成 URL │ ◀── │ 部署成功 │ └─────────────┘ └─────────────┘ ``` --- ## 三、模板市场 ### 概述 Vercel Templates 是官方提供的模板市场,包含大量预构建的项目模板,帮助开发者快速启动项目开发。所有模板都是**免费**使用的。 **访问地址**:[vercel.com/templates](https://vercel.com/templates) ### 模板分类 #### 按用途分类 | 类别 | 说明 | 适用场景 | |------|------|----------| | **AI** | AI 应用模板 | 聊天机器人、AI Agent、语音接口 | | **Starter** | 入门模板 | 快速启动新项目 | | **E-commerce** | 电商模板 | 在线商店、商品展示 | | **SaaS** | SaaS 应用模板 | 多租户平台、企业应用 | | **Blog** | 博客模板 | 个人博客、技术文章 | | **Portfolio** | 作品集模板 | 个人简历、作品展示 | | **Documentation** | 文档模板 | 技术文档、API 文档 | | **Backend** | 后端模板 | API 服务、微服务 | | **CMS** | 内容管理模板 | 内容网站、新闻站点 | | **Marketing Sites** | 营销网站模板 | 产品官网、落地页 | | **Authentication** | 认证模板 | 登录系统、用户管理 | | **Admin Dashboard** | 管理后台模板 | 数据管理、控制面板 | | **Web3** | 区块链模板 | DApp、NFT 市场 | | **Monorepos** | 单体仓库模板 | 多包项目管理 | #### 按技术栈分类 | 类别 | 说明 | |------|------| | **Framework** | Next.js、Nuxt、SvelteKit、Astro、Remix 等 | | **CSS** | Tailwind CSS、CSS Modules、Styled Components 等 | | **Database** | PostgreSQL、MongoDB、Redis、PlanetScale 等 | | **CMS** | Contentful、Sanity、Prismic、Strapi 等 | | **Authentication** | NextAuth.js、Auth0、Clerk、Supabase Auth 等 | ### 热门模板详解 #### 1. Next.js Boilerplate 最基础的 Next.js 起手架模板。 ``` 技术栈: - Next.js 14+ (App Router) - TypeScript - ESLint + Prettier - Tailwind CSS 适用场景: - 快速启动新项目 - 学习 Next.js - 自定义项目基础 ``` **使用方式**: ```bash # CLI 方式 vercel init nextjs-boilerplate # 或访问 Dashboard # vercel.com/templates/next.js/nextjs-boilerplate ``` #### 2. AI Chatbot Vercel 官方出品的完整 AI 聊天机器人模板。 ``` 技术栈: - Next.js App Router - Vercel AI SDK - OpenAI / Anthropic / 其他 LLM - Tailwind CSS - Supabase(可选,用于数据持久化) 功能特性: - 流式响应 - 多模型支持 - 聊天历史 - 代码高亮 - Markdown 渲染 ``` **使用方式**: ```bash vercel init ai-chatbot ``` **配置环境变量**: ```bash # OpenAI OPENAI_API_KEY=sk-xxx # 或 Anthropic ANTHROPIC_API_KEY=sk-xxx ``` #### 3. Next.js Commerce 高性能电商网站模板,支持多种电商平台集成。 ``` 技术栈: - Next.js 14 - Shopify Storefront API - Tailwind CSS - Framer Motion 功能特性: - 商品列表与详情 - 购物车 - 结账流程 - 商品搜索 - 响应式设计 - SEO 优化 ``` **支持的电商平台**: - Shopify - BigCommerce - Saleor - Swell - Vendure **使用方式**: ```bash vercel init nextjs-commerce ``` **配置 Shopify**: ```bash SHOPIFY_STORE_DOMAIN=your-store.myshopify.com SHOPIFY_STOREFRONT_ACCESS_TOKEN=xxx ``` #### 4. Platforms Starter Kit 多租户 SaaS 平台模板,用于构建类似 Vercel 的平台。 ``` 技术栈: - Next.js App Router - Redis (Upstash) - Tailwind CSS - Prisma 功能特性: - 多租户架构 - 自定义域名 - 子域名路由 - 用户认证 - 计费集成 - Dashboard 管理 ``` **使用场景**: - 博客平台(类似 Medium) - 电商托管平台 - CMS 托管服务 - 任何需要多租户的 SaaS **使用方式**: ```bash vercel init platforms-starter-kit ``` #### 5. Nextra: Docs Starter Kit Markdown 驱动的文档站点模板。 ``` 技术栈: - Next.js - Nextra - MDX - Tailwind CSS 功能特性: - Markdown/MDX 支持 - 自动侧边栏 - 全文搜索 - 深色模式 - 代码高亮 - 版本管理 ``` **使用场景**: - 技术文档 - API 文档 - 知识库 - 教程网站 **使用方式**: ```bash vercel init documentation-starter-kit ``` #### 6. Blog Starter Kit 静态博客模板,支持 Markdown 写作。 ``` 技术栈: - Next.js - TypeScript - Tailwind CSS - Markdown 功能特性: - Markdown 写作 - 标签分类 - RSS 订阅 - SEO 优化 - 深色模式 ``` **使用方式**: ```bash vercel init blog-starter-kit ``` #### 7. Next.js Enterprise Boilerplate 企业级 Next.js 模板,包含完整的工程化配置。 ``` 技术栈: - Next.js - TypeScript - Tailwind CSS - Radix UI - ESLint + Prettier - Jest + Playwright - Storybook - GitHub Actions 功能特性: - 企业级代码规范 - 完整的测试配置 - CI/CD 流程 - 组件文档 - 性能监控 ``` **适用场景**: - 企业项目 - 大型团队协作 - 需要完整工程化的项目 #### 8. Portfolio Starter Kit 个人作品集模板。 ``` 技术栈: - Next.js - TypeScript - Tailwind CSS - MDX 功能特性: - Markdown 管理内容 - 响应式设计 - 深色模式 - SEO 优化 - 项目展示 ``` #### 9. Express on Bun / Hono on Bun 后端服务模板,使用 Bun 运行时。 ``` Express on Bun: - Express.js - Bun 运行时 - TypeScript Hono on Bun: - Hono 框架 - Bun 运行时 - TypeScript - Edge-ready ``` **使用方式**: ```bash vercel init express-on-bun vercel init hono-on-bun ``` #### 10. Nuxt AI Chatbot Nuxt.js 版本的 AI 聊天机器人。 ``` 技术栈: - Nuxt 3 - Vercel AI SDK - Nuxt MDC - Tailwind CSS ``` ### 使用模板的方式 #### 方式一:通过 Dashboard(推荐) ``` 1. 访问 vercel.com/templates 2. 浏览或搜索模板 3. 点击模板查看详情 4. 点击 "Deploy" 按钮 5. 系统自动 Fork 到你的 GitHub 6. 自动部署到 Vercel ``` #### 方式二:通过 CLI ```bash # 列出可用模板 vercel init # 初始化特定模板 vercel init nextjs-boilerplate vercel init ai-chatbot vercel init nextjs-commerce # 查看模板帮助 vercel init --help ``` #### 方式三:克隆 GitHub 仓库 ```bash # 直接克隆模板仓库 git clone https://github.com/vercel/next.js/tree/canary/packages/create-next-app # 或从模板创建新仓库 # GitHub → Use this template → Create a new repository ``` ### 模板筛选 在模板市场可以使用多种条件筛选: ``` 按用途筛选: - AI - Starter - Ecommerce - SaaS - Blog - Portfolio - CMS - Backend - ... 按框架筛选: - Next.js - Nuxt - SvelteKit - Astro - Remix - Vue - React - ... 按数据库筛选: - PostgreSQL - MongoDB - MySQL - Redis - PlanetScale - Supabase - Neon - ... 按 CMS 筛选: - Contentful - Sanity - Prismic - Strapi - WordPress - ... ``` ### 创建自定义模板 你可以将自己的项目变成模板供他人使用: 1. **创建示例仓库** ```bash # 项目结构清晰 # 包含 README.md # 配置好所有必要文件 ``` 2. **添加模板元数据** ```json // vercel.json { "name": "My Template", "description": "A custom template", "public": true } ``` 3. **提交到 Vercel 模板库** - 发送 PR 到 [vercel/templates](https://github.com/vercel/templates) - 或在 Vercel Dashboard 标记项目为模板 ### 模板最佳实践 #### 选择模板时的考虑 ``` 1. 技术栈匹配 - 团队熟悉的框架 - 项目需求的技术支持 2. 功能完整性 - 是否包含所需功能 - 是否需要大量修改 3. 维护状态 - 最近更新时间 - 社区活跃度 - Issue 处理情况 4. 文档质量 - README 是否清晰 - 配置说明是否完整 ``` #### 使用模板后的步骤 ``` 1. 阅读模板文档 - README.md - 配置要求 - 环境变量 2. 安装依赖 npm install # 或 pnpm install 3. 配置环境变量 cp .env.example .env.local # 编辑 .env.local 填入实际值 4. 本地开发 npm run dev 5. 自定义修改 - 修改品牌信息 - 调整样式 - 添加功能 6. 部署上线 git push # 或 vercel --prod ``` ### 官方模板仓库 Vercel 官方维护的模板仓库: | 仓库 | 说明 | |------|------| | [vercel/next.js](https://github.com/vercel/next.js) | Next.js 官方示例 | | [vercel/templates](https://github.com/vercel/templates) | Vercel 模板集合 | | [vercel/examples](https://github.com/vercel/examples) | 示例项目集合 | ### 模板 vs 从零开始 | 对比项 | 使用模板 | 从零开始 | |--------|----------|----------| | 启动速度 | ⚡ 分钟级 | 🐢 小时级 | | 最佳实践 | ✅ 已内置 | ❌ 需自行配置 | | 学习成本 | 低 | 高 | | 自由度 | 中等 | 完全自由 | | 代码质量 | 取决于模板 | 取决于自己 | **建议**: - 快速原型 / 学习 / 中小型项目 → 使用模板 - 特殊需求 / 大型定制项目 → 从零开始 --- ## 四、项目与部署 ### 项目概念 项目是部署到 Vercel 的应用程序,来自单个 Git 仓库。每个项目可以有多个部署: - 一个生产部署 - 多个预生产部署 ### 创建项目 1. **通过 Dashboard**:点击 "New Project" 按钮 2. **通过 CLI**:`vercel project add` 3. **通过 API**:POST 请求到 `/v9/projects` ### 部署方法 #### 1. Git 部署(推荐) ```bash # 连接 Git 仓库后,每次推送自动部署 git push origin main ``` #### 2. CLI 部署 ```bash # 预览部署 vercel # 生产部署 vercel --prod ``` #### 3. Deploy Hooks 用于触发部署的唯一 URL: ```bash # 创建 Deploy Hook 后 curl -X POST https://api.vercel.com/v1/integrations/deploy/xxx ``` #### 4. REST API 部署 ```typescript const response = await fetch('https://api.vercel.com/v13/deployments', { method: 'POST', headers: { 'Authorization': `Bearer ${token}`, 'Content-Type': 'application/json', }, body: JSON.stringify({ name: 'my-project', files: [...], projectSettings: {...} }) }); ``` ### 部署环境 | 环境 | 说明 | URL 格式 | |------|------|----------| | **Local** | 本地开发 | `localhost:3000` | | **Preview** | 预览环境 | `project-branch-hash.vercel.app` | | **Production** | 生产环境 | `your-domain.com` | ### 管理部署 ```bash # 查看部署列表 vercel list # 查看部署详情 vercel inspect [deployment-url] # 重新部署 vercel redeploy [deployment-id] # 回滚生产部署 vercel rollback [deployment-id] # 删除部署 vercel remove [deployment-url] ``` --- ## 五、Git 集成 ### 支持的 Git 提供商 - GitHub(免费/团队/企业云) - GitLab(免费/Premium/Ultimate/企业) - Bitbucket(免费/标准/高级) - Azure DevOps Pipelines ### 连接 Git 仓库 1. 在 Dashboard 点击 "New Project" 2. 选择 Git 仓库 3. 配置项目设置 4. 点击 "Deploy" ### 生产分支 默认规则(优先级从高到低): 1. `main` 分支 2. `master` 分支 3. Git 仓库的默认分支 **自定义生产分支**: 1. 进入项目 Settings → Environments 2. 选择 Production 环境 3. 修改 Branch Tracking ### 预览分支 所有非生产分支自动创建预览部署: ``` main (生产) → https://your-domain.com feature/a (预览) → https://project-feature-a-hash.vercel.app develop (预览) → https://project-develop-hash.vercel.app ``` ### 私有仓库部署 **Pro 团队**: - 提交作者必须是团队成员 - 非成员提交需要申请加入 **Hobby 团队**: - 无法从组织私有仓库部署 - 需要升级到 Pro 或公开仓库 --- ## 六、Vercel Functions ### 概述 Vercel Functions 允许运行服务器端代码,无需管理服务器。自动扩展、处理 API 和数据库连接。 ### 创建函数 #### 标准方式(推荐) ```typescript // api/hello.ts export default { fetch(request: Request) { return new Response('Hello from Vercel!'); }, }; ``` #### HTTP 方法 ```typescript // api/user.ts export function GET(request: Request) { return new Response(JSON.stringify({ name: 'User' }), { headers: { 'Content-Type': 'application/json' } }); } export function POST(request: Request) { return new Response('Created', { status: 201 }); } ``` #### Next.js App Router ```typescript // app/api/hello/route.ts export function GET(request: Request) { return new Response('Hello from Vercel!'); } ``` ### 函数配置 ```typescript // api/configured.ts export const config = { runtime: 'nodejs', // 'nodejs' | 'edge' | 'python' | 'go' | 'ruby' regions: ['iad1', 'sfo1'], // 部署区域 maxDuration: 60, // 最大执行时间(秒) memory: 1024, // 内存(MB) }; export default function handler(request: Request) { return new Response('Configured function'); } ``` ### 运行时支持 | 运行时 | 说明 | |--------|------| | **Node.js** | 默认运行时,完整 Node.js API | | **Edge** | 全球边缘执行,低延迟 | | **Python** | 支持 Python 函数 | | **Go** | 支持 Go 函数 | | **Ruby** | 支持 Ruby 函数 | | **Bun** | Bun 运行时 | ### 流式响应 ```typescript // api/stream.ts import { streamText } from 'ai'; export default async function handler(request: Request) { const result = await streamText({ model: 'openai/gpt-4', prompt: 'Hello', }); return result.toDataStreamResponse(); } ``` ### 函数限制 | 限制 | Hobby | Pro | Enterprise | |------|-------|-----|------------| | 最大执行时间 | 10秒 | 60秒 | 900秒 | | 内存 | 1024 MB | 3008 MB | 自定义 | | 包大小 | 50 MB | 50 MB | 自定义 | ### 定价 基于以下因素计费: - **Active CPU**:CPU 使用时间 - **Provisioned Memory**:内存分配 - **Invocations**:调用次数 --- ## 七、路由中间件 ### 概述 路由中间件在请求被处理之前执行代码,用于: - 重定向 - 重写 URL - 添加头部 - 认证检查 - A/B 测试 ### 创建中间件 ```typescript // middleware.ts export default function middleware(request: Request) { const url = new URL(request.url); // 重定向旧路径 if (url.pathname === '/old-page') { return new Response(null, { status: 302, headers: { Location: '/new-page' }, }); } // 添加自定义头部 const response = new Response('Hello'); response.headers.set('X-Custom-Header', 'value'); return response; } ``` ### 配置匹配路径 ```typescript // middleware.ts import { NextResponse } from 'next/server'; import type { NextRequest } from 'next/server'; export function middleware(request: NextRequest) { return NextResponse.next(); } // 配置匹配规则 export const config = { matcher: [ '/api/:path*', // 匹配 /api/* 路径 '/admin/:path*', // 匹配 /admin/* 路径 ], runtime: 'edge', // 或 'nodejs' }; ``` ### 使用 Edge Config ```typescript // middleware.ts import { get } from '@vercel/edge-config'; export default async function middleware(request: Request) { // 从 Edge Config 读取功能开关 const featureEnabled = await get('feature-flag'); if (featureEnabled) { return new Response('Feature enabled'); } return new Response('Feature disabled'); } ``` ### 请求限制 | 限制 | 值 | |------|-----| | 最大 URL 长度 | 14 KB | | 最大请求体长度 | 4 MB | | 最大请求头数量 | 64 | | 最大请求头长度 | 16 KB | --- ## 八、环境变量 ### 创建环境变量 **通过 Dashboard**: 1. 进入项目 Settings → Environment Variables 2. 添加键值对 3. 选择适用的环境 **通过 CLI**: ```bash # 添加环境变量 vercel env add DATABASE_URL # 拉取环境变量到本地 vercel env pull .env.local # 列出所有环境变量 vercel env ls # 删除环境变量 vercel env rm DATABASE_URL production ``` ### 环境类型 | 环境 | 说明 | |------|------| | **Production** | 生产部署时使用 | | **Preview** | 预览部署时使用 | | **Development** | 本地开发时使用(`vercel dev`) | ### 代码中使用 ```typescript // 服务端 const dbUrl = process.env.DATABASE_URL; // 客户端(需要 NEXT_PUBLIC_ 前缀) const apiKey = process.env.NEXT_PUBLIC_API_KEY; ``` ### 预览分支特定变量 可以为特定分支设置不同的变量值: ```bash # 为 feature 分支设置特定变量 vercel env add API_URL preview --branch feature ``` ### 系统环境变量 Vercel 自动注入以下变量: ```bash VERCEL=1 VERCEL_ENV=production|preview|development VERCEL_URL=project-hash.vercel.app VERCEL_REGION=iad1 VERCEL_GIT_PROVIDER=github VERCEL_GIT_REPO_SLUG=my-repo VERCEL_GIT_COMMIT_SHA=abc123 VERCEL_GIT_COMMIT_MESSAGE="Initial commit" ``` ### 限制 - 每个环境最多 **1000** 个变量 - 总大小限制 **64 KB** - Edge Function 单个变量限制 **5 KB** --- ## 九、域名管理 ### 添加域名 **通过 Dashboard**: 1. 进入项目 Settings → Domains 2. 输入域名 3. 选择验证方式 **通过 CLI**: ```bash # 添加域名 vercel domains add example.com # 验证域名 vercel domains inspect example.com ``` ### DNS 配置 #### A 记录 ``` 类型: A 名称: @ 值: 76.76.21.21 ``` #### CNAME 记录 ``` 类型: CNAME 名称: www 值: cname.vercel-dns.com ``` ### 域名类型 | 类型 | 说明 | 示例 | |------|------|------| | **根域名** | 主域名 | `example.com` | | **子域名** | 域名的子集 | `blog.example.com` | | **通配符** | 匹配所有子域名 | `*.example.com` | ### 分配域名到分支 ```bash # 将域名分配给特定分支 # staging.example.com → staging 分支 ``` 1. 进入 Domains 设置 2. 添加域名 3. 选择 Git Branch ### SSL 证书 Vercel 自动为所有域名生成 SSL 证书: - 自动续期 - 免费 - 支持 Let's Encrypt ```bash # 查看证书 vercel certs ls # 手动颁发证书 vercel certs issue example.com ``` --- ## 十、存储服务 ### 存储产品概览 | 产品 | 用途 | 读取速度 | 写入速度 | |------|------|----------|----------| | **Vercel Blob** | 大文件存储 | 快 | 毫秒级 | | **Edge Config** | 全局配置 | 超快(<1ms) | 秒级 | | **Marketplace** | 数据库(Postgres/Redis/Mongo) | 取决于提供商 | 取决于提供商 | ### Vercel Blob 用于存储图片、视频等大文件。 ```typescript import { put } from '@vercel/blob'; // 上传文件 const blob = await put('profile.jpg', file, { access: 'public', }); console.log(blob.url); // https://xxx.public.blob.vercel-storage.com/profile.jpg ``` ```typescript import { list, del } from '@vercel/blob'; // 列出文件 const { blobs } = await list(); // 删除文件 await del(blob.url); ``` ### Edge Config 用于存储频繁读取、很少更改的数据。 ```typescript import { get } from '@vercel/edge-config'; // 读取值 const featureFlag = await get('new-feature'); // 读取多个值 const values = await get(['feature-a', 'feature-b']); ``` **使用场景**: - 功能开关 - A/B 测试配置 - 关键重定向 - IP 黑名单 ### Marketplace 数据库 通过 Vercel Marketplace 直接配置数据库: | 类型 | 提供商 | |------|--------| | **PostgreSQL** | Neon, Supabase, PlanetScale | | **Redis/KV** | Upstash, Redis | | **NoSQL** | MongoDB, DynamoDB | | **Vector** | Pinecone, Weaviate | --- ## 十一、AI SDK ### 概述 Vercel AI SDK 是构建 AI 应用的 TypeScript 工具包,支持: - React / Next.js - Vue / Nuxt - Svelte / SvelteKit - Node.js ### 安装 ```bash # 安装 AI SDK npm install ai # 安装模型提供商 npm install @ai-sdk/openai # 或 npm install @ai-sdk/anthropic ``` ### 文本生成 ```typescript import { generateText } from 'ai'; import { openai } from '@ai-sdk/openai'; const { text } = await generateText({ model: openai('gpt-4'), prompt: '解释量子纠缠的概念。', }); console.log(text); ``` ### 流式文本生成 ```typescript import { streamText } from 'ai'; import { openai } from '@ai-sdk/openai'; const result = await streamText({ model: openai('gpt-4'), prompt: '写一首关于春天的诗。', }); // 流式输出 for await (const textPart of result.textStream) { process.stdout.write(textPart); } ``` ### 结构化输出 ```typescript import { generateObject } from 'ai'; import { openai } from '@ai-sdk/openai'; import { z } from 'zod'; const { object } = await generateObject({ model: openai('gpt-4'), schema: z.object({ name: z.string(), ingredients: z.array(z.string()), steps: z.array(z.string()), }), prompt: '生成一个意大利面食谱。', }); ``` ### 工具调用 ```typescript import { generateText, tool } from 'ai'; import { openai } from '@ai-sdk/openai'; import { z } from 'zod'; const { text } = await generateText({ model: openai('gpt-4'), prompt: '旧金山今天的天气如何?', tools: { getWeather: tool({ description: '获取指定位置的天气', parameters: z.object({ location: z.string().describe('位置'), }), execute: async ({ location }) => ({ location, temperature: 22, condition: '晴天', }), }), }, }); ``` ### 聊天界面(React) ```tsx 'use client'; import { useChat } from 'ai/react'; export default function Chat() { const { messages, input, handleInputChange, handleSubmit } = useChat(); return (