诗泉:用 Go 封装 40 万首古诗词,一行 Docker 命令即可私有部署的 REST/GraphQL API 服务
2026/7/24 13:52:10 网站建设 项目流程

诗泉:用 Go 封装 40 万首古诗词,一行 Docker 命令即可私有部署的 REST/GraphQL API 服务

核心观点

这个项目做的事情非常务实:把公认最全的开源数据集 chinese-poetry(51k Stars,MIT协议)从"一堆 JSON 文件"包装成一个生产可用的后端服务——有标准化接口、有搜索、有限流、有容器镜像。它不是数据研究,也不是算法创新,定位非常清晰:开发者直接取用的"诗词基础设施",属于工程化封装层的渐进式优化,而非底层范式突破。

理解它的正确参照系是:把它类比为"给 SQLite 数据库加了一个标准 REST 网关",而不是"又一个 NLP 模型"。


关键信息

数据规模(来自原文)

分类数量分类数量
七言绝句85,032五言律诗71,400
七言律诗69,028五言绝句18,895
宋词21,369元曲10,905
乐府诗9,315其他96,232
合计~383,000还含诗经/楚辞/四书五经

数据源头是 chinese-poetry 项目,但原始数据集以宋诗为主体(约 26 万首),唐诗约 5.5 万首。本项目的"40 万"是将所有体裁合并统计后的总量,使用时要区分"海量数据"和"精品名篇"的差异。

技术栈与关键设计

  • 语言:Go,核心卖点之一是并发性能
  • 简繁转换:约 300ns/op,使用 gocc 库,同一数据库双存储、查询时按?lang=参数动态返回(不是运行时转换,是预处理后双写,这是性能低延迟的关键)
  • 接口:REST API(/api/v1/)+ GraphQL(/graphql)双端点并行
  • 保护机制:IP 级限流,防止数据被无限抓取
  • 部署:Docker 单镜像,支持 amd64/arm64 双架构
  • 数据管理:Git Submodules 挂载上游数据集,解耦数据与服务

代码/示例

一行启动

docker run -d -p 1279:1279 palemoky/chinese-poetry-api:latest

典型 REST 调用

# 随机取一首李白的五言绝句(飞花令场景) curl "http://localhost:1279/api/v1/poems/random?author=李白&type=五言绝句" # 飞花令:含"春"字的诗词 curl "http://localhost:1279/api/v1/poems/random?char=春" # 多体裁组合筛选 curl "http://localhost:1279/api/v1/poems/random?author=李白&type=五言绝句&type=七言绝句&type=五言律诗" # 繁体中文版 curl "http://localhost:1279/api/v1/poems?lang=zh-Hant"

GraphQL 查询示例

# 按标题搜索并获取作者信息 query { searchPoems(query: "静夜思", searchType: TITLE) { edges { node { title author { name } } } } } # 统计各朝代诗词数量 query { statistics { totalPoems poemsByDynasty { dynasty { name } count } } }

最核心的机制:为什么选择"双语双写"而非"实时转换"

这是整个项目性能设计中最值得学习的一个决策。简繁转换是字符映射操作,虽然单次很快(300ns),但在高并发场景下(比如 API 被多个客户端同时请求),每次查询都转换会导致 CPU 被消耗在与业务无关的重复字符替换上。

选择在数据预处理阶段一次性双写(简体和繁体各存一份),查询时直接读取对应列,是一种以空间换时间的经典工程取舍。代价是数据库体积几乎翻倍,收益是接口延迟完全不受语言切换影响。对于一个定位为"高性能 API 服务"的项目,这个选择是合理的。


交叉验证

信源一:HelloGitHub(项目收录页)

HelloGitHub 平台将此项目收录为"开箱即用"推荐,过去 7 天新增 476 颗 Star(截至搜索时总 Star 约 2.1k),这个增速对于一个工具型项目属于快速传播阶段。平台描述与原文基本吻合:强调"Docker 一键部署""REST+GraphQL""40 万首"等卖点,没有独立技术评测,认同原文的功能描述,但未提及任何局限性。

信源二:zhupite.com(chinese-poetry 数据集介绍)

这个信源让我们可以独立验证数据源本身的质量:chinese-poetry 原始项目有 51k Stars,MIT 协议,数据以 JSON 格式存储,宋诗约 26 万首、唐诗约 5.5 万首。

两处值得关注的信息差异:

  1. 数量口径问题:原始数据集的 55,000 首唐诗和 260,000 首宋诗合计已超 31 万,但本项目报告"40 万首",差值来自元曲、词、经典文集等其他类别的合并统计。这个数字没有问题,但"唐诗宋词"爱好者需要注意——宋诗(多为文人案头诗,知名度低)占比远超唐诗,不是 40 万首"经典名篇"

  2. 数据授权:原始 chinese-poetry 数据集是 MIT 协议,但本项目是GPL-3.0协议。这意味着如果你基于本项目的代码做二次开发并分发,必须以相同协议开源——商业团队需注意这个传染性条款。

