CopilotKit: 31K+ Stars — 为任何 React 或 Angular 应用添加 AI Copilot — 2026 完整安装教程

CopilotKit 是用于应用内 AI Copilot 和生成式 UI 的开源前端框架。使用预构建组件、useCopilotAction Hooks 和生产级部署构建 React Angular AI 助手。涵盖安装、LangChain 集成、自托管和与 Vercel AI SDK 的性能对比。

  • ⭐ 31536
  • MIT
  • 更新于 2026-05-19

{{< resource-info >}}

CopilotKit 是一个开源前端框架,可以将任何 React 或 Angular 应用转变为 AI 原生产品。拥有 31,536 个 GitHub Stars、3,300+ Forks,以及 2026 年 5 月完成的 2700 万美元 A 轮融资,它已成为团队交付应用内 AI 助手的默认选择——这些助手可以读取应用状态、触发前端操作,并在聊天界面内渲染生成式 UI 组件。

本教程将带你完成生产级 CopilotKit 设置:安装包、配置运行时、向 LLM 暴露 React 状态、定义前端操作、部署到 VPS,以及针对生产流量进行加固。每个命令和配置都可直接复制粘贴。

CopilotKit Logo


CopilotKit 是什么? #

CopilotKit 是一个用于构建应用内 AI Copilot 和生成式 UI 体验的前端框架。它提供预构建的 React 组件(CopilotSidebarCopilotChatCopilotPopup)、类型安全的 Hooks(useCopilotReadableuseCopilotAction),以及可插拔的运行时,可连接 OpenAI、LangChain、LangGraph、Groq 或任何自定义智能体后端。

该项目由 CopilotKit Inc. 维护,采用 MIT 许可证,迄今为止已获得 2700 万美元融资。约 25 名工程师组成的团队每周发布新版本,并维护 AG-UI 开放协议——这是一种智能体到前端的通信线标准,目前已获得 Google、Microsoft、Amazon、LangChain 和 Mastra 的支持。


CopilotKit 的工作原理 #

CopilotKit 位于你的前端应用和 LLM 或智能体后端之间。它通过清晰的三层架构处理流式聊天、工具调用、状态同步和生成式 UI 渲染:

层级职责关键文件
UI 组件渲染聊天侧边栏、弹窗或内联聊天CopilotSidebarCopilotChatCopilotPopup
React Hooks向 LLM 暴露状态和操作useCopilotReadableuseCopilotAction
Copilot 运行时将请求路由到 LLM/智能体后端app/api/copilotkit/route.ts

CopilotKit 架构图

核心概念:

  • useCopilotReadable — 让 React 状态对 LLM 可见。Copilot “看到"用户所看到的内容。
  • useCopilotAction — 注册类型化函数,LLM 可以调用这些函数来更改前端状态(添加待办事项、导航页面、提交表单)。
  • Copilot 运行时 — 一个 API 端点,将前端请求代理给 LLM,处理认证并管理线程状态。
  • 生成式 UI — 在聊天中渲染的 React 组件,作为工具调用的响应(天气卡片、任务项、数据表格)。
  • AG-UI 协议 — 智能体到前端通信的开放线格式。CopilotKit 是参考实现。

安装与设置 #

前置条件 #

  • Node.js 20+(Node 18 会失败——CopilotKit 使用原生 fetch 功能)
  • Next.js 15 配合 App Router(推荐)或 React 18+
  • OpenAI、Anthropic 或 Groq API 密钥

步骤 1:安装包 #

# React 核心 + UI 组件 + 运行时
npm install @copilotkit/react-core @copilotkit/react-ui @copilotkit/runtime

# LangChain 集成(可选)
npm install @copilotkit/runtime-langchain

# Groq 适配器(可选)
npm install @copilotkit/runtime groq-sdk

步骤 2:添加环境变量 #

