[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-charmbracelet--fantasy":3,"tool-charmbracelet--fantasy":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 真正成长为懂上",146793,2,"2026-04-08T23:32:35",[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 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",108111,"2026-04-08T11:23:26",[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":77,"owner_twitter":78,"owner_website":79,"owner_url":80,"languages":81,"stars":90,"forks":91,"last_commit_at":92,"license":93,"difficulty_score":32,"env_os":94,"env_gpu":95,"env_ram":95,"env_deps":96,"category_tags":103,"github_topics":76,"view_count":32,"oss_zip_url":76,"oss_zip_packed_at":76,"status":17,"created_at":104,"updated_at":105,"faqs":106,"releases":137},5725,"charmbracelet\u002Ffantasy","fantasy","Build AI agents with Go. Multiple providers, multiple models, one API. 🧙","Fantasy 是一款专为 Go 语言开发者打造的 AI 智能体构建框架。它致力于解决开发过程中面临的模型与服务商碎片化难题，通过统一的 API 接口，让开发者能够轻松接入 OpenRouter、Azure、Bedrock 等多种主流提供商及各类大模型，无需为不同平台编写重复的适配代码。\n\n使用 Fantasy，开发者只需三步即可创建功能强大的 AI 应用：选择心仪的模型与服务商、定义自定义工具（如查询实时数据或执行特定任务）、编译为高效的本地机器码运行。其独特的技术亮点在于极致的简洁性与高性能，不仅支持通用的 OpenAI 兼容层以覆盖更多模型，还能将智能体直接编译为原生二进制文件，便于部署和分发。\n\n目前，Fantasy 正处于快速迭代阶段，已广泛应用于 Charm 团队自家的 Crush 编码助手项目中。虽然暂时专注于文本交互场景（尚未支持图像、音频或多模态输入），但其架构开放，欢迎社区贡献扩展。如果你是一名熟悉 Go 语言的工程师或技术爱好者，希望以最低成本探索 AI 智能体的无限可能，Fantasy 将是你值得信赖的得力助手。","# Fantasy\n\n\u003Cp>\n  \u003Cimg width=\"475\" alt=\"The Charm Fantasy logo\" src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcharmbracelet_fantasy_readme_795f82b17204.png\" \u002F>\u003Cbr>\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fcharmbracelet\u002Ffantasy\u002Freleases\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Frelease\u002Fcharmbracelet\u002Ffantasy.svg\" alt=\"Latest Release\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fpkg.go.dev\u002Fcharm.land\u002Ffantasy?tab=doc\">\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcharmbracelet_fantasy_readme_ff803135673c.png\" alt=\"GoDoc\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fcharmbracelet\u002Ffantasy\u002Factions\">\u003Cimg src=\"https:\u002F\u002Fgithub.com\u002Fcharmbracelet\u002Ffantasy\u002Factions\u002Fworkflows\u002Fbuild.yml\u002Fbadge.svg?branch=main\" alt=\"Build Status\">\u003C\u002Fa>\n\u003C\u002Fp>\n\nBuild AI agents with Go. Multi-provider, multi-model, one API.\n\n1. Choose a model and provider\n2. Add some tools\n3. Compile to native machine code and let it rip\n\n\n```go\nimport \"charm.land\u002Ffantasy\"\nimport \"charm.land\u002Ffantasy\u002Fproviders\u002Fopenrouter\"\n\n\u002F\u002F Choose your fave provider.\nprovider, err := openrouter.New(openrouter.WithAPIKey(myHotKey))\nif err != nil {\n\tfmt.Fprintln(os.Stderr, \"Whoops:\", err)\n\tos.Exit(1)\n}\n\nctx := context.Background()\n\n\u002F\u002F Pick your fave model.\nmodel, err := provider.LanguageModel(ctx, \"moonshotai\u002Fkimi-k2\")\nif err != nil {\n\tfmt.Fprintln(os.Stderr, \"Dang:\", err)\n\tos.Exit(1)\n}\n\n\u002F\u002F Make your own tools.\ncuteDogTool := fantasy.NewAgentTool(\n  \"cute_dog_tool\",\n  \"Provide up-to-date info on cute dogs.\",\n  fetchCuteDogInfoFunc,\n)\n\n\u002F\u002F Equip your agent.\nagent := fantasy.NewAgent(\n  model,\n  fantasy.WithSystemPrompt(\"You are a moderately helpful, dog-centric assistant.\"),\n  fantasy.WithTools(cuteDogTool),\n)\n\n\u002F\u002F Put that agent to work!\nconst prompt = \"Find all the cute dogs in Silver Lake, Los Angeles.\"\nresult, err := agent.Generate(ctx, fantasy.AgentCall{Prompt: prompt})\nif err != nil {\n    fmt.Fprintln(os.Stderr, \"Oof:\", err)\n    os.Exit(1)\n}\nfmt.Println(result.Response.Content.Text())\n```\n\n🍔 For the full implementation and more [see the examples directory](https:\u002F\u002Fgithub.com\u002Fcharmbracelet\u002Ffantasy\u002Ftree\u002Fmain\u002Fexamples).\n\n## Multi-model? Multi-provider?\n\nYeah! Fantasy is designed to support a wide variety of providers and models under a single API. While many providers such as Microsoft Azure, Amazon Bedrock, and OpenRouter have dedicated packages in Fantasy, many others work just fine with `openaicompat`, the generic OpenAI-compatible layer. That said, if you find a provider that’s not compatible and needs special treatment, please let us know in an issue (or open a PR).\n\n## Work in Progress\n\nWe built Fantasy to power [Crush](https:\u002F\u002Fgithub.com\u002Fcharmbracelet\u002Fcrush), a hot coding agent for glamourously invincible development. Given that, Fantasy does not yet support things like:\n\n- Image models\n- Audio models\n- PDF uploads\n\nFor things you’d like to see supported, PRs are welcome.\n\n## Whatcha think?\n\nWe’d love to hear your thoughts on this project. Need help? We gotchu. You can find us on:\n\n- [Slack](https:\u002F\u002Fcharm.land\u002Fslack)\n- [Discord][discord]\n- [Twitter](https:\u002F\u002Ftwitter.com\u002Fcharmcli)\n- [The Fediverse](https:\u002F\u002Fmastodon.social\u002F@charmcli)\n- [Bluesky](https:\u002F\u002Fbsky.app\u002Fprofile\u002Fcharm.land)\n\n[discord]: https:\u002F\u002Fcharm.land\u002Fdiscord\n\n---\n\nPart of [Charm](https:\u002F\u002Fcharm.land).\n\n\u003Ca href=\"https:\u002F\u002Fcharm.land\u002F\">\u003Cimg alt=\"The Charm logo\" src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcharmbracelet_fantasy_readme_0d1db2709def.jpg\" width=\"400\">\u003C\u002Fa>\n\nCharm热爱开源 • Charm loves open source\n","# 幻想\n\n\u003Cp>\n  \u003Cimg width=\"475\" alt=\"The Charm Fantasy logo\" src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcharmbracelet_fantasy_readme_795f82b17204.png\" \u002F>\u003Cbr>\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fcharmbracelet\u002Ffantasy\u002Freleases\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Frelease\u002Fcharmbracelet\u002Ffantasy.svg\" alt=\"最新版本\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fpkg.go.dev\u002Fcharm.land\u002Ffantasy?tab=doc\">\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcharmbracelet_fantasy_readme_ff803135673c.png\" alt=\"GoDoc\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fcharmbracelet\u002Ffantasy\u002Factions\">\u003Cimg src=\"https:\u002F\u002Fgithub.com\u002Fcharmbracelet\u002Ffantasy\u002Factions\u002Fworkflows\u002Fbuild.yml\u002Fbadge.svg?branch=main\" alt=\"构建状态\">\u003C\u002Fa>\n\u003C\u002Fp>\n\n用 Go 构建 AI 助手。多提供商、多模型，一个 API。\n\n1. 选择模型和提供商\n2. 添加一些工具\n3. 编译为原生机器码，尽情发挥\n\n\n```go\nimport \"charm.land\u002Ffantasy\"\nimport \"charm.land\u002Ffantasy\u002Fproviders\u002Fopenrouter\"\n\n\u002F\u002F 选择你最喜欢的提供商。\nprovider, err := openrouter.New(openrouter.WithAPIKey(myHotKey))\nif err != nil {\n\tfmt.Fprintln(os.Stderr, \"哎呀:\", err)\n\tos.Exit(1)\n}\n\nctx := context.Background()\n\n\u002F\u002F 挑选你喜欢的模型。\nmodel, err := provider.LanguageModel(ctx, \"moonshotai\u002Fkimi-k2\")\nif err != nil {\n\tfmt.Fprintln(os.Stderr, \"糟糕:\", err)\n\tos.Exit(1)\n}\n\n\u002F\u002F 制作属于你自己的工具。\ncuteDogTool := fantasy.NewAgentTool(\n  \"cute_dog_tool\",\n  \"提供关于可爱狗狗的最新信息。\",\n  fetchCuteDogInfoFunc,\n)\n\n\u002F\u002F 为你的助手配备工具。\nagent := fantasy.NewAgent(\n  model,\n  fantasy.WithSystemPrompt(\"你是一个适度有帮助、以狗狗为中心的助手。\"),\n  fantasy.WithTools(cuteDogTool),\n)\n\n\u002F\u002F 让这个助手开始工作吧！\nconst prompt = \"找出洛杉矶银湖地区所有可爱的狗狗。\"\nresult, err := agent.Generate(ctx, fantasy.AgentCall{Prompt: prompt})\nif err != nil {\n    fmt.Fprintln(os.Stderr, \"哎呦:\", err)\n    os.Exit(1)\n}\nfmt.Println(result.Response.Content.Text())\n```\n\n🍔 完整实现及更多内容，请参阅 [examples 目录](https:\u002F\u002Fgithub.com\u002Fcharmbracelet\u002Ffantasy\u002Ftree\u002Fmain\u002Fexamples)。\n\n## 多模型？多提供商？\n\n是的！Fantasy 的设计宗旨就是在单一 API 下支持各种各样的提供商和模型。虽然许多提供商，如 Microsoft Azure、Amazon Bedrock 和 OpenRouter，在 Fantasy 中都有专门的包，但其他许多提供商也可以通过 `openaicompat`——这个通用的 OpenAI 兼容层——很好地工作。当然，如果你发现某个不兼容且需要特殊处理的提供商，请在 issue 中告诉我们（或者直接提交 PR）。\n\n## 正在开发中\n\n我们构建 Fantasy 是为了驱动 [Crush](https:\u002F\u002Fgithub.com\u002Fcharmbracelet\u002Fcrush)，这是一个用于华丽无敌开发的热门编码助手。因此，Fantasy 目前还不支持以下功能：\n\n- 图像模型\n- 音频模型\n- PDF 上传\n\n如果你希望看到这些功能被支持，欢迎提交 PR。\n\n## 你怎么看？\n\n我们非常期待听到你对这个项目的看法。需要帮助吗？我们随时为你效劳。你可以在以下地方找到我们：\n\n- [Slack](https:\u002F\u002Fcharm.land\u002Fslack)\n- [Discord][discord]\n- [Twitter](https:\u002F\u002Ftwitter.com\u002Fcharmcli)\n- [Fediverse](https:\u002F\u002Fmastodon.social\u002F@charmcli)\n- [Bluesky](https:\u002F\u002Fbsky.app\u002Fprofile\u002Fcharm.land)\n\n[discord]: https:\u002F\u002Fcharm.land\u002Fdiscord\n\n---\n\nCharm 的一部分 [Charm](https:\u002F\u002Fcharm.land)。\n\n\u003Ca href=\"https:\u002F\u002Fcharm.land\u002F\">\u003Cimg alt=\"The Charm logo\" src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcharmbracelet_fantasy_readme_0d1db2709def.jpg\" width=\"400\">\u003C\u002Fa>\n\nCharm 热爱开源 • Charm loves open source","# Fantasy 快速上手指南\n\nFantasy 是一个基于 Go 语言构建 AI 智能体（Agent）的开源库。它支持多模型、多提供商，并通过统一的 API 接口让开发者能够轻松编译为原生机器代码运行。\n\n## 环境准备\n\n- **操作系统**：Linux, macOS, Windows\n- **Go 版本**：建议安装 Go 1.21 或更高版本\n- **依赖项**：\n  - 有效的 AI 模型提供商 API Key（如 OpenRouter, Azure, AWS Bedrock 等）\n  - 网络连接（用于调用大模型接口）\n\n确保已正确配置 Go 环境变量（`GOPATH`, `GOBIN` 等）。\n\n## 安装步骤\n\n在您的 Go 项目目录中，使用 `go get` 命令安装 Fantasy 及其依赖：\n\n```bash\ngo get charm.land\u002Ffantasy\ngo get charm.land\u002Ffantasy\u002Fproviders\u002Fopenrouter\n```\n\n> **提示**：如果访问 `charm.land` 速度较慢，可尝试配置 Go 代理加速：\n> ```bash\n> export GOPROXY=https:\u002F\u002Fgoproxy.cn,direct\n> ```\n\n## 基本使用\n\n以下是最小化的使用示例，展示如何创建一个基于 OpenRouter 的 AI 智能体并执行任务。\n\n1. **导入包并初始化提供商**\n\n```go\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"os\"\n\n\t\"charm.land\u002Ffantasy\"\n\t\"charm.land\u002Ffantasy\u002Fproviders\u002Fopenrouter\"\n)\n\nfunc main() {\n\t\u002F\u002F 替换为您的实际 API Key\n\tmyHotKey := \"YOUR_API_KEY_HERE\"\n\n\t\u002F\u002F 选择提供商 (以 OpenRouter 为例)\n\tprovider, err := openrouter.New(openrouter.WithAPIKey(myHotKey))\n\tif err != nil {\n\t\tfmt.Fprintln(os.Stderr, \"Whoops:\", err)\n\t\tos.Exit(1)\n\t}\n\n\tctx := context.Background()\n\n\t\u002F\u002F 选择模型 (例如 moonshotai\u002Fkimi-k2)\n\tmodel, err := provider.LanguageModel(ctx, \"moonshotai\u002Fkimi-k2\")\n\tif err != nil {\n\t\tfmt.Fprintln(os.Stderr, \"Dang:\", err)\n\t\tos.Exit(1)\n\t}\n\n\t\u002F\u002F 定义自定义工具 (可选)\n\tcuteDogTool := fantasy.NewAgentTool(\n\t\t\"cute_dog_tool\",\n\t\t\"Provide up-to-date info on cute dogs.\",\n\t\tfetchCuteDogInfoFunc, \u002F\u002F 需自行实现此函数\n\t)\n\n\t\u002F\u002F 创建智能体\n\tagent := fantasy.NewAgent(\n\t\tmodel,\n\t\tfantasy.WithSystemPrompt(\"You are a moderately helpful, dog-centric assistant.\"),\n\t\tfantasy.WithTools(cuteDogTool),\n\t)\n\n\t\u002F\u002F 执行任务\n\tconst prompt = \"Find all the cute dogs in Silver Lake, Los Angeles.\"\n\tresult, err := agent.Generate(ctx, fantasy.AgentCall{Prompt: prompt})\n\tif err != nil {\n\t\tfmt.Fprintln(os.Stderr, \"Oof:\", err)\n\t\tos.Exit(1)\n\t}\n\n\tfmt.Println(result.Response.Content.Text())\n}\n```\n\n2. **运行程序**\n\n保存代码为 `main.go`，然后运行：\n\n```bash\ngo run main.go\n```\n\n3. **编译为原生二进制文件**\n\nFantasy 支持直接编译为高性能的原生可执行文件：\n\n```bash\ngo build -o my-agent main.go\n.\u002Fmy-agent\n```\n\n---\n\n更多高级用法和完整示例请参考官方仓库的 [examples 目录](https:\u002F\u002Fgithub.com\u002Fcharmbracelet\u002Ffantasy\u002Ftree\u002Fmain\u002Fexamples)。","某 Go 语言后端团队需要为内部运维系统快速构建一个能调用多个 API（如查询服务器状态、重启服务）的智能诊断助手。\n\n### 没有 fantasy 时\n- **厂商锁定严重**：每次切换大模型供应商（如从 OpenAI 切到 Azure），都需要重写大量底层 HTTP 请求和鉴权代码。\n- **工具集成繁琐**：为 Agent 添加自定义功能（如“重启服务”）时，需手动处理复杂的函数定义、参数解析和错误回调逻辑。\n- **多模型测试困难**：想要对比不同模型（如 Kimi vs Llama 3）在特定任务上的表现，必须维护多套并行的代码分支。\n- **部署依赖沉重**：运行 AI 逻辑通常依赖庞大的 Python 环境或容器，增加了运维系统的资源负担和启动时间。\n\n### 使用 fantasy 后\n- **统一接口屏蔽差异**：通过 fantasy 的标准 API，只需修改一行配置即可无缝切换 Moonshot、OpenRouter 等不同供应商的模型。\n- **原生工具封装简洁**：利用 `NewAgentTool` 几行代码即可将现有的 Go 函数注册为 Agent 技能，自动处理参数映射与执行流程。\n- **灵活切换验证效果**：在同一套代码结构中轻松替换模型名称，即时对比不同模型在运维指令理解上的准确率。\n- **编译为单一二进制**：借助 Go 的特性，将整个 AI 代理编译为无依赖的原生机器码，直接嵌入现有微服务中高效运行。\n\nfantasy 让 Go 开发者能用最熟悉的语言和最轻量的方式，构建出支持多模型、具备复杂工具调用能力的生产级 AI 代理。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcharmbracelet_fantasy_b9def2a2.png","charmbracelet","Charm","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002Fcharmbracelet_73283d31.png","We make the command line glamorous.",null,"vt100@charm.land","charmcli","https:\u002F\u002Fcharm.land\u002F","https:\u002F\u002Fgithub.com\u002Fcharmbracelet",[82,86],{"name":83,"color":84,"percentage":85},"Go","#00ADD8",100,{"name":87,"color":88,"percentage":89},"Shell","#89e051",0,700,75,"2026-04-06T19:36:47","Apache-2.0","Linux, macOS, Windows","未说明",{"notes":97,"python":98,"dependencies":99},"该工具是基于 Go 语言开发的 AI 代理构建库，编译后生成原生机器码运行。不支持图像、音频模型及 PDF 上传功能。通过 'openaicompat' 层兼容大多数 OpenAI 接口提供商。","不适用 (基于 Go 语言)",[100,101,102],"Go (最新稳定版)","charm.land\u002Ffantasy","各 AI 提供商 SDK (如 openrouter)",[35,14,13],"2026-03-27T02:49:30.150509","2026-04-09T09:31:17.687066",[107,112,117,122,127,132],{"id":108,"question_zh":109,"answer_zh":110,"source_url":111},25955,"Fantasy 是否支持使用 yzma 进行本地推理？","是的，项目已添加了对 Kronk 的支持，其底层使用 Yzma 进行本地推理。该功能目前处于实验阶段，欢迎提供反馈。相关实现见 PR #142。此外，也可以通过 OpenAPI 兼容提供者使用 Ollama 或 llama.cpp server（参考 PR #92）。","https:\u002F\u002Fgithub.com\u002Fcharmbracelet\u002Ffantasy\u002Fissues\u002F52",{"id":113,"question_zh":114,"answer_zh":115,"source_url":116},25956,"项目依赖的 json-repair 库是 GPL3 许可证，这与项目的 Apache-2.0 许可证冲突怎么办？","维护者已意识到该许可证冲突问题，并提出了解决方案（见 PR #132）。该修复已在 v0.8.0 版本中合并并发布，升级到此版本即可解决商业项目中的许可证合规问题。","https:\u002F\u002Fgithub.com\u002Fcharmbracelet\u002Ffantasy\u002Fissues\u002F134",{"id":118,"question_zh":119,"answer_zh":120,"source_url":121},25957,"使用 Google Gemini 模型（特别是通过 OpenRouter）时遇到 'missing thought_signature' 错误如何解决？","此问题已在 v0.3.2 版本中通过 PR #82 修复。根本原因是 Gemini 模型不支持 OpenRouter API 使用的 `role: \"tool\"` 消息格式（Gemini 原生 API 期望工具结果使用 `role: \"user\"`）。修复方案增加了一个兼容层，自动检测 Gemini 模型并将 `role: \"tool\"` 转换为 `role: \"user\"`，从而确保多轮工具调用正常工作。","https:\u002F\u002Fgithub.com\u002Fcharmbracelet\u002Ffantasy\u002Fissues\u002F80",{"id":123,"question_zh":124,"answer_zh":125,"source_url":126},25958,"使用 GLM-4.5-FLASH 模型时程序中途崩溃（Panic）怎么办？","这是由 Fantasy 使用的旧版 openai-go 模块引起的已知问题。该问题在新版本的 openai-go 中已修复（参见 commit b3957b2）。请等待或应用包含此更新的 PR #168，升级依赖后即可解决崩溃问题。","https:\u002F\u002Fgithub.com\u002Fcharmbracelet\u002Ffantasy\u002Fissues\u002F154",{"id":128,"question_zh":129,"answer_zh":130,"source_url":131},25959,"定义工具参数时，数组类型（如 []string）生成的 JSON Schema 中 items 属性为空对象 {} 导致验证失败，如何解决？","这是一个已知的 Schema 生成缺陷，发生在 `schemaToParameters` 函数处理原始类型的数组项时。该问题会导致严格验证器（如 Llama API 兼容端点）报错。虽然 Issue 中讨论了复现步骤和根本原因，但建议检查是否有针对 `tool.go` 的相关修复 PR（如类似 PR #50 的修复逻辑），或者暂时避免在严格模式下对包含数组参数的工具进行调用，直到官方修复发布。","https:\u002F\u002Fgithub.com\u002Fcharmbracelet\u002Ffantasy\u002Fissues\u002F65",{"id":133,"question_zh":134,"answer_zh":135,"source_url":136},25960,"在 Anthropic 提供者中设置 ToolChoiceNone 时，为什么模型仍然会调用工具？","这是一个 Bug。当设置 `ToolChoiceNone` 时，代码错误地返回了 `nil` 而不是构建 `{type: \"none\"}` 的参数，导致 API 请求中缺少 `tool_choice` 字段，Anthropic API 因此默认回退到 `auto` 模式。需要等待官方修复该逻辑，确保正确发送 `tool_choice: {type: \"none\"}` 以禁止模型自动调用工具。","https:\u002F\u002Fgithub.com\u002Fcharmbracelet\u002Ffantasy\u002Fissues\u002F177",[138,143,148,153,158,163,168,173,178,183,188,193,198,203,208,213,218,223,228,233],{"id":139,"version":140,"summary_zh":141,"released_at":142},163322,"v0.17.1","# OpenAI 及兼容提供商修复\n\n此版本包含针对 OpenAI 及其兼容提供商的几项修复。\n\n为 OpenAI 流式传输补充了一些缺失的功能。\n\n我们还添加了推理力度级别（无、最低、极高）的一些缺失常量，并确保这些级别能够被正确识别和应用。\n\n## 更改日志\n### 其他内容\n* 46203291560960562ccfc341098d0564fc895e31：修复(providers\u002Fopenai)：为 Responses API 流式注释发出源部分 (#187) (@kylecarbs)\n* d13521ab698a2f28f58f123d0cd424855b8dab33：杂项(openai)：添加某些思考力度级别的缺失常量及检查 (#86) (@ibetitsmike 和 @andreynering)\n\n---\n\n\u003Ca href=\"https:\u002F\u002Fcharm.land\u002F\">\u003Cimg alt=\"The Charm 标志\" src=\"https:\u002F\u002Fstuff.charm.sh\u002Fcharm-banner-next.jpg\" width=\"400\">\u003C\u002Fa>\n\n有什么想法或问题吗？我们非常乐意听取您的意见。欢迎通过 [X](https:\u002F\u002Fx.com\u002Fcharmcli)、[Discord](https:\u002F\u002Fcharm.land\u002Fdiscord)、[Slack](https:\u002F\u002Fcharm.land\u002Fslack)、[Fediverse](https:\u002F\u002Fmastodon.social\u002F@charmcli) 或 [Bluesky](https:\u002F\u002Fbsky.app\u002Fprofile\u002Fcharm.land) 与我们联系。\n\n","2026-03-25T13:50:23",{"id":144,"version":145,"summary_zh":146,"released_at":147},163323,"v0.17.0","# Anthropic 计算机使用\n\nFantasy 现在支持 [Anthropic 计算机使用](https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fagents-and-tools\u002Ftool-use\u002Fcomputer-use-tool)，这要感谢来自 @coder 的朋友 @hugodutka 的贡献。\n\n想看看它是如何工作的吗？请查看[这个示例](https:\u002F\u002Fgithub.com\u002Fcharmbracelet\u002Ffantasy\u002Fblob\u002Fmain\u002Fexamples\u002Fcomputer-use\u002Fmain.go)。\n\n## 更改日志\n### 新增！\n* 0cab8bfed4df7148dcbb0ed01c02208b401abea5：功能：anthropic 计算机使用 (#185) (@hugodutka)\n\n---\n\n\u003Ca href=\"https:\u002F\u002Fcharm.land\u002F\">\u003Cimg alt=\"The Charm 标志\" src=\"https:\u002F\u002Fstuff.charm.sh\u002Fcharm-banner-next.jpg\" width=\"400\">\u003C\u002Fa>\n\n有什么想法或问题吗？我们非常乐意听取您的意见。欢迎通过 [X](https:\u002F\u002Fx.com\u002Fcharmcli)、[Discord](https:\u002F\u002Fcharm.land\u002Fdiscord)、[Slack](https:\u002F\u002Fcharm.land\u002Fslack)、[Fediverse](https:\u002F\u002Fmastodon.social\u002F@charmcli) 或 [Bluesky](https:\u002F\u002Fbsky.app\u002Fprofile\u002Fcharm.land) 联系我们。\n\n","2026-03-24T20:44:11",{"id":149,"version":150,"summary_zh":151,"released_at":152},163324,"v0.16.0","# 周五补丁\n\n大家好。这里列出了一些小改动：\n\n* 新增了 `bedrock.WithBaseURL`\n* 修复了在使用 `store: false`（默认值）时，与 OpenAI 思考回放相关的错误\n* 修复了 GitHub Copilot 中工具调用的问题\n* 提升了与 Ollama 工具调用的兼容性\n\n## 更改日志\n### 新功能！\n* 277f9fb3ed4bfed5bbdfa7f6ea583445360998d2：特性 (bedrock)：添加 WithBaseURL 选项 (@aleksclark)\n### 修复\n* 8924b0162bf2e2a2b0665a98df0759786f4a011f：修复 (bedrock)：在 bedrock.WithConfig 之后应用基础 URL 覆盖 (@aleksclark)\n* aa7e82f3c5d29efe53dc10370bf2db4f63e838fe：修复 (bedrock)：在使用 bedrock 时，不要将 baseURL 默认设置为 Anthropic API (@aleksclark)\n* a5bee4098e45afe037a23bd1287f99772b7b44ea：修复 (openai)：放宽工具调用验证以兼容 Ollama (#113) (@Gustave-241021)\n* 238e34d3113a4b2cb4f8b72c09c46dbe42fd295f：修复：解决 Copilot 中带有空参数的工具调用问题 (#156) (@mavaa)\n### 其他内容\n* ee77281d17c458af3a7bc9c845be6960a753ba0a：修复 (providers\u002Fopenai)：跳过临时回放项 (@ibetitsmike)\n* 236fedf6bba796a217a5d2a5613e4e8ae8f4b53f：修复 (providertests\u002Ftestdata)：更新思考场景的示例数据 (@ibetitsmike)\n\n---\n\n\u003Ca href=\"https:\u002F\u002Fcharm.land\u002F\">\u003Cimg alt=\"The Charm 标志\" src=\"https:\u002F\u002Fstuff.charm.sh\u002Fcharm-banner-next.jpg\" width=\"400\">\u003C\u002Fa>\n\n有什么想法或问题吗？我们非常乐意倾听您的声音。欢迎通过 [X](https:\u002F\u002Fx.com\u002Fcharmcli)、[Discord](https:\u002F\u002Fcharm.land\u002Fdiscord)、[Slack](https:\u002F\u002Fcharm.land\u002Fslack)、[Fediverse](https:\u002F\u002Fmastodon.social\u002F@charmcli) 或 [Bluesky](https:\u002F\u002Fbsky.app\u002Fprofile\u002Fcharm.land) 与我们联系。","2026-03-20T20:01:49",{"id":154,"version":155,"summary_zh":156,"released_at":157},163325,"v0.15.1","# 修复\n\n昨天发布了一个针对 `store: true` 选项的修复。现在你可以放心使用它，不会再出现错误了。感谢 @kylecarbs！\n\n此外，由于对 SSE 事件的修复，我们现在使用 OpenAI SDK 的内部分支。更多信息请参阅 [此 PR](https:\u002F\u002Fgithub.com\u002Fopenai\u002Fopenai-go\u002Fpull\u002F621)。希望该修复能尽快合入上游，这样我们就可以再次直接使用上游版本。目前已知受影响的服务提供商包括：Avian 和 OpenRouter（当使用自定义 `User-Agent` 头时）。\n\n## 更改日志\n### 修复\n* dff62fadc1831c5cf13e3c05aafa8040a6bcacf6：修复 (openai)：在 Responses API 回放中跳过推理项 (#181) (@kylecarbs)\n* 6bb474f6bf4de7f5d6b868dffec729aef6c32dc9：修复：将 openai SDK 迁移到我们的内部分支 (@andreynering)\n\n### 其他内容\n* c3f0da5c095b3809ff083bbb996ffdc0f64bf7d6：测试 (openrouter)：简化待测试的服务提供商和模型列表 (@andreynering)\n\n---\n\n\u003Ca href=\"https:\u002F\u002Fcharm.land\u002F\">\u003Cimg alt=\"The Charm 标志\" src=\"https:\u002F\u002Fstuff.charm.sh\u002Fcharm-banner-next.jpg\" width=\"400\">\u003C\u002Fa>\n\n有什么想法或问题吗？我们非常乐意倾听您的声音。欢迎通过 [X](https:\u002F\u002Fx.com\u002Fcharmcli)、[Discord](https:\u002F\u002Fcharm.land\u002Fdiscord)、[Slack](https:\u002F\u002Fcharm.land\u002Fslack)、[Fediverse](https:\u002F\u002Fmastodon.social\u002F@charmcli) 或 [Bluesky](https:\u002F\u002Fbsky.app\u002Fprofile\u002Fcharm.land) 联系我们。\n\n","2026-03-19T18:53:43",{"id":159,"version":160,"summary_zh":161,"released_at":162},163326,"v0.15.0","## 更改日志\n### 新增！\n* f910b4ccd720e76769683da0354c22619af0edfb: 功能(代理): 允许在存在消息时使用空提示 (#179) (@andreynering)\n* 09d2b743f26656d19fefb17b26c5da3dc46a1b12: 功能: 支持 `text\u002F*` 文件 (#100) (@caarlos0)\n### 修复\n* d749d13e404a9a88096261b5817084ebab7ddeee: 修复(Anthropic): ToolChoiceNone 应向 API 发送 tool_choice:{type:\"none\"} (#178) (@andreynering)\n* 1568c97b199d44dc6794f3ce7ba0e82caf4310ec: 修复(Anthropic): 使用 Vertex 的 Anthropic 可以配合服务账号的 JSON 密钥工作 (#157) (@Cali0707)\n### 其他内容\n* d120cc3b2465f228fcc0d71ccf94886c8dab2d46: v0.15.0 (@andreynering)\n\n---\n\n\u003Ca href=\"https:\u002F\u002Fcharm.land\u002F\">\u003Cimg alt=\"The Charm 标志\" src=\"https:\u002F\u002Fstuff.charm.sh\u002Fcharm-banner-next.jpg\" width=\"400\">\u003C\u002Fa>\n\n有什么想法或问题吗？我们非常乐意听取您的意见。欢迎通过 [X](https:\u002F\u002Fx.com\u002Fcharmcli)、[Discord](https:\u002F\u002Fcharm.land\u002Fdiscord)、[Slack](https:\u002F\u002Fcharm.land\u002Fslack)、[Fediverse](https:\u002F\u002Fmastodon.social\u002F@charmcli) 或 [Bluesky](https:\u002F\u002Fbsky.app\u002Fprofile\u002Fcharm.land) 联系我们。\n\n","2026-03-18T20:11:03",{"id":164,"version":165,"summary_zh":166,"released_at":167},163327,"v0.14.0","# 更完善的 OpenAI 提示词缓存 + 修复了 token 统计问题\n\n本次发布针对 OpenAI 进行了两项改进：\n\n## 更完善的提示词缓存\n\n此版本新增对 OpenAI Responses API 中 `store: true` 和 `previous_response_id` 字段的完整支持。通过该设置，您可以要求 OpenAI 在对话进行时将其存储起来，并在下一次请求中通过传递 `previous_response_id` 继续对话。这样一来，代理的响应速度会更快，同时也能减少 token 的使用量。\n\n更多相关信息请参阅以下链接：\n\n* https:\u002F\u002Fdevelopers.openai.com\u002Fcookbook\u002Fexamples\u002Fprompt_caching_201\n* https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fmigrate-to-responses\n\n## 修复 OpenAI 的 token 统计问题\n\n我们修复了 `usage.InputTokens` 字段值高于预期的问题。现在需要从该值中减去已缓存的 token 数量，自本版本起，这一数值将更加准确。\n\n继续天马行空吧 👻\nCharm\n\n## 变更日志\n### 新增！\n* 0c8663fa4424aed206f22ae632040e03dc1285b9：特性（openai）：添加 Responses API 的 `store`、`previous_response_id` 和 `response.id` 支持 (#175) (@ibetitsmike)\n### 修复\n* 22c3e9a48325899ac97d845d1dfe4c65dec61438：修复（openai）：从输入 token 中减去缓存的 token，以避免重复计算 (#176) (@andreynering)\n\n---\n\n\u003Ca href=\"https:\u002F\u002Fcharm.land\u002F\">\u003Cimg alt=\"The Charm logo\" src=\"https:\u002F\u002Fstuff.charm.sh\u002Fcharm-banner-next.jpg\" width=\"400\">\u003C\u002Fa>\n\n有什么想法或问题吗？我们非常期待您的反馈。欢迎通过 [X](https:\u002F\u002Fx.com\u002Fcharmcli)、[Discord](https:\u002F\u002Fcharm.land\u002Fdiscord)、[Slack](https:\u002F\u002Fcharm.land\u002Fslack)、[Fediverse](https:\u002F\u002Fmastodon.social\u002F@charmcli) 或 [Bluesky](https:\u002F\u002Fbsky.app\u002Fprofile\u002Fcharm.land) 联系我们。\n\n","2026-03-18T16:28:37",{"id":169,"version":170,"summary_zh":171,"released_at":172},163328,"v0.13.1","# GPT-5.4 Mini 和 GPT-5.4 Nano 支持\n\n本次发布新增了对今天刚推出的两款 OpenAI 模型的支持：\n\n* [GPT-5.4 Mini](https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fmodels\u002Fgpt-5.4-mini)\n* [GPT-5.4 Nano](https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fmodels\u002Fgpt-5.4-nano)\n\n## 更改日志\n### 新增！\n* c684b60d2f79ed293880a9f9c0e2a6f13f3b3ef5：杂项：添加对 gpt 5.4 mini 和 nano 的支持（https:\u002F\u002Fgithub.com\u002Fcharmbracelet\u002Ffantasy\u002Fpull\u002F174）(@andreynering)\n### 修复\n* ad5162750e90a4b00f036097f5d69853cc61e523：修复：适配 kronk API 变更 (@andreynering)\n\n---\n\n\u003Ca href=\"https:\u002F\u002Fcharm.land\u002F\">\u003Cimg alt=\"The Charm 标志\" src=\"https:\u002F\u002Fstuff.charm.sh\u002Fcharm-banner-next.jpg\" width=\"400\">\u003C\u002Fa>\n\n有什么想法或问题吗？我们非常期待您的反馈。欢迎通过 [X](https:\u002F\u002Fx.com\u002Fcharmcli)、[Discord](https:\u002F\u002Fcharm.land\u002Fdiscord)、[Slack](https:\u002F\u002Fcharm.land\u002Fslack)、[Fediverse](https:\u002F\u002Fmastodon.social\u002F@charmcli) 或 [Bluesky](https:\u002F\u002Fbsky.app\u002Fprofile\u002Fcharm.land) 联系我们。\n\n","2026-03-17T18:15:30",{"id":174,"version":175,"summary_zh":176,"released_at":177},163329,"v0.13.0","# 网络搜索支持\n\n@kylecarbs 为 Fantasy 做了一些很棒的贡献，为 Anthropic 和 OpenAI 的模型添加了网络搜索支持。\n\n想了解如何启用这项功能吗？[请查看这个示例](https:\u002F\u002Fgithub.com\u002Fcharmbracelet\u002Ffantasy\u002Fblob\u002Fmain\u002Fexamples\u002Fweb-search\u002Fmain.go)。\n\n再见，\nCharm ✨ \n\n## 更改日志\n### 新增！\n* 6462ab9c4287aa01d1ccba994c320efe64ada2fd：feat(openai)：为 Responses API 添加网络搜索工具支持 (#173) (@kylecarbs)\n* 38eb77b20e0c5008e468975652668db2a37ccbd7：feat：添加 Anthropic 网络搜索工具支持（server_tool_use + web_search_tool_result）(@kylecarbs)\n### 修复\n* 2460fd049c621f1e5bc442da10c0bd752be4a401：fix(agent)：使每一步的工具选择适用于所有工具类型 (@meowgorithm)\n* 85e0422182678af753373c0227d8be8571bff037：fix(lint)：防止溢出 (@meowgorithm)\n### 文档\n* 522a4f81398829e9e9e061aea7c53b5590b2c0a0：docs(agents)：对 AGENTS.md 进行小幅更新 (@meowgorithm)\n* f20a77dd4e11ceedab419cc612b3dce05c09b207：docs(readme)：移除实验性提示，并说明现已支持提供商工具 (@andreynering)\n\n---\n\n\u003Ca href=\"https:\u002F\u002Fcharm.land\u002F\">\u003Cimg alt=\"Charm 标志\" src=\"https:\u002F\u002Fstuff.charm.sh\u002Fcharm-banner-next.jpg\" width=\"400\">\u003C\u002Fa>\n\n有什么想法或问题吗？我们非常乐意倾听您的声音。欢迎通过 [X](https:\u002F\u002Fx.com\u002Fcharmcli)、[Discord](https:\u002F\u002Fcharm.land\u002Fdiscord)、[Slack](https:\u002F\u002Fcharm.land\u002Fslack)、[Fediverse](https:\u002F\u002Fmastodon.social\u002F@charmcli) 或 [Bluesky](https:\u002F\u002Fbsky.app\u002Fprofile\u002Fcharm.land) 联系我们。\n\n","2026-03-17T17:33:47",{"id":179,"version":180,"summary_zh":181,"released_at":182},163330,"v0.12.3","## 更改日志\n### 其他内容\n* ffc84088418cf31b0795d183053a407a19c04e45：v0.12.3 (@andreynering)\n\n---\n\n\u003Ca href=\"https:\u002F\u002Fcharm.land\u002F\">\u003Cimg alt=\"The Charm 标志\" src=\"https:\u002F\u002Fstuff.charm.sh\u002Fcharm-banner-next.jpg\" width=\"400\">\u003C\u002Fa>\n\n有什么想法或问题吗？我们非常乐意听取您的意见。欢迎通过 [X](https:\u002F\u002Fx.com\u002Fcharmcli)、[Discord](https:\u002F\u002Fcharm.land\u002Fdiscord)、[Slack](https:\u002F\u002Fcharm.land\u002Fslack)、[Fediverse](https:\u002F\u002Fmastodon.social\u002F@charmcli) 或 [Bluesky](https:\u002F\u002Fbsky.app\u002Fprofile\u002Fcharm.land) 与我们联系。\n\n","2026-03-13T14:11:34",{"id":184,"version":185,"summary_zh":186,"released_at":187},163331,"v0.12.2","# OpenRouter 修复\n\n在最近的版本中，我们引入了更改 `User-Agent` 字符串的功能，并为 Fantasy 设置了一个默认的 `User-Agent`。\n\n然而……看来 OpenRouter 对 OpenAI 的 Go SDK 有特定的行为处理方式，如果不做调整就会导致功能失效。因此，我们需要专门为 OpenRouter 保留原始 SDK 的 `User-Agent`，以确保其正常工作。\n\n此外，我们也对默认的 `User-Agent` 做了一些调整，使其更符合通用规范：\n\n* 之前：`Charm Fantasy\u002Fv1.2.3`\n* 现在：`Charm-Fantasy\u002Fv1.2.3 (https:\u002F\u002Fcharm.land\u002Ffantasy)`\n\n## 更改日志\n### 修复\n* 96f0454ae9eb02552fefd2057fa1fa8941177f56：修复（openai）：不要修改共享的 languageModelOptions (@meowgorithm)\n* 522e02608ae54064af69a4becb1dda1ba2a9b80f：修复（openai）：将 noDefaultUserAgent 传递到 responsesLanguageModel 中 (@meowgorithm)\n* e8560e6e978b782f537e2e698d294bc83477c362：修复（openai）：在所有 responses API 调用中使用 noDefaultUserAgent (@meowgorithm)\n* 2e29858d74f46fd265884cd9373df011069a9659：修复（openrouter）：避免脆弱的 User-Agent 断言 (@meowgorithm)\n* 7dc3888ad2c02a6ca8c4905594572a31f34e992d：修复（openrouter）：不要设置 User-Agent (@meowgorithm)\n* a3b8a690c623c630ed52e688e69272643fea3c4b：修复（openrouter）：在流式响应中保留 Anthropic 的推理签名 (@andreynering)\n* 152acfef01b1d7f2780898643a2be264cb9ce9bb：修复：防止在推理详情中解引用空的 EncryptedContent (@andreynering)\n* 50a1116d6131e4be14be16507a49883e0daad551：修复：改进默认的 user-agent 字符串 (@andreynering)\n### 文档\n* 182ba5fb790b7a276a6966d09a4d508b557048b3：文档（openai）：修正注释中的语法错误 (@meowgorithm)\n### 其他内容\n* fa0206946256e3938a64c3ab1623c49c89e2c77f：v0.12.2 (@andreynering)\n\n---\n\n\u003Ca href=\"https:\u002F\u002Fcharm.land\u002F\">\u003Cimg alt=\"The Charm logo\" src=\"https:\u002F\u002Fstuff.charm.sh\u002Fcharm-banner-next.jpg\" width=\"400\">\u003C\u002Fa>\n\n有什么想法或问题吗？我们非常乐意倾听您的声音。欢迎通过 [X](https:\u002F\u002Fx.com\u002Fcharmcli)、[Discord](https:\u002F\u002Fcharm.land\u002Fdiscord)、[Slack](https:\u002F\u002Fcharm.land\u002Fslack)、[Fediverse](https:\u002F\u002Fmastodon.social\u002F@charmcli) 或 [Bluesky](https:\u002F\u002Fbsky.app\u002Fprofile\u002Fcharm.land) 与我们联系。","2026-03-12T16:36:31",{"id":189,"version":190,"summary_zh":191,"released_at":192},163332,"v0.12.1","# Improved retries\r\n\r\nWe tweaked how Fantasy decides when to retry a failed request.\r\n\r\nFantasy was already checking by:\r\n\r\n* 408: Request Timeout\r\n* 409: Conflict\r\n* 429: Too Many Requests\r\n\r\nWe're now also:\r\n\r\n* Using `X-Should-Retry` header if available.\r\n* Retrying on any status code >= 500.\r\n\r\n## Changelog\r\n### Fixed\r\n* d9de5db5d9ce7b0b91c34b24c00c9a2f71f127db: fix(errors): improve check for when to retry requests (#164) (@andreynering)\r\n\r\n---\r\n\r\n\u003Ca href=\"https:\u002F\u002Fcharm.land\u002F\">\u003Cimg alt=\"The Charm logo\" src=\"https:\u002F\u002Fstuff.charm.sh\u002Fcharm-banner-next.jpg\" width=\"400\">\u003C\u002Fa>\r\n\r\nThoughts? Questions? We love hearing from you. Feel free to reach out on [X](https:\u002F\u002Fx.com\u002Fcharmcli), [Discord](https:\u002F\u002Fcharm.land\u002Fdiscord), [Slack](https:\u002F\u002Fcharm.land\u002Fslack), [The Fediverse](https:\u002F\u002Fmastodon.social\u002F@charmcli), [Bluesky](https:\u002F\u002Fbsky.app\u002Fprofile\u002Fcharm.land).\r\n\r\n","2026-03-11T17:28:34",{"id":194,"version":195,"summary_zh":196,"released_at":197},163333,"v0.12.0","# User-Agent support\r\n\r\nThis release reworks how Fantasy handles `User-Agents` headers.\r\n\r\n* On previous releases, Fantasy was using whatever was the default of each SDK.\r\n* Now `Charm Fantasy\u002F{version}` will be used by default (`Charm Fantasy\u002F0.12.0`).\r\n* If you want a custom user agent, `WithUserAgent` was added to both `fantasy.New` and each `provider.New`.\r\n\r\n## Changelog\r\n### New!\r\n* 1b0027b03f8b133b9aa1e65fb2ac52fc55c2942d: feat: configurable user-agent (#152) (@meowgorithm)\r\n\r\n---\r\n\r\n\u003Ca href=\"https:\u002F\u002Fcharm.land\u002F\">\u003Cimg alt=\"The Charm logo\" src=\"https:\u002F\u002Fstuff.charm.sh\u002Fcharm-banner-next.jpg\" width=\"400\">\u003C\u002Fa>\r\n\r\nThoughts? Questions? We love hearing from you. Feel free to reach out on [X](https:\u002F\u002Fx.com\u002Fcharmcli), [Discord](https:\u002F\u002Fcharm.land\u002Fdiscord), [Slack](https:\u002F\u002Fcharm.land\u002Fslack), [The Fediverse](https:\u002F\u002Fmastodon.social\u002F@charmcli), [Bluesky](https:\u002F\u002Fbsky.app\u002Fprofile\u002Fcharm.land).\r\n\r\n","2026-03-10T17:52:39",{"id":199,"version":200,"summary_zh":201,"released_at":202},163334,"v0.11.1","## Changelog\n### Other stuff\n* fb3643d8beda39e232bdebdda74402ec2938ac05: v0.11.1 (@andreynering)\n\n---\n\n\u003Ca href=\"https:\u002F\u002Fcharm.land\u002F\">\u003Cimg alt=\"The Charm logo\" src=\"https:\u002F\u002Fstuff.charm.sh\u002Fcharm-banner-next.jpg\" width=\"400\">\u003C\u002Fa>\n\nThoughts? Questions? We love hearing from you. Feel free to reach out on [X](https:\u002F\u002Fx.com\u002Fcharmcli), [Discord](https:\u002F\u002Fcharm.land\u002Fdiscord), [Slack](https:\u002F\u002Fcharm.land\u002Fslack), [The Fediverse](https:\u002F\u002Fmastodon.social\u002F@charmcli), [Bluesky](https:\u002F\u002Fbsky.app\u002Fprofile\u002Fcharm.land).\n\n","2026-03-05T20:17:26",{"id":204,"version":205,"summary_zh":206,"released_at":207},163335,"v0.11.0","## Changelog\n### New!\n* 8a1457cba2fd94ef425a72765193408cd8bbf1ea: feat: add support for anthropic thinking effort (#147) (@kylecarbs)\n### Other stuff\n* 5442a7f0da945d071c381dc69b5ae0b30fbe34df: v0.11.0 (@andreynering)\n\n---\n\n\u003Ca href=\"https:\u002F\u002Fcharm.land\u002F\">\u003Cimg alt=\"The Charm logo\" src=\"https:\u002F\u002Fstuff.charm.sh\u002Fcharm-banner-next.jpg\" width=\"400\">\u003C\u002Fa>\n\nThoughts? Questions? We love hearing from you. Feel free to reach out on [X](https:\u002F\u002Fx.com\u002Fcharmcli), [Discord](https:\u002F\u002Fcharm.land\u002Fdiscord), [Slack](https:\u002F\u002Fcharm.land\u002Fslack), [The Fediverse](https:\u002F\u002Fmastodon.social\u002F@charmcli), [Bluesky](https:\u002F\u002Fbsky.app\u002Fprofile\u002Fcharm.land).\n\n","2026-02-26T19:35:17",{"id":209,"version":210,"summary_zh":211,"released_at":212},163336,"v0.10.0","## Changelog\n### New!\n* bd6d47d799127fd9138dc83ca6f19685bb67391d: feat(google): add ThinkingLevel support for Gemini 3+ models (@xcapaldi)\n* 54b30ae54e777b6d83b6c28292a23e929755e961: feat: detect context-too-large errors (#125) (@mhpenta)\n### Other stuff\n* cf3151e50e4964dc22cd95b0d02b1b980dd07255: lint: fix missing doc comment (@andreynering)\n* 26a572ccb52f16f80927d0a9e9954423e4874d9f: v0.10.0 (@andreynering)\n\n---\n\n\u003Ca href=\"https:\u002F\u002Fcharm.land\u002F\">\u003Cimg alt=\"The Charm logo\" src=\"https:\u002F\u002Fstuff.charm.sh\u002Fcharm-banner-next.jpg\" width=\"400\">\u003C\u002Fa>\n\nThoughts? Questions? We love hearing from you. Feel free to reach out on [X](https:\u002F\u002Fx.com\u002Fcharmcli), [Discord](https:\u002F\u002Fcharm.land\u002Fdiscord), [Slack](https:\u002F\u002Fcharm.land\u002Fslack), [The Fediverse](https:\u002F\u002Fmastodon.social\u002F@charmcli), [Bluesky](https:\u002F\u002Fbsky.app\u002Fprofile\u002Fcharm.land).\n\n","2026-02-24T20:43:06",{"id":214,"version":215,"summary_zh":216,"released_at":217},163337,"v0.9.0","# Kronk\r\n\r\nBill Kennedy (@ardan-bkennedy) from @ardanlabs brought us a Kronk provider for Fantasy.\r\n\r\nKronk is a different provider. Instead of hosting models remotely, it actually orchestrates downloading and running open source models locally in a very easy manner. This is possible with the help is yzma, which is used by Kronk under the hood.\r\n\r\nCheck out:\r\n\r\n* [Kronk](https:\u002F\u002Fgithub.com\u002Fardanlabs\u002Fkronk)\r\n* [The Kronk models catalog](https:\u002F\u002Fgithub.com\u002Fardanlabs\u002Fkronk_catalogs)\r\n* [yzma](https:\u002F\u002Fgithub.com\u002Fhybridgroup\u002Fyzma)\r\n* And [`examples\u002Fkronk`](https:\u002F\u002Fgithub.com\u002Fcharmbracelet\u002Ffantasy\u002Ftree\u002Fmain\u002Fexamples\u002Fkronk) to see how to use it via Fantasy.\r\n\r\n> [!IMPORTANT]\r\n> The Kronk provider is experimental, so minor changes to the API can happen.\r\n> Try it and don't hesitate to give us any feedback!\r\n\r\n## Changelog\r\n### New!\r\n* 211a29ed3185c609e6e6e2726240d6cd237be425: feat: add kronk provider (#142) (@ardan-bkennedy)\r\n\r\n---\r\n\r\n\u003Ca href=\"https:\u002F\u002Fcharm.land\u002F\">\u003Cimg alt=\"The Charm logo\" src=\"https:\u002F\u002Fstuff.charm.sh\u002Fcharm-banner-next.jpg\" width=\"400\">\u003C\u002Fa>\r\n\r\nThoughts? Questions? We love hearing from you. Feel free to reach out on [X](https:\u002F\u002Fx.com\u002Fcharmcli), [Discord](https:\u002F\u002Fcharm.land\u002Fdiscord), [Slack](https:\u002F\u002Fcharm.land\u002Fslack), [The Fediverse](https:\u002F\u002Fmastodon.social\u002F@charmcli), [Bluesky](https:\u002F\u002Fbsky.app\u002Fprofile\u002Fcharm.land).\r\n\r\n","2026-02-19T19:15:33",{"id":219,"version":220,"summary_zh":221,"released_at":222},163338,"v0.8.1","## Changelog\n### Fixed\n* 070c5ecfd853222a25bd2616baaebe0a770a5164: fix(goreleaser): remove unneeded `npm_key` attribute (@andreynering)\n* e1c26df22c09567d404b1414c5274f07689d1c2d: fix: normalize mcp  tool schemas for openai compatibility (#138) (@andreynering)\n### Other stuff\n* ab99ce7a35a08d2c65d60b32b68c0bfcc025fe2f: v0.8.1 (@andreynering)\n\n---\n\n\u003Ca href=\"https:\u002F\u002Fcharm.land\u002F\">\u003Cimg alt=\"The Charm logo\" src=\"https:\u002F\u002Fstuff.charm.sh\u002Fcharm-banner-next.jpg\" width=\"400\">\u003C\u002Fa>\n\nThoughts? Questions? We love hearing from you. Feel free to reach out on [X](https:\u002F\u002Fx.com\u002Fcharmcli), [Discord](https:\u002F\u002Fcharm.land\u002Fdiscord), [Slack](https:\u002F\u002Fcharm.land\u002Fslack), [The Fediverse](https:\u002F\u002Fmastodon.social\u002F@charmcli), [Bluesky](https:\u002F\u002Fbsky.app\u002Fprofile\u002Fcharm.land).\n\n","2026-02-13T20:25:05",{"id":224,"version":225,"summary_zh":226,"released_at":227},163339,"v0.8.0","* feat: add `jsonrepair` package by @andreynering in https:\u002F\u002Fgithub.com\u002Fcharmbracelet\u002Ffantasy\u002Fpull\u002F132","2026-02-13T16:41:19",{"id":229,"version":230,"summary_zh":231,"released_at":232},163340,"v0.7.2","* chore: prepare for openai gpt 5.3 + codex by @andreynering in https:\u002F\u002Fgithub.com\u002Fcharmbracelet\u002Ffantasy\u002Fpull\u002F136","2026-02-13T16:19:03",{"id":234,"version":235,"summary_zh":236,"released_at":237},163341,"v0.7.1","* fix(anthropic): thinking budget should not add to max tokens by @caarlos0 in https:\u002F\u002Fgithub.com\u002Fcharmbracelet\u002Ffantasy\u002Fpull\u002F131","2026-02-13T16:18:35"]