CopilotKit 预置侧边栏(CopilotSidebar)实战解析:Langroid 集成中的实现与 QA 验证

发布时间:2026/11/10 22:44:09

CopilotKit 预置侧边栏(CopilotSidebar)实战解析:Langroid 集成中的实现与 QA 验证 CopilotKit 预置侧边栏CopilotSidebar实战解析Langroid 集成中的实现与 QA 验证【免费下载链接】CopilotKitThe Frontend Stack for Agents Generative UI. React, Angular, Mobile, Slack, and more. Makers of the AG-UI Protocol项目地址: https://gitcode.com/GitHub_Trending/co/CopilotKit本文以 CopilotKit 仓库中 Langroid 集成示例的 QA 文档showcase/integrations/langroid/qa/prebuilt-sidebar.md为主线深入拆解prebuilt-sidebar演示的完整实现链路——从前端CopilotSidebar /组件的两行接入到建议快捷指令、折叠/展开交互再到 Next.js 路由把请求转发给 Langroid Agent 后端。读完本文你将掌握如何用预置侧边栏组件在几分钟内为任意页面接入一个默认展开、可折叠、支持快捷指令的 AI 聊天栏并学会用 Playwright 对它做端到端验收。一、这个 QA 文档在验证什么QA 文档给出了 5 个验收步骤本质上是一份针对侧边栏聊天功能的“最小冒烟测试清单”访问/demos/prebuilt-sidebar路由页面主内容区域应显示 Sidebar demo 标题侧边栏应停靠在页面一侧且默认展开发送 hi 后 Agent 应正常回复点击 launcher悬浮开关按钮可折叠/重新展开侧边栏。这 5 步覆盖了三个核心关注点路由与页面挂载是否正确、预置侧边栏的默认展示行为是否符合预期、以及聊天链路含折叠/展开交互是否可用。下面逐层对应到仓库里的真实源码与测试。二、最小接入两行 JSX 完成侧边栏挂载演示页面 src/app/demos/prebuilt-sidebar/page.tsx 展示了接入方式的核心骨架use client; import React from react; import { CopilotKit, CopilotSidebar } from copilotkit/react-core/v2; import { MainContent } from ./main-content; import { Suggestions } from ./suggestions-mount; export default function PrebuiltSidebarDemo() { return ( CopilotKit runtimeUrl/api/copilotkit agentprebuilt-sidebar MainContent / CopilotSidebar agentIdprebuilt-sidebar defaultOpen{true} / Suggestions / /CopilotKit ); }关键点有三CopilotKit根组件通过runtimeUrl/api/copilotkit指定运行时端点agentprebuilt-sidebar指定默认 Agent 名称。整个页面只需包一层聊天能力即全局可用。CopilotSidebar /预置组件以agentIdprebuilt-sidebar绑定同一个 AgentdefaultOpen{true}让侧边栏首屏即展开。Suggestions /子组件只负责注册快捷指令详见第四节渲染时返回null不影响布局。与page.tsx平级的 main-content.tsx 是普通的主内容区页面说明文字里特意强调了这个组件的行为CopilotSidebar /是停靠dock在视口边缘的会推动页面内容而不是覆盖它——这与浮层型弹窗CopilotPopup形成对比也是第 3 条 QA 步骤“docked on the side”的语义来源。三、默认展开与停靠布局defaultOpen 的行为验证QA 第 3 步要求“sidebar docked on the side, open by default”对应端到端测试 prebuilt-sidebar.spec.ts 中的第一组断言await expect(page.getByPlaceholder(Type a message)).toBeVisible();注释说明得很清楚defaultOpen{true}意味着侧边栏的聊天输入框placeholder 为 Type a message在首次渲染时即挂载且可见。同时测试还断言侧边栏自带的开关按钮存在await expect( page.locator([data-testidcopilot-chat-toggle]).first(), ).toBeVisible();copilot-chat-toggle是组件内置的 launcher 按钮 testid无需前端自行实现折叠逻辑。关于停靠行为还可以从组件自带的侧边栏 testid 与无障碍属性看出设计测试用[data-testidcopilot-sidebar]定位侧边栏并用aria-hidden属性判断开合状态——默认展开时该属性为false折叠后变为true。这意味着开合是纯客户端状态不改变 URL测试末尾专门断言 URL 仍停留在/demos/prebuilt-sidebar便于无刷新地切换聊天面板。四、快捷指令useConfigureSuggestions 注入建议药丸侧边栏聊天框上方渲染的快捷指令来自 suggestions.tsuse client; import { useConfigureSuggestions } from copilotkit/react-core/v2; export function usePrebuiltSidebarSuggestions() { useConfigureSuggestions({ suggestions: [ { title: Say hi, message: Say hi! }, { title: Fun fact, message: Give me a fun fact. }, { title: Is 17 prime?, message: Walk me through whether 17 is prime. }, ], available: always, }); }每个建议由title药丸上显示的文字和message点击后真正发送给 Agent 的消息组成available: always表示建议药丸始终可见不受对话状态影响suggestions-mount.tsx 是一个纯挂载组件调用 hook 后返回null把建议注册逻辑从页面结构中隔离出来。端到端测试正是借用了这条链路完成“发消息”验证找到[data-testidcopilot-suggestion]中文本为 Say hi 的药丸并点击随后断言[data-testidcopilot-assistant-message]出现——由于该演示没有前端工具往返成功的信号就是“出现了一条助手气泡”。五、折叠与展开launcher 交互与无障碍状态QA 第 5 步“Click the launcher to collapse/expand the sidebar”对应测试文件中的最后一组用例它把开合状态落在aria-hidden属性上const sidebar page.locator([data-testidcopilot-sidebar]); // 默认展开aria-hiddenfalse await expect(sidebar).toHaveAttribute(aria-hidden, false); // 从内部关闭按钮收起侧边栏展开时会拦截外部 toggle 的指针事件 await page.evaluate(() { const btn document.querySelector([data-testidcopilot-close-button]); if (btn) (btn as HTMLElement).click(); }); await expect(sidebar).toHaveAttribute(aria-hidden, true, { timeout: 10000 }); // 通过悬浮 launcher 重新打开 await page.locator([data-testidcopilot-chat-toggle]).first().click(); await expect(sidebar).toHaveAttribute(aria-hidden, false, { timeout: 10000 });几个值得注意的实现细节均可从测试注释中确认侧边栏收起时通过CSS transform 滑出但组件仍然保持挂载因此aria-hidden是判断开合的权威信号展开状态下外部 toggle 会被侧边栏拦截指针事件所以测试从内部copilot-close-button关闭测试使用 JS 级.click()而非 Playwright 的指针点击是为了绕开 localhost 下自动启用的cpk-web-inspector开发覆盖层——这是真实环境里验证侧边栏交互时容易踩的坑。六、后端接线runtime 如何把请求交给 Langroid Agent前端连的是runtimeUrl/api/copilotkit真实路由实现在 src/app/api/copilotkit/route.ts。核心链路是后端独立进程Langroid Agent 跑在单独的 Python 服务上地址默认http://localhost:8000可用AGENT_URL环境变量覆盖AG-UI 协议代理createAgent()用ag-ui/client的HttpAgent包装后端地址运行时通过 AG-UI 协议把请求转发给 Langroid单路由多别名agentNames数组中注册了包括prebuilt-sidebar在内的 30 多个名字全部映射到同一个统一 Agent 端点/。注释明确说明这些“聊天外壳变体”前端差异仅体现在 UI 组合上CopilotChat vs Sidebar vs Popup 等后端 Agent 是同一个单路由模式createCopilotRuntimeHandler({ runtime, basePath: /api/copilotkit, mode: single-route })让所有 Agent 共享一个 POST 端点由请求体中的 agent 名称分派。此外路由的GET分支是一个健康探针返回后端 Agent 可达状态与OPENAI_API_KEY是否配置方便排查“页面能开但 Agent 不回话”的问题。这解释了 QA 第 4 步“Send hi and verify agent responds”为什么能成立只要GET /api/copilotkit显示agent_status: reachable消息往返链路就已打通。七、QA 步骤到代码的完整映射把 QA 文档、前端源码、路由和端到端测试串起来可以得到一张清晰的验证矩阵QA 步骤验证内容对应实现/测试依据1. 访问/demos/prebuilt-sidebar路由挂载page.tsx 为该路由的默认导出2. Sidebar demo 标题可见页面内容渲染main-content.tsx 中的h13. 侧边栏停靠且默认展开布局与默认状态defaultOpen{true}测试断言输入框与aria-hiddenfalse4. 发送 hi 收到回复消息往返链路点击 Say hi 药丸后断言助手气泡出现5. launcher 折叠/展开交互与无障碍copilot-chat-toggle/copilot-close-button/aria-hidden状态切换在 manifest.yaml 中该演示注册为prebuilt-sidebarPre-Built: Sidebarroute: /demos/prebuilt-sidebar并标记为interaction_modalities: sidebar的典型代表说明“预置侧边栏”是 Langroid 集成所支持的三种交互模态sidebar / embedded / chat之一。八、把这套方案复用到你自己的项目基于以上源码落地一个“默认展开的侧边栏聊天”只需四步包一层 Provider在应用根组件或单个页面外包CopilotKit runtimeUrl/api/copilotkit agentyour-agent放置预置组件在页面任意位置写CopilotSidebar agentIdyour-agent defaultOpen{true} /defaultOpen可省略默认关闭或设为false注册快捷指令可选调用useConfigureSuggestions配置suggestions与available点击药丸即发送预设消息接通后端确认/api/copilotkit路由已通过 AG-UI 协议代理到你的 Agent 服务参考 route.ts 的单路由模式并用GET健康探针验证agent_status。最后把 prebuilt-sidebar.spec.ts 里的四个用例页面加载、建议药丸、手动输入、折叠/展开纳入你的 CI就能像这份 QA 文档一样对侧边栏功能做持续性的端到端回归。【免费下载链接】CopilotKitThe Frontend Stack for Agents Generative UI. React, Angular, Mobile, Slack, and more. Makers of the AG-UI Protocol项目地址: https://gitcode.com/GitHub_Trending/co/CopilotKit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/10/27 21:16:41