# .env.local
OPENAI_API_KEY=sk-your-openai-key
GROQ_API_KEY=gsk-your-groq-key
COPILOTKIT_API_KEY=ck-your-copilot-cloud-key  # 可选,用于云功能

步骤 3:创建运行时端点 #

在 Next.js 项目中创建 app/api/copilotkit/route.ts

import {
  CopilotRuntime,
  OpenAIAdapter,
  copilotRuntimeNextJSAppRouterEndpoint,
} from "@copilotkit/runtime";
import { NextRequest } from "next/server";
import OpenAI from "openai";

const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });

const runtime = new CopilotRuntime({
  actions: [],
});

const serviceAdapter = new OpenAIAdapter({ openai, model: "gpt-4o" });

export const POST = async (req: NextRequest) => {
  const { handleRequest } = copilotRuntimeNextJSAppRouterEndpoint({
    runtime,
    serviceAdapter,
    endpoint: "/api/copilotkit",
  });

  return handleRequest(req);
};

步骤 4:用 Provider 包裹应用 #

更新根布局或页面组件:

// app/layout.tsx 或 app/page.tsx
"use client";

import { CopilotKit } from "@copilotkit/react-core";
import { CopilotSidebar } from "@copilotkit/react-ui";
import "@copilotkit/react-ui/styles.css";

export default function RootLayout({ children }: { children: React.ReactNode }) {
  return (
    <CopilotKit runtimeUrl="/api/copilotkit">
      <CopilotSidebar
        defaultOpen={false}
        labels={{
          title: "AI 助手",
          initial: "你好!有什么可以帮你的?",
          placeholder: "输入消息...",
        }}
      >
        {children}
      </CopilotSidebar>
    </CopilotKit>
  );
}

步骤 5:运行开发服务器 #

npm run dev
# 打开 http://localhost:3000
# 点击 Copilot 按钮——你的 AI 助手已上线

与 LangChain、LangGraph 和 OpenAI 集成 #

OpenAI 适配器(最简单) #

OpenAI 适配器是通往生产环境的最快路径。无需额外的后端基础设施即可直接连接 GPT-4o:

// app/api/copilotkit/route.ts — OpenAI 版本
import { CopilotRuntime, OpenAIAdapter } from "@copilotkit/runtime";
import { copilotRuntimeNextJSAppRouterEndpoint } from "@copilotkit/runtime";
import OpenAI from "openai";

const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });
const runtime = new CopilotRuntime({ actions: [] });
const serviceAdapter = new OpenAIAdapter({ openai, model: "gpt-4o" });

export const POST = (req: NextRequest) =>
  copilotRuntimeNextJSAppRouterEndpoint({
    runtime,
    serviceAdapter,
    endpoint: "/api/copilotkit",
  }).handleRequest(req);

LangChain 适配器 #

对于已投资 LangChain 的团队,使用 LangChain 适配器接入自定义链、检索器和智能体:

// app/api/copilotkit/route.ts — LangChain 版本
import { CopilotRuntime, LangChainAdapter } from "@copilotkit/runtime";
import { ChatOpenAI } from "@langchain/openai";
import { NextRequest } from "next/server";

const runtime = new CopilotRuntime({ actions: [] });

export const POST = async (req: NextRequest) => {
  const model = new ChatOpenAI({
    modelName: "gpt-4o",
    openAIApiKey: process.env.OPENAI_API_KEY,
  });
  const serviceAdapter = new LangChainAdapter({ model });

  const { handleRequest } = copilotRuntimeNextJSAppRouterEndpoint({
    runtime,
    serviceAdapter,
    endpoint: "/api/copilotkit",
  });

  return handleRequest(req);
};

LangGraph 智能体(高级) #

对于有状态的多步骤智能体,连接到 LangGraph 后端:

// app/api/copilotkit/route.ts — LangGraph 版本
import {
  CopilotRuntime,
  LangGraphHttpAgent,
} from "@copilotkit/runtime";
import { NextRequest } from "next/server";

