bug: get prompt api

当 Prompt 模板名称包含斜杠(如 user/prompt-1 )且通过 GET /api/public/v2/prompts/:promptName?label=latest 直接调用 API 获取时,接口会返回 404。优先排查 Prompt 名称是否带路径分隔符、请求时是否做了 URL 编

快速结论:当 Prompt 模板名称包含斜杠(如 user/prompt-1)且通过 GET /api/public/v2/prompts/:promptName?label=latest 直接调用 API 获取时,接口会返回 404。优先排查 Prompt 名称是否带路径分隔符、请求时是否做了 URL 编码。

适用环境:Langfuse 自托管(self-hosted),Issue 中报告版本为 3.112.0;未提供操作系统、Python、SDK、依赖等版本信息。

最快修复方案:升级到 2025-09-03 之后发布、包含 PR #8876 修复的 Langfuse 版本。若暂时无法升级,可优先尝试在直接调用 API 时对 Prompt 名称做 URL 编码。

注意事项:URL 编码只是 Issue 讨论中给出的规避方式,并非官方文档已确认的说明;使用 SDK(如 Python 的 langfuse.get_prompt()、JS/TS 的 langfuse.getPrompt())通常会自行处理编码,但直接调用 HTTP API 时需要手动编码。官方文档目前未提及该限制。

问题场景

用户在 Langfuse 自托管环境中创建了带文件夹层级的 Prompt 模板,名称形如 user/prompt-1,随后通过公共 API 的 GET /api/public/v2/prompts/:promptName?label=latest 获取该模板,接口返回 404,无法取到 Prompt 模板。

报错原文

GET /api/public/v2/prompts/:promptName?label=latest
404 error

原因分析

Issue 讨论指出这是已知问题:API 路由实现默认没有正确处理 Prompt 名称中的斜杠(/),导致带文件夹前缀的名称被当作路径分段解析,从而匹配不到对应 Prompt 并返回 404。除非名称经过 URL 编码,否则直接以原始名称请求会失败。该问题已在 PR #8876(2025-09-03 合并)中修复,因此该日期之后发布的版本应已包含修复。

环境排查

  • 确认 Langfuse 自托管版本是否为 3.112.0,或是否低于包含 PR #8876 的版本。
  • 确认 Prompt 名称是否包含斜杠等文件夹层级字符(如 user/prompt-1)。
  • 确认请求方式是直接调用 HTTP API 还是通过 SDK 调用。
  • Issue 未提供操作系统、Python、CUDA、显卡、节点或依赖版本信息,无需据此排查。

解决步骤

  1. 若当前版本早于 2025-09-03,升级到包含 PR #8876 的 Langfuse 版本,然后重新请求该 Prompt。
  2. 若暂时无法升级,可优先尝试在直接调用 API 时对 Prompt 名称做 URL 编码(例如 Python 使用 urllib.parse.quote,JS/TS 使用 encodeURIComponent),再用编码后的名称拼接请求路径。
  3. 检查是否混用了 SDK 与直接 HTTP 调用:SDK 方法通常会自动编码,直接 API 调用则需要手动编码。

验证方法

使用同样的 user/prompt-1 名称(或编码后的名称)再次请求 GET /api/public/v2/prompts/:promptName?label=latest,确认返回 200 并成功取回 Prompt 模板,而不是 404。

参考来源

langfuse/langfuse #9310

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 30036

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注