信源三:CSDN 技术文章(原文)

一篇转载/整理文章,基本是对 README 的中文扩展说明,未提供独立测试数据,对原文观点全盘认同,补充了"适合 RAG 知识库、MCP 服务、大模型语料"等 AI 时代的新用法,这个方向是合理的延伸,但未经验证(古诗词 JSON 灌入 RAG 的实际效果依赖于 embedding 模型对古文的理解质量,并非开箱即用)。

总结:三个信源均认同原文的基本描述,没有实质性反驳,但也没有提供独立性能基准测试。GPL-3.0 与数据量口径是两个值得独立验证的细节。


边界与被夸大的部分

  1. "高性能"没有基准对比:原文宣称"高性能",给出的唯一数据是简繁转换 300ns/op,但没有 QPS 数据、响应延迟测试或与其他同类项目(如 Python/Node.js 实现的同类服务)的对比。Go 语言本身并发能力强,但性能最终取决于数据库索引设计和查询复杂度,仅凭语言选型无法证明"高性能"。

  2. 搜索能力有限:项目提供全文搜索、标题/内容/作者分类搜索,但从 README 看这更像是数据库 LIKE 查询,而非 Elasticsearch 级别的全文检索(不支持模糊拼音、近义词、语义搜索)。对"飞花令"场景的单字查询可以满足,但复杂语义检索不在其能力范围内。

  3. 数据噪声:原始 chinese-poetry 数据集本身存在数据质量问题(有研究者反映部分宋诗存在重复条目、作者信息缺失),这些问题会原样继承到本项目。

  4. GPL-3.0 许可证的商业限制:数据源是 MIT,但服务代码是 GPL-3.0,闭源商业使用需谨慎。


个人启发

这篇文章最大的实际价值不在于"发现了一个新技术",而在于提供了一个立即可用的工程化模板。对不同读者的具体行动建议:

前端/全栈开发者:如果你要做"每日一诗"小组件、诗词日历、飞花令小游戏,或者给 AI 应用加一个古诗词知识模块,这个项目可以让你在 10 分钟内绕过"数据从哪来"的问题,直接进入产品设计阶段。?char=春这个参数是飞花令场景的直接解法,不需要自己写过滤逻辑。

后端/架构方向:这个项目本身是"Git Submodules 管理外部数据源 + Go 服务 + Docker 容器化"的完整范例,值得作为学习工程化实践的参考代码库阅读,重点看数据预处理流程(make process-data)和简繁双写设计。

AI/RAG 方向:将古诗词批量导入向量数据库做语义检索有可行性,但务必先验证你使用的 embedding 模型对古文的编码质量——多数通用中文 embedding 模型对古汉语的效果显著弱于现代文。可先用 GraphQL 的统计接口按朝代/体裁分批导入,而非一次性灌入 40 万条。

决策层/开源贡献者:数据质量(重复条目、作者信息缺失)和搜索能力(缺乏语义搜索)是两个最值得贡献的改进方向。


延伸思考

  1. 简繁"双写"策略在其他多语言场景下的泛化性如何?中文简繁是字符一对多映射(繁→简有歧义),本项目用预处理规避了这个歧义。但日语假名、东南亚文字的多字符集问题是否也能用同样策略?还是说简繁双写是中文特有的低成本方案,在其他语言里代价会指数级放大?

  2. GPL-3.0 许可证是否会成为生态扩展的天花板?数据源 MIT、服务代码 GPL-3.0,这个组合在商业项目中会产生传染性风险。如果作者将来希望吸引更多商业贡献者(如 SaaS 厂商贡献改进),是否应该考虑双授权(dual licensing)模式?这对开源项目的商业化路径有什么影响?

  3. 当"古典语料 + RAG"成为 AI 应用标配,数据质量将成为瓶颈而非数据数量—— 本项目 40 万首诗词中"其他"类占了 9.6 万首(约 25%),这部分数据的结构化程度、元数据完整性如何?当 LLM 的上下文窗口已经足够大,批量灌入低质量语料会不会反而降低 AI 应用的回答准确率?


参考信源:HelloGitHub - palemoky/chinese-poetry-api | zhupite.com - chinese-poetry 数据集介绍 | CSDN - 中国古诗词API推荐


📚 参考来源

  1. GitHub - palemoky/chinese-poetry-api: 📜 诗泉:高性能中国古诗词 API 服务 · GitHub

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询