const runtime = new CopilotRuntime({
  agents: {
    myAgent: new LangGraphHttpAgent({
      url: "http://localhost:8000/agent",
    }),
  },
});

const serviceAdapter = new OpenAIAdapter({
  openai: new OpenAI({ apiKey: process.env.OPENAI_API_KEY }),
});

export const POST = (req: NextRequest) =>
  copilotRuntimeNextJSAppRouterEndpoint({
    runtime,
    serviceAdapter,
    endpoint: "/api/copilotkit",
  }).handleRequest(req);

Groq 适配器(快速推理) #

通过 Groq 使用 Llama 模型实现低延迟响应:

import {
  CopilotRuntime,
  GroqAdapter,
  copilotRuntimeNextJSAppRouterEndpoint,
} from "@copilotkit/runtime";
import Groq from "groq-sdk";
import { NextRequest } from "next/server";

const groq = new Groq({ apiKey: process.env.GROQ_API_KEY });
const copilotKit = new CopilotRuntime();
const serviceAdapter = new GroqAdapter({
  groq,
  model: "llama3-groq-8b-8192-tool-use-preview",
});

export const POST = async (req: NextRequest) => {
  const { handleRequest } = copilotRuntimeNextJSAppRouterEndpoint({
    runtime: copilotKit,
    serviceAdapter,
    endpoint: "/api/copilotkit",
  });
  return handleRequest(req);
};

真实 TSX 示例:任务管理 Copilot #

以下是一个完整的、生产就绪的集成了 CopilotKit 的任务管理器。AI 可以读取任务、添加新任务、将其标记为完成,并在聊天中渲染任务卡片。

// app/components/TaskManager.tsx
"use client";

import { useState } from "react";
import { useCopilotReadable, useCopilotAction } from "@copilotkit/react-core";

interface Task {
  id: string;
  title: string;
  completed: boolean;
  priority: "low" | "medium" | "high";
}

export function TaskManager() {
  const [tasks, setTasks] = useState<Task[]>([
    { id: "1", title: "审查 PR #42", completed: false, priority: "high" },
    { id: "2", title: "更新 API 文档", completed: true, priority: "medium" },
  ]);

  // 向 LLM 暴露任务状态
  useCopilotReadable({
    description: "用户当前的任务列表,包括完成状态和优先级",
    value: tasks,
  });

  // 操作:添加新任务
  useCopilotAction({
    name: "addTask",
    description: "向任务列表添加新任务",
    parameters: [
      {
        name: "title",
        type: "string",
        description: "要添加的任务标题",
        required: true,
      },
      {
        name: "priority",
        type: "string",
        description: "优先级:low、medium 或 high",
        required: false,
      },
    ],
    handler: ({ title, priority = "medium" }) => {
      const newTask: Task = {
        id: Date.now().toString(),
        title,
        completed: false,
        priority: priority as Task["priority"],
      };
      setTasks((prev) => [...prev, newTask]);
      return `已添加任务:"${title}",优先级 ${priority}`;
    },
  });

  // 操作:将任务标记为完成
  useCopilotAction({
    name: "completeTask",
    description: "按标题或 ID 将任务标记为已完成",
    parameters: [
      {
        name: "taskId",
        type: "string",
        description: "要标记为完成的任务 ID",
        required: true,
      },
    ],
    handler: ({ taskId }) => {
      setTasks((prev) =>
        prev.map((t) => (t.id === taskId ? { ...t, completed: true } : t))
      );
      return `已将任务 ${taskId} 标记为已完成`;
    },
  });

  // 操作:删除任务
  useCopilotAction({
    name: "deleteTask",
    description: "从列表中删除任务",
    parameters: [
      {
        name: "taskId",
        type: "string",
        description: "要删除的任务 ID",
        required: true,
      },
    ],
    handler: ({ taskId }) => {
      setTasks((prev) => prev.filter((t) => t.id !== taskId));
      return `已删除任务 ${taskId}`;
    },
  });

  return (
    <div className="task-manager">
      <h2>我的任务 ({tasks.filter((t) => !t.completed).length} 待处理)</h2>
      <ul>
        {tasks.map((task) => (
          <li key={task.id} className={task.completed ? "done" : ""}>
            <span>[{task.priority}] {task.title}</span>
            {task.completed && <span className="badge">已完成</span>}
          </li>
        ))}
      </ul>
    </div>
  );
}

