<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>changel 的博客</title><description>技术与生活</description><link>https://fuwari.vercel.app/</link><language>zh_CN</language><item><title>Deep Agents：下一代 AI Agent 架构深度解析</title><link>https://fuwari.vercel.app/posts/deep-agents-architecture/</link><guid isPermaLink="true">https://fuwari.vercel.app/posts/deep-agents-architecture/</guid><description>从架构设计到实现原理，深入探讨 Deep Agents 如何突破传统 Agent 的局限，实现复杂任务的自主执行。</description><pubDate>Mon, 20 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;引言&lt;/h2&gt;
&lt;p&gt;2024 年，我们见证了 AI Agent 从简单的&quot;工具调用循环&quot;向真正的自主系统演进。传统的 Agent 在面对多步骤、长时程的复杂任务时往往力不从心——它们缺乏规划能力、无法管理持久状态、难以处理子任务委派。&lt;strong&gt;Deep Agents&lt;/strong&gt;（深度智能体）的出现，标志着 AI Agent 架构从 1.0 时代迈向 2.0 时代。&lt;/p&gt;
&lt;p&gt;本文将从架构设计、核心组件、实现原理等多个维度，深入剖析 Deep Agents 的技术本质。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;一、传统 Agent 的局限性&lt;/h2&gt;
&lt;h3&gt;1.1 浅层循环的困境&lt;/h3&gt;
&lt;p&gt;传统的 Agent（我们称之为&quot;Shallow Agents&quot;）通常基于 &lt;strong&gt;ReAct 模式&lt;/strong&gt;（Reasoning + Acting）：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;while not done:
    thought = llm.reason(context)
    action = llm.choose_tool(thought)
    observation = execute(action)
    context.append(observation)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这种简单的循环架构存在三大问题：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;问题 1：缺乏全局规划&lt;/strong&gt;&lt;br /&gt;
Agent 只关注当前步骤，无法提前制定多步计划。例如，让 Agent &quot;撰写一份市场调研报告&quot;，它可能直接搜索第一个想到的关键词，而不是先拆解任务、确定信息源、设计调研框架。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;问题 2：上下文窗口溢出&lt;/strong&gt;&lt;br /&gt;
每次迭代都将所有历史追加到上下文，导致 token 消耗指数级增长。长任务（如代码库重构）很快会触及上下文限制。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;问题 3：无法并行化&lt;/strong&gt;&lt;br /&gt;
工具调用串行执行，即使多个子任务完全独立（如并行搜索多个数据源），也必须排队等待。&lt;/p&gt;
&lt;h3&gt;1.2 真实场景的挑战&lt;/h3&gt;
&lt;p&gt;以&quot;研究并撰写技术博客&quot;为例：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;需要&lt;strong&gt;多轮搜索&lt;/strong&gt;（关键词迭代、交叉验证）&lt;/li&gt;
&lt;li&gt;需要&lt;strong&gt;子任务委派&lt;/strong&gt;（一个 Agent 负责搜集资料、另一个负责事实核查）&lt;/li&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;/ol&gt;
&lt;p&gt;传统 Agent 在这些场景下会陷入&quot;迷失方向&quot;、&quot;重复劳动&quot;、&quot;半途而废&quot;的困境。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;二、Deep Agents 的核心架构&lt;/h2&gt;
&lt;p&gt;Deep Agents 通过引入 &lt;strong&gt;四大核心组件&lt;/strong&gt; 来突破上述限制：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;graph TB
    User[用户接口] --&amp;gt; Orchestrator[编排器]
    
    Orchestrator --&amp;gt; PlanningTool[Planning Tool&amp;lt;br/&amp;gt;规划工具]
    Orchestrator --&amp;gt; Memory[Memory System&amp;lt;br/&amp;gt;记忆系统]
    Orchestrator --&amp;gt; SubAgent[Sub-Agent Manager&amp;lt;br/&amp;gt;子智能体管理器]
    Orchestrator --&amp;gt; FileSystem[File System&amp;lt;br/&amp;gt;文件系统]
    
    PlanningTool --&amp;gt; TaskDecompose[任务分解]
    PlanningTool --&amp;gt; StepGenerate[步骤生成]
    
    Memory --&amp;gt; Episodic[情景记忆]
    Memory --&amp;gt; Semantic[语义记忆]
    Memory --&amp;gt; Procedural[程序记忆]
    
    SubAgent --&amp;gt; SubAgent1[Sub-Agent 1]
    SubAgent --&amp;gt; SubAgent2[Sub-Agent 2]
    SubAgent --&amp;gt; SubAgentN[Sub-Agent N]
    
    FileSystem --&amp;gt; TempFiles[临时文件]
    FileSystem --&amp;gt; Artifacts[制品输出]
    
    style Orchestrator fill:#C4612F,color:#fff
    style PlanningTool fill:#F2E3D6
    style Memory fill:#F2E3D6
    style SubAgent fill:#F2E3D6
    style FileSystem fill:#F2E3D6
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;2.1 组件 1：Planning Tool（规划工具）&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;功能&lt;/strong&gt;：将复杂任务分解为可执行的步骤序列。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;实现原理&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;使用 &lt;strong&gt;思维链提示&lt;/strong&gt;（Chain-of-Thought）引导 LLM 生成结构化计划&lt;/li&gt;
&lt;li&gt;支持 &lt;strong&gt;层次化规划&lt;/strong&gt;（Hierarchical Planning）：高层目标 → 子任务 → 原子操作&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;pre&gt;&lt;code&gt;# 输入任务
task = &quot;研究 Rust 的异步编程模型并撰写技术博客&quot;

