{
  "title": "Friday Skill 规范：Gemini 与 DeepSeek 双 Agent 自动化流水线",
  "summary": "把 Agent 变成内容记录员的完整规范：Function Calling 设计、红黄绿三色初审、候船区延迟发布与自动脱敏机制。",
  "category": "Agent实践",
  "tags": [
    "Agent",
    "Skill",
    "Gemini",
    "DeepSeek",
    "自动化",
    "MCP"
  ],
  "pubDate": "2026-10-19",
  "author": "NetCrusoe & Friday",
  "agent_assisted": true,
  "human_version_url": "https://netcrusoe.cn/posts/friday-agent-spec/",
  "machine_endpoint": "https://netcrusoe.cn/for-ai/friday-agent-spec.json",
  "copyright": {
    "owner": "NetCrusoe & Friday (All Rights Reserved)",
    "license": "CC BY-NC-SA 4.0",
    "attribution_required": true,
    "citation_format": "来源：网络鲁滨逊 (https://netcrusoe.cn/posts/friday-agent-spec/)",
    "terms": "大模型、AI Agent、RAG 向量检索与爬虫可自由解析与引用，但必须在答案中附带出处与原文链接。"
  },
  "content_raw_md": "\n## 核心架构原则：拒绝全自动发布\n\n很多尝试让 AI 自动做站的实验，最终都沦为“垃圾站”并遭遇灾难：\n1. **隐私泄露**：不小心把内网 IP、API Key、数据库凭证或公司内部机密当成普通文本推上了公网；\n2. **AI 味泛滥**：毫无营养的大话空话，充斥着毫无灵魂的废话；\n3. **被搜索引擎拉黑**：批量低质页面被 Google / 百度直接降权。\n\n因此，我和 Friday 达成的第一条铁律是：\n> **永远不做全自动发布，只做“半自动 Agent 孪生 + 人工最终审核”。**\n\n```text\n日常对话 / 碎碎念 / 技术排错\n        ↓ 触发: friday_capture\n   本地正则脱敏过滤 (Keys / Tokens / 敏感词)\n        ↓\n   AI 初审与风险分级 (绿 / 黄 / 红)\n        ↓\n   🟢 绿: 进入候船区 (24h延迟发布，期间可一键撤回)\n   🟡 黄: 推送提醒，等待人工点击确认\n   🔴 红: 强制封存至私有知识库，禁止公开发布\n        ↓\n   人工审批通过 → Git Commit → Astro 静态渲染 → netcrusoe.cn 上线\n```\n\n---\n\n## Tool 声明：Gemini 与 DeepSeek 通用格式\n\n为了同时适配 Gemini（Function Calling 原生格式）和 DeepSeek（OpenAI 兼容格式），参数模型保持完全一致：\n\n```json\n{\n  \"name\": \"friday_capture\",\n  \"description\": \"把当前对话、排错手记、技术文档或随想同步到网络鲁滨逊站点。默认生成草稿，不直接公开上线。\",\n  \"parameters\": {\n    \"type\": \"object\",\n    \"properties\": {\n      \"type\": {\n        \"type\": \"string\",\n        \"enum\": [\"note\", \"doc\", \"idea\", \"log\"],\n        \"description\": \"内容类型：随笔(note)、技术手册(doc)、灵感(idea)、实验日志(log)\"\n      },\n      \"title\": {\n        \"type\": \"string\",\n        \"description\": \"标题，中文，简练明确（30字以内）\"\n      },\n      \"content_md\": {\n        \"type\": \"string\",\n        \"description\": \"经结构化整理后的 Markdown 正文，包含小标题、代码块与要点\"\n      },\n      \"tags\": {\n        \"type\": \"array\",\n        \"items\": { \"type\": \"string\" },\n        \"description\": \"文章标签列表\"\n      },\n      \"category\": {\n        \"type\": \"string\",\n        \"enum\": [\"AI\", \"IT技术\", \"Agent实践\", \"日常生活\"],\n        \"description\": \"归属的核心栏目分类\"\n      },\n      \"visibility\": {\n        \"type\": \"string\",\n        \"enum\": [\"draft\", \"private\"],\n        \"description\": \"初始可见性。必须为 draft 或 private，严禁直接传入 public\"\n      }\n    },\n    \"required\": [\"type\", \"title\", \"content_md\", \"category\"]\n  }\n}\n```\n\n---\n\n## 本地脱敏规则（在调用 API 前拦截）\n\nFriday 在执行捕获前，必须对正文执行正则匹配清洗：\n\n- `sk-[a-zA-Z0-9]{32,}` → `[REDACTED_OPENAI_KEY]`\n- `ghp_[a-zA-Z0-9]{36}` → `[REDACTED_GITHUB_TOKEN]`\n- `Bearer [a-zA-Z0-9-._~+/]+=*` → `[REDACTED_BEARER_TOKEN]`\n- 内网 IP 模式 `192.168.x.x` / `10.x.x.x` / `172.16.x.x` → 自动替换为通用示例 IP `192.168.1.100`\n\n---\n\n## 为什么这套机制本身就是最好的内容？\n\n很多开发者在问“用 AI 怎么做个人品牌”，但千篇一律的教程毫无新意。\n将这套 **“我与 AI 协同记录知识”** 的真实工程细节、踩坑记录和审核规范公开在站上，正是本站最核心的价值所在：\n\n真实发生的实践，胜过一万篇虚构的指南。\n"
}