<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>AI 工程 on 嘴强黑客 /pbuff07</title><link>https://pbuff07.github.io/categories/ai-%E5%B7%A5%E7%A8%8B/</link><description>Recent content in AI 工程 on 嘴强黑客 /pbuff07</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Fri, 27 Mar 2026 17:46:00 +0800</lastBuildDate><atom:link href="https://pbuff07.github.io/categories/ai-%E5%B7%A5%E7%A8%8B/index.xml" rel="self" type="application/rss+xml"/><item><title>Learn-Claude-Code(Tools)</title><link>https://pbuff07.github.io/posts/2026-03-27-learn-claude-codetools/</link><pubDate>Fri, 27 Mar 2026 17:46:00 +0800</pubDate><guid>https://pbuff07.github.io/posts/2026-03-27-learn-claude-codetools/</guid><description>&lt;p&gt;接上一篇 Agent 循环的实现，s01 搞清楚了 Agent 循环的本质就是一个 &lt;code&gt;while True&lt;/code&gt; 不断问 LLM、执行工具、再问 LLM。但那时候只有一个 bash 工具，啥都走 shell，多少有点暴力。&lt;/p&gt;
&lt;p&gt;s02 解决了一个很实际的问题：&lt;strong&gt;工具怎么扩展？&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="一个-handler-对应一个工具"&gt;一个 handler 对应一个工具&lt;/h2&gt;
&lt;p&gt;核心思路特别简单：把工具调用从硬编码改成字典查找。&lt;/p&gt;
&lt;p&gt;流程是这样的：用户输入 → LLM 决定调用哪个工具 → Tool Dispatch 字典查找对应 handler → 执行返回结果 → LLM 继续处理。&lt;/p&gt;
&lt;p&gt;s01 的时候，循环里直接写死了 &lt;code&gt;run_bash(block.input[&amp;quot;command&amp;quot;])&lt;/code&gt;。现在改成这样：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;TOOL_HANDLERS = {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;#34;bash&amp;#34;: lambda **kw: run_bash(kw[&amp;#34;command&amp;#34;]),
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;#34;read_file&amp;#34;: lambda **kw: run_read(kw[&amp;#34;path&amp;#34;], kw.get(&amp;#34;limit&amp;#34;)),
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;#34;write_file&amp;#34;: lambda **kw: run_write(kw[&amp;#34;path&amp;#34;], kw[&amp;#34;content&amp;#34;]),
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;#34;edit_file&amp;#34;: lambda **kw: run_edit(kw[&amp;#34;path&amp;#34;], kw[&amp;#34;old_text&amp;#34;],
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; kw[&amp;#34;new_text&amp;#34;]),
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;循环体里就变成了一行查找：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;handler = TOOL_HANDLERS.get(block.name)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;output = handler(**block.input) if handler \
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; else f&amp;#34;Unknown tool: {block.name}&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;加工具 = 加 handler + 加 schema，循环永远不用动。这个设计很干净。&lt;/p&gt;</description></item><item><title>Learn-Claude-Code(Agent)</title><link>https://pbuff07.github.io/posts/learn-claude-codeagent/</link><pubDate>Fri, 20 Mar 2026 17:00:00 +0800</pubDate><guid>https://pbuff07.github.io/posts/learn-claude-codeagent/</guid><description>&lt;p&gt;最近跟着 &lt;a href="https://github.com/shareAI-lab/learn-claude-code"&gt;learn-claude-code&lt;/a&gt; 学习 Agent 的构建，这是一个很好的教程，帮助我更清晰地了解 AI Agent 到底是如何工作的。&lt;/p&gt;
&lt;h2 id="agent-循环的本质"&gt;Agent 循环的本质&lt;/h2&gt;
&lt;p&gt;Agent 循环其实就是 &lt;code&gt;while True&lt;/code&gt; 的过程：LLM 根据用户问题不断&lt;strong&gt;分析问题 → 调用工具 → 分析结果&lt;/strong&gt;，直到不需要再调用工具就退出。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://pbuff-blogs-1257793641.cos.ap-chengdu.myqcloud.com//blogsimage-20260320163706719.png" alt="Agent循环流程图"&gt;&lt;/p&gt;
&lt;h2 id="动手实现一个最简单的-agent"&gt;动手实现一个最简单的 Agent&lt;/h2&gt;
&lt;p&gt;通过一段示例代码来构建一个最简单的 Agent。&lt;/p&gt;
&lt;h3 id="1-初始化配置"&gt;1. 初始化配置&lt;/h3&gt;
&lt;p&gt;首先初始化客户端，配置好系统提示词和工具（参数参考接口实现）。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;from&lt;/span&gt; anthropic &lt;span style="color:#f92672"&gt;import&lt;/span&gt; Anthropic
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;import&lt;/span&gt; os
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;client &lt;span style="color:#f92672"&gt;=&lt;/span&gt; Anthropic(
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; api_key&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;your-api-key-here&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; base_url&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;https://api.deepseek.com/anthropic/&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;system_prompt &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;You are a coding agent at {os.getcwd()}. Use bash to solve tasks. Act, don&amp;#39;t explain.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;tools &lt;span style="color:#f92672"&gt;=&lt;/span&gt; [{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;name&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;bash&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;description&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;Run a shell command.&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;input_schema&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;object&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;properties&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;command&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;string&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; },
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;required&amp;#34;&lt;/span&gt;: [&lt;span style="color:#e6db74"&gt;&amp;#34;command&amp;#34;&lt;/span&gt;],
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="2-主循环入口"&gt;2. 主循环入口&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;main()&lt;/code&gt; 函数负责持续接收用户输入，若有问题则传递给 &lt;code&gt;agent_loop&lt;/code&gt; 开始调用模型完成任务。&lt;/p&gt;</description></item><item><title>Langchain中create_agent和create_deep_agent对比</title><link>https://pbuff07.github.io/posts/2026-03-12-langchain%E4%B8%ADcreate_agent%E5%92%8Ccreate_deep_agent%E5%AF%B9%E6%AF%94/</link><pubDate>Thu, 12 Mar 2026 14:00:00 +0800</pubDate><guid>https://pbuff07.github.io/posts/2026-03-12-langchain%E4%B8%ADcreate_agent%E5%92%8Ccreate_deep_agent%E5%AF%B9%E6%AF%94/</guid><description>&lt;p&gt;对比分析Langchain中&lt;code&gt;create_agent&lt;/code&gt;和&lt;code&gt;create_deep_agent&lt;/code&gt;两个函数的实现原理与差异。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="一核心架构关系"&gt;一、核心架构关系&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;create_deep_agent&lt;/code&gt;本质上是基于&lt;code&gt;create_agent&lt;/code&gt;的高级封装：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;┌─────────────────────────────────────────────────────────────────┐
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ create_deep_agent │
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ ┌─────────────────────────────────────────────────────────────┐ │
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ │ 预配置层： │ │
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ │ • 内置中间件栈 │ │
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ │ • 子代理系统 (SubAgentMiddleware) │ │
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ │ • 技能系统 (SkillsMiddleware) │ │
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ │ • 记忆系统 (MemoryMiddleware) │ │
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ └──────────────────────────────┬──────────────────────────────┘ │
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ │ │
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ ▼ │
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ ┌─────────────────────────────────────────────────────────────┐ │
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ │ create_agent │ │
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ │ 核心引擎： │ │
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ │ • StateGraph 构建 │ │
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ │ • Model-Tool 循环 │ │
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ │ • 中间件钩子系统 │ │
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ │ • 结构化输出 │ │
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ └─────────────────────────────────────────────────────────────┘ │
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;└─────────────────────────────────────────────────────────────────┘
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="二create_agent---核心引擎"&gt;二、create_agent - 核心引擎&lt;/h2&gt;
&lt;h3 id="21-核心功能"&gt;2.1 核心功能&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;create_agent&lt;/code&gt;是一个&lt;strong&gt;通用的代理构建框架&lt;/strong&gt;，负责：&lt;/p&gt;</description></item><item><title>DeepAgent学习一</title><link>https://pbuff07.github.io/posts/2026-03-11-deepagent%E5%AD%A6%E4%B9%A0%E4%B8%80/</link><pubDate>Wed, 11 Mar 2026 10:00:00 +0800</pubDate><guid>https://pbuff07.github.io/posts/2026-03-11-deepagent%E5%AD%A6%E4%B9%A0%E4%B8%80/</guid><description>&lt;p&gt;AI时代学习知识还得回归古法，自己动手写代码去验证和实践，AI产出的东西始终都是AI的。&lt;/p&gt;
&lt;p&gt;要会用AI工具但也要懂如何设计AI工具。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="参考文章"&gt;参考文章&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://mp.weixin.qq.com/s/YBL6DWk_QXDcNUo7q_gISA"&gt;DeepAgents 技术深度解析：Skills 与 FilesystemBackend&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.langchain.com/oss/python/deepagents/overview"&gt;LangChain官方文档&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="deepagent是什么"&gt;DeepAgent是什么？&lt;/h2&gt;
&lt;p&gt;DeepAgent是LangChain公司在LangChain、LangGraph基础上推出的一种用于复杂任务规划、长时间执行的新的框架。简而言之就是一个新的框架，但是这个框架和LangChain、LangGraph有啥区别呢？&lt;/p&gt;
&lt;p&gt;根据官方文档，主要介绍了以下几个方面，其中我认为&lt;strong&gt;后端、次级代理、长期记忆、Skills和沙箱&lt;/strong&gt;是比较有特点的几个新特性。&lt;/p&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;模型 Models&lt;/li&gt;
&lt;li&gt;后端 Backends&lt;/li&gt;
&lt;li&gt;次级代理 SubAgent&lt;/li&gt;
&lt;li&gt;人机交互 Human-in-the-loop&lt;/li&gt;
&lt;li&gt;长期记忆 Long-time-memory&lt;/li&gt;
&lt;li&gt;渐进式技能 Skills&lt;/li&gt;
&lt;li&gt;沙箱 Sandbox&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;下面针对这些特性做一下我的简单理解和学习。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="模型-models"&gt;模型 Models&lt;/h2&gt;
&lt;p&gt;没有特别说明的，配置特定参数的话使用&lt;code&gt;init_chat_model&lt;/code&gt;函数即可。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;from&lt;/span&gt; langchain.chat_models &lt;span style="color:#f92672"&gt;import&lt;/span&gt; init_chat_model
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;from&lt;/span&gt; langchain_core.language_models &lt;span style="color:#f92672"&gt;import&lt;/span&gt; BaseChatModel
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;def&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;_get_model&lt;/span&gt;() &lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt; BaseChatModel &lt;span style="color:#f92672"&gt;|&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;None&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; api_key &lt;span style="color:#f92672"&gt;=&lt;/span&gt; os&lt;span style="color:#f92672"&gt;.&lt;/span&gt;environ&lt;span style="color:#f92672"&gt;.&lt;/span&gt;get(&lt;span style="color:#e6db74"&gt;&amp;#34;DEEPSEEK_API_KEY&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; &lt;span style="color:#f92672"&gt;not&lt;/span&gt; api_key:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;None&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; model_name &lt;span style="color:#f92672"&gt;=&lt;/span&gt; os&lt;span style="color:#f92672"&gt;.&lt;/span&gt;environ&lt;span style="color:#f92672"&gt;.&lt;/span&gt;get(&lt;span style="color:#e6db74"&gt;&amp;#34;DEEPSEEK_MODEL&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;deepseek-chat&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; init_chat_model(
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;f&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;openai:&lt;/span&gt;&lt;span style="color:#e6db74"&gt;{&lt;/span&gt;model_name&lt;span style="color:#e6db74"&gt;}&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; base_url&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;https://api.deepseek.com/v1&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; api_key&lt;span style="color:#f92672"&gt;=&lt;/span&gt;api_key,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; )
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="后端-backends"&gt;后端 Backends&lt;/h2&gt;
&lt;p&gt;DeepAgent提供了一个后端接口可以实现文件/命令级别的操作与访问，原来LangGraph执行系统命令可能只有通过tool调用，现在可以直接配置后端类型然后LLM根据提示词自己决策直接执行，灵活性更高。&lt;/p&gt;
&lt;p&gt;后端类型：默认类型、本地文件系统类型、本地shell类型、沙箱、复合类型和StoreBackend类型。&lt;/p&gt;
&lt;p&gt;默认类型临时状态吧，当前代码结束了也就结束了；复合类型和StoreBackend我有点不太明白，等需要用到了再说吧（&lt;a href="https://docs.langchain.com/oss/python/deepagents/backends"&gt;官方文档&lt;/a&gt;）。&lt;/p&gt;
&lt;h3 id="本地文件系统类型"&gt;本地文件系统类型&lt;/h3&gt;
&lt;p&gt;若提供这个后端，则这个agent就有了读写本机文件的权限，当然可以通过&lt;code&gt;root_dir&lt;/code&gt;参数设置具体的目录，&lt;code&gt;virtual_mode&lt;/code&gt;表示沙盒模式（看起来和sandboxs沙箱不是同一个东西，开启这个防止root_dir存在路径遍历漏洞，还需要在实践中看看具体用法？）&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;from&lt;/span&gt; deepagents.backends &lt;span style="color:#f92672"&gt;import&lt;/span&gt; FilesystemBackend
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;agent &lt;span style="color:#f92672"&gt;=&lt;/span&gt; create_deep_agent(
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; model&lt;span style="color:#f92672"&gt;=&lt;/span&gt;model,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; name&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;learn-agent&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; system_prompt&lt;span style="color:#f92672"&gt;=&lt;/span&gt;(
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;你是总协调者。收到用户的数学问题后，把整个运算任务交给 math-coordinator，&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;等它返回后把结果告诉用户。&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ),
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; skills&lt;span style="color:#f92672"&gt;=&lt;/span&gt;[&lt;span style="color:#e6db74"&gt;&amp;#34;./skills/&amp;#34;&lt;/span&gt;],
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; tools&lt;span style="color:#f92672"&gt;=&lt;/span&gt;[],
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; backend&lt;span style="color:#f92672"&gt;=&lt;/span&gt;FilesystemBackend(root_dir&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;./&amp;#34;&lt;/span&gt;, virtual_mode&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;True&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="本地shell后端"&gt;本地Shell后端&lt;/h3&gt;
&lt;p&gt;开启后可能除了可以读写本地文件还可以在本机执行系统命令？&lt;/p&gt;</description></item><item><title>大模型蒸馏技术原理</title><link>https://pbuff07.github.io/posts/2026-03-02-%E5%A4%A7%E6%A8%A1%E5%9E%8B%E8%92%B8%E9%A6%8F%E6%8A%80%E6%9C%AF%E5%8E%9F%E7%90%86/</link><pubDate>Mon, 02 Mar 2026 23:00:00 +0800</pubDate><guid>https://pbuff07.github.io/posts/2026-03-02-%E5%A4%A7%E6%A8%A1%E5%9E%8B%E8%92%B8%E9%A6%8F%E6%8A%80%E6%9C%AF%E5%8E%9F%E7%90%86/</guid><description>&lt;p&gt;本文探讨学习大模型蒸馏的原理与实现。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="什么是模型蒸馏"&gt;什么是模型蒸馏&lt;/h2&gt;
&lt;h3 id="定义"&gt;定义&lt;/h3&gt;
&lt;p&gt;模型蒸馏是一种将大型复杂模型（教师模型）的知识转移到小型简单模型（学生模型）的技术。核心思想是通过模仿教师模型的输出，使学生模型在保持较高性能的同时，显著减少模型大小和计算复杂度。&lt;/p&gt;
&lt;h3 id="类比理解"&gt;类比理解&lt;/h3&gt;
&lt;p&gt;想象老师教学生解数学题的过程：老师讲解每个步骤的解题思路和原因。学生通过学习老师的思路，能够理解题目并独立解决类似问题。学生不是直接抄答案，而是学习老师给出的&amp;quot;软答案&amp;quot;——即思维过程。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="为什么需要模型蒸馏"&gt;为什么需要模型蒸馏&lt;/h2&gt;
&lt;p&gt;优先集中力量训练一个超大模型，然后使用模型蒸馏技术创建一批小参数的模型，比如1.5B、7B这种节约资源而且效果还不错。&lt;/p&gt;
&lt;h3 id="计算资源消耗"&gt;计算资源消耗&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;训练成本高&lt;/strong&gt;：大模型参数量达数十亿甚至千亿，训练需数周甚至数月，消耗大量电力&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;推理速度慢&lt;/strong&gt;：计算需求庞大，难以实现实时响应&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;蒸馏技术通过知识迁移，在保持较高性能的前提下大幅减少计算开销，使硬件资源有限的环境也能实现高效推理。&lt;/p&gt;
&lt;h3 id="内存和存储资源"&gt;内存和存储资源&lt;/h3&gt;
&lt;p&gt;大模型推理时需要几十 GB 甚至上百 GB 内存，对 PC、手机、嵌入式设备等不现实。蒸馏技术压缩模型大小，显著减少内存和存储需求。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="蒸馏模型优势"&gt;蒸馏模型优势&lt;/h2&gt;
&lt;p&gt;假设有两个 7B 参数量的模型 A 和 B，架构完全相同：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;模型 A：通过蒸馏得到（教师模型能力强）&lt;/li&gt;
&lt;li&gt;模型 B：从零开始训练&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;模型 A 的表现通常优于模型 B，原因如下：&lt;/p&gt;
&lt;h3 id="知识迁移优势"&gt;知识迁移优势&lt;/h3&gt;
&lt;p&gt;蒸馏不仅是复制输出，而是让学生模型学习教师模型的决策过程、内部表示和隐含知识。模型 A 在训练中接受更多高质量指导，尤其在复杂推理、模式识别和特征提取方面。&lt;/p&gt;
&lt;h3 id="训练过程指导"&gt;训练过程指导&lt;/h3&gt;
&lt;p&gt;模型 B 从随机初始化开始，每个参数从头学习，需要更多数据和更长时间才能接近最优状态。模型 A 直接从教师模型学习，利用教师模型的&amp;quot;智慧&amp;quot;，在较少资源和数据下就能表现良好。&lt;/p&gt;
&lt;h3 id="泛化能力继承"&gt;泛化能力继承&lt;/h3&gt;
&lt;p&gt;大模型（教师模型）通常在大量数据上训练，具有强泛化能力。通过蒸馏，模型 A 能够继承部分泛化能力，尤其在面对不确定或少见的模式识别时表现更好。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="总结"&gt;总结&lt;/h2&gt;
&lt;p&gt;大模型蒸馏技术通过将大模型知识迁移到小模型，在保持较高性能的同时显著降低计算和存储成本。这一技术在资源受限环境下的模型部署中具有重要价值。&lt;/p&gt;
&lt;p&gt;蒸馏的核心是让学生模型学习教师模型的决策过程和内部表示，而不仅仅是复制输出。随着大模型应用场景的不断扩展，蒸馏技术将成为模型优化和部署的重要手段之一。&lt;/p&gt;</description></item><item><title>AI Skills安全</title><link>https://pbuff07.github.io/posts/2026-03-02-ai-skills-%E5%AE%89%E5%85%A8%E8%B0%83%E7%A0%94%E7%AC%94%E8%AE%B0/</link><pubDate>Mon, 02 Mar 2026 22:00:00 +0800</pubDate><guid>https://pbuff07.github.io/posts/2026-03-02-ai-skills-%E5%AE%89%E5%85%A8%E8%B0%83%E7%A0%94%E7%AC%94%E8%AE%B0/</guid><description>&lt;p&gt;最近在研究 AI Agent Skills 的安全问题，随着 AI 编程助手的普及，Skills 作为扩展 AI 能力的重要方式，其安全性值得深入关注。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="背景"&gt;背景&lt;/h2&gt;
&lt;p&gt;AI Skills 通常是指用于扩展 AI 编程助手能力的插件或脚本。用户可以从开源平台下载各种 Skills 来增强 AI 的功能，但这也带来了潜在的安全风险。&lt;/p&gt;
&lt;p&gt;与传统软件供应链攻击不同，Skills 的攻击形式更为隐蔽——攻击者可以通过自然语言描述来构造恶意行为，而非直接嵌入恶意代码。这使得基于特征库的传统检测手段往往失效。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="安全现状分析"&gt;安全现状分析&lt;/h2&gt;
&lt;h3 id="攻击路径简单"&gt;攻击路径简单&lt;/h3&gt;
&lt;p&gt;攻击者只需要在开源平台发布包含恶意内容的 Skill 文件，等待受害者下载使用即可。攻击门槛极低，且难以追踪。&lt;/p&gt;
&lt;h3 id="权限失控风险"&gt;权限失控风险&lt;/h3&gt;
&lt;p&gt;AI Skills 通常拥有较高的系统权限，包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Shell 命令执行&lt;/li&gt;
&lt;li&gt;文件系统读写&lt;/li&gt;
&lt;li&gt;环境变量访问（可能包含敏感凭证）&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="传统防御失效"&gt;传统防御失效&lt;/h3&gt;
&lt;p&gt;基于特征库的检测方式面临挑战：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;恶意行为可以通过自然语言描述实现&lt;/li&gt;
&lt;li&gt;编码和混淆技术可以绕过静态检测&lt;/li&gt;
&lt;li&gt;AI 的自然语言理解能力使得检测更加复杂&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="市面上出现的skills安全检测工具"&gt;市面上出现的skills安全检测工具&lt;/h2&gt;
&lt;h3 id="开源工具"&gt;开源工具&lt;/h3&gt;
&lt;h4 id="agent-skills-guard"&gt;Agent Skills Guard&lt;/h4&gt;
&lt;p&gt;一款提供 Skills 安全扫描和可视化管理的桌面应用。&lt;/p&gt;
&lt;p&gt;检测类别包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;破坏性操作（删除文件、磁盘擦除）&lt;/li&gt;
&lt;li&gt;远程代码执行（管道执行、反序列化）&lt;/li&gt;
&lt;li&gt;命令注入（动态命令拼接）&lt;/li&gt;
&lt;li&gt;网络外传、权限提升&lt;/li&gt;
&lt;li&gt;持久化后门、敏感信息泄露&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;特点&lt;/strong&gt;：使用正则规则匹配，检测速度快，但对编码混淆的检测能力有限，误报率较高。&lt;/p&gt;
&lt;p&gt;GitHub: &lt;a href="https://github.com/brucevanfdm/agent-skills-guard"&gt;https://github.com/brucevanfdm/agent-skills-guard&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id="skill-audit"&gt;skill-audit&lt;/h4&gt;
&lt;p&gt;模块化的 Skills 安全审计 CLI 工具，提供多层次检测：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Prompt 注入检测&lt;/strong&gt; - 检测越狱相关的提示词模式&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;密钥扫描&lt;/strong&gt; - 集成 trufflehog/gitleaks&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Shell 脚本分析&lt;/strong&gt; - 使用 shellcheck&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;代码安全分析&lt;/strong&gt; - 使用 semgrep&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;特点&lt;/strong&gt;：包含独特的 Prompt 注入检测功能，但对编码混淆的恶意 Skill 检测能力有限。&lt;/p&gt;</description></item><item><title>Langchain学习笔记</title><link>https://pbuff07.github.io/posts/2025-09-15-langchain%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/</link><pubDate>Mon, 15 Sep 2025 14:00:00 +0800</pubDate><guid>https://pbuff07.github.io/posts/2025-09-15-langchain%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/</guid><description>&lt;p&gt;最近在研究langchain和langgraph，记录一下学习过程。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;参考文章&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Agent入门说明：https://medium.com/data-science/building-a-simple-agent-with-tools-and-toolkits-in-langchain-77e0f9bd1fa5&lt;/li&gt;
&lt;li&gt;工具链文档：https://python.langchain.com/docs/integrations/toolkits/&lt;/li&gt;
&lt;li&gt;DeepSeek配置：https://docs.langchain.com/oss/python/integrations/chat/deepseek&lt;/li&gt;
&lt;li&gt;模型文档：https://docs.langchain.com/oss/python/integrations/chat&lt;/li&gt;
&lt;li&gt;LangGraph概览：https://docs.langchain.com/oss/python/langgraph/overview&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;环境配置&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;python3 -m venv venv
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;source venv/bin/activate
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pip install langchain langchain_openai langchain-deepseek
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pip install -qU langchain-deepseek
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;调用DeepSeek的demo&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;from&lt;/span&gt; langchain_deepseek &lt;span style="color:#f92672"&gt;import&lt;/span&gt; ChatDeepSeek
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;llm &lt;span style="color:#f92672"&gt;=&lt;/span&gt; ChatDeepSeek(
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; model&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;deepseek-chat&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; api_key&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; api_base&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;https://api.deepseek.com/v1&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; extra_body&lt;span style="color:#f92672"&gt;=&lt;/span&gt;{&lt;span style="color:#e6db74"&gt;&amp;#34;reasoning&amp;#34;&lt;/span&gt;: {&lt;span style="color:#e6db74"&gt;&amp;#34;enabled&amp;#34;&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;True&lt;/span&gt;}},
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; temperature&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; max_tokens&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;None&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; timeout&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;None&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; max_retries&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;messages &lt;span style="color:#f92672"&gt;=&lt;/span&gt; [
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; (&lt;span style="color:#e6db74"&gt;&amp;#34;system&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;You are a helpful assistant that translates English to Chinese. Translate the user sentence.&amp;#34;&lt;/span&gt;),
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; (&lt;span style="color:#e6db74"&gt;&amp;#34;human&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;I love programming.&amp;#34;&lt;/span&gt;),
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ai_msg &lt;span style="color:#f92672"&gt;=&lt;/span&gt; llm&lt;span style="color:#f92672"&gt;.&lt;/span&gt;invoke(messages)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;print(ai_msg&lt;span style="color:#f92672"&gt;.&lt;/span&gt;content)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;langchain-tool&lt;/strong&gt;&lt;/p&gt;</description></item></channel></rss>