CopilotKitMiddleware,使 LangGraph 图、LangChain 代理或 Deep Agent 可以使用 Agent UI (AG-UI) 传输协议,将工具和消息事件流式传输到聊天 UI,并读取或写入共享的 CopilotKit 状态切片。它还提供 helper,用于在图前面挂载与 CopilotKit 兼容的 HTTP 端点。
当你需要以下能力时,此方法很有用:
- 使用现成聊天运行时,而不是自己连接
stream.messages - 在已部署图旁边添加自定义服务器端点,以支持提供商特定行为
- 从受约束组件注册表渲染结构化生成式 UI
如需 CopilotKit 专用 API、UI 模式和运行时配置,请参阅
CopilotKit 文档。如需 Deep Agent 演练,请参阅 CopilotKit 文档中的
Deep Agents and CopilotKit。
工作方式
从高层看,CopilotKit 位于 React 应用和 LangGraph 部署之间。前端会将对话状态发送到与图 API 并列挂载的自定义/api/copilotkit 路由,该路由将请求转发给 LangGraph,响应会带回助手消息以及组件注册表可渲染的任何结构化 UI payload。
- 照常部署图,可以使用 LangSmith 或 LangGraph 开发服务器。
- 用 HTTP app 扩展部署,在图 API 旁边挂载 CopilotKit 路由。
- 用
CopilotKit包裹前端,并将其指向该自定义运行时 URL。 - 注册动态 UI 组件,并在渲染时将助手响应解析为这些组件。
Python 服务器提供什么
copilotkit 及相关包会桥接 LangGraph 部署和 CopilotKit 客户端。| 组件 | 作用 |
|---|---|
CopilotKitMiddleware | 将 CopilotKit 和 AG-UI 状态与请求合并到代理中,包括前端工具调用和上下文。将它添加到 create_agent 或 create_deep_agent 的 middleware 列表中。 |
CopilotKitState(子类) | 自定义状态:扩展 CopilotKitState,让 CopilotKit key 成为图状态的一部分。 |
LangGraphAGUIAgent | 为运行时打包一个已编译图,以及名称和描述。 |
add_langgraph_fastapi_endpoint(来自 ag-ui-langgraph) | 连接 FastAPI app,使 CopilotKit 可以在同一个 LangGraph 进程中运行你的图。当你在 langgraph.json 中添加自定义 http app,而不是使用单独 HTTP 服务器时使用它。 |
CopilotKitMiddleware 添加到 middleware 列表后,它既可用于 create_deep_agent,也可用于来自 create_agent 的图。对于带 CopilotKitState 和 FastAPI 桥接的 create_agent 图,请参考下面的 Python main.py 示例。结构化生成式 UI(例如来自客户端的 useAgentContext 和 output_schema)需要额外中间件,将 Copilot 状态映射到结构化输出策略,如同一小节中可展开的 src/middleware.py 示例所示。
在 langgraph.json 的 http 键上挂载 app 遵循常规 LangGraph 或 LangSmith 部署,因此同一进程可以同时向 CopilotKit 客户端提供图和同一个 FastAPI app。
安装
对于后端端点:将 CopilotKit 与 Deep Agent 搭配使用
将CopilotKitMiddleware 添加到传给 create_deep_agent 的 middleware 列表中。该中间件让 CopilotKit 可以路由前端工具调用,并使聊天状态与你的图保持一致。将你配置的任何其他中间件保留在同一个列表中。
随后,已编译图就可以接入感知 CopilotKit 或 AG-UI 的进程(例如下面的 FastAPI 模式),或接入 CopilotKit 文档中的 Deep Agents and CopilotKit 指南。
使用自定义端点扩展 LangGraph 部署
关键思路是,LangGraph 部署不只提供图服务。它还可以加载 HTTP app,使你可以在部署本身旁边挂载额外路由。 在langgraph.json 中,将 http.app 指向自定义 app 入口点:
FastAPI app,并通过 CopilotKit 的 AG-UI 桥接公开 LangGraph 代理:
main.py
useAgentContext(...) 的 output_schema 转发到模型的结构化输出配置中。
src/middleware.py
- LangGraph 仍负责图执行和持久化
- CopilotKit 负责面向聊天的运行时契约
- 你的自定义端点在一个部署内将二者粘合在一起
runtimeUrl 指向 FastAPI(或其他)app 暴露的路由,而不只是原始图 REST 接口。
请参考 CopilotKit 文档中 Node CopilotRuntime 的 LangGraphHttpAgent 或 LangGraphAgent;Python 图和中间件仍定义工具行为和代理逻辑。
:::
组织前端应用
在前端,用CopilotKit 包裹应用,并将其指向自定义运行时 URL:
runtimeUrl="/api/copilotkit"会将聊天发送到自定义后端路由,而不是直接发送到原始 LangGraph APIuseAgentContext(...)会将 UI schema 发送给代理,让模型知道应生成什么结构化输出格式
注册动态组件
组件注册表位于useChatKit() 中。你可以在这里定义代理允许发出的组件集合,例如卡片、行、列、图表、代码块和按钮。
将助手消息渲染为动态 UI
助手响应到达后,自定义消息渲染器会决定如何显示它。在此示例中:- 助手消息会根据 UI kit schema 解析为结构化 JSON
- 有效的结构化输出会渲染为真实 React 组件
- 用户消息会渲染为普通聊天气泡
- CopilotKit 处理聊天状态和传输
- 自定义渲染器决定助手 payload 如何变成 UI
- Hashbrown 将已验证的结构化数据转换为具体 React 元素
资源
- CopilotKit 文档中的 Deep Agents and CopilotKit:端到端 Next.js、开发服务器和 Deep Agent 路径
- CopilotKit: LangGraph features:生成式 UI、HITL、共享状态
- LangGraph deployment:生产和开发服务器
最佳实践
- 保持自定义端点精简:用它将 CopilotKit 适配到图部署,而不是复制图中已有的业务逻辑
- 显式发送 schema:每次页面挂载时,
useAgentContext都应描述 UI 契约 - 注册受约束的组件集合:只暴露你真正希望模型使用的组件和 props
- 将渲染视为解析步骤:渲染前先根据 schema 解析助手内容
- 保持用户消息为普通消息:只有助手消息需要结构化渲染器;用户消息可以保持普通聊天气泡
Connect these docs to Claude, VSCode, and more via MCP for real-time answers.

