Day 6: Clawdbot 最佳实践:把 Prompt 当代码管,把配置当数据管
标题备选
- Clawdbot 最佳实践:把 Prompt 当代码管,把配置当数据管
- 硬编码是万恶之源:如何优雅地管理 AI 工作流配置?
- 让运营也能改 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
为什么这么做?
-
非技术人员友好: 运营同事觉得筛选规则不准,想加一个关键词?你不用重新部署代码,直接让他们改一下 YAML 文件(或者提供一个简单的后台界面)。
-
环境隔离: 你可以有
config_test.yaml和config_prod.yaml。 测试环境发给测试邮箱,生产环境发给客户。代码逻辑完全复用,不会出现"测试完忘记改回生产地址"的低级错误。 -
回滚神器: 当线上出现问题需要回滚时,你只需要把配置里的
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