#!/usr/bin/env python3 # -*- coding: utf-8 -*- """专题十三 · 步骤 7 · 修改前:备份 Agent 快照/草稿 retrieval(只读)。""" from __future__ import annotations import json import sys from pathlib import Path import _bootstrap # noqa: F401 import _config as C from dify_api import Dify def load_cfg(d: Dify, table: str, cid: str) -> dict: out, err = d.sh( "docker exec docker-db_postgres-1 psql -U postgres -d dify -t -A -c " "\"SELECT config_snapshot FROM %s WHERE id='%s'\"" % (table, cid) ) raw = out.strip() if not raw: raise RuntimeError(err or "empty config_snapshot") return json.loads(raw) def main() -> int: d = Dify(C.DIFY_EMAIL, C.DIFY_PASSWORD) try: d.login() snap = load_cfg(d, "agent_config_snapshots", C.SNAP_ID) draft = load_cfg(d, "agent_config_drafts", C.DRAFT_ID) bak_dir = Path(__file__).resolve().parent / "backup" bak_dir.mkdir(exist_ok=True) for name, cfg in [("snap_before", snap), ("draft_before", draft)]: p = bak_dir / ("专题十三_07_%s.json" % name) p.write_text(json.dumps(cfg, ensure_ascii=False, indent=2), encoding="utf-8") retr = cfg.get("knowledge", {}).get("sets", [{}])[0].get("retrieval", {}) print(name, "retrieval:", json.dumps(retr, ensure_ascii=False)) print(" -> 已备份", p) return 0 finally: d.close() if __name__ == "__main__": sys.exit(main())