Spring Boot+Vue台球厅管理系统:RBAC权限、状态机与并发控制实战

简介:这是一份基于Spring Boot与Vue.js的校园台球厅人员与设备管理系统毕业设计资源,适合计算机相关专业学生用于毕业设计参考或前后端分离项目实践。系统采用B/S结构,以MySQL作为数据库,涵盖用户管理、会员账号管理、会员充值管理…

2026/11/10 22:42:07

苍南电工证培训中心怎么网上查询复审流程?证书过期别慌

苍南电工证培训中心怎么网上查询复审流程?证书过期别慌 证书过期了不知道怎么复审延期?别急, 苍南电工证培训中心 可以帮你解决这个问题。很多人因为工作忙碌或者信息闭塞,错过复审时间,导致证件失效,影响正常上岗。这时候,很多人不知道该怎么操作,…

2026/11/10 22:42:07

赵应贵电工证多久拿证 怎么避免被中介坑

赵应贵电工证多久拿证 怎么避免被中介坑 你是不是也遇到过这种情况?想报个赵应贵电工证,结果一打听,要么是黑中介乱收费,要么是流程复杂得让人头大, 多久拿证…

2026/11/10 22:42:07

地铁电工证过期了不知道怎么复审延期?良心建议帮你搞清楚

地铁电工证过期了不知道怎么复审延期?良心建议帮你搞清楚 证书过期了不知道怎么复审延期,这事儿真不是小事。别以为过期了能拖一拖就没事,现在各行各业对特种作业操作证的审查越来越严,尤其是像地铁电工证这种,一旦过期还敢上岗,那就是拿命在开玩笑。今…

