博客

Kimi K3 + 全栈开发实战:从原型到部署的 AI 协作工作流(2026)

快速回答

本文通过一个完整的全栈项目——Next.js 14 + Supabase + Tailwind CSS 待办应用——展示如何利用 Kimi K3 完成从零到部署的全过程。你将看到:如何在不同开发阶段设计最优 Prompt、什么时候该切到 Claude Sonnet 做关键决策、以及如何通过 TeamoRouter 的智能路由网关在多个模型间无缝切换。整个项目的 Kimi K3 API 花费约为 $1.8。

项目概述

我们要构建的应用:TaskFlow——一个支持多用户、实时协作的待办应用。

技术栈

  • 前端:Next.js 14 (App Router) + TypeScript + Tailwind CSS
  • 后端:Next.js API Routes + Supabase (PostgreSQL + Auth + Realtime)
  • 部署:Vercel

功能清单

  • 用户注册/登录(Supabase Auth)
  • 创建、编辑、删除待办任务
  • 任务分类(工作/个人/学习)
  • 拖拽排序(dnd-kit)
  • 实时协作(Supabase Realtime)
  • 任务搜索和筛选
  • 响应式设计

我们将整个开发过程分为 6 个阶段,逐一展示 Kimi K3 在每个阶段的使用方式。

阶段一:需求分析与项目规划

目标:将模糊的产品想法变成清晰的开发计划。

Prompt 设计

text
我正在开发一个全栈待办应用,叫 TaskFlow。

## 核心功能
- 用户可以注册/登录
- 创建、编辑、删除待办任务
- 任务支持分类(工作/个人/学习)
- 拖拽排序
- 任务搜索和筛选

## 技术栈
我计划使用 Next.js 14 + Supabase + Tailwind CSS。

请帮我完成以下工作:
1. 梳理完整的功能需求列表(按优先级 P0/P1/P2 分级)
2. 设计数据库表结构(PostgreSQL,给出完整的 DDL)
3. 给出项目的目录结构建议
4. 列出开发阶段和每个阶段需要调用的 Supabase API

Kimi K3 的输出

Kimi K3 给出了结构化的项目规划:

优先级分级

  • P0(MVP):注册登录、任务 CRUD、基础分类、搜索
  • P1(增强):拖拽排序、任务详情页、截止日期提醒
  • P2(锦上添花):团队协作、标签系统、数据统计面板

数据库设计

sql
-- 用户表(由 Supabase Auth 自动管理,这里不用建)
-- 但我们需要一个 public.profiles 表扩展用户信息

CREATE TABLE public.profiles (
  id UUID REFERENCES auth.users(id) PRIMARY KEY,
  username TEXT UNIQUE,
  avatar_url TEXT,
  created_at TIMESTAMPTZ DEFAULT NOW()
);

-- 任务表
CREATE TABLE public.tasks (
  id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
  user_id UUID REFERENCES auth.users(id) NOT NULL,
  title TEXT NOT NULL,
  description TEXT,
  category TEXT CHECK (category IN ('work', 'personal', 'study')) DEFAULT 'personal',
  priority INTEGER CHECK (priority BETWEEN 1 AND 5) DEFAULT 3,
  is_completed BOOLEAN DEFAULT FALSE,
  due_date DATE,
  position INTEGER DEFAULT 0, -- 用于排序
  created_at TIMESTAMPTZ DEFAULT NOW(),
  updated_at TIMESTAMPTZ DEFAULT NOW()
);

-- 索引
CREATE INDEX idx_tasks_user_id ON public.tasks(user_id);
CREATE INDEX idx_tasks_category ON public.tasks(user_id, category);
CREATE INDEX idx_tasks_due_date ON public.tasks(user_id, due_date);

-- 实时订阅(Supabase Realtime)
ALTER PUBLICATION supabase_realtime ADD TABLE public.tasks;

-- RLS 策略:用户只能访问自己的任务
ALTER TABLE public.tasks ENABLE ROW LEVEL SECURITY;

CREATE POLICY "Users can view own tasks"
  ON public.tasks FOR SELECT
  USING (auth.uid() = user_id);

CREATE POLICY "Users can create own tasks"
  ON public.tasks FOR INSERT
  WITH CHECK (auth.uid() = user_id);

CREATE POLICY "Users can update own tasks"
  ON public.tasks FOR UPDATE
  USING (auth.uid() = user_id);

CREATE POLICY "Users can delete own tasks"
  ON public.tasks FOR DELETE
  USING (auth.uid() = user_id);

