[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-cloudflare--agents-starter":3,"tool-cloudflare--agents-starter":61},[4,18,26,36,44,53],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":17},4358,"openclaw","openclaw\u002Fopenclaw","OpenClaw 是一款专为个人打造的本地化 AI 助手，旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚，能够直接接入你日常使用的各类通讯渠道，包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息，OpenClaw 都能即时响应，甚至支持在 macOS、iOS 和 Android 设备上进行语音交互，并提供实时的画布渲染功能供你操控。\n\n这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地，用户无需依赖云端服务即可享受快速、私密的智能辅助，真正实现了“你的数据，你做主”。其独特的技术亮点在于强大的网关架构，将控制平面与核心助手分离，确保跨平台通信的流畅性与扩展性。\n\nOpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者，以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力（支持 macOS、Linux 及 Windows WSL2），即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你",349277,3,"2026-04-06T06:32:30",[13,14,15,16],"Agent","开发框架","图像","数据工具","ready",{"id":19,"name":20,"github_repo":21,"description_zh":22,"stars":23,"difficulty_score":10,"last_commit_at":24,"category_tags":25,"status":17},3808,"stable-diffusion-webui","AUTOMATIC1111\u002Fstable-diffusion-webui","stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面，旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点，将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。\n\n无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师，还是想要深入探索模型潜力的开发者与研究人员，都能从中获益。其核心亮点在于极高的功能丰富度：不仅支持文生图、图生图、局部重绘（Inpainting）和外绘（Outpainting）等基础模式，还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外，它内置了 GFPGAN 和 CodeFormer 等人脸修复工具，支持多种神经网络放大算法，并允许用户通过插件系统无限扩展能力。即使是显存有限的设备，stable-diffusion-webui 也提供了相应的优化选项，让高质量的 AI 艺术创作变得触手可及。",162132,"2026-04-05T11:01:52",[14,15,13],{"id":27,"name":28,"github_repo":29,"description_zh":30,"stars":31,"difficulty_score":32,"last_commit_at":33,"category_tags":34,"status":17},1381,"everything-claude-code","affaan-m\u002Feverything-claude-code","everything-claude-code 是一套专为 AI 编程助手（如 Claude Code、Codex、Cursor 等）打造的高性能优化系统。它不仅仅是一组配置文件，而是一个经过长期实战打磨的完整框架，旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。\n\n通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能，everything-claude-code 能显著提升 AI 在复杂任务中的表现，帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略，使得模型响应更快、成本更低，同时有效防御潜在的攻击向量。\n\n这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库，还是需要 AI 协助进行安全审计与自动化测试，everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目，它融合了多语言支持与丰富的实战钩子（hooks），让 AI 真正成长为懂上",142651,2,"2026-04-06T23:34:12",[14,13,35],"语言模型",{"id":37,"name":38,"github_repo":39,"description_zh":40,"stars":41,"difficulty_score":32,"last_commit_at":42,"category_tags":43,"status":17},2271,"ComfyUI","Comfy-Org\u002FComfyUI","ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎，专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式，采用直观的节点式流程图界面，让用户通过连接不同的功能模块即可构建个性化的生成管线。\n\n这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景，也能自由组合模型、调整参数并实时预览效果，轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性，不仅支持 Windows、macOS 和 Linux 全平台，还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构，并率先支持 SDXL、Flux、SD3 等前沿模型。\n\n无论是希望深入探索算法潜力的研究人员和开发者，还是追求极致创作自由度的设计师与资深 AI 绘画爱好者，ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",107888,"2026-04-06T11:32:50",[14,15,13],{"id":45,"name":46,"github_repo":47,"description_zh":48,"stars":49,"difficulty_score":32,"last_commit_at":50,"category_tags":51,"status":17},4721,"markitdown","microsoft\u002Fmarkitdown","MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具，专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片（含 OCR）、音频（含语音转录）、HTML 乃至 YouTube 链接等多种格式的解析，能够精准提取文档中的标题、列表、表格和链接等关键结构信息。\n\n在人工智能应用日益普及的今天，大语言模型（LLM）虽擅长处理文本，却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点，它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式，成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外，它还提供了 MCP（模型上下文协议）服务器，可无缝集成到 Claude Desktop 等 LLM 应用中。\n\n这款工具特别适合开发者、数据科学家及 AI 研究人员使用，尤其是那些需要构建文档检索增强生成（RAG）系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性，但其核心优势在于为机器",93400,"2026-04-06T19:52:38",[52,14],"插件",{"id":54,"name":55,"github_repo":56,"description_zh":57,"stars":58,"difficulty_score":10,"last_commit_at":59,"category_tags":60,"status":17},4487,"LLMs-from-scratch","rasbt\u002FLLMs-from-scratch","LLMs-from-scratch 是一个基于 PyTorch 的开源教育项目，旨在引导用户从零开始一步步构建一个类似 ChatGPT 的大型语言模型（LLM）。它不仅是同名技术著作的官方代码库，更提供了一套完整的实践方案，涵盖模型开发、预训练及微调的全过程。\n\n该项目主要解决了大模型领域“黑盒化”的学习痛点。许多开发者虽能调用现成模型，却难以深入理解其内部架构与训练机制。通过亲手编写每一行核心代码，用户能够透彻掌握 Transformer 架构、注意力机制等关键原理，从而真正理解大模型是如何“思考”的。此外，项目还包含了加载大型预训练权重进行微调的代码，帮助用户将理论知识延伸至实际应用。\n\nLLMs-from-scratch 特别适合希望深入底层原理的 AI 开发者、研究人员以及计算机专业的学生。对于不满足于仅使用 API，而是渴望探究模型构建细节的技术人员而言，这是极佳的学习资源。其独特的技术亮点在于“循序渐进”的教学设计：将复杂的系统工程拆解为清晰的步骤，配合详细的图表与示例，让构建一个虽小但功能完备的大模型变得触手可及。无论你是想夯实理论基础，还是为未来研发更大规模的模型做准备",90106,"2026-04-06T11:19:32",[35,15,13,14],{"id":62,"github_repo":63,"name":64,"description_en":65,"description_zh":66,"ai_summary_zh":66,"readme_en":67,"readme_zh":68,"quickstart_zh":69,"use_case_zh":70,"hero_image_url":71,"owner_login":72,"owner_name":73,"owner_avatar_url":74,"owner_bio":75,"owner_company":76,"owner_location":76,"owner_email":76,"owner_twitter":76,"owner_website":77,"owner_url":78,"languages":79,"stars":92,"forks":93,"last_commit_at":94,"license":95,"difficulty_score":32,"env_os":96,"env_gpu":97,"env_ram":98,"env_deps":99,"category_tags":111,"github_topics":112,"view_count":32,"oss_zip_url":76,"oss_zip_packed_at":76,"status":17,"created_at":116,"updated_at":117,"faqs":118,"releases":149},4918,"cloudflare\u002Fagents-starter","agents-starter","A starter kit for building ai agents on Cloudflare","agents-starter 是 Cloudflare 官方推出的 AI 智能体开发启动模板，旨在帮助开发者快速构建基于浏览器的智能聊天应用。它解决了从零搭建 AI 代理时面临的环境配置复杂、工具调用逻辑繁琐以及实时通信难以实现等痛点，让开发者能专注于业务逻辑而非基础设施。\n\n该项目非常适合希望快速上手 Cloudflare 生态的 Web 开发者、全栈工程师以及想要验证 AI 应用原型的创业团队。其核心亮点在于深度集成了 Workers AI，无需额外配置 API 密钥即可直接使用大模型能力。agents-starter 内置了三种灵活的工具调用模式：服务器端自动执行、客户端浏览器协同以及需人工确认的“人机回环”机制，能够安全地处理天气查询、复杂计算或定时任务等场景。此外，它还原生支持图像识别输入、流式思维过程展示、任务调度（含 Cron 循环）以及基于 WebSocket 的高可靠实时通信。配合现代化的 Kumo UI 组件库，开发者只需修改少量代码即可替换系统提示词或接入真实 API，轻松将演示项目转化为生产级应用。","# Agent Starter\n\n![npm i agents command](.\u002Fnpm-agents-banner.svg)\n\n\u003Ca href=\"https:\u002F\u002Fdeploy.workers.cloudflare.com\u002F?url=https:\u002F\u002Fgithub.com\u002Fcloudflare\u002Fagents-starter\">\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcloudflare_agents-starter_readme_588fab17561f.png\" alt=\"Deploy to Cloudflare\"\u002F>\u003C\u002Fa>\n\nA starter template for building AI chat agents on Cloudflare, powered by the [Agents SDK](https:\u002F\u002Fdevelopers.cloudflare.com\u002Fagents\u002F).\n\nUses Workers AI (no API key required), with tools for weather, timezone detection, calculations with approval, task scheduling, and vision (image input).\n\n## Quick start\n\n```bash\nnpx create-cloudflare@latest --template cloudflare\u002Fagents-starter\ncd agents-starter\nnpm install\nnpm run dev\n```\n\nOpen [http:\u002F\u002Flocalhost:5173](http:\u002F\u002Flocalhost:5173) to see your agent in action.\n\nTry these prompts to see the different features:\n\n- **\"What's the weather in Paris?\"** — server-side tool (runs automatically)\n- **\"What timezone am I in?\"** — client-side tool (browser provides the answer)\n- **\"Calculate 5000 \\* 3\"** — approval tool (asks you before running)\n- **\"Remind me in 5 minutes to take a break\"** — scheduling\n- **Drop an image and ask \"What's in this image?\"** — vision (image understanding)\n\n## Project structure\n\n```\nsrc\u002F\n  server.ts    # Chat agent with tools and scheduling\n  app.tsx      # Chat UI built with Kumo components\n  client.tsx   # React entry point\n  styles.css   # Tailwind + Kumo styles\n```\n\n## What's included\n\n- **AI Chat** — Streaming responses powered by Workers AI via `AIChatAgent`\n- **Image input** — Drag-and-drop, paste, or click to attach images for vision-capable models\n- **Three tool patterns** — server-side auto-execute, client-side (browser), and human-in-the-loop approval\n- **Scheduling** — one-time, delayed, and recurring (cron) tasks\n- **Reasoning display** — shows model thinking as it streams, collapses when done\n- **Debug mode** — toggle in the header to inspect raw message JSON for each message\n- **Kumo UI** — Cloudflare's design system with dark\u002Flight mode\n- **Real-time** — WebSocket connection with automatic reconnection and message persistence\n\n## Making it your own\n\n### Name your project\n\nUpdate the name in `package.json` and `wrangler.jsonc` — the `name` in `wrangler.jsonc` becomes your deployed Worker's URL (`\u003Cname>.\u003Csubdomain>.workers.dev`).\n\n### Change the system prompt\n\nEdit the `system` string in `server.ts` to give your agent a different personality or focus area. This is the most impactful single change you can make.\n\n### Replace the demo tools with real ones\n\nThe starter ships with demo tools (`getWeather` returns random data, `calculate` does basic arithmetic). Replace them with real implementations:\n\n```ts\n\u002F\u002F In server.ts, replace a demo tool with a real API call:\ngetWeather: tool({\n  description: \"Get the current weather for a city\",\n  inputSchema: z.object({ city: z.string() }),\n  execute: async ({ city }) => {\n    const res = await fetch(`https:\u002F\u002Fapi.weather.example\u002F${city}`);\n    return res.json();\n  }\n}),\n```\n\n### Add your own tools\n\nAdd new tools to the `tools` object in `server.ts`. There are three patterns:\n\n```ts\n\u002F\u002F Auto-execute: runs on the server, no user interaction\nmyTool: tool({\n  description: \"...\",\n  inputSchema: z.object({ \u002F* ... *\u002F }),\n  execute: async (input) => { \u002F* return result *\u002F }\n}),\n\n\u002F\u002F Client-side: no execute function, browser provides the result\n\u002F\u002F Handle it in app.tsx via the onToolCall callback\nbrowserTool: tool({\n  description: \"...\",\n  inputSchema: z.object({ \u002F* ... *\u002F })\n}),\n\n\u002F\u002F Approval: add needsApproval to gate execution\nsensitiveTool: tool({\n  description: \"...\",\n  inputSchema: z.object({ \u002F* ... *\u002F }),\n  needsApproval: async (input) => true, \u002F\u002F or conditional logic\n  execute: async (input) => { \u002F* runs after approval *\u002F }\n}),\n```\n\n### Customize scheduled task behavior\n\nWhen a scheduled task fires, `executeTask` runs on the server. It does its work and then uses `this.broadcast()` to notify connected clients (shown as a toast notification in the UI). Replace it with your own logic:\n\n```ts\nasync executeTask(description: string, task: Schedule\u003Cstring>) {\n  \u002F\u002F Do the actual work\n  await sendEmail({ to: \"user@example.com\", subject: description });\n\n  \u002F\u002F Notify connected clients\n  this.broadcast(\n    JSON.stringify({ type: \"scheduled-task\", description, timestamp: new Date().toISOString() })\n  );\n}\n```\n\n> **Why `broadcast()` instead of `saveMessages()`?** Injecting into chat history can cause the AI to see the notification as new context and re-trigger the same task in a loop. `broadcast()` sends a one-off event that the client displays separately from the conversation.\n\n### Remove scheduling\n\nIf you don't need scheduling, remove `scheduleTask`, `getScheduledTasks`, and `cancelScheduledTask` from the tools object, the `executeTask` method, and the schedule-related imports (`getSchedulePrompt`, `scheduleSchema`, `Schedule`, `generateId`).\n\n### Add state beyond chat messages\n\nUse `this.setState()` and `this.state` for real-time state that syncs to all connected clients. See [Store and sync state](https:\u002F\u002Fdevelopers.cloudflare.com\u002Fagents\u002Fapi-reference\u002Fstore-and-sync-state\u002F).\n\n### Add callable methods\n\nExpose agent methods as typed RPC that your client can call directly:\n\n```ts\nimport { callable } from \"agents\";\n\nexport class ChatAgent extends AIChatAgent\u003CEnv> {\n  @callable()\n  async getStats() {\n    return { messageCount: this.messages.length };\n  }\n}\n\n\u002F\u002F Client-side:\nconst stats = await agent.call(\"getStats\");\n```\n\nSee [Callable methods](https:\u002F\u002Fdevelopers.cloudflare.com\u002Fagents\u002Fapi-reference\u002Fcallable-methods\u002F).\n\n### Connect to MCP servers\n\nAdd external tools from MCP servers:\n\n```ts\nasync onChatMessage(onFinish, options) {\n  \u002F\u002F Connect to an MCP server\n  await this.mcp.connect(\"https:\u002F\u002Fmy-mcp-server.example\u002Fsse\");\n\n  const result = streamText({\n    \u002F\u002F ...\n    tools: {\n      ...myTools,\n      ...this.mcp.getAITools() \u002F\u002F Include MCP tools\n    }\n  });\n}\n```\n\nSee [MCP Client API](https:\u002F\u002Fdevelopers.cloudflare.com\u002Fagents\u002Fapi-reference\u002Fmcp-client-api\u002F).\n\n## Use a different AI model provider\n\nThe starter uses [Workers AI](https:\u002F\u002Fdevelopers.cloudflare.com\u002Fworkers-ai\u002F) by default (no API key needed). To use a different provider:\n\n### OpenAI\n\n```bash\nnpm install @ai-sdk\u002Fopenai\n```\n\n```ts\n\u002F\u002F In server.ts, replace the model:\nimport { openai } from \"@ai-sdk\u002Fopenai\";\n\n\u002F\u002F Inside onChatMessage:\nconst result = streamText({\n  model: openai(\"gpt-5.2\")\n  \u002F\u002F ...\n});\n```\n\nCreate a `.env` file with your API key:\n\n```\nOPENAI_API_KEY=your-key-here\n```\n\n### Anthropic\n\n```bash\nnpm install @ai-sdk\u002Fanthropic\n```\n\n```ts\nimport { anthropic } from \"@ai-sdk\u002Fanthropic\";\n\nconst result = streamText({\n  model: anthropic(\"claude-sonnet-4-20250514\")\n  \u002F\u002F ...\n});\n```\n\nCreate a `.env` file with your API key:\n\n```\nANTHROPIC_API_KEY=your-key-here\n```\n\n## Deploy\n\n```bash\nnpm run deploy\n```\n\nYour agent is live on Cloudflare's global network. Messages persist in SQLite, streams resume on disconnect, and the agent hibernates when idle.\n\n## Learn more\n\n- [Agents SDK documentation](https:\u002F\u002Fdevelopers.cloudflare.com\u002Fagents\u002F)\n- [Build a chat agent tutorial](https:\u002F\u002Fdevelopers.cloudflare.com\u002Fagents\u002Fgetting-started\u002Fbuild-a-chat-agent\u002F)\n- [Chat agents API reference](https:\u002F\u002Fdevelopers.cloudflare.com\u002Fagents\u002Fapi-reference\u002Fchat-agents\u002F)\n- [Workers AI models](https:\u002F\u002Fdevelopers.cloudflare.com\u002Fworkers-ai\u002Fmodels\u002F)\n\n## License\n\nMIT\n","# 代理入门\n\n![npm i agents 命令](.\u002Fnpm-agents-banner.svg)\n\n\u003Ca href=\"https:\u002F\u002Fdeploy.workers.cloudflare.com\u002F?url=https:\u002F\u002Fgithub.com\u002Fcloudflare\u002Fagents-starter\">\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcloudflare_agents-starter_readme_588fab17561f.png\" alt=\"部署到 Cloudflare\"\u002F>\u003C\u002Fa>\n\n这是一个用于在 Cloudflare 上构建 AI 聊天代理的入门模板，由 [Agents SDK](https:\u002F\u002Fdevelopers.cloudflare.com\u002Fagents\u002F) 提供支持。\n\n该模板使用 Workers AI（无需 API 密钥），并配备天气查询、时区检测、需批准的计算、任务调度以及视觉（图像输入）等工具。\n\n## 快速开始\n\n```bash\nnpx create-cloudflare@latest --template cloudflare\u002Fagents-starter\ncd agents-starter\nnpm install\nnpm run dev\n```\n\n打开 [http:\u002F\u002Flocalhost:5173](http:\u002F\u002Flocalhost:5173)，即可看到您的代理运行效果。\n\n尝试以下提示，体验不同功能：\n\n- **“巴黎现在的天气如何？”** — 服务器端工具（自动执行）\n- **“我现在处于哪个时区？”** — 客户端工具（由浏览器提供答案）\n- **“计算 5000 乘以 3”** — 需批准的工具（执行前会询问您）\n- **“5 分钟后提醒我休息一下”** — 任务调度\n- **拖放一张图片并问‘这张图里有什么？’** — 视觉功能（图像理解）\n\n## 项目结构\n\n```\nsrc\u002F\n  server.ts    # 包含工具和任务调度的聊天代理\n  app.tsx      # 使用 Kumo 组件构建的聊天 UI\n  client.tsx   # React 入口文件\n  styles.css   # Tailwind + Kumo 样式\n```\n\n## 包含内容\n\n- **AI 聊天** — 通过 `AIChatAgent` 和 Workers AI 提供的流式响应\n- **图像输入** — 支持拖放、粘贴或点击上传图片，适用于具备视觉能力的模型\n- **三种工具模式** — 服务器端自动执行、客户端（浏览器）以及人工审核批准\n- **任务调度** — 支持一次性、延迟执行和周期性任务（Cron）\n- **推理展示** — 在流式响应过程中显示模型思考过程，完成后可折叠\n- **调试模式** — 可在页眉中切换，查看每条消息的原始 JSON 数据\n- **Kumo UI** — Cloudflare 的设计系统，支持深色\u002F浅色模式\n- **实时性** — WebSocket 连接，具备自动重连和消息持久化功能\n\n## 自定义您的应用\n\n### 为项目命名\n\n更新 `package.json` 和 `wrangler.jsonc` 中的 `name` 字段。`wrangler.jsonc` 中的 `name` 将成为您部署的 Worker 的 URL（`\u003Cname>.\u003Csubdomain>.workers.dev`）。\n\n### 修改系统提示语\n\n编辑 `server.ts` 中的 `system` 字符串，为您的代理赋予不同的个性或专注领域。这是您可以做的最具影响力的更改之一。\n\n### 替换示例工具为真实工具\n\n入门模板附带了一些示例工具（`getWeather` 返回随机数据，`calculate` 执行基础算术运算）。您可以将其替换为真实的实现：\n\n```ts\n\u002F\u002F 在 server.ts 中，将示例工具替换为实际的 API 调用：\ngetWeather: tool({\n  description: \"获取某个城市的当前天气\",\n  inputSchema: z.object({ city: z.string() }),\n  execute: async ({ city }) => {\n    const res = await fetch(`https:\u002F\u002Fapi.weather.example\u002F${city}`);\n    return res.json();\n  }\n}),\n```\n\n### 添加您自己的工具\n\n在 `server.ts` 的 `tools` 对象中添加新工具。有三种模式：\n\n```ts\n\u002F\u002F 自动执行：在服务器端运行，无需用户交互\nmyTool: tool({\n  description: \"...\",\n  inputSchema: z.object({ \u002F* ... *\u002F }),\n  execute: async (input) => { \u002F* 返回结果 *\u002F }\n}),\n\n\u002F\u002F 客户端：无执行函数，由浏览器提供结果\n\u002F\u002F 在 `app.tsx` 中通过 `onToolCall` 回调处理\nbrowserTool: tool({\n  description: \"...\",\n  inputSchema: z.object({ \u002F* ... *\u002F })\n}),\n\n\u002F\u002F 需批准：添加 `needsApproval` 来控制执行权限\nsensitiveTool: tool({\n  description: \"...\",\n  inputSchema: z.object({ \u002F* ... *\u002F }),\n  needsApproval: async (input) => true, \u002F\u002F 或者条件逻辑\n  execute: async (input) => { \u002F* 批准后执行 *\u002F }\n}),\n```\n\n### 自定义定时任务行为\n\n当定时任务触发时，`executeTask` 会在服务器端运行。它完成工作后会使用 `this.broadcast()` 通知所有连接的客户端（UI 中会显示为一个弹出通知）。您可以将其替换为自己的逻辑：\n\n```ts\nasync executeTask(description: string, task: Schedule\u003Cstring>) {\n  \u002F\u002F 执行实际工作\n  await sendEmail({ to: \"user@example.com\", subject: description });\n\n  \u002F\u002F 通知连接的客户端\n  this.broadcast(\n    JSON.stringify({ type: \"scheduled-task\", description, timestamp: new Date().toISOString() })\n  );\n}\n```\n\n> **为什么使用 `broadcast()` 而不是 `saveMessages()`？** 如果将消息注入聊天历史，AI 可能会将通知视为新的上下文，从而导致同一任务反复触发。而 `broadcast()` 发送的是单次事件，客户端会将其与对话内容分开显示。\n\n### 移除任务调度功能\n\n如果您不需要任务调度功能，可以移除工具对象中的 `scheduleTask`、`getScheduledTasks` 和 `cancelScheduledTask`，以及 `executeTask` 方法和相关的导入内容（`getSchedulePrompt`、`scheduleSchema`、`Schedule`、`generateId`）。\n\n### 添加聊天消息之外的状态\n\n使用 `this.setState()` 和 `this.state` 来管理实时状态，并将其同步到所有连接的客户端。更多信息请参阅 [存储和同步状态](https:\u002F\u002Fdevelopers.cloudflare.com\u002Fagents\u002Fapi-reference\u002Fstore-and-sync-state\u002F)。\n\n### 添加可调用方法\n\n将代理方法暴露为类型化的 RPC，以便客户端直接调用：\n\n```ts\nimport { callable } from \"agents\";\n\nexport class ChatAgent extends AIChatAgent\u003CEnv> {\n  @callable()\n  async getStats() {\n    return { messageCount: this.messages.length };\n  }\n}\n\n\u002F\u002F 客户端：\nconst stats = await agent.call(\"getStats\");\n```\n\n更多信息请参阅 [可调用方法](https:\u002F\u002Fdevelopers.cloudflare.com\u002Fagents\u002Fapi-reference\u002Fcallable-methods\u002F)。\n\n### 连接到 MCP 服务器\n\n从 MCP 服务器添加外部工具：\n\n```ts\nasync onChatMessage(onFinish, options) {\n  \u002F\u002F 连接到 MCP 服务器\n  await this.mcp.connect(\"https:\u002F\u002Fmy-mcp-server.example\u002Fsse\");\n\n  const result = streamText({\n    \u002F\u002F ...\n    tools: {\n      ...myTools,\n      ...this.mcp.getAITools() \u002F\u002F 包含 MCP 工具\n    }\n  });\n}\n```\n\n更多信息请参阅 [MCP 客户端 API](https:\u002F\u002Fdevelopers.cloudflare.com\u002Fagents\u002Fapi-reference\u002Fmcp-client-api\u002F)。\n\n## 使用其他 AI 模型提供商\n\n入门模板默认使用 [Workers AI](https:\u002F\u002Fdevelopers.cloudflare.com\u002Fworkers-ai\u002F)（无需 API 密钥）。如需使用其他提供商：\n\n### OpenAI\n\n```bash\nnpm install @ai-sdk\u002Fopenai\n```\n\n```ts\n\u002F\u002F 在 server.ts 中替换模型：\nimport { openai } from \"@ai-sdk\u002Fopenai\";\n\n\u002F\u002F 在 onChatMessage 中：\nconst result = streamText({\n  model: openai(\"gpt-5.2\")\n  \u002F\u002F ...\n});\n```\n\n创建一个包含您的 API 密钥的 `.env` 文件：\n\n```\nOPENAI_API_KEY=your-key-here\n```\n\n### Anthropic\n\n```bash\nnpm install @ai-sdk\u002Fanthropic\n```\n\n```ts\nimport { anthropic } from \"@ai-sdk\u002Fanthropic\";\n\nconst result = streamText({\n  model: anthropic(\"claude-sonnet-4-20250514\")\n  \u002F\u002F ...\n});\n```\n\n创建一个包含您的 API 密钥的 `.env` 文件：\n\n```\nANTHROPIC_API_KEY=your-key-here\n```\n\n## 部署\n\n```bash\nnpm run deploy\n```\n\n您的代理现已上线，运行在 Cloudflare 的全球网络上。消息会持久化在 SQLite 中，断线后可恢复流式传输，代理在空闲时会进入休眠状态。\n\n## 了解更多\n\n- [Agents SDK 文档](https:\u002F\u002Fdevelopers.cloudflare.com\u002Fagents\u002F)\n- [构建聊天代理教程](https:\u002F\u002Fdevelopers.cloudflare.com\u002Fagents\u002Fgetting-started\u002Fbuild-a-chat-agent\u002F)\n- [聊天代理 API 参考](https:\u002F\u002Fdevelopers.cloudflare.com\u002Fagents\u002Fapi-reference\u002Fchat-agents\u002F)\n- [Workers AI 模型](https:\u002F\u002Fdevelopers.cloudflare.com\u002Fworkers-ai\u002Fmodels\u002F)\n\n## 许可证\n\nMIT","# agents-starter 快速上手指南\n\n`agents-starter` 是 Cloudflare 官方提供的 AI 聊天智能体启动模板。它基于 **Agents SDK** 构建，默认使用 **Workers AI**（无需 API Key），内置了天气查询、时区检测、需审批的计算、任务调度以及图像识别等多种实用工具示例。\n\n## 环境准备\n\n在开始之前，请确保您的开发环境满足以下要求：\n\n*   **Node.js**: 版本 18.0 或更高（推荐最新 LTS 版本）。\n*   **npm**: Node.js 包管理器（随 Node.js 安装）。\n*   **Cloudflare 账号**: 用于部署（本地开发无需登录，但部署时需要）。\n*   **操作系统**: Windows, macOS 或 Linux 均可。\n\n> **提示**：国内开发者如遇 npm 安装缓慢，可临时切换至国内镜像源：\n> ```bash\n> npm config set registry https:\u002F\u002Fregistry.npmmirror.com\n> ```\n\n## 安装步骤\n\n使用 `npx` 一键创建项目并安装依赖：\n\n```bash\nnpx create-cloudflare@latest --template cloudflare\u002Fagents-starter\ncd agents-starter\nnpm install\n```\n\n## 基本使用\n\n### 1. 启动开发服务器\n\n在项目根目录下运行以下命令启动本地开发环境：\n\n```bash\nnpm run dev\n```\n\n### 2. 访问应用\n\n打开浏览器访问终端中显示的地址（通常为）：\n[http:\u002F\u002Flocalhost:5173](http:\u002F\u002Flocalhost:5173)\n\n### 3. 功能测试\n\n在聊天界面尝试以下指令，体验内置的不同工具模式：\n\n*   **服务端自动执行工具**：\n    > \"What's the weather in Paris?\"\n    > *(查询巴黎天气，自动调用服务端工具)*\n\n*   **客户端工具**：\n    > \"What timezone am I in?\"\n    > *(询问当前时区，由浏览器直接提供信息)*\n\n*   **需人工审批的工具**：\n    > \"Calculate 5000 * 3\"\n    > *(执行计算前会弹出确认框，需用户批准)*\n\n*   **任务调度**：\n    > \"Remind me in 5 minutes to take a break\"\n    > *(设置一个 5 分钟后的提醒任务)*\n\n*   **视觉识别（多模态）**：\n    > 拖拽一张图片到输入框，并提问：\"What's in this image?\"\n    > *(模型将分析图片内容)*\n\n### 4. 自定义与扩展\n\n*   **修改人设**：编辑 `src\u002Fserver.ts` 中的 `system` 字符串，改变智能体的性格或专注领域。\n*   **替换真实工具**：将 `src\u002Fserver.ts` 中的演示工具（如随机天气数据）替换为真实的 API 调用。\n*   **切换模型提供商**：默认使用 Workers AI。如需使用 OpenAI 或 Anthropic，需安装对应 SDK (`@ai-sdk\u002Fopenai` 或 `@ai-sdk\u002Fanthropic`) 并在 `.env` 文件中配置 API Key。\n\n### 5. 部署上线\n\n完成开发和测试后，运行以下命令将智能体部署到 Cloudflare 全球网络：\n\n```bash\nnpm run deploy\n```\n\n部署成功后，您将拥有一个持久化存储消息、支持断线重连且闲置时自动休眠的在线 AI 智能体。","一家初创团队希望快速构建一个能处理天气查询、执行敏感计算并支持定时提醒的智能客服助手，且要求零 API 密钥成本。\n\n### 没有 agents-starter 时\n- **架构搭建繁琐**：开发者需手动配置 WebSocket 长连接、消息持久化及流式响应逻辑，耗时数天才能跑通基础对话。\n- **工具集成困难**：实现“先审批后执行”的敏感操作（如大额计算）需要自行设计前后端交互协议，极易出现安全漏洞。\n- **多端协同复杂**：想让浏览器直接获取用户时区或本地数据，往往需要编写额外的客户端桥接代码，难以与后端 Agent 无缝配合。\n- **运维成本高企**：传统方案依赖外部大模型 API，不仅需管理昂贵的密钥，还面临网络延迟和不稳定的风险。\n\n### 使用 agents-starter 后\n- **即刻启动开发**：通过一条命令即可部署包含实时通信、流式输出和 Kumo UI 的完整应用，将原本数天的基建工作压缩至分钟级。\n- **原生支持人机协作**：利用内置的 `needsApproval` 模式，轻松实现敏感工具调用前的用户确认流程，无需额外编写鉴权逻辑。\n- **灵活的工具编排**：天然支持服务端自动执行、客户端本地获取及人工审批三种模式，让时区检测与图像识别等功能即插即用。\n- **零成本稳定运行**：直接调用 Cloudflare Workers AI，免除 API 密钥管理烦恼，在全球边缘节点上以极低延迟响应用户请求。\n\nagents-starter 将复杂的 AI Agent 全栈开发简化为专注于业务逻辑的创新，让开发者能以最低门槛构建生产级的智能应用。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcloudflare_agents-starter_05d69bc4.png","cloudflare","Cloudflare","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002Fcloudflare_e3c846c2.jpg","",null,"https:\u002F\u002Fwww.cloudflare.com","https:\u002F\u002Fgithub.com\u002Fcloudflare",[80,84,88],{"name":81,"color":82,"percentage":83},"TypeScript","#3178c6",97.7,{"name":85,"color":86,"percentage":87},"HTML","#e34c26",1.6,{"name":89,"color":90,"percentage":91},"CSS","#663399",0.7,1222,253,"2026-04-07T02:16:07","MIT","Linux, macOS, Windows","不需要本地 GPU（基于 Cloudflare Workers AI 云端运行）","未说明（取决于本地开发环境，通常 Node.js 项目需 2GB+）",{"notes":100,"python":101,"dependencies":102},"该项目是基于 Cloudflare Workers 的 Serverless 应用，主要逻辑在云端运行，本地仅需 Node.js 环境进行开发和部署。默认使用 Workers AI 无需 API Key，若切换至 OpenAI 或 Anthropic 则需配置对应 API Key。数据存储使用云端 SQLite，不支持本地离线运行大模型。","不需要 Python（基于 Node.js\u002FTypeScript）",[103,104,105,106,107,108,109,110],"nodejs (隐含要求)","npm","create-cloudflare","@ai-sdk\u002Fopenai (可选)","@ai-sdk\u002Fanthropic (可选)","zod","tailwindcss","react",[15,14,13],[113,114,72,115],"agents","ai","durable-objects","2026-03-27T02:49:30.150509","2026-04-07T14:37:10.990372",[119,124,129,134,139,144],{"id":120,"question_zh":121,"answer_zh":122,"source_url":123},22316,"如何将后端和前端拆分为两个独立的部署？","可以通过以下步骤实现分离部署：\n1. 从 Vite 配置中移除 `cloudflare` 插件，防止 `server.ts` 自动启动。\n2. 运行 `npx wrangler dev --remote` 启动 Worker，它将在 `localhost:8787` 运行。\n3. 更新 Agent 配置指向后端地址：\n```javascript\nconst agent = useAgent({\n    agent: \"chat\",\n    host: \"http:\u002F\u002Flocalhost:8787\",\n});\n```\n4. 运行 `npx vite dev` 启动前端应用（通常在 `localhost:5173`）。\n注意：如果遇到 CORS 问题，可以向 `cors` 选项传递自定义头对象，或者绕过内置标志，围绕 `routeAgentRequest` 实现自己的处理逻辑。","https:\u002F\u002Fgithub.com\u002Fcloudflare\u002Fagents-starter\u002Fissues\u002F27",{"id":125,"question_zh":126,"answer_zh":127,"source_url":128},22317,"如何在项目中添加远程 MCP (Model Context Protocol) 客户端调用示例？","项目已更新以支持远程 MCP。您可以参考相关的 Pull Request 代码来实现。关键步骤包括在 Agent 初始化时创建 `MCPClientManager` 实例，并使用 `.connect()` 方法连接到远程 SSE 端点。如果需要身份验证（例如连接 Atlassian 官方 MCP 时遇到 401 错误），需要在传输选项中提供 `authProvider`。具体的实现细节和完整代码示例可以查看项目中的更新文件或相关 PR 差分代码。","https:\u002F\u002Fgithub.com\u002Fcloudflare\u002Fagents-starter\u002Fissues\u002F58",{"id":130,"question_zh":131,"answer_zh":132,"source_url":133},22318,"部署后的 Agent 无法渲染 AI 响应，但本地测试正常，可能是什么原因？","这通常是由于 Cloudflare Workers 运行在不支持的地区（如 HKG）导致的。错误日志中会出现 `unsupported_country_region_territory` 或 `Country, region, or territory not supported` 的信息。\n排查步骤：\n1. 运行 `npx wrangler tail` 查看服务器日志以确认具体错误。\n2. 尝试切换使用不同的模型提供商，或者使用 Workers AI（参考 README 中关于更换 AI 模型提供商的章节）。\n3. 检查是否可以通过 AI Gateway 作为代理来解决区域限制问题（尽管在某些情况下直接代理可能仍会报错，需确保路由配置正确）。","https:\u002F\u002Fgithub.com\u002Fcloudflare\u002Fagents-starter\u002Fissues\u002F78",{"id":135,"question_zh":136,"answer_zh":137,"source_url":138},22319,"如何在本地开发环境中使用 `workers-ai-provider`？","Starter 模板已更新至最新版本，现在 `workers-ai-provider` 在本地模式（local mode）下应该可以直接正常工作，无需额外配置 `--remote` 标志。\n如果您在使用 `npm run start` 进行本地开发时遇到类似 `wrapped binding module can't be resolved` 的错误，请确保您的项目依赖已更新到最新版。如果问题仍然存在，可能是由于 Vite 插件配置引起的边缘情况，建议检查 `wrangler.toml` 配置或重新安装依赖。","https:\u002F\u002Fgithub.com\u002Fcloudflare\u002Fagents-starter\u002Fissues\u002F25",{"id":140,"question_zh":141,"answer_zh":142,"source_url":143},22320,"为什么不同用户之间会发生对话数据泄露（会话隔离失效）？","这是一个严重的会话隔离配置错误。如果发现不同设备或不同用户能看到彼此的对话内容，说明代码中的会话隔离逻辑（session isolation）实现有误。\n解决方案：\n1. 检查 Agent 的状态存储机制，确保每个用户会话拥有独立的存储空间（例如基于 User ID 或 Session Token 隔离 Durable Object 或 KV 存储）。\n2. 审查代码中全局变量的使用，避免在多用户共享的 Worker 实例中污染状态。\n3. 参考项目最新的修复提交，确保正确实施了基于上下文的隔离策略。此问题修复前不适合用于生产环境。","https:\u002F\u002Fgithub.com\u002Fcloudflare\u002Fagents-starter\u002Fissues\u002F96",{"id":145,"question_zh":146,"answer_zh":147,"source_url":148},22321,"用户界面中是否支持停止正在生成的 AI 流式响应？","是的，该功能已在 `agents-sdk` 内部实现，但最初的 starter 模板未包含对应的前端 UI 按钮。\n解决方法：\n1. 确保您的 `agents-sdk` 版本是最新的。\n2. 在前端组件中添加一个“停止”按钮，绑定到 SDK 提供的停止流式传输的方法上。\n3. 参考项目最近的 Pull Request，其中包含了添加此 UI 功能的具体代码实现，通常涉及监听 `isLoading` 状态并调用中断接口。","https:\u002F\u002Fgithub.com\u002Fcloudflare\u002Fagents-starter\u002Fissues\u002F69",[]]