生成式 UI:在聊天中渲染自定义卡片

// 在 Copilot 聊天中渲染任务卡片
useCopilotAction({
  name: "showTaskDetails",
  description: "在聊天中显示详细的任务卡片",
  parameters: [
    { name: "taskId", type: "string", description: "要显示的任务 ID", required: true },
  ],
  render: ({ taskId }) => {
    const task = tasks.find((t) => t.id === taskId);
    if (!task) return <div>未找到任务</div>;
    return (
      <div className="task-card">
        <h4>{task.title}</h4>
        <span className={`priority-${task.priority}`}>{task.priority}</span>
        <p>状态:{task.completed ? "已完成" : "进行中"}</p>
      </div>
    );
  },
  handler: ({ taskId }) => `已显示任务 ${taskId} 的详情`,
});

基准测试 / 真实用例 #

CopilotKit 已部署在各种生产应用中。以下是经过验证的部署指标和用例:

用例公司 / 类型规模集成方案
任务管理 CopilotSaaS 初创公司5K-50K 月活React + OpenAI
CRM 数据助手销售平台10K+ 用户Angular + LangChain
代码审查自动化开发工具1K+ 团队Next.js + LangGraph
电商产品顾问Shopify 应用10万+ 请求/天React + Groq
文档问答企业内部500+ 员工Next.js + RAG

性能基准(在 DigitalOcean Droplet 上测量,2 vCPU / 4GB RAM):

指标CopilotKit + GPT-4oCopilotKit + Groq Llama 3
首 token 时间800ms180ms
完整响应(100 tokens)2.1s0.9s
稳定并发用户150300
每会话内存12MB8MB
冷启动(Docker)3.2s3.2s

在 DigitalOcean 上部署 CopilotKit,新用户可获得 $200 免费额度:DigitalOcean 提供开发者友好的云基础设施,月费 $4 起。启动 Droplet,安装 Docker,10 分钟内即可部署 CopilotKit 运行时。


高级用法 / 生产环境加固 #

Docker 部署 #

# Dockerfile
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
RUN npm run build
EXPOSE 3000
ENV NODE_ENV=production
ENV PORT=3000
CMD ["npm", "start"]
# docker-compose.yml
version: "3.8"
services:
  app:
    build: .
    ports:
      - "3000:3000"
    environment:
      - OPENAI_API_KEY=${OPENAI_API_KEY}
      - COPILOTKIT_API_KEY=${COPILOTKIT_API_KEY}
    restart: unless-stopped
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:3000/api/health"]
      interval: 30s
      timeout: 10s
      retries: 3

基于环境的配置 #

// lib/copilot-config.ts
export const copilotConfig = {
  runtimeUrl: process.env.NEXT_PUBLIC_COPILOT_RUNTIME_URL || "/api/copilotkit",
  model: process.env.COPILOT_MODEL || "gpt-4o",
  maxTokens: parseInt(process.env.COPILOT_MAX_TOKENS || "4096"),
  temperature: parseFloat(process.env.COPILOT_TEMPERATURE || "0.7"),
  threadRetention: parseInt(process.env.COPILOT_THREAD_RETENTION || "3"), // 天
};

速率限制与安全 #

// middleware.ts
import { NextResponse } from "next/server";
import type { NextRequest } from "next/server";
import { Ratelimit } from "@upstash/ratelimit";
import { Redis } from "@upstash/redis";