# LLM 生成的计划
plan = [
    {
        &quot;step&quot;: 1,
        &quot;action&quot;: &quot;搜索 Rust async/await 官方文档&quot;,
        &quot;expected_output&quot;: &quot;核心概念清单&quot;
    },
    {
        &quot;step&quot;: 2,
        &quot;action&quot;: &quot;搜索 Tokio 运行时实现细节&quot;,
        &quot;expected_output&quot;: &quot;技术架构图&quot;
    },
    {
        &quot;step&quot;: 3,
        &quot;action&quot;: &quot;对比 Go/Node.js 的异步模型&quot;,
        &quot;expected_output&quot;: &quot;差异分析表格&quot;
    },
    {
        &quot;step&quot;: 4,
        &quot;action&quot;: &quot;撰写博客大纲&quot;,
        &quot;expected_output&quot;: &quot;Markdown 文件&quot;
    }
]
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;2.2 组件 2：Sub-Agents（子智能体）&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;功能&lt;/strong&gt;：将任务委派给专业化的 Worker Agent，实现并行执行和职责分离。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;架构模式&lt;/strong&gt;：&lt;strong&gt;Coordinator-Worker 模式&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;主 Agent（Coordinator）
    ├─ 负责任务分解和结果汇总
    └─ 不执行具体工作

子 Agent（Workers）
    ├─ 专注于单一子任务
    ├─ 独立的上下文窗口
    └─ 可以并行运行
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;优势&lt;/strong&gt;：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;上下文隔离&lt;/strong&gt;：每个 Worker 只关注自己的子任务，避免上下文污染&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;并行执行&lt;/strong&gt;：3 个子 Agent 同时搜索不同数据源，耗时从 3×30秒 降至 30秒&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;可恢复性&lt;/strong&gt;：单个 Worker 失败不影响整体任务&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;实现示例&lt;/strong&gt;（伪代码）：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;class CoordinatorAgent:
    def execute(self, task):
        # 1. 规划
        plan = self.planning_tool.decompose(task)
        
        # 2. 并行委派
        futures = []
        for subtask in plan:
            worker = self.spawn_worker(subtask.type)
            future = worker.execute_async(subtask)
            futures.append(future)
        
        # 3. 汇总结果
        results = await asyncio.gather(*futures)
        return self.synthesize(results)
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;2.3 组件 3：Memory System（记忆系统）&lt;/h3&gt;
&lt;p&gt;传统 Agent 的记忆是&quot;一次性&quot;的（对话结束即丢失）。Deep Agents 引入 &lt;strong&gt;三层记忆架构&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;graph TB
    subgraph Episodic[情景记忆 Episodic Memory]
        E1[对话历史]
        E2[操作日志]
        E3[执行轨迹]
    end
    
    subgraph Semantic[语义记忆 Semantic Memory]
        S1[知识图谱]
        S2[概念索引]
        S3[向量数据库]
    end
    
    subgraph Procedural[程序记忆 Procedural Memory]
        P1[工作流模板]
        P2[最佳实践]
        P3[策略库]
    end
    
    Agent[Deep Agent] --&amp;gt; Episodic
    Agent --&amp;gt; Semantic
    Agent --&amp;gt; Procedural
    
    Episodic --&amp;gt; ShortTerm[短期存储&amp;lt;br/&amp;gt;会话级别]
    Semantic --&amp;gt; LongTerm[长期存储&amp;lt;br/&amp;gt;持久化]
    Procedural --&amp;gt; LongTerm
    
    style Agent fill:#C4612F,color:#fff
    style Episodic fill:#F2E3D6
    style Semantic fill:#F2E3D6
    style Procedural fill:#F2E3D6
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;技术实现&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;向量数据库&lt;/strong&gt;（如 Pinecone、Chroma）存储语义记忆&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;图数据库&lt;/strong&gt;（如 Neo4j）存储知识关系&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Checkpoint 机制&lt;/strong&gt; 支持断点续传&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;2.4 组件 4：Virtual File System（虚拟文件系统）&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;为什么需要？&lt;/strong&gt;&lt;br /&gt;
复杂任务通常涉及中间产物（草稿、数据集、配置文件）。传统 Agent 将所有内容塞进上下文，导致 token 浪费。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;解决方案&lt;/strong&gt;：&lt;br /&gt;
引入沙盒化的文件系统，Agent 可以：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;创建、读取、修改文件&lt;/li&gt;
&lt;li&gt;在子 Agent 间共享文件&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;pre&gt;&lt;code&gt;# Agent 的工作目录结构
/workspace
  ├── research/
  │   ├── rust_async_docs.md
  │   ├── tokio_architecture.png
  │   └── comparison_table.csv
  ├── drafts/
  │   └── blog_outline_v1.md
  └── final/
      └── published_blog.md
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;三、核心算法：ReAct++ 与 Reflexion&lt;/h2&gt;
&lt;h3&gt;3.1 ReAct 的进化&lt;/h3&gt;
&lt;p&gt;传统 ReAct：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Thought → Action → Observation → (循环)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Deep Agents 的 &lt;strong&gt;ReAct++&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;graph LR
    Plan[规划 Plan] --&amp;gt; Reason[推理 Reason]
    Reason --&amp;gt; Act[行动 Act]
    Act --&amp;gt; Observe[观察 Observe]
    Observe --&amp;gt; Reflect[反思 Reflect]
    Reflect --&amp;gt; UpdatePlan[更新计划]
    UpdatePlan --&amp;gt; Reason
    
    Reflect -.-&amp;gt; Memory[(记忆系统)]
    Memory -.-&amp;gt; Reason
    
    style Plan fill:#C4612F,color:#fff
    style Reflect fill:#F2E3D6
    style Memory fill:#F2E3D6
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Reflection 的作用&lt;/strong&gt;：&lt;br /&gt;
Agent 会自我评估：&quot;这一步是否有效？是否偏离目标？&quot;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;示例对话&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Agent (Thought): 我需要搜索 Rust async 的实现原理
Agent (Action): web_search(&quot;Rust async implementation&quot;)
Agent (Observation): 返回了 5 篇文章，但都是入门教程
Agent (Reflection): 这些结果太浅显，我需要更深入的技术文档
Agent (Update Plan): 修改搜索关键词为 &quot;Rust Future trait internals&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3.2 Reflexion 机制&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Reflexion&lt;/strong&gt; 是一种&quot;从失败中学习&quot;的机制：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Agent 执行任务（可能失败）&lt;/li&gt;
&lt;li&gt;系统生成&lt;strong&gt;失败反思&lt;/strong&gt;（如&quot;工具选择错误&quot;、&quot;参数不当&quot;）&lt;/li&gt;
&lt;li&gt;将反思写入 &lt;strong&gt;Episodic Memory&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;下次遇到类似任务时，优先检索相关反思&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;伪代码&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;def execute_with_reflexion(task):
    # 1. 检索历史反思
    past_failures = memory.query_similar(task)
    
    # 2. 增强提示词
    prompt = f&quot;&quot;&quot;
    Task: {task}
    
    Previous Failures:
    {past_failures}
    
    Learn from these mistakes and avoid them.
    &quot;&quot;&quot;
    
    # 3. 执行
    result = agent.run(prompt)
    
    # 4. 如果失败，生成反思
    if result.failed:
        reflection = llm.reflect(task, result.error)
        memory.store(reflection)
    
    return result
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;四、实战：LangChain Deep Agents 实现&lt;/h2&gt;
&lt;h3&gt;4.1 技术栈&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;框架&lt;/strong&gt;：LangChain 1.0 + LangGraph&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;LLM&lt;/strong&gt;：Claude Opus 4.8 / GPT-4&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;内存&lt;/strong&gt;：Chroma（向量数据库）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;文件系统&lt;/strong&gt;：本地沙盒（通过 Docker 隔离）&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;4.2 代码示例：构建一个研究 Agent&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;from langgraph.graph import StateGraph, END
from langchain_anthropic import ChatAnthropic
from langchain.tools import DuckDuckGoSearchRun, WikipediaQueryRun