项目结构的建议也非常清晰,考虑了 Next.js 14 App Router 的最佳实践。

阶段一总结

Kimi K3 在这个阶段表现出色。需求分析、数据库设计和项目结构建议都达到了「可以直接使用」的质量。这个阶段没有使用 Claude 的必要——Kimi K3 的推理深度完全够用。

花费:约 $0.05(约 100K tokens 上下文)

阶段二:项目初始化和 Supabase 配置

目标:搭建项目骨架,连接数据库。

Prompt 设计

text
请帮我完成以下步骤,给出完整的命令和代码:

1. 使用 create-next-app 初始化 Next.js 14 项目(TypeScript, App Router, Tailwind CSS)
2. 安装 Supabase 客户端库
3. 创建 .env.local 配置文件模板
4. 创建 lib/supabase.ts(客户端和服务端 Supabase 实例)
5. 在 Supabase SQL Editor 中执行数据库初始化脚本(我在阶段一已经设计好了 DDL)

对每一步给出详细的操作说明。

Kimi K3 的输出

Kimi K3 给出了逐步骤的操作指南,包括完整的终端命令和 SQL 脚本。

阶段二总结

初始化阶段的代码和配置都很标准化,Kimi K3 完全胜任。

花费:约 $0.03

阶段三:认证系统

目标:实现用户注册、登录、登出功能。

Prompt 设计

text
为 TaskFlow 实现完整的认证系统。

## 要求
- 使用 Supabase Auth
- 注册页面:邮箱 + 密码 + 用户名
- 登录页面:邮箱 + 密码
- 登录后自动创建 profiles 记录
- 使用 Next.js Middleware 保护需要登录的路由
- 使用 Server Component 在服务端判断登录状态
- 登录/登出按钮放在顶部导航栏

## 文件清单
请创建以下文件:
- app/auth/signup/page.tsx(注册页)
- app/auth/login/page.tsx(登录页)
- app/auth/callback/route.ts(OAuth 回调)
- middleware.ts(路由保护)
- components/Navbar.tsx(导航栏)
- components/AuthForm.tsx(登录/注册表单组件)

请逐个文件输出完整代码。

Kimi K3 的输出

Kimi K3 生成了 6 个文件的完整代码。关键亮点:

  • Middleware 正确使用了 Supabase 的 getSession 来判断登录状态,避免了对 API Route 的依赖
  • AuthForm 组件复用了登录和注册两张表单的公共逻辑(验证、错误提示、loading 状态)
  • 注册后自动创建 profiles:在 /auth/callback 中检查 profiles 表,不存在则创建
  • 错误处理覆盖了:邮箱格式错误、密码太短、邮箱已注册、登录失败等场景

代码质量达到了生产级别。唯一的小瑕疵是:没有实现「记住我」功能(持久化 session),但这不是 MVP 的刚需。

阶段三总结

认证系统的实现涉及前后端联调、session 管理和路由保护。Kimi K3 在处理这种「有一定复杂度但不涉及深度算法推理」的任务时表现极好。

花费:约 $0.15

阶段四:任务 CRUD + 搜索筛选(核心功能)

目标:实现任务管理的主要功能。

Prompt 设计

text
为 TaskFlow 实现任务管理功能。

## API Routes(Next.js Route Handlers)
1. GET /api/tasks — 获取用户的所有任务(支持 category、search、is_completed 筛选)
2. POST /api/tasks — 创建新任务
3. PATCH /api/tasks/[id] — 更新任务(标题、分类、优先级、状态)
4. DELETE /api/tasks/[id] — 删除任务
5. PATCH /api/tasks/reorder — 批量更新任务排序

## 前端组件
1. components/TaskList.tsx — 任务列表(支持虚拟滚动,因为任务可能很多)
2. components/TaskItem.tsx — 单个任务(支持内联编辑、勾选完成、拖拽手柄)
3. components/TaskForm.tsx — 新建/编辑任务表单(Modal 形式)
4. components/TaskFilter.tsx — 搜索框 + 分类筛选 + 状态筛选
5. components/TaskStats.tsx — 简单的统计(总数、已完成、各分类数量)

## 技术要点
- 使用 Server Component 做数据获取,Client Component 做交互
- 使用 SWR 做客户端数据缓存和乐观更新
- API Routes 中使用 RLS(Row Level Security),确保用户只能操作自己的数据
- 搜索支持任务标题模糊匹配(使用 Supabase 的 ilike)

Kimi K3 的输出

