Day 6: Clawdbot 最佳实践:把 Prompt 当代码管,把配置当数据管

Day 6: Clawdbot 最佳实践:把 Prompt 当代码管,把配置当数据管

标题备选

  1. Clawdbot 最佳实践:把 Prompt 当代码管,把配置当数据管
  2. 硬编码是万恶之源:如何优雅地管理 AI 工作流配置?
  3. 让运营也能改 AI 策略:逻辑与配置分离的艺术

正文内容

你的 Clawdbot 代码里,是不是充斥着这样的东西:

# 糟糕的硬编码
prompt = "请去 https://www.example.com/daily-news 抓取数据,然后发送给 admin@company.com..."

这就叫逻辑与配置耦合。 如果你想换个网址抓取?改代码。 你想换个收件人?改代码。 你想把 Prompt 里的"抓取前 10 条"改成"抓取前 20 条"?还是得改代码。

在工程化实践中,我们必须把变动频率不同的东西分离开。

核心原则:Config vs Logic

  • Logic (逻辑/代码): 也就是你的 Python/JS 脚本,定义了"怎么跑"(先抓取、再校验、后发送)。这部分变动频率低。
  • Config (配置/数据): 也就是 URL、Prompt 模板、阈值、收件人列表。这部分变动频率高。

最佳实践:YAML/JSON 配置文件

把所有的可变参数抽离到一个独立的配置文件中(比如 workflow_config.yaml)。

# workflow_config.yaml
tasks:
  daily_news_scan:
    target_url: "https://www.example.com/daily-news"
    max_items: 20
    retry_count: 3
    prompts:
      # 支持引用 Prompt 文件
      scraper: "./prompts/scraper_v2.txt"
      analyzer: "./prompts/analyzer_finance.txt"
    notification:
      email_to: ["boss@company.com", "me@company.com"]

Prompt 版本管理:像管代码一样管 Prompt

Prompt 本质上也是代码。它也应该有版本号。不要在代码里直接写字符串。

建议的目录结构:

/my-clawdbot-project
  /src
    main.py
  /config
    prod.yaml
    test.yaml
  /prompts
    /scraper
      v1.txt
      v1.5_fix_pagination.txt
      v2.0_new_layout.txt

为什么这么做?

  1. 非技术人员友好: 运营同事觉得筛选规则不准,想加一个关键词?你不用重新部署代码,直接让他们改一下 YAML 文件(或者提供一个简单的后台界面)。

  2. 环境隔离: 你可以有 config_test.yamlconfig_prod.yaml。 测试环境发给测试邮箱,生产环境发给客户。代码逻辑完全复用,不会出现"测试完忘记改回生产地址"的低级错误。

  3. 回滚神器: 当线上出现问题需要回滚时,你只需要把配置里的 version: v2.0 改回 version: v1.5,瞬间恢复服务。不需要重新 Build 镜像,不需要重新部署服务。

动态注入 (Templating)

你的 Prompt 文件不应该是死的,它应该是一个模板。 使用 Jinja2 这样的模板引擎,可以让你的 Prompt 活起来。

Prompt 文件 (prompts/scraper.txt):

"请访问 {{ target_url }}。提取前 {{ max_items }} 条新闻。..."

代码:

from jinja2 import Template
template = Template(read_file("prompts/scraper.txt"))
final_prompt = template.render(target_url="...", max_items=20)

把 Prompt 当作代码去 Commit,把参数当作配置去 Inject。 这才是成熟的工程化思路。

明天是最后一天,我们将跳出具体的代码,聊聊这个领域的未来——从"脚本小子"到"自动化架构师"的职业进阶


标签:#配置管理 #DevOps #工程化 #最佳实践 #Clawdbot

← 返回博客列表