2026/4/13 17:50:37
网站建设
项目流程
网站架构设计师有哪些学校可以报考,服装公司简介,交换机做网站,哈尔滨网站建设教学❝该系列文章基于 github.com/shareAI-lab/learn-claude-code 写就#xff0c;该仓库以大道至简的风格剖析了Claude Code的核心原理#xff0c;值得大家学习。由于该仓库是基于Python语言#xff0c;为方便.NET开发者学习#xff0c;我已经将代码基于.NET 10的dotnet file …❝该系列文章基于github.com/shareAI-lab/learn-claude-code写就该仓库以大道至简的风格剖析了Claude Code的核心原理值得大家学习。由于该仓库是基于Python语言为方便.NET开发者学习我已经将代码基于.NET 10的dotnet file重写源码已上传至github源码地址见文末。v0: Bash 就是一切 - 最简 Agent 的哲学❝本文是 Learn Claude Code (C# 版) 系列的第一篇对应代码文件v0_bash_agent.cs。核心问题构建了各种复杂的 Agent 系统后我们追问一个根本问题Agent 的本质是什么答案令人惊讶地简单一个工具 一个循环 完整的 Agent 能力。为什么 Bash 就够了Unix 哲学说一切皆文件一切皆可管道。Bash 是通往这个世界的大门你需要Bash 命令读取文件cat,head,tail,grep写入文件echo ... file,cat EOF file搜索find,grep,rg,ls执行python,npm,dotnet, 任何命令子代理dotnet run v0_bash_agent.cs task最后一行是关键洞察通过 bash 调用自身实现子代理代码解析唯一的工具定义var bashTool new Tool { Name bash, Description 执行 shell 命令。常用模式: - 读取: cat/head/tail, grep/find/rg/ls, wc -l - 写入: echo content file, sed -i s/old/new/g file - 子代理: dotnet run v0_bash_agent.cs 任务描述 , InputSchema new InputSchema { Type object, Properties new Dictionarystring, JsonElement { [command] JsonDocument.Parse({type: string}).RootElement }, Required [command] } };工具定义就是告诉模型你可以做什么。注意Description中包含了使用模式——这是在教模型如何使用工具。核心 Agent 循环async Taskstring ChatAsync(string prompt, ListMessage? history null) { history ?? []; history.Add(prompt.AsUserMessage()); while (true) { // 1. 调用模型 var response await client.CreateMessageAsync(modelId, history, tools); // 2. 添加助手消息到历史 history.Add(response.AsRequestMessage()); // 3. 如果没有工具调用完成 if (response.StopReason ! StopReason.ToolUse) return ExtractText(response); // 4. 执行工具并添加结果 var results await ExecuteToolsAsync(response); history.Add(results); } }这就是所有 Agent 的核心模式调用模型- 带上历史消息和可用工具检查是否需要工具-StopReason.ToolUse表示模型想调用工具执行工具- 运行模型请求的命令继续循环- 把结果反馈给模型直到它认为任务完成子代理机制v0 最精妙的设计是通过 bash 实现子代理主 Agent |-- bash: dotnet run v0_bash_agent.cs 分析架构 |-- 子 Agent (隔离进程干净历史) |-- bash: find . -name *.cs |-- bash: cat src/Program.cs |-- 通过 stdout 返回摘要进程隔离 上下文隔离子进程有自己的消息历史不会污染父 Agent 的上下文。这是一个简单但强大的设计。系统提示的艺术var systemPrompt $ 你是一个位于 {workDir} 的 CLI agent。使用 bash 命令解决问题。 规则: - 行动优先简短解释。 - 读取文件: cat, grep, find, rg, ls, head, tail - 写入文件: echo ... file, sed -i, 或 cat EOF file - 子代理: 对于复杂子任务生成子代理: dotnet run v0_bash_agent.cs 探索 src/ 并总结架构 何时使用子代理: - 任务需要读取很多文件隔离探索过程 - 任务独立且自包含 - 你想避免用中间细节污染当前对话 ;系统提示做了几件事定义身份- 你是一个 CLI agent提供上下文- 当前工作目录教授模式- 怎么读文件、写文件引导策略- 何时使用子代理关键洞察1. 极简主义的力量v0 证明了一个反直觉的观点一个工具可以做一切。不需要专门的read_file、write_file工具。cat、echo就够了。但这种极简主义有代价——模型需要更多 tokens 来思考怎么用 bash 完成任务。2. 模型即决策者代码只做两件事提供工具bash运行循环所有决策都由模型做调用什么命令、以什么顺序、何时停止。3. 递归的优雅子代理不是新概念只是递归。v0_bash_agent.cs调用自己就像函数调用自己一样自然。运行示例# 交互式模式 dotnet run v0_bash_agent.cs 列出当前目录的 cs 文件 $ ls *.cs v0_bash_agent.cs v1_basic_agent.cs ... 分析 v0_bash_agent.cs 的结构 $ head -50 v0_bash_agent.cs ...# 子代理模式 dotnet run v0_bash_agent.cs 探索 src/ 并总结架构从 v0 到 v1v0 证明了最简可行性但在实际使用中有局限效率- 用 bash 读文件比专用工具慢需要更多 tokens安全- 没有路径检查可能逃逸工作目录可读性-echo ... file不如write_file直观v1 将引入专用工具read_file、write_file、edit_file在保持核心循环不变的前提下优化这些方面。总结v0 的哲学❝Bash 就是一切。一个工具 一个循环 完整的 Agent。这不是最实用的设计但它揭示了 Agent 的本质:模型是 80%代码是 20%。