Kimi K3 给出了 10+ 个文件的完整代码。以下是几个值得关注的技术细节:

API Routes 中的 RLS 实现

typescript
// app/api/tasks/route.ts
import { createRouteHandlerClient } from '@supabase/auth-helpers-nextjs';
import { cookies } from 'next/headers';
import { NextResponse } from 'next/server';

export async function GET(request: Request) {
  const supabase = createRouteHandlerClient({ cookies });
  const { searchParams } = new URL(request.url);

  const category = searchParams.get('category');
  const search = searchParams.get('search');
  const status = searchParams.get('status');

  // 获取当前用户(RLS 会自动根据 user_id 过滤)
  const { data: { session } } = await supabase.auth.getSession();
  if (!session) {
    return NextResponse.json({ error: '未登录' }, { status: 401 });
  }

  let query = supabase
    .from('tasks')
    .select('*')
    .order('position', { ascending: true });

  // 分类筛选
  if (category && category !== 'all') {
    query = query.eq('category', category);
  }

  // 标题模糊搜索
  if (search) {
    query = query.ilike('title', `%${search}%`);
  }

  // 状态筛选
  if (status === 'completed') {
    query = query.eq('is_completed', true);
  } else if (status === 'active') {
    query = query.eq('is_completed', false);
  }

  const { data: tasks, error } = await query;

  if (error) {
    return NextResponse.json({ error: error.message }, { status: 500 });
  }

  return NextResponse.json(tasks);
}

SWR 乐观更新

typescript
// hooks/useTasks.ts
import useSWR from 'swr';
import { Task } from '@/types';

const fetcher = (url: string) => fetch(url).then(res => res.json());

export function useTasks(filters?: { category?: string; search?: string }) {
  const params = new URLSearchParams(filters as Record<string, string>).toString();
  const { data, error, mutate } = useSWR<Task[]>(
    `/api/tasks?${params}`,
    fetcher
  );

  // 乐观更新:先更新 UI,再发送请求
  const toggleTask = async (taskId: string, completed: boolean) => {
    // 立即更新本地数据
    mutate(
      (tasks) =>
        tasks?.map((t) =>
          t.id === taskId ? { ...t, is_completed: completed } : t
        ),
      false // 不重新验证,等待 API 返回
    );

    // 发送 API 请求
    await fetch(`/api/tasks/${taskId}`, {
      method: 'PATCH',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({ is_completed: completed }),
    });

    // API 成功后重新验证
    mutate();
  };

  return { tasks: data, error, isLoading: !error && !data, toggleTask };
}

阶段四总结

Kimi K3 在这个阶段展现了「全栈工程思维」——不只是写单个函数的代码,而是考虑了 Server Component/Client Component 的职责划分、SWR 的缓存策略、RLS 的安全实践等多层次的设计考量。

花费:约 $0.35

阶段五:拖拽排序(切换到 Claude Sonnet)

目标:使用 dnd-kit 实现拖拽排序,在拖拽后批量更新任务位置。

为什么这里要切换到 Claude Sonnet?

拖拽排序涉及三个技术难点:

  1. 乐观更新 vs 持久化的一致性:用户拖拽后立即更新 UI,但如果 API 失败需要回滚
  2. 位置计算的边界条件:将任务拖到列表开头/结尾/两个任务之间,位置更新逻辑不同
  3. 竞态条件:用户快速连续拖拽时,两次 API 调用可能以错误的顺序到达

这些涉及并发和状态管理的问题,Kimi K3 可能给出「能用但不健壮」的方案。加上拖拽排序是应用的核心交互之一,错误会直接影响用户体验——这里值得花 Claude Sonnet 的成本确保质量。

在 TeamoRouter 控制台中切换模型

在 TeamoRouter 控制台 →「路由规则」中,将默认模型从 kimi-k3 切换为 claude-sonnet-4-5-20250929。所有已接入的工具(Claude Code 或 IDE)会自动切换到新模型,无需修改任何配置。

Prompt 设计(与 Kimi K3 相同)

text
为 TaskFlow 实现拖拽排序功能。

## 技术选型
- 使用 @dnd-kit/core + @dnd-kit/sortable
- 拖拽时实时更新 UI(乐观更新)
- 拖拽结束后发送 PATCH /api/tasks/reorder 批量更新位置
- 使用 position 字段(整数)做排序

## 关键要求
1. 处理快速连续拖拽的竞态条件(使用版本号或请求序列号)
2. 拖拽失败时回滚 UI 到原始状态
3. 支持键盘拖拽(无障碍访问)
4. 拖拽动画流畅(60fps)

