[{"content":"用 cc-switch 让 Claude Code 接入 DeepSeek/GLM 等非 Anthropic 后端的完整配置教程,来自公众号\u0026quot;AI智管局·小王\u0026quot;的实操总结。\n核心思路 Claude Code 只认 Anthropic 协议;后端模型如果是 OpenAI 格式(GLM/OpenCode),需要一个\u0026quot;翻译\u0026quot;中间层。 cc-switch 自带本地代理,自动做协议转换,这是它的核心价值。 DeepSeek 例外:它有原生 Anthropic 端点(api.deepseek.com/anthropic),可直连不经过代理。 配置步骤 安装:brew install --cask cc-switch,首次启动自动初始化数据库 ~/.cc-switch/cc-switch.db。 添加供应商: 方式一(新手):UI 点橙色\u0026quot;+\u0026quot; → 选预设(DeepSeek/智谱GLM)→ 填 API Key → 保存。 方式二(批量):Deep Link 导入,格式: ccswitch://v1/import?resource=provider\u0026amp;app=claude\u0026amp;name=DeepSeek\u0026amp;endpoint=https://api.deepseek.com\u0026amp;apiKey=你的KEY 用 open \u0026quot;ccswitch://...\u0026quot; 触发,弹确认框点\u0026quot;导入\u0026quot;。 配置模型映射:Claude Code 启动时会发 haiku 预检请求(模型名 claude-haiku-4-5),DeepSeek/GLM 不认识这个名字会直接 401,必须在编辑面板里做映射: Sonnet(主力编码)→ glm-5.2 或 deepseek-chat Opus(复杂推理)→ 同上 Haiku(快速任务)→ deepseek-v4-flash 或 glm-4.5-air 默认兜底必须填,不填会透传原始 Claude 模型名报错。 开启路由代理(仅 OpenAI 格式供应商需要,DeepSeek 不需要):设置 → 路由 tab → 打开\u0026quot;路由总开关\u0026quot; → 勾选\u0026quot;Claude\u0026quot;接管 → 确认启用。 三个坑 别直接写 SQLite 数据库:数据进去了但代理不注入 API Key,所有请求 401。cc-switch 的代理认证同步机制不走数据库读取,必须通过 UI 或 Deep Link 的原生流程初始化。 API 格式选错:DeepSeek 选 \u0026ldquo;Anthropic Messages\u0026rdquo; 直连;GLM/OpenCode 必须选 \u0026ldquo;OpenAI Chat Completions\u0026rdquo; 并开启路由代理做协议转换。 改完配置必须重启:通过数据库改了配置(如 apiFormat),UI 不实时同步,代理也不重新加载。必须 kill 掉 cc-switch 进程重开。 验证 终端执行 echo \u0026quot;Say hello\u0026quot; | claude --print,有正常回复即全链路跑通。 配置成功标志:~/.claude/settings.json 里的 ANTHROPIC_BASE_URL 应变成 http://127.0.0.1:15721(代理地址)。 报错时查 ~/.cc-switch/logs/cc-switch.log,搜 \u0026ldquo;forwarder\u0026rdquo; 看请求转发情况。 日常使用 三步上手:cd 到项目目录 → 输入 claude 启动 → 直接用中文描述要干什么。 切换供应商:在 cc-switch App 点对应卡片\u0026quot;启用\u0026quot;,不需要改命令。 切换路由总开关:设置 → 路由,一键开关。DeepSeek 直连模式不需要代理,最快最稳。 配套开源技能(含 Deep Link 批量导入脚本、模型映射清单、代理日志排查方法、常见报错对应表):cc-switch-guide\n来源:AI智管局(小王),原文 cc-switch配置全教程:Claude Code接入DeepSeek和GLM\n","permalink":"https://idev.life/kb/cc-switch-claude-code-guide/","summary":"用 cc-switch 让 Claude Code 接入 DeepSeek/GLM 等非 Anthropic 后端的完整配置流程,以及作者踩过的三个坑(数据库直写、API 格式选错、改配置不重启)。","title":"cc-switch 配置全教程:Claude Code 接入 DeepSeek 和 GLM"},{"content":"Matt Pocock(TypeScript 专家,Total TypeScript 创始人)的 Skills 是一套为 AI 编程助手(Claude Code、Codex 等)设计的工程实践技能集。核心理念是:小、可组合、可适配,强调开发者保持控制权,而非像 GSD、BMAD 等框架那样接管整个流程。这些技能基于数十年的软件工程经验,将经典工程实践转化为可重复的 AI 协作模式。\n核心工作流拆解 Matt 的工作流是一个完整的需求 → 设计 → 实施 → 审查闭环,分为以下阶段:\n阶段 1:对齐(Alignment) 核心技能:/grill-me 和 /grill-with-docs。这是 Matt 最核心的技能。当用户提出一个需求时,AI 不是立即开始编码,而是反向拷问用户——通过 relentless interview(无情的访谈)挖掘所有隐含假设和未明确的决策分支。\n工作流程:\n用户提出想法 AI 开始系统性提问:目标用户是谁?边界条件是什么?错误场景如何处理? 直到决策树的每个分支都被解决 /grill-with-docs 额外产出:CONTEXT.md(领域词汇表)和 ADR(架构决策记录) 解决的问题:\u0026ldquo;No-one knows exactly what they want\u0026rdquo; —— 软件开发中最常见的失败模式是需求错位。\n阶段 2:规格化(Specification) 核心技能:/to-spec。将对齐阶段的对话综合成一份结构化的规格说明文档(类似 PRD),发布到 Issue Tracker。\n规格模板包含:\n问题陈述(Problem Statement) 解决方案(Solution) 用户故事(User Stories)—— 大量、编号的 \u0026ldquo;As an\u0026hellip;, I want\u0026hellip;, so that\u0026hellip;\u0026rdquo; 格式 实施决策(Implementation Decisions)—— 模块、接口、架构决策,不包含具体代码 测试决策(Testing Decisions)—— 测试哪些模块、测试边界 范围外(Out of Scope) 关键原则:使用项目的领域词汇(来自 CONTEXT.md),尊重已有的 ADR。\n阶段 3:任务拆分(Ticket Breakdown) 核心技能:/to-tickets。将规格说明拆分为 tracer-bullet tickets(追踪子弹工单),每个工单声明其阻塞边界。\n特点:\n每个工单是一个垂直切片(vertical slice) 明确声明依赖关系和阻塞边界 可输出到 GitHub Issues、Linear 或本地文件 阶段 4:实施(Implementation) 核心技能:/implement + /tdd。实施阶段采用严格的 TDD(测试驱动开发)循环。\n关键规则:\n只在预定义的 seams(接缝)处测试——公共边界,而非内部实现 一次一个垂直切片,不要水平切片(不要先写所有测试再写所有实现) 测试必须验证行为,而非实现细节 反模式警告:\n实现耦合测试(mock 内部协作者) 同义反复测试(expect(add(a,b)).toBe(a+b)) 水平切片(批量写测试再批量写实现) 阶段 5:代码审查(Code Review) 核心技能:/code-review。双轴审查:\n标准轴:是否遵循仓库编码标准 + Fowler 代码异味基线 规格轴:是否忠实实现了原始 Issue/PRD 通过并行子代理运行,确保两个维度互不污染。\n阶段 6:架构改进(Architecture Improvement) 核心技能:/improve-codebase-architecture。定期(建议每几天一次)扫描代码库,寻找深化模块的机会。\n工作流程:\n扫描代码库,识别可改进区域 生成可视化 HTML 报告 让用户选择一个改进点 启动 /grill-with-docs 深入讨论该改进 辅助技能 调试技能 /diagnosing-bugs:纪律化的调试循环 原型技能 /prototype:构建一次性原型回答设计问题——可以是终端应用(状态/逻辑问题)或多个 UI 变体(从同一路由切换) 领域建模 /domain-modeling:主动构建和锐化项目的领域模型:挑战术语与词汇表的一致性、用边界场景压力测试、更新 CONTEXT.md 和 ADR 路由技能 /ask-matt:询问哪个技能或流程适合当前情况——整个技能库的路由器 技能分类体系 Matt 将技能按调用方式分为两类:规则 与 用户调用技能。模型可以调用技能,但不能调用另一个用户调用技能。\n书籍思想溯源 Matt 的工作流深深植根于经典软件工程著作:\n《The Pragmatic Programmer》(David Thomas \u0026amp; Andrew Hunt) 核心思想:DRY(Don\u0026rsquo;t Repeat Yourself)、正交性(Orthogonality)、曳尾石(Tracer Bullets)、小步前进(Small Steps)。\n在 Matt 技能中的体现:\n书籍概念 Matt 技能 具体实践 曳尾石 Tracer Bullets /to-tickets tracer-bullet tickets,端到端薄切片验证 小步前进 Small Steps /tdd 红-绿循环,一次一个垂直切片 需求模糊 /grill-me 通过拷问消除\u0026quot;没人知道想要什么\u0026quot; 《Domain-Driven Design》(Eric Evans) 核心思想:通用语言(Ubiquitous Language)、限界上下文(Bounded Context)、实体/值对象/聚合、防腐层(Anti-Corruption Layer)。\n在 Matt 技能中的体现:\n书籍概念 Matt 技能 具体实践 通用语言 Ubiquitous Language CONTEXT.md 项目词汇表,1 个词代替 20 个词 领域建模 /domain-modeling 主动构建和锐化领域模型 对齐阶段建立语言 /grill-with-docs 拷问同时产出 CONTEXT.md 和 ADR 书中例子:\u0026ldquo;There\u0026rsquo;s a problem when a lesson inside a section of a course is made \u0026lsquo;real\u0026rsquo;\u0026rdquo; → \u0026ldquo;There\u0026rsquo;s a problem with the materialization cascade\u0026rdquo; —— 这就是通用语言的力量。\n《Extreme Programming Explained》(Kent Beck) 核心思想:TDD、重构(Refactoring)、简单设计(Simple Design)、持续集成(Continuous Integration)。\n在 Matt 技能中的体现:\n书籍概念 Matt 技能 具体实践 TDD 测试驱动开发 /tdd 严格的红-绿-重构循环 重构 Refactoring /improve-codebase-architecture \u0026ldquo;每天投资系统设计\u0026quot;的实践 代码审查 /code-review 重构在审查阶段,不在 TDD 循环内 《A Philosophy Of Software Design》(John Ousterhout) 核心思想:深模块(Deep Modules)、信息隐藏(Information Hiding)、分层设计(Layered Design)、定义错误(Errors)。\n在 Matt 技能中的体现:\n书籍概念 Matt 技能 具体实践 深模块 Deep Modules /codebase-design 小接口、大行为的设计纪律 信息隐藏 /tdd seams 概念 在公共边界测试,不穿透模块 分层设计 /improve-codebase-architecture 寻找深化模块的机会 关键洞察 AI 时代的工程纪律更重要:AI 加速了编码,但也加速了软件熵。没有纪律的 AI 编程会产生更快的混乱。解决方案不是限制 AI,而是更严格地应用工程 fundamentals。 通用语言是效率杠杆:一个精心维护的 CONTEXT.md 让 AI 能用 1 个词代替 20 个词,减少 token 消耗,提高代码一致性,让代码库更易导航。 反馈循环决定质量:没有反馈的 AI 是盲目的。TDD、类型检查、浏览器访问构成了反馈三角,其中 TDD 提供了最结构化的反馈循环。 深模块是设计目标:不是更多模块,而是更深的模块——简单接口、丰富行为、清晰边界。这是对抗复杂性的核心武器。 实践建议 如果你想采用 Matt 的工作流:\n从 /grill-me 开始:养成在编码前对齐需求的习惯 建立 CONTEXT.md:花时间定义项目的通用语言 严格执行 TDD:红-绿循环不是可选的,是纪律 定期架构审查:每几天运行 /improve-codebase-architecture 小步前进:一次一个垂直切片,不要批量操作 原文:公众号「麦坊」《Matt Pocock Skills 工作流深度分析》\n","permalink":"https://idev.life/kb/matt-pocock-skills-workflow/","summary":"Matt Pocock 的 Skills 是一套为 Claude Code、Codex 等 AI 编程助手设计的工程实践技能集,核心理念是小、可组合、可适配,强调开发者保持控制权,覆盖需求对齐到代码审查的完整闭环。","title":"Matt Pocock Skills 工作流深度分析:AI 编程助手的工程实践技能集"},{"content":"Matt Pocock 把日常用的 .claude 目录推到 GitHub 后 160K Star 冲到 trending 第一。36 个 skill 里,teach 是个异类——它不写代码、不跑测试、不审 PR,只做一件事:教你学会新东西。它把\u0026quot;老师\u0026quot;这个角色编码进了 AI。\n这篇文章不讲 skill 怎么写,只讲 /teach 怎么用、什么场景好使、踩过什么坑。\n/teach 做了什么 装好之后,去一个空目录,输入 /teach,告诉它你想学什么。接下来它做了五件事:\n先搞清楚你为什么学——触发后第一件事不是上课,是帮你写 mission.md。它追问的是动机,不是知识点。 搜一手资料,不是二手总结——搜索 Web 找高可信度一手资料存进 resources.md,后续持续更新。 用 HTML 做课件,不是 Markdown——课程存在 lessons/ 目录,编号递增,全部是 HTML 文件,支持交互图表、可点击练习步骤、guided mode(开/关提示)。 每节课后记录你的反馈——学完问\u0026quot;掌握了吗\u0026quot;,回答写进 learning records。 下次打开,它知道你卡在哪——清空上下文、关掉窗口、过一周再打开,输入 /teach 它检查 workspace、读 learning records、诊断卡点、直接出下一课。这是 /teach 和\u0026quot;让 AI 出个教程\u0026quot;最根本的区别。 动手之前,先知道这几件事 必须用空目录:/teach 把当前目录当教学 workspace,Mission、课程、学习记录、术语表全写进去,别在项目目录里跑。 模型选择:Matt 推荐 Opus 4.8,medium effort。\u0026ldquo;把它当一对一老师用,不是搜索引擎。更聪明的模型 = 更好的老师。\u0026rdquo; 它教的是技能,不是百科全书:适合需要\u0026quot;练\u0026quot;的东西(魔方、象棋开局、声乐和声、编程语言、代码库 onboarding),不适合\u0026quot;帮我总结一下二战史\u0026quot;。 每节课很短,故意的:教育心理学概念\u0026quot;最近发展区\u0026quot;(Zone of Proximal Development,ZPD)——教学应刚好在学生被挑战但不被吓到的区域。 HTML 课件需要浏览器打开:.html 文件点开就是完整课件,图示、callout、测验、交互练习都在里面,手机上也能看。 它不会陪你到最后:当学生的问题需要 wisdom 时,AI 尝试回答但最终委派到社区。目标是给你足够信心走出去跟真人学。 什么时候用它 学一门新编程语言:先问你的现有水平,定 mission,搜高质量资源,出 HTML 课件,每课带练习,下次打开接着来。 新人 Onboarding:给新人一个独立目录指到代码库,让 /teach 教他代码怎么交互、核心概念是什么。文档对每个人都不一样——根据每个人的起点出不同的课。 学一个\u0026quot;一直想学但没时间碰\u0026quot;的东西:魔方、象棋开局、吉他指法、日语五十音。 练一个具体技能点:不是\u0026quot;学钢琴\u0026quot;,是\u0026quot;练好 C 大调音阶的指法\u0026quot;。越具体越好用。 常见翻车现场 别在已经有文件的目录跑,Workspace 会乱,开一个新的空目录。 第一次的 mission 写认真点,AI 根据 mission 决定教什么、教多深。\u0026ldquo;我想学 Python\u0026quot;和\u0026quot;我想用 Python 写一个能从 Excel 读取数据并生成 PDF 报表的脚本\u0026rdquo;——后面的课完全不一样。 别指望它替代系统课程:Teach 是私人教师,不是培训机构,擅长针对性补强和兴趣驱动学习。 反馈要说实话:\u0026ldquo;差不多懂了\u0026quot;和\u0026quot;完全掌握了\u0026quot;会让 AI 走完全不同的路径。 清空上下文不是 bug 是设计:每次新会话都是空上下文,但进度在文件里,重新输入 /teach 它自己读回来。 安装和开始 # 单独装 teach npx skills add https://github.com/mattpocock/skills/tree/main/skills/teach # 或者装全套 npx skills@latest add mattpocock/skills 然后找一个空目录,在 Claude Code 或 Codex 里输入 /teach。\nMatt Pocock 的设计哲学 一个教了 10 年书的人 Matt 做了 6 年声乐教练、4 年 TypeScript 教学。10 年教学经验告诉他:好的教学永远是有状态的。\u0026ldquo;我教学生的时候,我记得你学到哪了,我知道你掌握了什么、下一步该学什么。我还记得之前教类似内容时用过的那些好资源。\u0026ldquo;所以他一 start 就把 teach 设计成 stateful——往文件系统里写东西,跨会话记住进度。\nStateful vs Stateless 这是 skill 设计最基础的分水岭:无状态 skill 不存任何东西,关掉上下文就归零;有状态 skill 写文件或 MCP 服务器,下次接着来。Matt 自己的两个 skill 做对照:grill-me 完全 stateless(拷问你,完事就完事),grill-with-docs 是 stateful(往仓库里存 ADR、术语表,用得越多项目上下文越丰富)。\u0026ldquo;不是说哪个更好,它们只是适用不同场景。设计 skill 的时候,你得想清楚它需要哪种模式。\u0026rdquo;\nHTML 课件的真正威力 课程文件是 HTML 不是 Markdown,是 teach 最精彩的设计决策。交互按钮、guided mode、可点击步骤、动态图示——让 AI 从\u0026quot;讲给你听\u0026quot;变成\u0026quot;带着你练\u0026rdquo;。\u0026ldquo;我们现在有浏览器的全部能力可以用。这就是 Markdown 做不到的事。\u0026rdquo;\n最近发展区:为什么每节课都要短 教学应该始终发生在学生刚好被挑战、但不被吓到的区域。每节课必须紧凑、聚焦、精确框在 ZPD 内。这也是为什么 teach 把所有东西存到文件系统——每次清空上下文重新跑 /teach,AI 立刻回到你的 ZPD,不需要重新摸索。\nKnowledge → Skills → Wisdom 三层框架 Matt 在 skill 文件里定义了一套教学哲学,而不是只给操作指令:\nKnowledge(知识):来自高可信度一手资料,AI 帮你整理和解释。 Skills(技能):通过 HTML 交互课件练习,带着你做,不是讲给你听。 Wisdom(智慧):必须来自社区,跟真人讨论、参加比赛、在真实世界检验想法。 当学生的问题到了 wisdom 层,AI 的默认姿态是\u0026quot;尝试回答,但最终委派到社区\u0026rdquo;。\u0026ldquo;Teach skill 的目标不是让你永远依赖 AI 学习一切。它要给你足够的技能和信心,让你走出去、加入社区、融入真实世界。\u0026rdquo;\n工程场景:代码库 Onboarding \u0026ldquo;写文档真的很痛苦。不仅要保持更新,而且那些文档很可能不在这个人的最近发展区里。他可能用过你的技术栈,只是需要理解具体的问题域;也可能熟悉问题域但完全不懂 TypeScript。\u0026ldquo;用 teach 模式:给新人一个独立 workspace,让他自己学代码怎么交互、核心概念是什么,产出的是一个极短时间内就能干活的人。\n开发者是 AI 的第一批先遣队 \u0026ldquo;AI 写代码的能力远超其他任何领域。我们是第一批能在 AI 极其擅长的问题上测试它的人。练出来的这些技能、建立的这些直觉——可以带出编程,迁移到任何其他地方。\u0026ldquo;\u0026ldquo;不管未来的工作形态怎么变,跟 AI 协作的能力都是极其宝贵的。我们就是最先掌握它的人。\u0026ldquo;我们今天的肌肉记忆,会是明天所有人的基础设施。\n原文:公众号「钉子之家」《Matt Pocock 教你把 Claude Code 变成私人教师 - /teach Skill 完整使用指南》\n","permalink":"https://idev.life/kb/matt-pocock-teach-skill-guide/","summary":"Matt Pocock 的 /teach skill 把 Claude Code 变成有状态的私人教师:写 mission、搜一手资料、出 HTML 交互课件、跨会话记住学习进度,并详解其设计哲学(Stateful、最近发展区、Knowledge→Skills→Wisdom 框架)。","title":"Matt Pocock 教你把 Claude Code 变成私人教师:/teach Skill 完整使用指南"},{"content":"SearXNG 官方推荐的容器化部署方式是 Compose 模板(docker-compose.yml + .env.example),核心配置统一放在 core-config/ 目录;本文还覆盖手动 instancing、持久化卷、环境变量、自定义证书以及从旧版 searxng-docker 项目迁移。\n前置条件 需要 Docker(推荐)或 Podman Docker:把当前用户加入 docker 组并重新登录会话: sudo usermod -aG docker $USER Podman 一般无需额外步骤,但建议阅读 Podman rootless 容器注意事项 镜像仓库 DockerHub 对未认证拉取有速率限制,受影响时改用 GHCR 镜像:\nDockerHub GHCR 镜像 Compose 部署(推荐) 声明式部署,带合理默认值。\n初始化 # 1. 创建环境与配置目录 mkdir -p ./searxng/core-config/ cd ./searxng/ # 2. 拉取最新 compose 模板 curl -fsSL \\ -O https://raw.githubusercontent.com/searxng/searxng/master/container/docker-compose.yml \\ -O https://raw.githubusercontent.com/searxng/searxng/master/container/.env.example # 3. 复制并编辑 .env cp -i .env.example .env nano .env # 4. 启动服务 docker compose up -d # 5. 在 core-config/settings.yml 里配置各项设置 停止服务用 docker compose down。\n日常管理命令 操作 命令 更新模板 docker compose down → 重新 curl 两个文件 → docker compose up -d 更新服务镜像 docker compose down → docker compose pull → docker compose up -d 查看服务列表 docker compose ps 查看日志 docker compose logs -f core 进容器 shell(排障) docker compose exec -it --user root core /bin/sh -l 停止并删除 docker compose down 注意:更新模板后要检查新模板对部署的影响,并同步更新 .env。\ndocker compose ps 典型输出:\nNAME IMAGE ... CREATED STATUS PORTS searxng-core ... ... 3 minutes ago Up 3 minutes 0.0.0.0:8080-\u0026gt;8080/tcp searxng-valkey ... ... 3 minutes ago Up 3 minutes 6379/tcp 手动部署(高级用户) 仅用于自定义部署,官方推荐 Compose:\nmkdir -p ./searxng/config/ ./searxng/data/ cd ./searxng/ docker run --name searxng -d \\ -p 8888:8080 \\ -v \u0026#34;./config/:/etc/searxng/\u0026#34; \\ -v \u0026#34;./data/:/var/cache/searxng/\u0026#34; \\ docker.io/searxng/searxng:latest 访问 http://localhost:8888。\n管理命令:docker container list / docker container logs -f searxng / docker container exec -it --user root searxng /bin/sh -l(提示符变为 /usr/local/searxng #)/ docker container stop searxng 后 docker container rm searxng。\n持久化卷 必须挂载两个卷:\n卷 用途 /etc/searxng 配置文件(settings.yml 等) /var/cache/searxng 持久化数据(faviconcache.db 等) 环境变量 $SEARXNG_* — 控制 SearXNG 配置项(对应 server:、general: 等设置,见 .env.example 模板) $GRANIAN_* — 控制 Granian 服务器参数 $FORCE_OWNERSHIP — 确保挂载的卷/文件归 searxng:searxng 用户所有(默认:true) 自定义证书 挂载 /usr/local/share/ca-certificates/ 目录来添加/移除证书 容器(重新)启动时生效,或在容器内执行 update-ca-certificates 要求容器以 root 权限运行 自定义镜像(非官方支持) git clone https://github.com/searxng/searxng.git cd ./searxng/ make container 从 searxng-docker 迁移 官方预期旧项目目录结构:\nsearxng-docker ├── searxng │ ├── favicons.toml │ ├── limiter.toml │ ├── settings.yml │ └── ... ├── .env ├── Caddyfile ├── docker-compose.yml └── ... 迁移步骤:\n在 searxng-docker 目录之外新建环境,按上方 Compose 部署流程初始化 新环境跑起来后,停掉服务,把旧配置从旧挂载点移到新目录: mv ./searxng-docker/searxng/* ./searxng/core-config/ 如果用到了 Valkey 特性(如 bot 防护 limiter),需要把 settings.yml 里的 URL hostname 改为 valkey 或 searxng-valkey 旧 .env 里如果有环境变量,记得同步到新 .env 如果实例要公网暴露,考虑配置反向代理 确认新环境一切正常后,删除旧 searxng-docker 目录 迁移完成后的目标结构:\n. ├── searxng │ ├── core-config │ │ ├── favicons.toml │ │ ├── limiter.toml │ │ ├── settings.yml │ │ └── ... │ ├── .env.example │ ├── .env │ └── docker-compose.yml └── searxng-docker └── ... 原文:https://docs.searxng.org/admin/installation-docker.html (SearXNG Documentation,版本 2026.8.1+8892414dc)\n","permalink":"https://idev.life/kb/searxng-docker-installation/","summary":"SearXNG 官方 Docker 部署文档:推荐 Compose 模板方式(核心配置在 core-config/),也覆盖手动 docker run、卷挂载、环境变量、自定义证书与从旧 searxng-docker 迁移。","title":"SearXNG Docker 安装部署官方指南"},{"content":"Go 中几乎所有方法的第一个参数都是 ctx(context.Context),它的价值不是让当前函数使用,而是让整个调用链拥有统一的生命周期,并且请求元数据可以传递到每个地方。\n一个典型的业务调用链 调用链中的每一层可能不会直接使用 ctx,但都会负责继续传递它。这正是 Go 社区约定俗成的规范:ctx 是调用链的\u0026quot;信使\u0026quot;。\n好处一:控制请求生命周期 当请求 HTTP、数据库、Redis 时,外层超时或主动取消后,内层 IO 不应继续等待,而是立即返回取消错误。一般 http、db、redis 库都已实现好,只需传入 ctx:\n// 伪代码 select { case \u0026lt;-ctx.Done(): // ctx 被取消 case res \u0026lt;- db.Read(): // 等待 db 返回数据 } 好处二:跨层级传递请求元数据 请求的元信息(用户、租户、数据权限等)放入 ctx,后续每一层都可随时获取:\n// service 层 或 中间件中 type userIdKey struct{} var userIDCtxKey = userIdKey{} // 给 ctx 加入 123 ctx = context.WithValue(ctx, userIDCtxKey, 123) // 在后面的传递中,使用携带了元信息的 ctx 好处三:日志关联 经过前面的封装,ctx 中包含用户信息。封装打印日志的方法时,可以把相关请求信息一并打出来,让日志可关联、可检索。\n好处四:链路追踪 给公司所有项目添加链路追踪时,发现没有 ctx 的 IO 工具函数无法把链路串起来。例如:\n// UploadOSS 上传文件到阿里云 OSS // file 要上传的文件路径 func UploadOSS(file string) (string, error) { // 通过 http 将文件上传到云 } 没有 ctx 就无法在链路中串联这条 IO,也就无法完整追踪整条请求路径。\n总结 Context 最大的价值不是让当前函数使用,而是让整个调用链拥有统一的生命周期,并且请求元数据能够传递到每个地方。这正是为什么 Go 项目里几乎每个方法都带 ctx——它是调用链的统一契约。\n","permalink":"https://idev.life/kb/go-context-why-everywhere/","summary":"Go 中 context.Context 无处不在的根本原因:它让整个调用链拥有统一的生命周期,并能把请求元数据传递到每一层。","title":"为什么Go项目到处都是 ctx?"},{"content":"图工程是循环工程(loop engineering)的继任者:不再把步骤排成一条线,而是设计\u0026quot;工作的形状\u0026quot;——什么先跑、什么同时跑、什么得等,让 agent 跑宽 10 倍。核心工具是 Claude Code 的动态工作流(dynamic workflows)。\n图工程是什么 单循环有一个已知的失败方式:某个支持团队把反馈循环绑在\u0026quot;工单解决率\u0026quot;上,数字连涨几个月,用户满意度却一路走低——机器人学会了快关工单,而不是解决问题。这就是古德哈特定律(Goodhart\u0026rsquo;s law):循环只能看见自己的指标,没法问目标对不对。\n答案不是更好的循环,而是由循环组成的图:一张网络,里面的循环互相盯、互相纠。对 agent 而言,这意味着——不要再写一个把所有事排成一条线的 agent,去设计工作的形状。\n核心概念:节点与边 节点(node):一个工作单元——一个 agent、一个任务、一个输入、一个输出。 边(edge):一段依赖——这个节点的输出,喂给那个节点的输入。 所有人都会犯的错,是把\u0026quot;然后\u0026quot;当成一条边。\u0026ldquo;总结这个文件,然后告诉我天气\u0026rdquo;——天气根本不读那个总结。每碰到一个\u0026quot;然后\u0026quot;就问:下一步真的会读上一步的输出吗?\n会 → 真边,保留顺序。 不会 → 没有边,那个等是白等,让它们并排跑。 两个盒子之间没有数据穿越,它们就是独立的。普通 agent 其实已经是一张图,只是最寒酸的单链:C 一堵,D 永远不会发生。\n第 1 步:看见那些不存在的边 (即上面的节点/边判断法——\u0026ldquo;然后\u0026quot;不等于依赖,挖出隐藏的独立性是整份指南的地基。)\n第 2 步:搭起你的第一张图 前置条件:\nClaude Code v2.1.154+(用 claude --version 查看) 付费套餐:Max/Team/Enterprise 上 workflows 默认开启;Pro 需在 /config 打开 Dynamic workflows。 搭建流程:\n打开一个你熟悉的真实仓库。 粘贴 Anthropic 提供的 prompt,例如:Create a workflow to audit every route file under src/routes/ for missing auth checks. Spawn one agent per file, then run an independent verifier on each finding before reporting. Analyze a maximum of 20 files to start.——把路径换成自己的,max 20 让首次试跑别花太多。 看 \u0026ldquo;workflow\u0026rdquo; 亮起来:Claude Code 高亮提示 \u0026ldquo;Dynamic workflow requested.\u0026quot;,这就是正在搭图的信号。 批准计划:Claude 会写一段 JavaScript 编排脚本并先展示各阶段,读一遍,点 \u0026ldquo;Yes, run it.\u0026quot;。 让舰队开跑:一个文件一个 agent,并行跑。输入 /workflows 看实况:scope(范围)、fan-out(扇出)、verify(验证)、synthesize(合成)。 读那一个答案:不是二十个分开的对话,而是一份报告——中间结果活在脚本变量里,不占你的上下文。 关于\u0026quot;零 token\u0026quot;的说法 协调脚本是代码,agent 之间传结果不会像对话交接那样重新吃一遍上下文。但 agent 本身还是要花用量的:一次 workflow 的成本明显高于一次普通会话。省的是协调开销,不是干活的开销。先小范围起步,盯用量,再放开。\n把它变成你的 \u0026amp; 扩展上限 某次跑得好,按 s,会存到 ~/.claude/workflows,可按名字复跑——改任务、保形状。一次 workflow 最多扇出到 1,000 个 agent,同时干活 16 个;\u0026ldquo;同时 16 个\u0026quot;只是舰队分波次推进,全程不用盯任何一个。\n第 3 步:真正会塌的地方 两种失败最要命:\n失败一:图跟自己附和。 当 agent 检查自己的活,它对自己下不去手——模型偏爱自己产出的东西。解法是加一个独立的验证器(verifier)节点:把执行节点那段对话原样塞给它,它就不是在验证,而是换了个字体跟自己附和。一群共享同一上下文的 agent 组成的图,就是穿了马甲的单循环。验证器必须是全新节点、自己的上下文,检查真实信号(\u0026ldquo;测试真的过了\u0026rdquo;,不是\u0026quot;agent 说了算\u0026rdquo;)。 失败二:agent 互相踩脚。 Bun 团队第一次把大型移植任务扇开时工程上失败了——多个 agent 在同一工作区用相同 git 命令互相覆盖。修法是结构性的:禁掉不安全命令,给每组 agent 各自隔离的 worktree。 扇开之前回答三个问题:每个 agent 在哪儿干活?结果怎么合?两个 agent 起冲突时怎么办?\n第 4 步:本周可搭的六张图 同一个形状,对准新活儿:\n安全扫描——一个文件一个 agent 找缺失的 auth,验证器确认每条命中。 带引用的报告——/deep-research:拆成多个角度并行检索,agent 互相反驳后写。 移植一个模块——一个文件一个文件,测试当闸门,失败回环。 对抗式 diff 评审——按体量路由:小改动一轮,大改动全量并行审计。 定时生态扫描——存一次,按名字复跑。 未知规模的探查——finder 并行跑,每个结果对照已见过的所有结果,循环到连续两轮没新东西。 真实天花板:Bun 的 Zig → Rust 移植 Simon Willison 的报道:Bun 的 Zig → Rust 移植跑的就是这套机器——约 50 个 workflow,峰值 64 个 agent 并行,约 53.5 万行 Zig 变成超一百万行 Rust,11 天,花费约 16.5 万美元用量。规模是真的,代价和所需的人力盯防也是真的。\n第 5 步:让图保持诚实的锚点 光靠拓扑买不来真相。图需要锚点(anchors)——那些没法被反驳的节点:\n真的跑过的测试——不是\u0026quot;应该过\u0026rdquo;,是\u0026quot;过了\u0026rdquo;。 看证据、不凭感觉的验证器。 冻结的规则——agent 永远不许动它们,因为正是这些规则最容易被优化器悄悄削弱。 一张图有多诚实,取决于里面那些拒不挪窝的东西。\n什么时候不该用图 任务小或独立:加一个函数、修一个 bug,workflow 是纯粹额外开销——一个 agent 更快更便宜。 你要盯得很紧:想每一步都读了批了再跑下一步,图\u0026quot;不用盯就能跑得很宽\u0026quot;的设计反而对着干。 还没搞清楚在找什么:探索性活儿要能随时掰方向的 agent,不是钉死在计划上的舰队。 各步骤确确实实相互依赖:每一步都读上一步的输出,就是真正的链,并行无处下口,硬套只多协调开销、零加速。 判断诀窍就是第 1 步:连两个之间没有箭头的盒子都找不到,就没什么图可搭。那就是个循环,而循环挺好的。\n转变 提问者问问题,架构师画图。线性 agent 只是第一个形状——因为它和我们打字的方式对得上。一旦看见节点和边:活儿独立的地方扇出去,可信度要紧的地方给边把关,冻住握着真相的节点。\n原文:公众号「AI领先趋势」图工程:一个 prompt、一个窗口,跑起 1000+ 个 agent 循环(完整 5 步教程)\n","permalink":"https://idev.life/kb/graph-engineering-agent-workflows/","summary":"图工程(graph engineering)教程:用 Claude Code 动态工作流把线性 agent 变成节点-边构成的图,一个窗口最多扇出 1000 个 agent(16 个并发),附 5 步搭建法、三大塌方陷阱与适用边界。","title":"图工程:一个 prompt、一个窗口,跑起 1000+ 个 agent 循环(完整 5 步教程)"},{"content":"李博杰《深入理解 AI Agent:设计原理与工程实践》的开源主仓库,全书正文、编译版 PDF/EPUB 与按章配套代码全部开源(Apache 2.0)。\n核心公式 Agent = LLM + 上下文 + 工具\n全书 10 章围绕这一公式展开,强调 Harness 工程(而非模型本身)才是真正的竞争壁垒。\n章节概览 章 主题 一句话核心 实验数 1 Agent 基础知识 Agent = LLM + Context + Tools;Harness 工程是核心竞争力 4 2 上下文工程 上下文决定能力上限:KV Cache、提示工程、Agent Skills、上下文压缩 9 3 用户记忆和知识库 跨会话用户记忆 + 外部知识:用户记忆、RAG、结构化索引、知识图谱 13 4 工具 工具是 Agent 的手:MCP 协议、感知/执行/协作工具、事件驱动异步 Agent、主动工具发现 7 5 Coding Agent 与代码生成 代码是\u0026quot;能创造新工具的工具\u0026quot;;生产级 Coding Agent 全景 12 6 Agent 的评估 把性能变成可比较的信号:评估环境、指标、统计显著性、评估驱动的模型选型 12 7 模型后训练 预训练/SFT/RL 各阶段:何时选 SFT vs RL、工具调用内化、样本效率 16 8 Agent 的持续进化 从轨迹中学习信号;更新知识、指令、程序与参数 9 9 多模态与实时交互 文本→语音、GUI、物理世界:三种语音范式、Computer Use、机器人 10 10 多 Agent 协作 集体智能 \u0026gt; 个体:协作框架、上下文共享/隔离、涌现的\u0026quot;Agent 社会\u0026quot; 8 获取方式 中文原版 PDF / EPUB:https://github.com/bojieli/ai-agent-book/releases/download/latest/AI-Agents-in-Depth-zh-CN.pdf(.epub) 在线阅读:https://bojieli.github.io/ai-agent-book/ — 多语言切换、章节折叠、全文搜索,每次 main 推送自动重建 其他语言:英、西、印尼、阿拉伯、繁中、俄、泰米尔、越、日、土、韩、匈牙利语,均走 releases/download/latest/ 同款命名 源码自建:book/ 下为中文源(chapter1.md–chapter10.md + 前言/后记),翻译在 book-en/ 等目录(可能滞后于中文版);图在 book/images/(SVG) 阅读指南:https://github.com/bojieli/ai-agent-book/blob/main/docs/zh-CN/LEARNING.md — 学习路径、难度分级、练习建议 运行配套实验 要求 Python 3.10+(部分浏览器/记忆实验需 3.11+,第 8 章部分组件需 3.12+),按章安装:\n# 推荐:用提交的 uv.lock 复现环境 uv sync --locked --extra ch1 # 不用 uv 时用 pip 从 pyproject.toml 重新解析 python -m pip install -e \u0026#34;.[ch1]\u0026#34; 运行实验(仓库根目录):\nuv run python chapter1/context/main.py # pip 方式: python chapter1/context/main.py 要点:\nAPI 凭证按各实验 README 配置;根目录 .env.example → .env 部分实验可用,其他需要本地 .env 或环境变量 只有 README/CLI 明确列出 ollama 时才用本地 Ollama(加 --provider ollama) 可组合 extras:uv sync --locked --extra ch2 --extra vllm all extra = 不含本地训练栈的 CPU 友好组合(不代表每个实验) 浏览器、CUDA、FFmpeg、Ollama、Playwright 等系统依赖按各实验 README 安装 ⚠️ 实验执行状态单独追踪:docs/EXPERIMENT_STATUS.md — clone/install 完成 ≠ 实验跑通 来源:李博杰《深入理解 AI Agent》开源仓库 https://github.com/bojieli/ai-agent-book\n","permalink":"https://idev.life/kb/ai-agent-book-deep-dive/","summary":"李博杰《深入理解 AI Agent》开源书:10 章覆盖 Agent 从原理到工程实践,含 95 个配套实验,中英等 13 种语言,免费 PDF/EPUB 下载。","title":"深入理解 AI Agent:设计原理与工程实践(李博杰)开源书"}]