CopilotKit 异步前端工具(Async Frontend Tool)实战:以 Agno 集成 demo 的 `query_notes` 为例

发布时间:2026/11/13 12:23:06

CopilotKit 异步前端工具(Async Frontend Tool)实战:以 Agno 集成 demo 的 `query_notes` 为例 CopilotKit 异步前端工具Async Frontend Tool实战以 Agno 集成 demo 的query_notes为例【免费下载链接】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 开源仓库中 Agno 集成的 QA 文档 frontend-tools-async.md 为核心骨架完整讲解「异步前端工具Async Frontend Tool」在 CopilotKit 中的注册、执行与渲染全链路Agent 发起工具调用后由浏览器端一个async处理器完成本地数据查询再把结果回传给 Agent 用于后续回复同时以自定义 React 组件把结果渲染成聊天中的结构化卡片。读完本文你将掌握useFrontendTool的 API 契约、参数约束、render生命周期以及如何用建议提示词suggestion pill、data-testid与 e2e 测试验证整条异步链路。1. 文档定位一条 QA 检查清单背后的完整功能原 QA 文档 frontend-tools-async.md 是 Agno 集成示例的一个质量检查清单覆盖三个层面前置条件Prerequisitesdemo 部署在/demos/frontend-tools-asyncAgent 后端必须健康功能检查Feature-Specific Checks点击 Find project-planning notes 建议提示词后断言data-testidnotes-card出现、data-testidnotes-keyword展示搜索关键词、data-testidnote-n1等逐条笔记被渲染错误处理Error Handling控制台无未捕获错误。这条清单不是孤立的手工测试用例而是对 CopilotKit「前端工具Frontend Tool」机制中异步形态的验收标准。它验证的核心事实是工具调用发生后等待一个 500ms 的浏览器端异步数据库往返完成后Agent 才能基于返回结果继续对话且前端 UI 必须能表达「加载中 → 完成」两种状态。该 QA 文档对应的可复现测试位于 tests/e2e/frontend-tools-async.spec.tsdemo 源码位于 src/app/demos/frontend-tools-async/。2. 认识前端工具Frontend Tool与异步形态2.1 什么是前端工具CopilotKit 允许 Agent 调用运行在浏览器端的函数——这就是「前端工具」。它不同于后端工具由服务端执行前端工具天然适合访问浏览器本地数据IndexedDB、localStorage、用户剪贴板、实时 DOM 状态或本例中的内存数据库。在 React 中通过useFrontendToolhook 注册来源use-frontend-tool.tsximport { useFrontendTool } from copilotkit/react-core/v2; useFrontendTool({ name: query_notes, description: Search the users local notes database ..., parameters: z.object({ keyword: z.string().describe(Keyword or phrase to search notes for.), }), handler: async ({ keyword }) { /* 浏览器端执行 */ }, render: ({ args, result, status }) NotesCard ... /, });2.2 异步 vs 同步前端工具的handler既可以是同步函数也可以是async函数。异步形态意味着Agent 发起工具调用后handler返回一个 Promise在 Promise 兑现期间工具状态为「执行中」render拿到status ! completePromise 兑现后结果回传 AgentAgent 基于结果组织最终回复前端卡片从「Querying local notes DB...」切换到「N match(es)」的完成态。这是异步前端工具区别于同步工具的完整闭环Agent 会等待浏览器端的异步结果再继续生成内容。3. demo 全景目录结构与运行前提Agno 集成 demo 中与本主题相关的文件文件作用page.tsxdemo 页面注册工具、配置建议、渲染聊天notes-card.tsx工具结果的卡片渲染组件含全部data-testidfake-notes-db.ts7 条确定性内存笔记 sleep工具_shared/parse-json-result.ts兼容字符串/对象两种结果形态的解析助手tests/e2e/frontend-tools-async.spec.tsPlaywright e2e 验收对应 QA 清单manifest.yaml集成清单Agent 与 demo 路由配置运行前提继承自原 QA 文档在 Agno 集成示例中启动服务将 demo 部署到/demos/frontend-tools-asyncAgent 后端agentfrontend-tools-asyncruntime 为/api/copilotkit必须健康因为工具调用由 Agent 决定是否发起浏览器端无未捕获控制台错误QA 第三步。4. 前端注册异步工具query_notesdemo 页面的核心注册代码位于 page.tsx我们逐段拆解。4.1 工具元信息与参数 SchemauseFrontendTool({ name: query_notes, description: Search the users local notes database for notes whose title, excerpt, or tags contain the given keyword (case-insensitive). Returns up to 5 matching notes., parameters: z.object({ keyword: z .string() .describe(Keyword or phrase to search notes for (case-insensitive).), }), ... });要点description必须足够清晰它会被提供给 Agent 做工具选择与参数推断parameters使用Zod Schema描述z.string().describe(...)里的描述会进入工具协议指导 LLM 正确生成参数react-core 中这类声明来自FrontendTool类型的parameters字段见 frontend-tool.ts工具名query_notes与后端 Agent 侧注册的工具名保持一致才能被正确路由。4.2 异步 handler模拟本地 DB 往返handler: async ({ keyword }: { keyword: string }) { await sleep(500); // 模拟本地数据库延迟 const q keyword.toLowerCase(); const matches NOTES_DB.filter((n) { return ( n.title.toLowerCase().includes(q) || n.excerpt.toLowerCase().includes(q) || (n.tags ?? []).some((t) t.toLowerCase().includes(q)) ); }).slice(0, 5); // 最多返回 5 条 return { keyword, count: matches.length, notes: matches, }; },技术要点sleep(500)来自 fake-notes-db.ts模拟真实异步数据源的延迟让「加载中」状态可被观察与测试查询逻辑对title、excerpt、tags三个字段做大小写不敏感的子串匹配返回值{ keyword, count, notes }会作为工具结果回传给 Agent供其总结真实场景中这里的NOTES_DB可替换为 IndexedDB、fetch 缓存或任何客户端自有数据源源码注释也明确说明了这一点。4.3 render状态驱动的卡片渲染render: ({ args, result, status }) { const loading status ! complete; const parsed parseJsonResult{ keyword?: string; count?: number; notes?: Note[]; }(result); return ( NotesCard loading{loading} keyword{args?.keyword ?? parsed.keyword ?? } notes{parsed.notes} / ); },status字段驱动 UI 状态切换工具执行中loading true卡片显示 Querying local notes DB... 与...占位完成后loading false卡片显示匹配数与笔记列表args?.keyword ?? parsed.keyword的双保险写法保证关键词在「结果尚未返回」与「结果已返回」两种时刻都能显示。其中parseJsonResult兼容了工具结果的两种形态——Agent 发出 JSON 字符串或运行时已解析为对象见 _shared/parse-json-result.ts。4.4 建议提示词Suggestion Pills为了让 QA 可操作demo 用useConfigureSuggestions配置了三个建议按钮page.tsxuseConfigureSuggestions({ suggestions: [ { title: Find project-planning notes, message: Find my notes about project planning. }, { title: Search for auth, message: Search my notes for anything related to auth. }, { title: What do I have about reading?, message: Do I have any notes tagged reading? }, ], available: always, });点击 pill 会以message作为用户消息发送引导 Agent 调用query_notes——这正是 QA 文档中点击 suggestion pill的自动化入口。5. 渲染组件NotesCard 与 contenteditable="false">【免费下载链接】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/11/13 12:19:20

张兆雷电工证多久拿证?学历不高怕报不上名怎么破?

张兆雷电工证多久拿证?学历不高怕报不上名怎么破? 你是不是也这样,学历不高,又想搞个电工证,怕报名的时候被拒绝,或者拿证时间太长,耽误了事?张兆雷电工证确实是个热门,但很多人不知道多久拿证,更不知道怎么操作才不会被坑。…

2026/11/13 12:19:20

煤气工属于特种行业吗实操考试心里没底怕挂科多少钱

煤气工属于特种行业吗实操考试心里没底怕挂科多少钱 实操考试心里没底怕挂科,考前不知道怎么准备,考场一紧张就忘,这几乎是每位准备考煤气工特种作业证的朋友心里的共同担忧。特别是煤气工属于特种行业吗这个问题,更是让不少初学者摸不着头脑。别急,这篇…

2026/11/13 12:19:20

特种作业证快速取证全流程解析 官方报名入口怎么找

特种作业证快速取证全流程解析 官方报名入口怎么找 怕考不过白交培训费?特种作业证快速取证不能靠运气,得靠方法。现在越来越多的从业者,尤其是河南市政公用工程行业的朋友,都在打听哪里能快速拿到证,又不耽误工作。关键是要找到 官方报名入口…

2026/11/13 12:19:19

新沂电工证补贴内部消息:电工证怎么考才能拿补贴?速看

新沂电工证补贴内部消息:电工证怎么考才能拿补贴?速看 你是不是正在为找工作发愁?手上没有电工证,连面试资格都没有?别急, 新沂电工证补贴 政策来了,但很多人还是不清楚怎么考、怎么拿补贴,甚至被一些培训机构坑了钱还没拿到证。今天我就从…

2026/11/13 12:14:18

广西的电工证哪里考取 低压电工证报名门槛低还能拿电子证书

广西的电工证哪里考取 低压电工证报名门槛低还能拿电子证书 你是不是也这样想: 学历不高怕报不上名 ,想考个电工证又怕被拒?其实广西的电工证哪里考取,真没你想象得那么难。特别是低压电工证,报名条件宽松,只要年满18岁、身体健康,就能报考,…

2026/11/12 20:35:13

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

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

2026/11/13 0:01:06

办上海高压电工证良心建议:别被中介坑了,自己看这篇就够了

办上海高压电工证良心建议:别被中介坑了,自己看这篇就够了 你是不是也像我一样,第一次听说“高压电工证”这个名词,就感觉一头雾水?其实很多人都跟我一样,不知道去哪报名、怕被中介坑,结果花了冤枉钱还考不上。今天我就从一个在商丘培训过的学员角度,…

2026/11/13 0:01:06

黎里考电工证在哪里值不值得考

黎里考电工证在哪里值不值得考 之前考的证在外省能不能转过来?这是很多在外地工作、准备回老家发展的朋友最关心的问题。特别是在黎里地区,很多从事电力相关工作的朋友,都面临这样一个难题: 外省的电工证能否在本地使用?值不值得考?…

2026/11/13 0:01:06

毕节哪里考电工证 怎么报名学历不高也能上手

毕节哪里考电工证 怎么报名学历不高也能上手 你是不是也和我一样,学历不高,想着考个电工证,但又担心自己条件不够,怕报不上名?其实不然,只要符合条件,学历不高也能考电工证。今天就来聊聊【毕节哪里考电工证】这个问题,还有怎么报名,让你一步到位不…

2026/11/12 22:10:13

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

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

2026/11/13 12:14:39

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
免费获取方案
☎咨询二维码 ☎ ↑