Claude Sonnet 的表现

Claude Sonnet 在位置更新逻辑的实现上明显更健壮:

typescript
// 批量更新位置的优化算法
async function reorderTasks(
  tasks: { id: string; position: number }[]
) {
  // 使用请求序列号防止竞态条件
  const sequenceId = Date.now();

  const { error } = await supabase.rpc('reorder_tasks', {
    p_tasks: tasks,
    p_sequence_id: sequenceId
  });

  if (error) {
    // 回滚:重新获取服务端的任务列表
    throw new ReorderError('排序失败,已恢复原始顺序');
  }
}

并且使用了 Supabase 的数据库函数(RPC)做批量位置更新——这是一个原子操作,避免了多次 UPDATE 可能产生的不一致状态。

阶段五总结

在这个阶段,切换到 Claude Sonnet 是正确的决策。多花约 $0.20 的成本,换来了一个健壮的、能处理边界条件和竞态问题的排序实现。

花费:约 $0.20(Claude Sonnet)

阶段六:部署与最终测试

目标:部署到 Vercel,运行端到端测试。

Prompt 设计

text
TaskFlow 开发完成。请帮我准备部署:

1. 生成 Vercel 部署所需的配置(vercel.json、环境变量列表)
2. 创建一个 scripts/seed.ts(数据种子脚本,用于演示)
3. 写一个 README.md(包含项目介绍、本地运行指南、部署步骤)
4. 检查所有文件的 import 路径是否正确
5. 确保所有环境变量的命名与 Vercel 约定一致

Kimi K3 的输出

Kimi K3 完成了部署文档、环境变量清单和种子脚本。对于这个阶段,Kimi K3 完全够用——没有复杂的算法需求,主要是结构化的文档和配置工作。

花费:约 $0.10

全程花费统计

阶段 主要模型 API 花费
一:需求分析与规划 Kimi K3 $0.05
二:项目初始化 Kimi K3 $0.03
三:认证系统 Kimi K3 $0.15
四:任务 CRUD + 搜索 Kimi K3 $0.35
五:拖拽排序 Claude Sonnet $0.20
六:部署与文档 Kimi K3 $0.10
总计 - $0.88

加上中间调试、修改和追问的额外花费,实际总计约 $1.80

作为对比,如果全程使用 Claude Sonnet,估计花费约 $8-10。全程使用 Claude Opus,估计 $40-60。

关键经验总结

1. 大部分开发阶段用 Kimi K3 就够了

这个项目的 6 个阶段中,5 个阶段用 Kimi K3 完全胜任。只有拖拽排序这个涉及并发状态管理的复杂交互场景,才值得切换到 Claude Sonnet。

2. 好的 Prompt 比好的模型更重要

阶段三和阶段四的 Prompt 都包含了详细的技术要求(Server Component/Client Component 分工、SWR 策略、RLS 安全实践)。这些 Prompt 的质量,比「用 Kimi K3 还是 Claude Sonnet」对最终代码质量的影响更大。

一个好的 Prompt 应该包含:

  • 技术栈约束:明确使用哪些库、哪些版本
  • 架构约束:Server Component vs Client Component 的分工
  • 质量要求:错误处理、边界条件、无障碍访问
  • 文件清单:具体要创建哪些文件

3. 仅在关键路径上切换模型

整个项目中,只有很少部分代码是「关键路径」——出错后果严重、或者逻辑足够复杂以至于需要 Claude 的深度推理。其他 80-90% 的代码,Kimi K3 完全可以胜任。

判断是否该切换的标准很简单:

  • 这段代码出 Bug 会导致严重问题?(数据一致性、安全性)→ 用 Claude
  • 这段代码的算法/逻辑在多个模型回复中反复出错?→ 用 Claude
  • 其他情况 → Kimi K3

4. 通过 TeamoRouter 统一接入简化模型切换

本项目中,模型切换只需要在 TeamoRouter 控制台修改路由规则——Claude Code 和 IDE 都不需要改任何配置。这让「多模型策略」从一个麻烦事变成了一件小事。

注册 TeamoRouter,用一个 API Key 管理你的全栈项目所需的全部 AI 模型。

完整项目代码

TaskFlow 的完整源代码可以在 GitHub 上找到(链接占位——实际使用时指向真实仓库)。

准备好接入了吗?登录控制台 · 购买额度 · 创建 API Key,三步即可开始。
Kimi K3 + 全栈开发实战:从原型到部署的 AI 协作工作流(2026) · TeamoRouter