2026/11/10 22:42:07

云南考电工证怎么报不被坑?2026河南最新政策出炉

云南考电工证怎么报不被坑?2026河南最新政策出炉 你是不是也担心,去哪报名考电工证,一不小心就被中介坑了?尤其是现在像【云南考电工证】这种热门项目,真假机构鱼龙混杂,很多人拿着钱却拿不到证,或者拿到的证不被认可。别急,2026年河南最新政…

2026/11/10 22:37:06

高级电工证需要评定吗?实操考试心里没底怕挂科?良心建议来了

高级电工证需要评定吗?实操考试心里没底怕挂科?良心建议来了 实操考试心里没底怕挂科?你不是一个人在战斗。尤其是在三门峡从事房建工程的电工,很多都面临同样的困扰:高级电工证是不是需要评定?评定流程复杂吗?实操考试能不能一次过?别急,这篇良心建…

2026/11/10 8:12:38

电工证丢失还能补吗?千万别踩坑,丢了证等于失业

电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。…

2026/11/10 0:01:28

学历不高怕报不上名?考电工证报名费+网上查询全攻略来了

学历不高怕报不上名?考电工证报名费+网上查询全攻略来了 你是不是也担心自己学历不高,考电工证报名费太贵,根本报不上名?别急,今天就来给你讲讲,怎么用最少的钱,把证拿到手,还能在工地上多挣点钱。 电工证报名费多少钱?网上查询是关键…

2026/11/10 0:01:29

绍兴考电工证培训机构怎么选?2026河南最新政策别错过

绍兴考电工证培训机构怎么选?2026河南最新政策别错过 怕考不过白交培训费?你不是一个人。2026河南最新政策出台,对电工证考试、报名、培训、复审都有明确规定。选择绍兴考电工证培训机构,别再踩坑,下面一步步教你避坑。…

2026/11/10 20:08:15

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/10 10:29:37

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