# 定义状态
class ResearchState:
    task: str
    plan: List[dict]
    current_step: int
    memory: List[str]
    artifacts: dict  # 文件系统

# 1. 规划节点
def planning_node(state: ResearchState):
    llm = ChatAnthropic(model=&quot;claude-opus-4&quot;)
    prompt = f&quot;分解任务为步骤：{state.task}&quot;
    plan = llm.invoke(prompt)  # 返回结构化 JSON
    state.plan = plan
    return state

# 2. 执行节点（并行 Worker）
async def execution_node(state: ResearchState):
    step = state.plan[state.current_step]
    
    # 根据步骤类型选择 Worker
    if step[&quot;type&quot;] == &quot;web_search&quot;:
        tool = DuckDuckGoSearchRun()
        result = await tool.arun(step[&quot;query&quot;])
    elif step[&quot;type&quot;] == &quot;wiki_query&quot;:
        tool = WikipediaQueryRun()
        result = await tool.arun(step[&quot;query&quot;])
    
    # 存储到文件系统
    state.artifacts[f&quot;step_{state.current_step}.md&quot;] = result
    state.current_step += 1
    return state

# 3. 反思节点
def reflection_node(state: ResearchState):
    # 检查当前结果是否满足预期
    last_result = state.artifacts[f&quot;step_{state.current_step-1}.md&quot;]
    llm = ChatAnthropic(model=&quot;claude-opus-4&quot;)
    
    reflection = llm.invoke(f&quot;&quot;&quot;
    任务：{state.task}
    当前结果：{last_result}
    
    评估：结果是否充分？是否需要调整计划？
    &quot;&quot;&quot;)
    
    if &quot;需要重新搜索&quot; in reflection:
        # 动态调整计划
        state.plan.insert(state.current_step, {
            &quot;type&quot;: &quot;web_search&quot;,
            &quot;query&quot;: reflection[&quot;建议关键词&quot;]
        })
    
    return state

# 4. 构建图
workflow = StateGraph(ResearchState)
workflow.add_node(&quot;plan&quot;, planning_node)
workflow.add_node(&quot;execute&quot;, execution_node)
workflow.add_node(&quot;reflect&quot;, reflection_node)

