[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-google--dotprompt":3,"tool-google--dotprompt":65},[4,17,27,35,48,57],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":16},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 真正成长为懂上",151918,2,"2026-04-12T11:33:05",[13,14,15],"开发框架","Agent","语言模型","ready",{"id":18,"name":19,"github_repo":20,"description_zh":21,"stars":22,"difficulty_score":23,"last_commit_at":24,"category_tags":25,"status":16},4487,"LLMs-from-scratch","rasbt\u002FLLMs-from-scratch","LLMs-from-scratch 是一个基于 PyTorch 的开源教育项目，旨在引导用户从零开始一步步构建一个类似 ChatGPT 的大型语言模型（LLM）。它不仅是同名技术著作的官方代码库，更提供了一套完整的实践方案，涵盖模型开发、预训练及微调的全过程。\n\n该项目主要解决了大模型领域“黑盒化”的学习痛点。许多开发者虽能调用现成模型，却难以深入理解其内部架构与训练机制。通过亲手编写每一行核心代码，用户能够透彻掌握 Transformer 架构、注意力机制等关键原理，从而真正理解大模型是如何“思考”的。此外，项目还包含了加载大型预训练权重进行微调的代码，帮助用户将理论知识延伸至实际应用。\n\nLLMs-from-scratch 特别适合希望深入底层原理的 AI 开发者、研究人员以及计算机专业的学生。对于不满足于仅使用 API，而是渴望探究模型构建细节的技术人员而言，这是极佳的学习资源。其独特的技术亮点在于“循序渐进”的教学设计：将复杂的系统工程拆解为清晰的步骤，配合详细的图表与示例，让构建一个虽小但功能完备的大模型变得触手可及。无论你是想夯实理论基础，还是为未来研发更大规模的模型做准备",90106,3,"2026-04-06T11:19:32",[15,26,14,13],"图像",{"id":28,"name":29,"github_repo":30,"description_zh":31,"stars":32,"difficulty_score":10,"last_commit_at":33,"category_tags":34,"status":16},3704,"NextChat","ChatGPTNextWeb\u002FNextChat","NextChat 是一款轻量且极速的 AI 助手，旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性，以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发，NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。\n\n这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言，它也提供了便捷的自托管方案，支持一键部署到 Vercel 或 Zeabur 等平台。\n\nNextChat 的核心亮点在于其广泛的模型兼容性，原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型，让用户在一个界面即可自由切换不同 AI 能力。此外，它还率先支持 MCP（Model Context Protocol）协议，增强了上下文处理能力。针对企业用户，NextChat 提供专业版解决方案，具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能，满足公司对数据隐私和个性化管理的高标准要求。",87618,"2026-04-05T07:20:52",[13,15],{"id":36,"name":37,"github_repo":38,"description_zh":39,"stars":40,"difficulty_score":10,"last_commit_at":41,"category_tags":42,"status":16},2268,"ML-For-Beginners","microsoft\u002FML-For-Beginners","ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程，旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周，包含 26 节精炼课程和 52 道配套测验，内容涵盖从基础概念到实际应用的完整流程，有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。\n\n无论是希望转型的开发者、需要补充算法背景的研究人员，还是对人工智能充满好奇的普通爱好者，都能从中受益。课程不仅提供了清晰的理论讲解，还强调动手实践，让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持，通过自动化机制提供了包括简体中文在内的 50 多种语言版本，极大地降低了全球不同背景用户的学习门槛。此外，项目采用开源协作模式，社区活跃且内容持续更新，确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路，ML-For-Beginners 将是理想的起点。",85092,"2026-04-10T11:13:16",[26,43,44,45,14,46,15,13,47],"数据工具","视频","插件","其他","音频",{"id":49,"name":50,"github_repo":51,"description_zh":52,"stars":53,"difficulty_score":54,"last_commit_at":55,"category_tags":56,"status":16},5784,"funNLP","fighting41love\u002FfunNLP","funNLP 是一个专为中文自然语言处理（NLP）打造的超级资源库，被誉为\"NLP 民工的乐园”。它并非单一的软件工具，而是一个汇集了海量开源项目、数据集、预训练模型和实用代码的综合性平台。\n\n面对中文 NLP 领域资源分散、入门门槛高以及特定场景数据匮乏的痛点，funNLP 提供了“一站式”解决方案。这里不仅涵盖了分词、命名实体识别、情感分析、文本摘要等基础任务的标准工具，还独特地收录了丰富的垂直领域资源，如法律、医疗、金融行业的专用词库与数据集，甚至包含古诗词生成、歌词创作等趣味应用。其核心亮点在于极高的全面性与实用性，从基础的字典词典到前沿的 BERT、GPT-2 模型代码，再到高质量的标注数据和竞赛方案，应有尽有。\n\n无论是刚刚踏入 NLP 领域的学生、需要快速验证想法的算法工程师，还是从事人工智能研究的学者，都能在这里找到急需的“武器弹药”。对于开发者而言，它能大幅减少寻找数据和复现模型的时间；对于研究者，它提供了丰富的基准测试资源和前沿技术参考。funNLP 以开放共享的精神，极大地降低了中文自然语言处理的开发与研究成本，是中文 AI 社区不可或缺的宝藏仓库。",79857,1,"2026-04-08T20:11:31",[15,43,46],{"id":58,"name":59,"github_repo":60,"description_zh":61,"stars":62,"difficulty_score":54,"last_commit_at":63,"category_tags":64,"status":16},6590,"gpt4all","nomic-ai\u002Fgpt4all","GPT4All 是一款让普通电脑也能轻松运行大型语言模型（LLM）的开源工具。它的核心目标是打破算力壁垒，让用户无需依赖昂贵的显卡（GPU）或云端 API，即可在普通的笔记本电脑和台式机上私密、离线地部署和使用大模型。\n\n对于担心数据隐私、希望完全掌控本地数据的企业用户、研究人员以及技术爱好者来说，GPT4All 提供了理想的解决方案。它解决了传统大模型必须联网调用或需要高端硬件才能运行的痛点，让日常设备也能成为强大的 AI 助手。无论是希望构建本地知识库的开发者，还是单纯想体验私有化 AI 聊天的普通用户，都能从中受益。\n\n技术上，GPT4All 基于高效的 `llama.cpp` 后端，支持多种主流模型架构（包括最新的 DeepSeek R1 蒸馏模型），并采用 GGUF 格式优化推理速度。它不仅提供界面友好的桌面客户端，支持 Windows、macOS 和 Linux 等多平台一键安装，还为开发者提供了便捷的 Python 库，可轻松集成到 LangChain 等生态中。通过简单的下载和配置，用户即可立即开始探索本地大模型的无限可能。",77307,"2026-04-11T06:52:37",[15,13],{"id":66,"github_repo":67,"name":68,"description_en":69,"description_zh":70,"ai_summary_zh":70,"readme_en":71,"readme_zh":72,"quickstart_zh":73,"use_case_zh":74,"hero_image_url":75,"owner_login":76,"owner_name":77,"owner_avatar_url":78,"owner_bio":79,"owner_company":80,"owner_location":80,"owner_email":81,"owner_twitter":82,"owner_website":83,"owner_url":84,"languages":85,"stars":125,"forks":126,"last_commit_at":127,"license":128,"difficulty_score":10,"env_os":129,"env_gpu":130,"env_ram":131,"env_deps":132,"category_tags":144,"github_topics":145,"view_count":10,"oss_zip_url":80,"oss_zip_packed_at":80,"status":16,"created_at":149,"updated_at":150,"faqs":151,"releases":182},6967,"google\u002Fdotprompt","dotprompt","Executable GenAI prompt templates","Dotprompt 是由 Google 开源的一种可执行生成式 AI 提示词模板文件格式。它旨在解决大模型应用中提示词管理混乱、难以复用以及跨语言协作困难的问题。通过引入标准化的文件结构，Dotprompt 让开发者能够像编写代码一样版本化、模块化地管理复杂的提示词逻辑，从而显著提升开发效率与维护性。\n\n这款工具特别适合 AI 应用开发者、算法工程师以及需要构建复杂 Agent 系统的技术团队使用。其核心亮点在于语言与模型无关的设计，支持 JavaScript、Python、Go、Rust、Java 等多种主流编程语言，确保不同技术栈的团队能无缝协作。此外，Dotprompt 基于流行的 Handlebars 模板语法进行了扩展，新增了专用于生成式 AI 的特性（如内置变量注入、多模态内容处理等），并提供了完善的 VS Code 和 JetBrains IDE 插件，带来流畅的编写与调试体验。如果你正在寻找一种规范、灵活且易于集成的提示词工程解决方案，Dotprompt 值得尝试。","\u003C!-- Code Quality & Security -->\n\n[![OpenSSF Scorecard](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fgoogle_dotprompt_readme_c4c37db15490.png)](https:\u002F\u002Fscorecard.dev\u002Fviewer\u002F?uri=github.com\u002Fgoogle\u002Fdotprompt)\n[![codecov](https:\u002F\u002Fcodecov.io\u002Fgh\u002Fgoogle\u002Fdotprompt\u002Fgraph\u002Fbadge.svg)](https:\u002F\u002Fcodecov.io\u002Fgh\u002Fgoogle\u002Fdotprompt)\n[![License](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Flicense\u002Fgoogle\u002Fdotprompt)](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Fblob\u002Fmain\u002FLICENSE)\n\n\u003C!-- Repository Stats -->\n\n[![GitHub stars](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002Fgoogle\u002Fdotprompt?style=social)](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt)\n[![GitHub forks](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fforks\u002Fgoogle\u002Fdotprompt?style=social)](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Ffork)\n[![GitHub watchers](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fwatchers\u002Fgoogle\u002Fdotprompt?style=social)](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt)\n[![GitHub contributors](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fcontributors\u002Fgoogle\u002Fdotprompt)](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Fgraphs\u002Fcontributors)\n[![GitHub last commit](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Flast-commit\u002Fgoogle\u002Fdotprompt)](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Fcommits\u002Fmain)\n[![GitHub commit activity](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fcommit-activity\u002Fm\u002Fgoogle\u002Fdotprompt)](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Fpulse)\n\n[![OSS Insight](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FOSS%20Insight-google%2Fdotprompt-blue?logo=github)](https:\u002F\u002Fossinsight.io\u002Fanalyze\u002Fgoogle\u002Fdotprompt)\n[![Discord](https:\u002F\u002Fimg.shields.io\u002Fdiscord\u002F1029867111234740224?logo=discord&label=Discord)](https:\u002F\u002Fdiscord.gg\u002FqXt5zzQKpc)\n[![View Code Wiki](https:\u002F\u002Fwww.gstatic.com\u002F_\u002Fboq-sdlc-agents-ui\u002F_\u002Fr\u002FYUi5dj2UWvE.svg)](https:\u002F\u002Fcodewiki.google\u002Fgithub.com\u002Fgoogle\u002Fdotprompt)\n[![Ask DeepWiki](https:\u002F\u002Fdeepwiki.com\u002Fbadge.svg)](https:\u002F\u002Fdeepwiki.com\u002Fgoogle\u002Fdotprompt)\n\n[![Star History Chart](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fgoogle_dotprompt_readme_9c69b28f693b.png)](https:\u002F\u002Fstar-history.com\u002F#google\u002Fdotprompt&Date)\n\n# Dotprompt: Executable GenAI Prompt Templates\n\n**Dotprompt** is an executable prompt template file format for Generative AI. It\nis designed to be agnostic to programming language and model provider to allow\nfor maximum flexibility in usage. Dotprompt extends the popular\n[Handlebars](https:\u002F\u002Fhandlebarsjs.com) templating language with GenAI-specific\nfeatures.\n\n## Package Versions\n\n| Package | Version | Registry |\n|---------|---------|----------|\n| **Core Libraries** |||\n| `dotprompt` (JS\u002FTS) | [![npm](https:\u002F\u002Fimg.shields.io\u002Fnpm\u002Fv\u002Fdotprompt)](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Fdotprompt) | [npm](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Fdotprompt) |\n| `dotpromptz` (Python) | [![PyPI](https:\u002F\u002Fimg.shields.io\u002Fpypi\u002Fv\u002Fdotpromptz)](https:\u002F\u002Fpypi.org\u002Fproject\u002Fdotpromptz\u002F) | [PyPI](https:\u002F\u002Fpypi.org\u002Fproject\u002Fdotpromptz\u002F) |\n| `dotpromptz-handlebars` (Python) | [![PyPI](https:\u002F\u002Fimg.shields.io\u002Fpypi\u002Fv\u002Fdotpromptz-handlebars)](https:\u002F\u002Fpypi.org\u002Fproject\u002Fdotpromptz-handlebars\u002F) | [PyPI](https:\u002F\u002Fpypi.org\u002Fproject\u002Fdotpromptz-handlebars\u002F) |\n| `dotprompt-go` (Go) | [![Go](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fv\u002Ftag\u002Fgoogle\u002Fdotprompt?filter=dotprompt-go*&label=version)](https:\u002F\u002Fpkg.go.dev\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Fgo\u002Fdotprompt) | [pkg.go.dev](https:\u002F\u002Fpkg.go.dev\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Fgo\u002Fdotprompt) |\n| `dotprompt-rs` (Rust) | [![crates.io](https:\u002F\u002Fimg.shields.io\u002Fcrates\u002Fv\u002Fdotprompt)](https:\u002F\u002Fcrates.io\u002Fcrates\u002Fdotprompt) | [crates.io](https:\u002F\u002Fcrates.io\u002Fcrates\u002Fdotprompt) |\n| `dotprompt-java` (Java) | [![Maven Central](https:\u002F\u002Fimg.shields.io\u002Fmaven-central\u002Fv\u002Fcom.google.dotprompt\u002Fdotprompt)](https:\u002F\u002Fcentral.sonatype.com\u002Fartifact\u002Fcom.google.dotprompt\u002Fdotprompt) | [Maven Central](https:\u002F\u002Fcentral.sonatype.com\u002Fartifact\u002Fcom.google.dotprompt\u002Fdotprompt) |\n| **IDE Extensions** |||\n| `dotprompt-vscode` | [![VS Marketplace](https:\u002F\u002Fimg.shields.io\u002Fvisual-studio-marketplace\u002Fv\u002Fgoogle.dotprompt-vscode)](https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=google.dotprompt-vscode) | [VS Marketplace](https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=google.dotprompt-vscode) |\n| `dotprompt-jetbrains` | [![JetBrains](https:\u002F\u002Fimg.shields.io\u002Fjetbrains\u002Fplugin\u002Fv\u002Fcom.google.dotprompt)](https:\u002F\u002Fplugins.jetbrains.com\u002Fplugin\u002Fcom.google.dotprompt) | [JetBrains](https:\u002F\u002Fplugins.jetbrains.com\u002Fplugin\u002Fcom.google.dotprompt) |\n| `dotprompt-vim` | - | [GitHub](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Ftree\u002Fmain\u002Fpackages\u002Fvim) |\n| `dotprompt-emacs` | - | [GitHub](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Ftree\u002Fmain\u002Fpackages\u002Femacs) |\n| **Web Editors** |||\n| `dotprompt-monaco` | [![npm](https:\u002F\u002Fimg.shields.io\u002Fnpm\u002Fv\u002Fdotprompt-monaco)](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Fdotprompt-monaco) | [npm](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Fdotprompt-monaco) |\n| `dotprompt-codemirror` | [![npm](https:\u002F\u002Fimg.shields.io\u002Fnpm\u002Fv\u002Fdotprompt-codemirror)](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Fdotprompt-codemirror) | [npm](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Fdotprompt-codemirror) |\n| **Tools** |||\n| `tree-sitter-dotprompt` | [![npm](https:\u002F\u002Fimg.shields.io\u002Fnpm\u002Fv\u002Ftree-sitter-dotprompt)](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Ftree-sitter-dotprompt) | [npm](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Ftree-sitter-dotprompt) |\n| `promptly` | [![npm](https:\u002F\u002Fimg.shields.io\u002Fnpm\u002Fv\u002Fpromptly-cli)](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Fpromptly-cli) | [npm](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Fpromptly-cli) |\n\n## CI Status\n\n| Workflow | Status | Description |\n|----------|--------|-------------|\n| **Language Tests** |||\n| Go | [![Go](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Factions\u002Fworkflows\u002Fgo.yml\u002Fbadge.svg)](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Factions\u002Fworkflows\u002Fgo.yml) | Go library tests |\n| Python | [![Python](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Factions\u002Fworkflows\u002Fpython.yml\u002Fbadge.svg)](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Factions\u002Fworkflows\u002Fpython.yml) | Python dotpromptz tests |\n| JavaScript | [![JavaScript](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Factions\u002Fworkflows\u002Fjs.yml\u002Fbadge.svg)](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Factions\u002Fworkflows\u002Fjs.yml) | JS\u002FTS library tests |\n| Java | [![Java](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Factions\u002Fworkflows\u002Fjava.yml\u002Fbadge.svg)](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Factions\u002Fworkflows\u002Fjava.yml) | Java library tests |\n| Rust | [![Rust](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Factions\u002Fworkflows\u002Frust.yml\u002Fbadge.svg)](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Factions\u002Fworkflows\u002Frust.yml) | Rust library tests |\n| Bazel | [![Bazel](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Factions\u002Fworkflows\u002Fbazel.yml\u002Fbadge.svg)](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Factions\u002Fworkflows\u002Fbazel.yml) | Bazel build & test |\n| Handlebarrz | [![Handlebarrz](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Factions\u002Fworkflows\u002Fhandlebarrz-tests.yml\u002Fbadge.svg)](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Factions\u002Fworkflows\u002Fhandlebarrz-tests.yml) | Python Handlebars tests |\n| **IDE & Editor Plugins** |||\n| VS Code | [![VS Code](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Factions\u002Fworkflows\u002Fvscode_extension.yml\u002Fbadge.svg)](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Factions\u002Fworkflows\u002Fvscode_extension.yml) | VS Code extension |\n| IDE Plugins | [![IDE Plugins](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Factions\u002Fworkflows\u002Fide_plugins.yml\u002Fbadge.svg)](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Factions\u002Fworkflows\u002Fide_plugins.yml) | Vim, Emacs, JetBrains |\n| Web Editors | [![Web Editors](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Factions\u002Fworkflows\u002Fweb_editors.yml\u002Fbadge.svg)](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Factions\u002Fworkflows\u002Fweb_editors.yml) | Monaco, CodeMirror |\n| Tree-sitter | [![Tree-sitter](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Factions\u002Fworkflows\u002Ftreesitter.yml\u002Fbadge.svg)](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Factions\u002Fworkflows\u002Ftreesitter.yml) | Grammar & parser |\n| **Code Quality** |||\n| Go Lint | [![Go Lint](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Factions\u002Fworkflows\u002Fgolangci-lint.yml\u002Fbadge.svg)](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Factions\u002Fworkflows\u002Fgolangci-lint.yml) | golangci-lint |\n\n## What's an executable prompt template?\n\nAn executable prompt template is a file that contains not only the text of a\nprompt but also metadata and instructions for how to use that prompt with a\ngenerative AI model. Here's what makes Dotprompt files executable:\n\n* **Metadata Inclusion**: Dotprompt files include metadata about model\n  configuration, input requirements, and expected output format. This\n  information is typically stored in a YAML frontmatter section at the beginning\n  of the file.\n\n* **Self-Contained Entity**: Because a Dotprompt file contains all the necessary\n  information to execute a prompt, it can be treated as a self-contained entity.\n  This means you can \"run\" a Dotprompt file directly, without needing additional\n  configuration or setup in your code.\n\n* **Model Configuration**: The file specifies which model to use and how to\n  configure it (e.g., temperature, max tokens).\n\n* **Input Schema**: It defines the structure of the input data expected by the\n  prompt, allowing for validation and type-checking.\n\n* **Output Format**: The file can specify the expected format of the model's\n  output, which can be used for parsing and validation.\n\n* **Templating**: The prompt text itself uses Handlebars syntax, allowing for\n  dynamic content insertion based on input variables.\n\nThis combination of features makes it possible to treat a Dotprompt file as an\nexecutable unit, streamlining the process of working with AI models and ensuring\nconsistency across different uses of the same prompt.\n\n## Example `.prompt` file\n\nHere's an example of a Dotprompt file that extracts structured data from\nprovided text:\n\n```handlebars\n---\nmodel: googleai\u002Fgemini-2.5-pro\ninput:\n  schema:\n    text: string\noutput:\n  format: json\n  schema:\n    name?: string, the full name of the person\n    age?: number, the age of the person\n    occupation?: string, the person's occupation\n---\n\nExtract the requested information from the given text. If a piece of information\nis not present, omit that field from the output.\n\nText: {{text}}\n```\n\nThis Dotprompt file:\n\n1. Specifies the use of the `googleai\u002Fgemini-2.5-pro` model.\n2. Defines an input schema expecting a `text` string.\n3. Specifies that the output should be in JSON format.\n4. Provides a schema for the expected output, including fields for name, age,\n   and occupation.\n5. Uses Handlebars syntax (`{{text}}`) to insert the input text into the prompt.\n\nWhen executed, this prompt would take a text input, analyze it using the\nspecified AI model, and return a structured JSON object with the extracted\ninformation.\n\n## Installation\n\nThe remainder of this getting started guide will use the reference Dotprompt\nimplementation included as part of [Genkit](https:\u002F\u002Fgithub.com\u002Ffirebase\u002Fgenkit),\nthe GenAI SDK for app developers. To use other\nimplementations of Dotprompt, see the [list of\nImplementations](third_party\u002Fdocsite\u002Fsrc\u002Fcontent\u002Fdocs\u002Fimplementations.mdx).\n\nFirst, install the necessary packages using NPM. Here we'll be using the [Gemini\nAPI](https:\u002F\u002Fai.google.dev\u002Fgemini-api) from Google as our model implementation:\n\n```bash\nnpm i genkit @genkit-ai\u002Fgoogleai\n```\n\nAfter installation, you'll need to set up your environment and initialize the\nDotprompt system. Here's a basic setup:\n\n```typescript\nimport { genkit } from \"genkit\";\nimport { googleAI } from \"@genkit-ai\u002Fgoogleai\";\n\n\u002F\u002F Configure Genkit with the GoogleAI provider and Dotprompt plugin\nconst ai = genkit({\n  plugins: [googleAI()],\n  \u002F\u002F promptDir: 'prompts', \u002F* this is the default value *\u002F\n});\n\n\u002F\u002F Now you're ready to use Dotprompt!\n```\n\n**Note:** You will need to set your Google AI API key to the `GOOGLE_API_KEY`\nenvironment variable or pass it as an option to the `googleAI()` plugin\nconfiguration.\n\nWith this setup, you can now create `.prompt` files in your project and use them\nin your code. For example, if you have a file named `extractInfo.prompt` with\nthe content from the earlier example, you can use it like this:\n\n```typescript\nconst extractInfo = ai.prompt(\"extractInfo\");\n\nconst { output } = await extractInfo({\n  text: \"John Doe is a 35-year-old software engineer living in New York.\",\n});\n\nconsole.log(output);\n\u002F\u002F Output: { \"name\": \"John Doe\", \"age\": 35, \"occupation\": \"software engineer\" }\n```\n\nThis setup allows you to leverage the power of Dotprompt, making your AI\ninteractions more structured, reusable, and maintainable.\n\nBy following these steps, you'll have a basic Dotprompt setup ready to go. From\nhere, you can create more complex prompts, integrate them into your application,\nand start harnessing the full power of generative AI in a structured,\ntemplate-driven way.\n\n## Contributing\n\nWe welcome contributions! Please see our [Development Guidelines](GEMINI.md) for:\n\n* Code style and linting requirements for each language\n* Testing requirements\n* Git commit message conventions\n\n### Commit Message Format\n\nWe use [Conventional Commits](https:\u002F\u002Fwww.conventionalcommits.org\u002F) with package\nnames as scopes:\n\n```bash\nfeat(dotpromptz): add new helper function\nfix(dotprompt-go): resolve parsing edge case\ndocs(dotprompt-java): update API documentation\n```\n\n| Scope | Package |\n|-------|---------|\n| `dotprompt` | JavaScript\u002FTypeScript (`js\u002F`) |\n| `dotpromptz` | Python dotpromptz (`python\u002Fdotpromptz\u002F`) |\n| `dotpromptz-handlebars` | Python Handlebars (`python\u002Fhandlebarrz\u002F`) |\n| `dotprompt-go` | Go (`go\u002F`) |\n| `dotprompt-rs` | Rust (`rs\u002F`) |\n| `dotprompt-java` | Java (`java\u002F`) |\n| `dotprompt-vscode` | VS Code extension |\n| `dotprompt-jetbrains` | JetBrains plugin |\n| `tree-sitter-dotprompt` | Tree-sitter grammar |\n| `promptly` | CLI tool for .prompt files |\n\nSee [GEMINI.md](GEMINI.md) for the complete list of scopes and guidelines.\n","\u003C!-- 代码质量与安全 -->\n\n[![OpenSSF Scorecard](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fgoogle_dotprompt_readme_c4c37db15490.png)](https:\u002F\u002Fscorecard.dev\u002Fviewer\u002F?uri=github.com\u002Fgoogle\u002Fdotprompt)\n[![codecov](https:\u002F\u002Fcodecov.io\u002Fgh\u002Fgoogle\u002Fdotprompt\u002Fgraph\u002Fbadge.svg)](https:\u002F\u002Fcodecov.io\u002Fgh\u002Fgoogle\u002Fdotprompt)\n[![License](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Flicense\u002Fgoogle\u002Fdotprompt)](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Fblob\u002Fmain\u002FLICENSE)\n\n\u003C!-- 仓库统计 -->\n\n[![GitHub 星标](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002Fgoogle\u002Fdotprompt?style=social)](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt)\n[![GitHub 分叉](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fforks\u002Fgoogle\u002Fdotprompt?style=social)](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Ffork)\n[![GitHub 监视者](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fwatchers\u002Fgoogle\u002Fdotprompt?style=social)](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt)\n[![GitHub 贡献者](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fcontributors\u002Fgoogle\u002Fdotprompt)](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Fgraphs\u002Fcontributors)\n[![GitHub 最后一次提交](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Flast-commit\u002Fgoogle\u002Fdotprompt)](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Fcommits\u002Fmain)\n[![GitHub 提交活跃度](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fcommit-activity\u002Fm\u002Fgoogle\u002Fdotprompt)](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Fpulse)\n\n[![OSS Insight](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FOSS%20Insight-google%2Fdotprompt-blue?logo=github)](https:\u002F\u002Fossinsight.io\u002Fanalyze\u002Fgoogle\u002Fdotprompt)\n[![Discord](https:\u002F\u002Fimg.shields.io\u002Fdiscord\u002F1029867111234740224?logo=discord&label=Discord)](https:\u002F\u002Fdiscord.gg\u002FqXt5zzQKpc)\n[![查看代码维基](https:\u002F\u002Fwww.gstatic.com\u002F_\u002Fboq-sdlc-agents-ui\u002F_\u002Fr\u002FYUi5dj2UWvE.svg)](https:\u002F\u002Fcodewiki.google\u002Fgithub.com\u002Fgoogle\u002Fdotprompt)\n[![询问 DeepWiki](https:\u002F\u002Fdeepwiki.com\u002Fbadge.svg)](https:\u002F\u002Fdeepwiki.com\u002Fgoogle\u002Fdotprompt)\n\n[![星标历史图表](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fgoogle_dotprompt_readme_9c69b28f693b.png)](https:\u002F\u002Fstar-history.com\u002F#google\u002Fdotprompt&Date)\n\n# Dotprompt：可执行的生成式AI提示模板\n\n**Dotprompt** 是一种用于生成式AI的可执行提示模板文件格式。它设计为与编程语言和模型提供商无关，以实现最大的使用灵活性。Dotprompt 在流行的 [Handlebars](https:\u002F\u002Fhandlebarsjs.com) 模板语言基础上扩展了针对生成式AI的特定功能。\n\n## 包版本\n\n| 包 | 版本 | 注册表 |\n|---------|---------|----------|\n| **核心库** |||\n| `dotprompt` (JS\u002FTS) | [![npm](https:\u002F\u002Fimg.shields.io\u002Fnpm\u002Fv\u002Fdotprompt)](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Fdotprompt) | [npm](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Fdotprompt) |\n| `dotpromptz` (Python) | [![PyPI](https:\u002F\u002Fimg.shields.io\u002Fpypi\u002Fv\u002Fdotpromptz)](https:\u002F\u002Fpypi.org\u002Fproject\u002Fdotpromptz\u002F) | [PyPI](https:\u002F\u002Fpypi.org\u002Fproject\u002Fdotpromptz\u002F) |\n| `dotpromptz-handlebars` (Python) | [![PyPI](https:\u002F\u002Fimg.shields.io\u002Fpypi\u002Fv\u002Fdotpromptz-handlebars)](https:\u002F\u002Fpypi.org\u002Fproject\u002Fdotpromptz-handlebars\u002F) | [PyPI](https:\u002F\u002Fpypi.org\u002Fproject\u002Fdotpromptz-handlebars\u002F) |\n| `dotprompt-go` (Go) | [![Go](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fv\u002Ftag\u002Fgoogle\u002Fdotprompt?filter=dotprompt-go*&label=version)](https:\u002F\u002Fpkg.go.dev\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Fgo\u002Fdotprompt) | [pkg.go.dev](https:\u002F\u002Fpkg.go.dev\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Fgo\u002Fdotprompt) |\n| `dotprompt-rs` (Rust) | [![crates.io](https:\u002F\u002Fimg.shields.io\u002Fcrates\u002Fv\u002Fdotprompt)](https:\u002F\u002Fcrates.io\u002Fcrates\u002Fdotprompt) | [crates.io](https:\u002F\u002Fcrates.io\u002Fcrates\u002Fdotprompt) |\n| `dotprompt-java` (Java) | [![Maven Central](https:\u002F\u002Fimg.shields.io\u002Fmaven-central\u002Fv\u002Fcom.google.dotprompt\u002Fdotprompt)](https:\u002F\u002Fcentral.sonatype.com\u002Fartifact\u002Fcom.google.dotprompt\u002Fdotprompt) | [Maven Central](https:\u002F\u002Fcentral.sonatype.com\u002Fartifact\u002Fcom.google.dotprompt\u002Fdotprompt) |\n| **IDE 扩展** |||\n| `dotprompt-vscode` | [![VS Marketplace](https:\u002F\u002Fimg.shields.io\u002Fvisual-studio-marketplace\u002Fv\u002Fgoogle.dotprompt-vscode)](https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=google.dotprompt-vscode) | [VS Marketplace](https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=google.dotprompt-vscode) |\n| `dotprompt-jetbrains` | [![JetBrains](https:\u002F\u002Fimg.shields.io\u002Fjetbrains\u002Fplugin\u002Fv\u002Fcom.google.dotprompt)](https:\u002F\u002Fplugins.jetbrains.com\u002Fplugin\u002Fcom.google.dotprompt) | [JetBrains](https:\u002F\u002Fplugins.jetbrains.com\u002Fplugin\u002Fcom.google.dotprompt) |\n| `dotprompt-vim` | - | [GitHub](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Ftree\u002Fmain\u002Fpackages\u002Fvim) |\n| `dotprompt-emacs` | - | [GitHub](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Ftree\u002Fmain\u002Fpackages\u002Femacs) |\n| **Web 编辑器** |||\n| `dotprompt-monaco` | [![npm](https:\u002F\u002Fimg.shields.io\u002Fnpm\u002Fv\u002Fdotprompt-monaco)](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Fdotprompt-monaco) | [npm](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Fdotprompt-monaco) |\n| `dotprompt-codemirror` | [![npm](https:\u002F\u002Fimg.shields.io\u002Fnpm\u002Fv\u002Fdotprompt-codemirror)](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Fdotprompt-codemirror) | [npm](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Fdotprompt-codemirror) |\n| **工具** |||\n| `tree-sitter-dotprompt` | [![npm](https:\u002F\u002Fimg.shields.io\u002Fnpm\u002Fv\u002Ftree-sitter-dotprompt)](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Ftree-sitter-dotprompt) | [npm](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Ftree-sitter-dotprompt) |\n| `promptly` | [![npm](https:\u002F\u002Fimg.shields.io\u002Fnpm\u002Fv\u002Fpromptly-cli)](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Fpromptly-cli) | [npm](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Fpromptly-cli) |\n\n## CI 状态\n\n| 工作流 | 状态 | 描述 |\n|----------|--------|-------------|\n| **语言测试** |||\n| Go | [![Go](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Factions\u002Fworkflows\u002Fgo.yml\u002Fbadge.svg)](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Factions\u002Fworkflows\u002Fgo.yml) | Go 库测试 |\n| Python | [![Python](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Factions\u002Fworkflows\u002Fpython.yml\u002Fbadge.svg)](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Factions\u002Fworkflows\u002Fpython.yml) | Python dotprompt 测试 |\n| JavaScript | [![JavaScript](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Factions\u002Fworkflows\u002Fjs.yml\u002Fbadge.svg)](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Factions\u002Fworkflows\u002Fjs.yml) | JS\u002FTS 库测试 |\n| Java | [![Java](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Factions\u002Fworkflows\u002Fjava.yml\u002Fbadge.svg)](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Factions\u002Fworkflows\u002Fjava.yml) | Java 库测试 |\n| Rust | [![Rust](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Factions\u002Fworkflows\u002Frust.yml\u002Fbadge.svg)](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Factions\u002Fworkflows\u002Frust.yml) | Rust 库测试 |\n| Bazel | [![Bazel](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Factions\u002Fworkflows\u002Fbazel.yml\u002Fbadge.svg)](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Factions\u002Fworkflows\u002Fbazel.yml) | Bazel 构建与测试 |\n| Handlebarrz | [![Handlebarrz](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Factions\u002Fworkflows\u002Fhandlebarrz-tests.yml\u002Fbadge.svg)](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Factions\u002Fworkflows\u002Fhandlebarrz-tests.yml) | Python Handlebars 测试 |\n| **IDE 和编辑器插件** |||\n| VS Code | [![VS Code](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Factions\u002Fworkflows\u002Fvscode_extension.yml\u002Fbadge.svg)](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Factions\u002Fworkflows\u002Fvscode_extension.yml) | VS Code 扩展 |\n| IDE 插件 | [![IDE 插件](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Factions\u002Fworkflows\u002Fide_plugins.yml\u002Fbadge.svg)](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Factions\u002Fworkflows\u002Fide_plugins.yml) | Vim、Emacs、JetBrains |\n| Web 编辑器 | [![Web 编辑器](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Factions\u002Fworkflows\u002Fweb_editors.yml\u002Fbadge.svg)](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Factions\u002Fworkflows\u002Fweb_editors.yml) | Monaco、CodeMirror |\n| Tree-sitter | [![Tree-sitter](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Factions\u002Fworkflows\u002Ftreesitter.yml\u002Fbadge.svg)](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Factions\u002Fworkflows\u002Ftreesitter.yml) | 语法与解析器 |\n| **代码质量** |||\n| Go Lint | [![Go Lint](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Factions\u002Fworkflows\u002Fgolangci-lint.yml\u002Fbadge.svg)](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Factions\u002Fworkflows\u002Fgolangci-lint.yml) | golangci-lint |\n\n## 什么是可执行的提示模板？\n\n可执行的提示模板不仅包含提示文本，还包含元数据以及如何将该提示与生成式 AI 模型结合使用的说明。以下是使 Dotprompt 文件具备可执行性的关键点：\n\n* **元数据包含**：Dotprompt 文件包含关于模型配置、输入要求和预期输出格式的元数据。这些信息通常存储在文件开头的 YAML 前置内容部分中。\n\n* **自包含实体**：由于 Dotprompt 文件包含了执行提示所需的所有必要信息，因此它可以被视为一个自包含的实体。这意味着你可以直接“运行”一个 Dotprompt 文件，而无需在代码中进行额外的配置或设置。\n\n* **模型配置**：文件指定了要使用的模型以及如何对其进行配置（例如温度、最大标记数）。\n\n* **输入模式**：它定义了提示所期望的输入数据结构，从而支持验证和类型检查。\n\n* **输出格式**：文件可以指定模型输出的预期格式，用于解析和验证。\n\n* **模板化**：提示文本本身使用 Handlebars 语法，允许根据输入变量动态插入内容。\n\n这些特性的结合使得 Dotprompt 文件可以被视为一个可执行单元，从而简化了与 AI 模型协作的过程，并确保同一提示在不同场景下的使用一致性。\n\n## 示例 `.prompt` 文件\n\n以下是一个从给定文本中提取结构化数据的 Dotprompt 文件示例：\n\n```handlebars\n---\nmodel: googleai\u002Fgemini-2.5-pro\ninput:\n  schema:\n    text: string\noutput:\n  format: json\n  schema:\n    name?: string, 人的全名\n    age?: number, 人的年龄\n    occupation?: string, 人的职业\n---\n\n请从给定文本中提取所需信息。如果某项信息不存在，则在输出中省略该字段。\n\n文本: {{text}}\n```\n\n这个 Dotprompt 文件：\n\n1. 指定了使用 `googleai\u002Fgemini-2.5-pro` 模型。\n2. 定义了一个期望 `text` 字符串作为输入的模式。\n3. 指定了输出应为 JSON 格式。\n4. 提供了预期输出的模式，包括姓名、年龄和职业字段。\n5. 使用 Handlebars 语法 (`{{text}}`) 将输入文本插入到提示中。\n\n当执行此提示时，它将接收一个文本输入，使用指定的 AI 模型进行分析，并返回一个包含提取信息的结构化 JSON 对象。\n\n## 安装\n\n本入门指南的剩余部分将使用包含在 [Genkit](https:\u002F\u002Fgithub.com\u002Ffirebase\u002Fgenkit) 中的参考 Dotprompt 实现，Genkit 是面向应用开发者的 GenAI SDK。若要使用其他 Dotprompt 实现，请参阅[实现列表](third_party\u002Fdocsite\u002Fsrc\u002Fcontent\u002Fdocs\u002Fimplementations.mdx)。\n\n首先，使用 NPM 安装必要的包。这里我们将使用来自 Google 的 [Gemini API](https:\u002F\u002Fai.google.dev\u002Fgemini-api) 作为模型实现：\n\n```bash\nnpm i genkit @genkit-ai\u002Fgoogleai\n```\n\n安装完成后，您需要设置环境并初始化 Dotprompt 系统。以下是一个基本设置示例：\n\n```typescript\nimport { genkit } from \"genkit\";\nimport { googleAI } from \"@genkit-ai\u002Fgoogleai\";\n\n\u002F\u002F 使用 GoogleAI 提供者和 Dotprompt 插件配置 Genkit\nconst ai = genkit({\n  plugins: [googleAI()],\n  \u002F\u002F promptDir: 'prompts', \u002F* 这是默认值 *\u002F\n});\n\n\u002F\u002F 现在您已经可以使用 Dotprompt 了！\n```\n\n**注意：** 您需要将 Google AI API 密钥设置为 `GOOGLE_API_KEY` 环境变量，或者将其作为选项传递给 `googleAI()` 插件配置。\n\n完成上述设置后，您现在可以在项目中创建 `.prompt` 文件，并在代码中使用它们。例如，如果您有一个名为 `extractInfo.prompt` 的文件，内容与前面的示例相同，您可以这样使用它：\n\n```typescript\nconst extractInfo = ai.prompt(\"extractInfo\");\n\nconst { output } = await extractInfo({\n  text: \"John Doe 是一名 35 岁的软件工程师，居住在纽约。\",\n});\n\nconsole.log(output);\n\u002F\u002F 输出：{ \"name\": \"John Doe\", \"age\": 35, \"occupation\": \"software engineer\" }\n```\n\n通过这种设置，您可以充分利用 Dotprompt 的强大功能，使您的 AI 交互更加结构化、可重用且易于维护。\n\n按照这些步骤操作，您将拥有一个可用的 Dotprompt 基本设置。在此基础上，您可以创建更复杂的提示模板，将其集成到您的应用程序中，并以结构化、基于模板的方式充分发挥生成式 AI 的潜力。\n\n## 贡献\n\n我们欢迎贡献！请参阅我们的[开发指南](GEMINI.md)，了解以下内容：\n\n* 各种语言的代码风格和 linting 要求\n* 测试要求\n* Git 提交信息规范\n\n### 提交信息格式\n\n我们使用 [Conventional Commits](https:\u002F\u002Fwww.conventionalcommits.org\u002F) 规范，并以包名称作为作用域：\n\n```bash\nfeat(dotpromptz): 添加新的辅助函数\nfix(dotprompt-go): 解决解析边缘情况\ndocs(dotprompt-java): 更新 API 文档\n```\n\n| 作用域 | 包 |\n|-------|---------|\n| `dotprompt` | JavaScript\u002FTypeScript (`js\u002F`) |\n| `dotpromptz` | Python dotpromptz (`python\u002Fdotpromptz\u002F`) |\n| `dotpromptz-handlebars` | Python Handlebars (`python\u002Fhandlebarrz\u002F`) |\n| `dotprompt-go` | Go (`go\u002F`) |\n| `dotprompt-rs` | Rust (`rs\u002F`) |\n| `dotprompt-java` | Java (`java\u002F`) |\n| `dotprompt-vscode` | VS Code 扩展 |\n| `dotprompt-jetbrains` | JetBrains 插件 |\n| `tree-sitter-dotprompt` | Tree-sitter 语法 |\n| `promptly` | .prompt 文件的 CLI 工具 |\n\n完整的作用域列表和指南请参阅 [GEMINI.md](GEMINI.md)。","# Dotprompt 快速上手指南\n\nDotprompt 是一种可执行的生成式 AI 提示词模板文件格式。它基于 Handlebars 模板语法扩展，支持在文件中直接定义模型配置、输入\u002F输出 Schema 及元数据，实现语言无关且自包含的提示词管理。\n\n## 环境准备\n\n*   **操作系统**：Windows, macOS, Linux\n*   **运行时依赖**：\n    *   Node.js (推荐 v18 或更高版本)\n    *   npm 或 yarn 包管理器\n*   **API 密钥**：需要拥有 Google AI API Key (或其他支持的模型提供商密钥)\n\n## 安装步骤\n\n本指南基于 Genkit SDK（Dotprompt 的参考实现）进行演示。\n\n1.  **初始化项目并安装依赖**\n    在项目目录下运行以下命令，安装核心库及 Google AI 插件：\n\n    ```bash\n    npm i genkit @genkit-ai\u002Fgoogleai\n    ```\n\n    > **国内加速建议**：如果 npm 下载缓慢，建议使用淘宝镜像源：\n    > `npm config set registry https:\u002F\u002Fregistry.npmmirror.com`\n\n2.  **配置环境变量**\n    设置你的 Google AI API 密钥。在终端执行：\n\n    ```bash\n    export GOOGLE_API_KEY=\"你的_API_密钥\"\n    ```\n    *(Windows PowerShell: `$env:GOOGLE_API_KEY=\"你的_API_密钥\"`)*\n\n## 基本使用\n\n### 1. 创建提示词文件\n\n在项目根目录创建 `prompts` 文件夹（默认目录），并在其中新建一个名为 `extractInfo.prompt` 的文件。\n\n**文件内容 (`prompts\u002FextractInfo.prompt`)：**\n\n```handlebars\n---\nmodel: googleai\u002Fgemini-2.5-pro\ninput:\n  schema:\n    text: string\noutput:\n  format: json\n  schema:\n    name?: string, the full name of the person\n    age?: number, the age of the person\n    occupation?: string, the person's occupation\n---\n\nExtract the requested information from the given text. If a piece of information\nis not present, omit that field from the output.\n\nText: {{text}}\n```\n\n该文件定义了：\n*   **模型**：使用 `gemini-2.5-pro`。\n*   **输入**：期望接收一个 `text` 字符串。\n*   **输出**：强制返回 JSON 格式，并定义了字段结构。\n*   **模板**：使用 `{{text}}` 动态插入变量。\n\n### 2. 编写调用代码\n\n新建一个 TypeScript 文件（如 `index.ts`），编写以下代码加载并执行提示词：\n\n```typescript\nimport { genkit } from \"genkit\";\nimport { googleAI } from \"@genkit-ai\u002Fgoogleai\";\n\n\u002F\u002F 初始化 Genkit 并加载 Google AI 插件\nconst ai = genkit({\n  plugins: [googleAI()],\n  \u002F\u002F promptDir: 'prompts', \u002F* 默认为 'prompts' 目录 *\u002F\n});\n\nasync function main() {\n  \u002F\u002F 加载名为 'extractInfo' 的 prompt 文件\n  const extractInfo = ai.prompt(\"extractInfo\");\n\n  \u002F\u002F 执行提示词，传入符合 input schema 的数据\n  const { output } = await extractInfo({\n    text: \"John Doe is a 35-year-old software engineer living in New York.\",\n  });\n\n  console.log(output);\n  \u002F\u002F 预期输出: { \"name\": \"John Doe\", \"age\": 35, \"occupation\": \"software engineer\" }\n}\n\nmain().catch(console.error);\n```\n\n### 3. 运行结果\n\n执行代码后，Dotprompt 会自动读取 `.prompt` 文件中的元数据，调用指定模型，并根据定义的 Output Schema 将结果解析为结构化 JSON 对象返回。","某电商平台的后端团队正在构建一个多语言支持的用户评论情感分析系统，需要频繁调用大模型处理不同国家的用户反馈。\n\n### 没有 dotprompt 时\n- 提示词逻辑硬编码在 Python 或 Java 业务代码中，一旦需要调整分析维度或修复指令歧义，必须重新编译部署整个服务。\n- 不同语种（如英语、日语、西班牙语）的提示词模板分散在各个微服务里，格式不统一，导致模型输出结果参差不齐，难以维护一致性。\n- 非技术背景的提示词工程师无法直接参与优化，只能口头描述需求让开发人员修改代码，沟通成本高且迭代周期长达数天。\n- 缺乏版本控制机制，无法追溯某次模型效果波动是由哪一次提示词变更引起的，排查问题如同“盲人摸象”。\n\n### 使用 dotprompt 后\n- 将情感分析指令封装为独立的 `.prompt` 文件，利用 Handlebars 语法动态注入用户评论和语言参数，修改提示词无需重启服务，实现热更新。\n- 团队建立了统一的提示词模板库，通过变量复用确保所有语言场景下的分析逻辑一致，显著提升了跨语种输出的稳定性。\n- 提示词工程师可以直接编辑 `.prompt` 文件并利用 VS Code 插件进行调试，开发人员只需关注模板渲染，协作效率提升数倍。\n- 每个 `.prompt` 文件纳入 Git 版本管理，清晰记录每次指令优化的提交历史，能够快速回滚或对比差异，彻底解决了效果波动的溯源难题。\n\ndotprompt 通过将提示词从代码中解耦并标准化，让生成式 AI 应用具备了像传统软件一样高效、可协作的工程化迭代能力。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fgoogle_dotprompt_ac52e3eb.png","google","Google","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002Fgoogle_c4bedcda.png","Google ❤️ Open Source",null,"opensource@google.com","GoogleOSS","https:\u002F\u002Fopensource.google\u002F","https:\u002F\u002Fgithub.com\u002Fgoogle",[86,90,94,98,102,106,109,113,117,121],{"name":87,"color":88,"percentage":89},"Starlark","#76d275",18.6,{"name":91,"color":92,"percentage":93},"Dart","#00B4AB",17.8,{"name":95,"color":96,"percentage":97},"Python","#3572A5",16.4,{"name":99,"color":100,"percentage":101},"Java","#b07219",12.7,{"name":103,"color":104,"percentage":105},"Rust","#dea584",9.5,{"name":107,"color":108,"percentage":105},"TypeScript","#3178c6",{"name":110,"color":111,"percentage":112},"Go","#00ADD8",8.1,{"name":114,"color":115,"percentage":116},"Shell","#89e051",4.6,{"name":118,"color":119,"percentage":120},"Kotlin","#A97BFF",1.1,{"name":122,"color":123,"percentage":124},"Batchfile","#C1F12E",0.4,507,62,"2026-04-07T16:49:26","Apache-2.0","未说明 (跨平台，依赖具体语言运行时)","未说明 (本工具为提示词模板库，不直接运行模型，无特定 GPU 需求)","未说明",{"notes":133,"python":134,"dependencies":135},"Dotprompt 是一个与编程语言和模型提供商无关的可执行提示词模板格式，本身不包含 AI 模型，因此没有沉重的硬件资源需求。它扩展了 Handlebars 模板语言。使用时需安装对应语言的 SDK（如 Node.js 的 genkit 或 Python 的 dotpromptz），并配置所调用的外部大模型服务（如 Google Gemini）的 API 密钥。","未说明 (提供 dotpromptz 包，通常兼容主流 Python 3.x 版本)",[136,137,138,139,140,141,142,143],"genkit","@genkit-ai\u002Fgoogleai","dotprompt (JS\u002FTS)","dotpromptz (Python)","dotprompt-go (Go)","dotprompt-rs (Rust)","dotprompt-java (Java)","handlebars (模板引擎)",[15],[146,147,148],"genai","llms","prompting","2026-03-27T02:49:30.150509","2026-04-13T06:10:42.525552",[152,157,162,167,172,177],{"id":153,"question_zh":154,"answer_zh":155,"source_url":156},31405,"VS Code 是否支持 .prompt 文件的语言模式或扩展？","目前可以使用 Handlebars VS Code 语言扩展来获得不错的格式化效果。维护者计划开发带有自动补全功能（针对 frontmatter 等）的专用扩展。虽然目前还没有 JSON Schema，但可以根据 TypeScript 定义文件（js\u002Fsrc\u002Ftypes.ts）轻松创建一个。此外，Emacs major mode 和 vim syntax 支持已在相关 PR 中实现。","https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Fissues\u002F206",{"id":158,"question_zh":159,"answer_zh":160,"source_url":161},31406,"Dotprompt 是否支持除 Google 以外的其他模型提供商（如 Anthropic, OpenAI）？","是的，Dotprompt 旨在成为提供商无关的工具。关于如何配置和使用不同模型提供商的详细信息，请参阅官方文档中的模型参考页面：https:\u002F\u002Fgoogle.github.io\u002Fdotprompt\u002Freference\u002Fmodel\u002F","https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Fissues\u002F315",{"id":163,"question_zh":164,"answer_zh":165,"source_url":166},31407,"当解析 YAML frontmatter 出错时，应该抛出异常还是仅记录错误？","维护者确认：如果 prompt 文件完全没有 frontmatter，不应视为错误；但如果文件包含 frontmatter 而其 YAML 格式无效，则应当视为解析错误（parse error）并抛出异常。未来可能会将此行为作为解析时的可配置选项。","https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Fissues\u002F85",{"id":168,"question_zh":169,"answer_zh":170,"source_url":171},31408,"Python 版本中是否支持运行时选项（Runtime options）？","该功能在 Python 初始实现中被跳过，目前尚未完全支持。主要阻塞原因是底层的 Rust 库（handlebars-rust）对局部变量（local variables，如 {{@var}} 语法）的支持存在问题。目前的临时变通方案是编写一个 helper 函数，自动检测模板中的局部变量并将其替换为不带 @ 符号的版本。彻底解决需要等待底层 Rust 库更新以支持局部变量，使其行为与 JS 和 Go 版本一致。","https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Fissues\u002F297",{"id":173,"question_zh":174,"answer_zh":175,"source_url":176},31409,"是否有 Java 语言的实现版本？","目前官方仓库中尚未合并正式的 Java 实现。虽然有社区成员在外部项目（如 enola-dev）中进行了尝试和开发，并讨论了贡献流程，但建议关注官方仓库的动态。维护者表示欢迎协作，可能需要在官方仓库中添加代码辅助功能或按特定顺序开发测试覆盖，但目前建议先在外部 repo 孵化成熟后再考虑合并上游。","https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Fissues\u002F301",{"id":178,"question_zh":179,"answer_zh":180,"source_url":181},31410,"Python 绑定是否支持 Python 3.14 版本？","目前支持 Python 3.14 存在困难。主要原因是依赖的 pyo3 库（用于 Rust 与 Python 交互）的最新版本（如 0.24.2）仅支持到 Python 3.13。升级到支持 3.14 的 pyo3 版本（如 0.26.0）需要重构 Rust 代码以适应 Python 3.14 中 GIL（全局解释器锁）的变化，因此该功能被暂时搁置，需等待后续更新。","https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Fissues\u002F329",[183,188,193,198,203,208,213,218,223,228,233,238,243,248,253,258,263,268,273,278],{"id":184,"version":185,"summary_zh":186,"released_at":187},231116,"dotpromptz-0.1.5","## [0.1.5](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Fcompare\u002Fdotpromptz-0.1.4...dotpromptz-0.1.5) (2026-01-30)\n\n\n### 功能特性\n\n* 集成 pyrefly 类型检查器并改进 CI 工作流 ([#451](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Fissues\u002F451)) ([619beaf](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Fcommit\u002F619beaff845a99e5f2e67fb093fefdfe626e3646))\n* **promptly:** 添加 lsp、fmt 和 check 实现 ([#438](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Fissues\u002F438)) ([27fd3d4](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Fcommit\u002F27fd3d4c7aa96e09c46cb54546da1783be2f6a6e))\n* **py:** 添加 Bazel 构建\u002F测试支持，并自动化依赖管理 ([#399](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Fissues\u002F399)) ([efd7fe0](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Fcommit\u002Fefd7fe0592e2491c34e8fd399e756de375c802eb))\n* **py:** 切换到使用 ty 进行类型检查 ([#376](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Fissues\u002F376)) ([7f1c026](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Fcommit\u002F7f1c0268e5de5a2d6d887ac590d110dea7d3ed07))\n\n\n### 错误修复\n\n* 在所有运行时中为部分解析添加循环检测 ([#431](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Fissues\u002F431)) ([4e23d44](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Fcommit\u002F4e23d44865415c13ab1a5b52c2930e32d26eac5d))\n* 修复渲染编译问题 ([#404](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Fissues\u002F404)) ([7152799](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Fcommit\u002F71527994142de94f7897ce296d31581519e97fe8))\n* **dotpromptz:** 清理 pyproject.toml 文件 ([#436](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Fissues\u002F436)) ([420d05d](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Fcommit\u002F420d05d9383b1942366010a66745fc7a5b7926bd))\n* **dotpromptz:** 在 Pydantic 模型中启用类型安全的 schema 字段 ([#435](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Fissues\u002F435)) ([dfc6098](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Fcommit\u002Fdfc6098c161ec49e874b24aefd22d078c7d6870e))\n* **dotpromptz:** 将 dotpromptz-handlebars 依赖更新至 >=0.1.7 ([#486](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Fissues\u002F486)) ([56dedb2](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Fcommit\u002F56dedb276a6dbf8e5fecb32e3a4d7c4cb5ba0dc8))\n* **dotpromptz:** 将 dotpromptz-handlebars 依赖更新至 >=0.1.8 ([#492](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Fissues\u002F492)) ([cc918b1](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Fcommit\u002Fcc918b19c7ce5af9038aad666861fc3484a0eca2))\n* 确保所有运行时中的 helper 行为保持一致 ([#395](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Fissues\u002F395)) ([76de7ba](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Fcommit\u002F76de7ba6065e07667dda5d3acb8b57ce36b48662))\n* 针对路径遍历安全漏洞（CWE-22）进行加固 ([#413](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Fissues\u002F413)) ([5be598e](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Fcommit\u002F5be598e9dcd617924150500974173fb0dbbc7acf))\n* **release:** 统一命名规范，并在创建发布时自动上传至 PyPI ([#425](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Fissues\u002F425)) ([12ba56d](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Fcommit\u002F12ba56d9135979da21af042a8030daff7a705f87))\n\n\n### 文档\n\n* 为所有语言实现添加全面的 API 文档 ([#454](https:\u002F\u002Fgithub.com\u002F","2026-01-30T06:59:59",{"id":189,"version":190,"summary_zh":191,"released_at":192},231117,"dotpromptz-handlebars-0.1.8","## [0.1.8](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Fcompare\u002Fdotpromptz-handlebars-0.1.7...dotpromptz-handlebars-0.1.8)（2026-01-30）\n\n\n### 错误修复\n\n* **文档：** 移除错误的 OpenSSF 最佳实践徽章（[#490](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Fissues\u002F490)）（[6cdabd7](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Fcommit\u002F6cdabd7e4d09e5b71034d0bae183af4cfc94fe1d)）\n\n\n### 文档\n\n* **dotpromptz-handlebars：** 改进 PyPI 包描述（[#487](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Fissues\u002F487)）（[b693e6c](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Fcommit\u002Fb693e6c52b19ba746b505c30a705419281e4d8ce)）","2026-01-30T06:38:31",{"id":194,"version":195,"summary_zh":196,"released_at":197},231118,"dotpromptz-handlebars-0.1.7","## [0.1.7](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Fcompare\u002Fdotpromptz-handlebars-0.1.6...dotpromptz-handlebars-0.1.7) (2026-01-30)\n\n\n### 错误修复\n\n* **ci:** 自动更新锁文件并为发布 PR 添加标签 ([#483](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Fissues\u002F483)) ([3ae17e4](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Fcommit\u002F3ae17e44b9acbd4efe5aab53b30a5c81694cbe4e))","2026-01-30T05:35:09",{"id":199,"version":200,"summary_zh":201,"released_at":202},231119,"dotpromptz-handlebars-0.1.6","## [0.1.6](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Fcompare\u002Fdotpromptz-handlebars-0.1.5...dotpromptz-handlebars-0.1.6)（2026-01-30）\n\n\n### 错误修复\n\n* **handlebarrz:** 添加可切换的平台标志和 Unicode 测试（[#481](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Fissues\u002F481)）（[7130b4c](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Fcommit\u002F7130b4ce172bf70513d55417f6bcc309511d83f0)）","2026-01-30T05:01:48",{"id":204,"version":205,"summary_zh":206,"released_at":207},231120,"dotpromptz-handlebars-0.1.5","## [0.1.5](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Fcompare\u002Fdotpromptz-handlebars-0.1.4...dotpromptz-handlebars-0.1.5) (2026-01-30)\n\n\n### 错误修复\n\n* **ci:** 添加 RUSTUP_MAX_RETRIES 并使用原生 ARM64 运行器 ([#479](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Fissues\u002F479)) ([aefd33a](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Fcommit\u002Faefd33a7a595ae4fc31a7f1b1f28692d7addc046))","2026-01-30T04:34:08",{"id":209,"version":210,"summary_zh":211,"released_at":212},231121,"dotpromptz-handlebars-0.1.4","## [0.1.4](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Fcompare\u002Fdotpromptz-handlebars-0.1.3...dotpromptz-handlebars-0.1.4) (2026-01-30)\n\n\n### 功能特性\n\n* **dotpromptz-handlebars:** 添加 `package_name` 函数用于冒烟测试 ([#457](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Fissues\u002F457)) ([681cc52](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Fcommit\u002F681cc527dfd2d534ba5e0b6b2d73c52ead267b59))\n* **py:** 添加 Bazel 构建\u002F测试支持，并自动化依赖管理 ([#399](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Fissues\u002F399)) ([efd7fe0](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Fcommit\u002Fefd7fe0592e2491c34e8fd399e756de375c802eb))\n* **py:** 切换到使用 `ty` 进行类型检查 ([#376](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Fissues\u002F376)) ([7f1c026](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Fcommit\u002F7f1c0268e5de5a2d6d887ac590d110dea7d3ed07))\n\n\n### 错误修复\n\n* **dotpromptz-handlebars:** handlebarrz 中的版本不匹配问题 ([#428](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Fissues\u002F428)) ([1cf8e01](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Fcommit\u002F1cf8e019a1c4b94254c5819ceb312df2b8c1e889))\n* **handlebarrz:** 修正 `register_helper` 类型注解的 stub 签名 ([#434](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Fissues\u002F434)) ([7bc7e2a](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Fcommit\u002F7bc7e2a72f792940481fdf180961c7508b3ae389))\n* 更新软件包名称引用，指向 `dotpromptz-handlebars` ([#403](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Fissues\u002F403)) ([8bbd99d](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Fcommit\u002F8bbd99debe511a5b7327d80aeb40b6a854d57630)), 关闭 [#344](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdotprompt\u002Fissues\u002F344)","2026-01-30T03:18:23",{"id":214,"version":215,"summary_zh":216,"released_at":217},231122,"dotpromptz-handlebars-0.1.3","发布 dotpromptz-handlebars v0.1.3","2026-01-30T01:27:38",{"id":219,"version":220,"summary_zh":221,"released_at":222},231123,"promptly-0.1.0","及时发布-0.1.0","2026-01-30T01:27:59",{"id":224,"version":225,"summary_zh":226,"released_at":227},231124,"tree-sitter-dotprompt-0.1.0","发布 tree-sitter-dotprompt-0.1.0","2026-01-30T01:27:58",{"id":229,"version":230,"summary_zh":231,"released_at":232},231125,"dotprompt-jetbrains-0.2.0","发布 dotprompt-jetbrains-0.2.0","2026-01-30T01:27:57",{"id":234,"version":235,"summary_zh":236,"released_at":237},231126,"dotprompt-codemirror-0.1.0","Release dotprompt-codemirror-0.1.0","2026-01-30T01:27:56",{"id":239,"version":240,"summary_zh":241,"released_at":242},231127,"dotprompt-monaco-0.1.0","Release dotprompt-monaco-0.1.0","2026-01-30T01:27:55",{"id":244,"version":245,"summary_zh":246,"released_at":247},231128,"dotprompt-emacs-0.1.0","Release dotprompt-emacs-0.1.0","2026-01-30T01:27:54",{"id":249,"version":250,"summary_zh":251,"released_at":252},231129,"dotprompt-vim-0.1.0","Release dotprompt-vim-0.1.0","2026-01-30T01:27:53",{"id":254,"version":255,"summary_zh":256,"released_at":257},231130,"dotprompt-vscode-0.0.1","Release dotprompt-vscode-0.0.1","2026-01-30T01:27:52",{"id":259,"version":260,"summary_zh":261,"released_at":262},231131,"dotprompt-java-0.1.0","Release dotprompt-java-0.1.0","2026-01-30T01:27:51",{"id":264,"version":265,"summary_zh":266,"released_at":267},231132,"dotprompt-rs-0.1.0","Release dotprompt-rs-0.1.0","2026-01-30T01:27:50",{"id":269,"version":270,"summary_zh":271,"released_at":272},231133,"dotprompt-go-0.2.0","Release dotprompt-go-0.2.0","2026-01-30T01:27:48",{"id":274,"version":275,"summary_zh":276,"released_at":277},231134,"dotprompt-0.2.9","Release dotprompt-0.2.9","2026-01-30T01:27:46",{"id":279,"version":280,"summary_zh":281,"released_at":282},231135,"dotpromptz-0.1.4","Release dotpromptz-0.1.4","2026-01-30T01:27:47"]