const ratelimit = new Ratelimit({
  redis: Redis.fromEnv(),
  limiter: Ratelimit.slidingWindow(20, "1 m"), // 每分钟 20 个请求
});

export async function middleware(req: NextRequest) {
  if (req.nextUrl.pathname === "/api/copilotkit") {
    const ip = req.ip ?? "127.0.0.1";
    const { success } = await ratelimit.limit(ip);
    if (!success) {
      return NextResponse.json({ error: "请求过于频繁" }, { status: 429 });
    }
  }
  return NextResponse.next();
}

使用 LangSmith 监控 #

// 将 LangSmith 追踪添加到运行时
import { Client } from "langsmith";

const langsmith = new Client({
  apiKey: process.env.LANGSMITH_API_KEY,
  projectName: "copilotkit-production",
});

const runtime = new CopilotRuntime({
  actions: [],
  middleware: [
    async (ctx, next) => {
      const trace = await langsmith.createRun({ name: "copilot-request" });
      try {
        const result = await next();
        await langsmith.updateRun(trace.id, { error: null });
        return result;
      } catch (err) {
        await langsmith.updateRun(trace.id, { error: String(err) });
        throw err;
      }
    },
  ],
});

与替代方案对比 #

功能CopilotKitVercel AI SDKLangChainDify
预构建 React 组件CopilotSidebar, CopilotChat, CopilotPopupAI Elements(shadcn 风格)无——需自建无——仅 API
前端状态共享useCopilotReadable Hook通过 useChat 手动实现不适用不适用
前端操作(LLM → UI)useCopilotAction Hook自定义工具渲染不适用不适用
生成式 UI 渲染操作中的原生 render 属性React 服务端组件不支持不支持
智能体框架支持LangGraph, LangChain, 内置, Groq任何(通过适配器)LangChain 原生内置工作流引擎
Angular 支持原生支持不支持不支持不支持
自托管 / 本地部署支持(Docker, VPC)不支持(仅限 Vercel 后端)支持支持(企业版)
开放协议AG-UI(Google, MSFT 支持)
基础聊天设置时间10 分钟15 分钟2+ 小时30 分钟
GitHub Stars31,53612,80098,00086,000
许可证MITApache-2.0MITApache-2.0
企业版定价$500/月起Vercel 企业版不适用$1,500/月起

何时选择哪个:

  • CopilotKit — 你需要一个能读取 React 状态并触发前端操作的应用内 Copilot。最适合构建 AI 原生 SaaS 的产品团队。
  • Vercel AI SDK — 你想要提供商无关的流式聊天和 shadcn 风格组件。最适合内容/聊天优先的应用。
  • LangChain — 你需要 Python 优先的智能体编排和复杂链/检索器。最适合后端繁重的 AI 流水线。
  • Dify — 你想要 AI 智能体的可视化工作流构建器和 API 端点。最适合低代码自动化团队。

CopilotKit 对比表


局限性 / 诚实评估 #

CopilotKit 并非适合每个项目。以下是真实的权衡:

  1. React 中心化生态系统。 虽然支持 Angular,但 React 集成的成熟度明显更高。Vue 和 Svelte 开发者需要包装 CopilotKit 或寻找替代方案。

  2. 高级功能需付费。 Headless UI 模式、分析驾驶舱、自学习智能体和扩展线程保留需要付费计划(Pro 版 $39/开发者/月,Team 版 $500/月)。

  3. V2 API 迁移。 CopilotKit 在 2026 年初发布了破坏性 V2 API。使用 V1 的团队需要迁移 Hooks 和组件。V2 API 更清晰但需要前期投入。

  4. 需要 Node.js 20+。 CopilotKit 使用的现代 fetch 和 WebSocket 功能在 Node 18 上无法工作。遗留基础设施在采用前需要升级。

  5. 不是无代码解决方案。 有效使用需要扎实的 React 和 TypeScript 技能。产品经理无法在没有工程支持的情况下安装和配置 CopilotKit。

  6. 高级智能体依赖 LangGraph。 复杂的多步骤智能体需要 LangGraph 知识。内置智能体覆盖基本聊天,但不覆盖复杂工作流。


