- 版本控制: 在一个熟悉的系统中,将你的提示与应用程序代码一起进行版本控制。
- CI/CD 集成: 当关键提示发生变化时,触发自动化的暂存或生产部署。

先决条件
在开始之前,请确保你已设置好以下内容- GitHub 账户: 一个标准的 GitHub 账户。
- GitHub 仓库: 创建一个新的(或选择一个现有的)仓库,用于存储你的 LangSmith 提示清单。这可以是与你的应用程序代码相同的仓库,也可以是专门用于提示的仓库。
-
GitHub 个人访问令牌 (PAT)
- LangSmith webhooks 不直接与 GitHub 交互——它们调用一个*你*创建的中间服务器。
- 该服务器需要一个 GitHub PAT 来进行身份验证并向你的仓库提交更改。
- 必须包含 `repo` 范围(对于公共仓库,`public_repo` 就足够了)。
- 前往 GitHub > 设置 > 开发者设置 > 个人访问令牌 > 令牌(经典)。
- 点击 生成新令牌(经典)。
- 给它命名(例如,“LangSmith Prompt Sync”),设置一个过期时间,并选择所需的范围。
- 点击 生成令牌 并 立即复制它 —— 它不会再次显示。
- 安全地存储该令牌,并将其作为环境变量提供给你的服务器。
理解 LangSmith 的“提示提交”和 webhooks
在 LangSmith 中,当你保存对提示的更改时,你实际上是在创建一个新版本或一个“提示提交”。这些提交可以触发 webhooks。 该 webhook 将发送一个包含新 提示清单 的 JSON 负载。Webhook 负载示例
Webhook 负载示例
需要注意的是,LangSmith 中用于提示提交的 webhooks 通常在 工作区级别 触发。这意味着,如果你 LangSmith 工作区内的*任何*提示被修改并保存为“提示提交”,webhook 就会触发并发送该提示的更新清单。负载可以通过提示 ID 来识别。你接收服务器的设计应考虑到这一点。
实现一个用于接收 webhook 的 FastAPI 服务器
为了在提示更新时有效处理来自 LangSmith 的 webhook 通知,需要一个中间服务器应用程序。该服务器将作为接收 LangSmith 发送的 HTTP POST 请求的接收器。在本指南中,为了演示目的,我们将概述如何创建一个简单的 FastAPI 应用程序来完成此角色。 这个可公开访问的服务器将负责:- 接收 Webhook 请求: 监听传入的 HTTP POST 请求。
- 解析负载: 从请求体中提取并解释 JSON 格式的提示清单。
- 提交到 GitHub: 以编程方式在你指定的 GitHub 仓库中创建一个新的提交,其中包含更新后的提示清单。这确保你的提示保持版本控制,并与在 LangSmith 中所做的更改同步。
最简 FastAPI 服务器代码 ()
最简 FastAPI 服务器代码 ()
`main.py`此服务器将监听来自 LangSmith 的传入 webhooks,并将收到的提示清单提交到你的 GitHub 仓库。此服务器的关键方面
- 配置 (`.env`): 它期望一个包含你的 `GITHUB_TOKEN`、`GITHUB_REPO_OWNER` 和 `GITHUB_REPO_NAME` 的 `.env` 文件。你也可以自定义 `GITHUB_FILE_PATH`(默认:`LangSmith_prompt_manifest.json`)和 `GITHUB_BRANCH`(默认:`main`)。
- GitHub 交互: `commit_manifest_to_github` 函数处理获取当前文件的 SHA(以便更新它)然后提交新清单内容的逻辑。
- Webhook 端点 (`/webhook/commit`): 这是你的 LangSmith webhook 将要指向的 URL 路径。
- 错误处理: 包含了针对 GitHub API 交互的基本错误处理。
在 LangSmith 中配置 webhook
一旦你的 FastAPI 服务器部署完毕并且你有了它的公共 URL,你就可以在 LangSmith 中配置 webhook- 导航到你的 LangSmith 工作区。
-
前往 Prompts 部分。在这里,你会看到你的提示列表。

- 在“Prompts”页面的右上角,点击 + Webhook 按钮。
-
你会看到一个配置 webhook 的表单:

- Webhook URL: 输入你部署的 FastAPI 服务器端点的完整公共 URL。对于我们的示例服务器,这将是 `https://prompt-commit-webhook.onrender.com/webhook/commit`。
- Headers (可选)
- 你可以添加自定义头部,LangSmith 将随每个 webhook 请求一起发送。
- 测试 Webhook: LangSmith 提供了一个“发送测试通知”按钮。用它来向你的服务器发送一个示例负载。检查你的服务器日志(例如,在 Render 上),以确保它成功接收并处理了请求(或调试任何问题)。
- 保存 webhook 配置。
工作流实战

- 提示修改: 用户(开发人员或非技术团队成员)在 LangSmith UI 中修改提示并保存,从而创建一个新的“提示提交”。
- Webhook 触发: LangSmith 检测到这个新的提示提交并触发配置的 webhook。
- HTTP 请求: LangSmith 向你的 FastAPI 服务器的公共 URL(例如,`https://prompt-commit-webhook.onrender.com/webhook/commit`)发送一个 HTTP POST 请求。该请求的主体包含整个工作区的 JSON 提示清单。
- 服务器接收负载: 你的 FastAPI 服务器的端点接收到该请求。
-
GitHub 提交: 服务器从请求体中解析 JSON 清单。然后,它使用配置的 GitHub 个人访问令牌、仓库所有者、仓库名称、文件路径和分支来
- 检查清单文件是否已存在于指定分支的仓库中以获取其 SHA(这是更新现有文件所必需的)。
- 创建一个包含最新提示清单的新提交,如果文件不存在则创建文件,如果已存在则更新它。提交消息将表明这是一个来自 LangSmith 的更新。
-
确认: 你应该会在你的 GitHub 仓库中看到新的提交出现。

超越简单的提交
我们的示例 FastAPI 服务器直接提交了整个提示清单。然而,这只是一个起点。你可以扩展服务器的功能来执行更复杂的操作- 细粒度提交: 如果你希望在仓库中拥有更细粒度的结构,可以解析清单并提交对单个提示文件的更改。
- 触发 CI/CD: 服务器可以触发 CI/CD 流水线(例如 Jenkins、GitHub Actions、GitLab CI)来部署暂存环境、运行测试或构建新的应用程序版本,而不是(或除了)进行提交。
- 更新数据库/缓存: 如果你的应用程序从数据库或缓存加载提示,可以直接更新这些存储。
- 通知: 向 Slack、电子邮件或其他通信渠道发送关于提示更改的通知。
- 选择性处理: 基于 LangSmith 负载中的元数据(如果可用,例如哪个特定提示被谁更改),你可以应用不同的逻辑。
以编程方式连接这些文档到 Claude、VSCode 等,通过 MCP 获取实时答案。