workflow.add_edge(&quot;plan&quot;, &quot;execute&quot;)
workflow.add_edge(&quot;execute&quot;, &quot;reflect&quot;)
workflow.add_conditional_edge(
    &quot;reflect&quot;,
    lambda state: &quot;execute&quot; if state.current_step &amp;lt; len(state.plan) else END
)

workflow.set_entry_point(&quot;plan&quot;)
agent = workflow.compile()

# 5. 运行
result = await agent.ainvoke({
    &quot;task&quot;: &quot;研究 Rust 的 async/await 实现原理&quot;,
    &quot;plan&quot;: [],
    &quot;current_step&quot;: 0,
    &quot;memory&quot;: [],
    &quot;artifacts&quot;: {}
})
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;4.3 关键技术点&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;LangGraph 的优势&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;状态持久化&lt;/strong&gt;：自动保存 Checkpoint&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;流式输出&lt;/strong&gt;：实时展示 Agent 推理过程&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;人工干预&lt;/strong&gt;：支持在关键节点暂停等待审核&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;中间件架构&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;graph LR
    Request[请求] --&amp;gt; Auth[权限中间件]
    Auth --&amp;gt; Logger[日志中间件]
    Logger --&amp;gt; Memory[记忆中间件]
    Memory --&amp;gt; Core[核心 Agent]
    Core --&amp;gt; Validation[验证中间件]
    Validation --&amp;gt; Response[响应]
    
    Auth -.-&amp;gt; Reject1[拒绝]
    Validation -.-&amp;gt; Reject2[重试]
    
    style Core fill:#C4612F,color:#fff
    style Auth fill:#F2E3D6
    style Memory fill:#F2E3D6
    style Validation fill:#F2E3D6
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;五、性能对比与最佳实践&lt;/h2&gt;
&lt;h3&gt;5.1 实测数据&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;任务类型&lt;/th&gt;
&lt;th&gt;传统 Agent&lt;/th&gt;
&lt;th&gt;Deep Agent&lt;/th&gt;
&lt;th&gt;提升&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;市场调研报告&lt;/td&gt;
&lt;td&gt;45 分钟&lt;/td&gt;
&lt;td&gt;12 分钟&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;73%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;代码库重构&lt;/td&gt;
&lt;td&gt;失败（上下文溢出）&lt;/td&gt;
&lt;td&gt;成功&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;N/A&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;多轮对话（&amp;gt;20 轮）&lt;/td&gt;
&lt;td&gt;$3.50&lt;/td&gt;
&lt;td&gt;$0.80&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;77%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;成本降低原因&lt;/strong&gt;：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;子 Agent 并行执行 → 总 token 数减少&lt;/li&gt;
&lt;li&gt;文件系统 → 避免重复传输大文件&lt;/li&gt;
&lt;li&gt;Memory → 避免重复推理&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;5.2 最佳实践&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;何时使用 Deep Agents？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;✅ &lt;strong&gt;适用场景&lt;/strong&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;/ul&gt;
&lt;p&gt;❌ &lt;strong&gt;不适用场景&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;简单的单轮对话（如&quot;翻译这段话&quot;）&lt;/li&gt;
&lt;li&gt;实时性要求极高的场景（规划开销 ~2-3 秒）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;架构选择&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;小任务（&amp;lt;5 步）&lt;/strong&gt;：ReAct 足够&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;中型任务（5-15 步）&lt;/strong&gt;：ReAct + Memory&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;大型任务（&amp;gt;15 步）&lt;/strong&gt;：完整 Deep Agent 架构&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2&gt;六、未来展望&lt;/h2&gt;
&lt;h3&gt;6.1 技术演进方向&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;多模态 Deep Agents&lt;/strong&gt;：&lt;br /&gt;
当前主要处理文本，未来将融合视觉（图表生成）、语音（播客创作）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;分布式协作&lt;/strong&gt;：&lt;br /&gt;
多个 Deep Agent 组成&quot;Agent 集群&quot;，协同完成超大型任务（如&quot;重构整个微服务架构&quot;）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;强化学习集成&lt;/strong&gt;：&lt;br /&gt;
通过 RLHF（人类反馈强化学习）持续优化 Agent 的决策策略&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;6.2 开源生态&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;LangChain Deep Agents&lt;/strong&gt;：生产级框架&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AutoGPT&lt;/strong&gt;：早期探索（已逐渐式微）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Microsoft Semantic Kernel&lt;/strong&gt;：企业级 Agent 框架&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;RUC DeepAgent&lt;/strong&gt;：学术界的端到端推理 Agent&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2&gt;结语&lt;/h2&gt;
&lt;p&gt;Deep Agents 不是简单的技术升级，而是 &lt;strong&gt;AI Agent 范式的根本性转变&lt;/strong&gt;：从&quot;被动响应&quot;到&quot;主动规划&quot;，从&quot;单线程执行&quot;到&quot;并行协作&quot;，从&quot;无状态对话&quot;到&quot;持久化记忆&quot;。&lt;/p&gt;
&lt;p&gt;对于开发者而言，理解 Deep Agents 的架构原理，意味着能够构建真正实用的 AI 自动化系统——不再是演示 Demo，而是能落地生产环境、为用户创造价值的智能助手。&lt;/p&gt;
&lt;p&gt;随着 LangChain 1.0、Claude 5 等新一代工具的成熟，Deep Agents 正从实验室走向现实世界。现在，正是深入学习和实践的最佳时机。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;参考资料&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://www.langchain.com/blog/deep-agents&quot;&gt;LangChain Deep Agents 官方文档&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://abvijaykumar.medium.com/building-deep-agents-5d2f77394c3b&quot;&gt;Building Deep Agents from First Principles&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://arxiv.org/abs/2303.11366&quot;&gt;Reflexion: Language Agents with Verbal Reinforcement Learning&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://arxiv.org/abs/2210.03629&quot;&gt;ReAct: Synergizing Reasoning and Acting in Language Models&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://arxiv.org/html/2510.21618v2&quot;&gt;RUC DeepAgent: A General Reasoning Agent&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;strong&gt;作者&lt;/strong&gt;：changel&lt;br /&gt;
&lt;strong&gt;发布日期&lt;/strong&gt;：2026年7月20日&lt;br /&gt;
&lt;strong&gt;标签&lt;/strong&gt;：#AI #Agent #架构设计 #LangChain #DeepAgent&lt;/p&gt;
</content:encoded></item><item><title>Markdown 扩展功能</title><link>https://fuwari.vercel.app/posts/markdown-extended/</link><guid isPermaLink="true">https://fuwari.vercel.app/posts/markdown-extended/</guid><description>了解更多 Fuwari 中的 Markdown 功能</description><pubDate>Wed, 01 May 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;GitHub 仓库卡片&lt;/h2&gt;
&lt;p&gt;你可以添加链接到 GitHub 仓库的动态卡片，页面加载时，仓库信息会从 GitHub API 获取。&lt;/p&gt;
&lt;p&gt;::github{repo=&quot;Fabrizz/MMM-OnSpotify&quot;}&lt;/p&gt;
&lt;p&gt;使用代码 &lt;code&gt;::github{repo=&quot;&amp;lt;所有者&amp;gt;/&amp;lt;仓库&amp;gt;&quot;}&lt;/code&gt; 创建 GitHub 仓库卡片。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;::github{repo=&quot;saicaca/fuwari&quot;}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;提示块&lt;/h2&gt;
&lt;p&gt;支持以下类型的提示块：&lt;code&gt;note&lt;/code&gt; &lt;code&gt;tip&lt;/code&gt; &lt;code&gt;important&lt;/code&gt; &lt;code&gt;warning&lt;/code&gt; &lt;code&gt;caution&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;:::note
突出显示用户应该注意的信息，即使是在浏览时。
:::&lt;/p&gt;
&lt;p&gt;:::tip
可选信息，帮助用户更成功。
:::&lt;/p&gt;
&lt;p&gt;:::important
用户成功所需的关键信息。
:::&lt;/p&gt;
&lt;p&gt;:::warning
由于潜在风险而需要立即引起用户注意的关键内容。
:::&lt;/p&gt;
&lt;p&gt;:::caution
行动的负面潜在后果。
:::&lt;/p&gt;
&lt;h3&gt;基本语法&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;:::note
突出显示用户应该注意的信息，即使是在浏览时。
:::