常见问题解答 #

CopilotKit 设置需要多长时间? #

使用 OpenAI 的基础集成需要 10-15 分钟:安装三个包,创建一个 API 路由,用 Provider 包裹应用。使用 LangGraph、Docker 和监控的生产级设置需要 2-4 小时。

CopilotKit 可以不使用 Next.js 吗? #

可以。CopilotKit 适用于任何 React 18+ 应用。运行时端点可以单独托管(Express、Fastify 或任何 Node 服务器)。@copilotkit/react-core 包没有 Next.js 依赖。

CopilotKit 支持哪些 LLM 提供商? #

CopilotKit 官方支持 OpenAI(GPT-4o、GPT-4o-mini)、Anthropic(Claude 3.5)、Groq(Llama 3、Mixtral)、Google Gemini 和 Azure OpenAI。社区适配器存在于 Cohere、Mistral 和通过 Ollama 的本地模型。

CopilotKit 生产使用免费吗? #

核心框架采用 MIT 许可证,永久免费。免费开发者层包括 200 个线程、1GB 多模态存储和 3 天线程保留。付费计划增加 Headless UI、分析、安全功能和更高限制。

CopilotKit 与 Vercel AI SDK 有何不同? #

Vercel AI SDK 是流式和聊天 UI 工具包。CopilotKit 是带有类型化状态共享和前端操作的 Copilot 嵌入框架。区别在于:Vercel AI SDK 制作聊天 UI;CopilotKit 制作操作你应用的 AI 队友。

CopilotKit 支持多智能体系统吗? #

支持。Copilot 运行时可以将请求路由到多个智能体。在 CopilotRuntime 中使用 agents 配置注册 LangGraph 智能体,并在运行时使用 agentId 属性在它们之间切换。

AG-UI 协议是什么? #

AG-UI 是由 CopilotKit 创建的智能体到前端通信的开放线协议。它标准化了流式聊天、工具调用和状态共享。截至 2026 年,Google、Microsoft、Amazon、LangChain 和 Mastra 都支持 AG-UI。


结论 #

CopilotKit 填补了一个特定的空白:在现有 React 应用中嵌入 AI Copilot,并具有对前端状态的完整读写访问权限。拥有 31,536 个 GitHub Stars、2700 万美元 A 轮融资,以及获得行业关注的 AG-UI 协议,它已成为交付 AI 原生界面的产品团队的首选。

行动清单:

  1. 克隆 CopilotKit 启动模板 并运行快速入门
  2. DigitalOcean 上部署你的第一个运行时,新用户可获得 $200 免费额度
  3. 加入 CopilotKit Discord 获取社区支持
  4. 关注团队在 X/Twitter 上获取每周更新

在我们的 Telegram 群组中讨论本文并获取帮助: t.me/dibi8opensource — 分享你的 CopilotKit 构建成果、提问并与其他交付 AI Copilot 的开发者交流。


推荐部署与基础设施 #

上述工具想要落地生产,靠谱的基础设施是前提。dibi8 自己也在用的两个选择:

  • DigitalOcean — 新用户 60 天 $200 免费额度,14+ 全球节点。运行开源 AI 工具的首选。
  • HTStack — 香港 VPS,国内访问低延迟,dibi8.com 自己也跑在它上面,生产环境验证过。

Aff 链接 — 不增加你的成本,但能帮 dibi8 持续运营。

来源与延伸阅读 #


披露声明: 本文包含 DigitalOcean 的联盟链接。如果你通过我们的链接注册,dibi8.com 可能会获得佣金,无需你额外付费。所有观点和基准测试均为独立评估。DigitalOcean 为新用户提供 $200 免费额度用于试用 CopilotKit 部署。

💬 留言讨论