:::tip
可选信息，帮助用户更成功。
:::
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;自定义标题&lt;/h3&gt;
&lt;p&gt;提示块的标题可以自定义。&lt;/p&gt;
&lt;p&gt;:::note[我的自定义标题]
这是一个带有自定义标题的提示块。
:::&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;:::note[我的自定义标题]
这是一个带有自定义标题的提示块。
:::
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;GitHub 语法&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;[!TIP]
也支持 &lt;a href=&quot;https://github.com/orgs/community/discussions/16925&quot;&gt;GitHub 语法&lt;/a&gt;。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code&gt;&amp;gt; [!NOTE]
&amp;gt; 也支持 GitHub 语法。

&amp;gt; [!TIP]
&amp;gt; 也支持 GitHub 语法。
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;剧透&lt;/h3&gt;
&lt;p&gt;你可以在文本中添加剧透。文本也支持 &lt;strong&gt;Markdown&lt;/strong&gt; 语法。&lt;/p&gt;
&lt;p&gt;内容 :spoiler[被隐藏了 &lt;strong&gt;哈哈&lt;/strong&gt;]！&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;内容 :spoiler[被隐藏了 **哈哈**]！
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>Expressive Code 示例</title><link>https://fuwari.vercel.app/posts/expressive-code/</link><guid isPermaLink="true">https://fuwari.vercel.app/posts/expressive-code/</guid><description>使用 Expressive Code 在 Markdown 中展示代码块的效果。</description><pubDate>Wed, 10 Apr 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;在这里，我们将探索如何使用 &lt;a href=&quot;https://expressive-code.com/&quot;&gt;Expressive Code&lt;/a&gt; 展示代码块。提供的示例基于官方文档，你可以参考官方文档了解更多详情。&lt;/p&gt;
&lt;h2&gt;Expressive Code&lt;/h2&gt;
&lt;h3&gt;语法高亮&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://expressive-code.com/key-features/syntax-highlighting/&quot;&gt;语法高亮&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;常规语法高亮&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;console.log(&apos;这段代码有语法高亮！&apos;)
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;渲染 ANSI 转义序列&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;ANSI 颜色:
- 常规: [31m红色[0m [32m绿色[0m [33m黄色[0m [34m蓝色[0m [35m品红[0m [36m青色[0m
- 粗体:    [1;31m红色[0m [1;32m绿色[0m [1;33m黄色[0m [1;34m蓝色[0m [1;35m品红[0m [1;36m青色[0m
- 暗淡:  [2;31m红色[0m [2;32m绿色[0m [2;33m黄色[0m [2;34m蓝色[0m [2;35m品红[0m [2;36m青色[0m

256 色 (显示颜色 160-177):
[38;5;160m160 [38;5;161m161 [38;5;162m162 [38;5;163m163 [38;5;164m164 [38;5;165m165[0m
[38;5;166m166 [38;5;167m167 [38;5;168m168 [38;5;169m169 [38;5;170m170 [38;5;171m171[0m
[38;5;172m172 [38;5;173m173 [38;5;174m174 [38;5;175m175 [38;5;176m176 [38;5;177m177[0m

完整 RGB 颜色:
[38;2;34;139;34m森林绿 - RGB(34, 139, 34)[0m

文本格式: [1m粗体[0m [2m暗淡[0m [3m斜体[0m [4m下划线[0m
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;编辑器和终端框架&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://expressive-code.com/key-features/frames/&quot;&gt;编辑器和终端框架&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;代码编辑器框架&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;console.log(&apos;标题属性示例&apos;)
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;!-- src/content/index.html --&amp;gt;
&amp;lt;div&amp;gt;文件名注释示例&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;终端框架&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;echo &quot;这个终端框架没有标题&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;pre&gt;&lt;code&gt;Write-Output &quot;这个有标题！&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;覆盖框架类型&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;echo &quot;看，没有框架！&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;pre&gt;&lt;code&gt;# 如果不覆盖，这将是一个终端框架
function Watch-Tail { Get-Content -Tail 20 -Wait $args }
New-Alias tail Watch-Tail
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;文本和行标记&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://expressive-code.com/key-features/text-markers/&quot;&gt;文本和行标记&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;标记完整行和行范围&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;// 第 1 行 - 按行号定位
// 第 2 行
// 第 3 行
// 第 4 行 - 按行号定位
// 第 5 行
// 第 6 行
// 第 7 行 - 按范围 &quot;7-8&quot; 定位
// 第 8 行 - 按范围 &quot;7-8&quot; 定位
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;选择行标记类型 (mark, ins, del)&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;function demo() {
  console.log(&apos;这一行标记为删除&apos;)
  // 这一行和下一行标记为插入
  console.log(&apos;这是第二个插入行&apos;)

  return &apos;这一行使用中性默认标记类型&apos;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;向行标记添加标签&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;// labeled-line-markers.jsx
&amp;lt;button
  role=&quot;button&quot;
  {...props}
  value={value}
  className={buttonClassName}
  disabled={disabled}
  active={active}
&amp;gt;
  {children &amp;amp;&amp;amp;
    !active &amp;amp;&amp;amp;
    (typeof children === &apos;string&apos; ? &amp;lt;span&amp;gt;{children}&amp;lt;/span&amp;gt; : children)}
&amp;lt;/button&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;在单独的行上添加长标签&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;// labeled-line-markers.jsx
&amp;lt;button
  role=&quot;button&quot;
  {...props}

  value={value}
  className={buttonClassName}

  disabled={disabled}
  active={active}
&amp;gt;

  {children &amp;amp;&amp;amp;
    !active &amp;amp;&amp;amp;
    (typeof children === &apos;string&apos; ? &amp;lt;span&amp;gt;{children}&amp;lt;/span&amp;gt; : children)}
&amp;lt;/button&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;使用类似 diff 的语法&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;+这一行将标记为插入
-这一行将标记为删除
这是一个常规行
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;pre&gt;&lt;code&gt;--- a/README.md
+++ b/README.md
@@ -1,3 +1,4 @@
+这是一个实际的 diff 文件
-所有内容将保持不变
 空白也不会被移除
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;将语法高亮与类似 diff 的语法结合&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;  function thisIsJavaScript() {
    // 整个块被高亮显示为 JavaScript，
    // 我们仍然可以向它添加 diff 标记！
-   console.log(&apos;要删除的旧代码&apos;)
+   console.log(&apos;全新的闪亮代码！&apos;)
  }
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;标记行内的单个文本&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;function demo() {
  // 标记行内的任何给定文本
  return &apos;支持给定文本的多个匹配项&apos;;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;正则表达式&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;console.log(&apos;单词 yes 和 yep 将被标记。&apos;)
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;转义正斜杠&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;echo &quot;Test&quot; &amp;gt; /home/test.txt
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;选择内联标记类型 (mark, ins, del)&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;function demo() {
  console.log(&apos;这些是插入和删除标记类型&apos;);
  // return 语句使用默认标记类型
  return true;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;自动换行&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://expressive-code.com/key-features/word-wrap/&quot;&gt;自动换行&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;按块配置自动换行&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;// 启用 wrap 的示例
function getLongString() {
  return &apos;这是一个非常长的字符串，除非容器非常宽，否则很可能无法适应可用空间&apos;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;pre&gt;&lt;code&gt;// 禁用 wrap 的示例
function getLongString() {
  return &apos;这是一个非常长的字符串，除非容器非常宽，否则很可能无法适应可用空间&apos;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;配置换行的缩进&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;// 启用 preserveIndent 的示例（默认启用）
function getLongString() {
  return &apos;这是一个非常长的字符串，除非容器非常宽，否则很可能无法适应可用空间&apos;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;pre&gt;&lt;code&gt;// 禁用 preserveIndent 的示例
function getLongString() {
  return &apos;这是一个非常长的字符串，除非容器非常宽，否则很可能无法适应可用空间&apos;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;可折叠部分&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://expressive-code.com/plugins/collapsible-sections/&quot;&gt;可折叠部分&lt;/a&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// 所有这些样板设置代码将被折叠
import { someBoilerplateEngine } from &apos;@example/some-boilerplate&apos;
import { evenMoreBoilerplate } from &apos;@example/even-more-boilerplate&apos;

const engine = someBoilerplateEngine(evenMoreBoilerplate())

// 这部分代码默认可见
engine.doSomething(1, 2, 3, calcFn)

function calcFn() {
  // 你可以有多个折叠部分
  const a = 1
  const b = 2
  const c = a + b

  // 这将保持可见
  console.log(`计算结果: ${a} + ${b} = ${c}`)
  return c
}

// 所有这些代码直到块的末尾将再次被折叠
engine.closeConnection()
engine.freeMemory()
engine.shutdown({ reason: &apos;示例样板代码结束&apos; })
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;行号&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://expressive-code.com/plugins/line-numbers/&quot;&gt;行号&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;按块显示行号&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;// 这个代码块将显示行号
console.log(&apos;来自第 2 行的问候！&apos;)
console.log(&apos;我在第 3 行&apos;)
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;pre&gt;&lt;code&gt;// 此块禁用行号
console.log(&apos;你好？&apos;)
console.log(&apos;抱歉，你知道我在哪一行吗？&apos;)
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;更改起始行号&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;console.log(&apos;来自第 5 行的问候！&apos;)
console.log(&apos;我在第 6 行&apos;)
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>Fuwari 简易指南</title><link>https://fuwari.vercel.app/posts/guide/</link><guid isPermaLink="true">https://fuwari.vercel.app/posts/guide/</guid><description>如何使用这个博客模板。</description><pubDate>Mon, 01 Apr 2024 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;封面图片来源：&lt;a href=&quot;https://image.civitai.com/xG1nkqKTMzGDvpLrqFT7WA/208fc754-890d-4adb-9753-2c963332675d/width=2048/01651-1456859105-(colour_1.5),girl,_Blue,yellow,green,cyan,purple,red,pink,_best,8k,UHD,masterpiece,male%20focus,%201boy,gloves,%20ponytail,%20long%20hair,.jpeg&quot;&gt;来源&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;这个博客模板是用 &lt;a href=&quot;https://astro.build/&quot;&gt;Astro&lt;/a&gt; 构建的。对于本指南中未提及的内容，你可以在 &lt;a href=&quot;https://docs.astro.build/&quot;&gt;Astro 文档&lt;/a&gt; 中找到答案。&lt;/p&gt;
&lt;h2&gt;文章的 Front-matter&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;---
title: 我的第一篇博客文章
published: 2023-09-09
description: 这是我新 Astro 博客的第一篇文章。
image: ./cover.jpg
tags: [Foo, Bar]
category: 前端
draft: false
---
&lt;/code&gt;&lt;/pre&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;属性&lt;/th&gt;
&lt;th&gt;描述&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;title&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;文章的标题。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;published&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;文章发布的日期。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;description&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;文章的简短描述。显示在索引页面上。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;image&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;文章的封面图片路径。&amp;lt;br/&amp;gt;1. 以 &lt;code&gt;http://&lt;/code&gt; 或 &lt;code&gt;https://&lt;/code&gt; 开头：使用网络图片&amp;lt;br/&amp;gt;2. 以 &lt;code&gt;/&lt;/code&gt; 开头：使用 &lt;code&gt;public&lt;/code&gt; 目录中的图片&amp;lt;br/&amp;gt;3. 没有这些前缀：相对于 markdown 文件的路径&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;tags&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;文章的标签。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;category&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;文章的分类。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;draft&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;如果这篇文章仍然是草稿，则不会显示。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;文章文件的放置位置&lt;/h2&gt;
&lt;p&gt;你的文章文件应该放在 &lt;code&gt;src/content/posts/&lt;/code&gt; 目录中。你也可以创建子目录来更好地组织你的文章和资源。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;src/content/posts/
├── post-1.md
└── post-2/
    ├── cover.png
    └── index.md
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>Markdown 示例</title><link>https://fuwari.vercel.app/posts/markdown/</link><guid isPermaLink="true">https://fuwari.vercel.app/posts/markdown/</guid><description>一个简单的 Markdown 博客文章示例。</description><pubDate>Sun, 01 Oct 2023 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;一级标题&lt;/h1&gt;
&lt;p&gt;段落之间用空行分隔。&lt;/p&gt;
&lt;p&gt;第二段。&lt;em&gt;斜体&lt;/em&gt;，&lt;strong&gt;粗体&lt;/strong&gt;，以及 &lt;code&gt;等宽字体&lt;/code&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;/ul&gt;
&lt;p&gt;请注意，实际的文本内容从 4 列开始（不考虑星号）。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;引用块
就是这样写的。&lt;/p&gt;
&lt;p&gt;它们可以跨越多个段落，
如果你喜欢的话。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;使用 3 个连字符表示破折号。使用 2 个连字符表示范围（例如，&quot;全部都在 5-10 页&quot;）。&lt;/p&gt;
&lt;h2&gt;二级标题&lt;/h2&gt;
&lt;p&gt;这是一个示例链接到 &lt;a href=&quot;https://www.baidu.com/&quot;&gt;百度&lt;/a&gt;。&lt;/p&gt;
&lt;h3&gt;三级标题&lt;/h3&gt;
&lt;p&gt;现在是一个嵌套列表：&lt;/p&gt;
&lt;ol&gt;
&lt;li&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;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;将配料煮沸大约 10 分钟&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;然后就可以享用了&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;注意同一列表内不同项之间的空行是可选的，但列表之间和列表与普通段落之间必须有空行。&lt;/p&gt;
&lt;p&gt;这是一个水平分割线：&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;这是一个代码块，使用缩进：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// 这是代码
console.log(&apos;Hello World!&apos;);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;或者使用代码围栏：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;function greeting() {
    console.log(&apos;你好，世界！&apos;);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;内联代码使用 &lt;code&gt;反引号&lt;/code&gt; 包裹。&lt;/p&gt;
&lt;p&gt;这是一个表格：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;左对齐&lt;/th&gt;
&lt;th&gt;居中对齐&lt;/th&gt;
&lt;th&gt;右对齐&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;内容&lt;/td&gt;
&lt;td&gt;内容&lt;/td&gt;
&lt;td&gt;内容&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;内容&lt;/td&gt;
&lt;td&gt;内容&lt;/td&gt;
&lt;td&gt;内容&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;图片语法：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://via.placeholder.com/350x150&quot; alt=&quot;替代文本&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;粗体文本&lt;/strong&gt; 和 &lt;em&gt;斜体文本&lt;/em&gt; 和 &lt;em&gt;&lt;strong&gt;粗斜体文本&lt;/strong&gt;&lt;/em&gt;。&lt;/p&gt;
&lt;p&gt;&lt;s&gt;删除线文本&lt;/s&gt;&lt;/p&gt;
&lt;p&gt;任务列表：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[x] 已完成的任务&lt;/li&gt;
&lt;li&gt;[ ] 未完成的任务&lt;/li&gt;
&lt;li&gt;[ ] 另一个未完成的任务&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这就是 Markdown 的基础！&lt;/p&gt;
</content:encoded></item><item><title>在文章中嵌入视频</title><link>https://fuwari.vercel.app/posts/video/</link><guid isPermaLink="true">https://fuwari.vercel.app/posts/video/</guid><description>本文演示如何在博客文章中嵌入视频。</description><pubDate>Tue, 01 Aug 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;只需从 YouTube 或其他平台复制嵌入代码，然后粘贴到 markdown 文件中即可。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;---
title: 在文章中嵌入视频
published: 2023-10-19
// ...
---

&amp;lt;iframe width=&quot;100%&quot; height=&quot;468&quot; src=&quot;https://www.youtube.com/embed/5gIf0_xpFPI?si=N1WTorLKL0uwLsU_&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allowfullscreen&amp;gt;&amp;lt;/iframe&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;YouTube&lt;/h2&gt;
&lt;p&gt;&amp;lt;iframe width=&quot;100%&quot; height=&quot;468&quot; src=&quot;https://www.youtube.com/embed/5gIf0_xpFPI?si=N1WTorLKL0uwLsU_&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen&amp;gt;&amp;lt;/iframe&amp;gt;&lt;/p&gt;
&lt;h2&gt;Bilibili&lt;/h2&gt;
&lt;p&gt;&amp;lt;iframe width=&quot;100%&quot; height=&quot;468&quot; src=&quot;//player.bilibili.com/player.html?bvid=BV1fK4y1s7Qf&amp;amp;p=1&quot; scrolling=&quot;no&quot; border=&quot;0&quot; frameborder=&quot;no&quot; framespacing=&quot;0&quot; allowfullscreen=&quot;true&quot;&amp;gt; &amp;lt;/iframe&amp;gt;&lt;/p&gt;
</content:encoded></item><item><title>草稿示例</title><link>https://fuwari.vercel.app/posts/draft/</link><guid isPermaLink="true">https://fuwari.vercel.app/posts/draft/</guid><pubDate>Fri, 01 Jul 2022 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;这篇文章是草稿&lt;/h1&gt;
&lt;p&gt;这篇文章目前处于草稿状态，尚未发布。因此，它不会对普通访客可见。内容仍在进行中，可能需要进一步编辑和审查。&lt;/p&gt;
&lt;p&gt;当文章准备好发布时，你可以在 Frontmatter 中将 &quot;draft&quot; 字段更新为 &quot;false&quot;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;---
title: 草稿示例
published: 2024-01-11T04:40:26.381Z
tags: [Markdown, 博客, 示例]
category: 示例
draft: false
---
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item></channel></rss>