<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>NoirElaina</title><description>个人博客</description><link>https://noirelaina.github.io/</link><language>zh_CN</language><item><title>交互内容实验室：MDX、Vue、Mermaid、ECharts 与 Canvas</title><link>https://noirelaina.github.io/ashenwitch/posts/interactive-components-lab/</link><guid isPermaLink="true">https://noirelaina.github.io/ashenwitch/posts/interactive-components-lab/</guid><description>这是一篇基于 MDX 的演示文章，直接在内容里引入 Vue 组件，展示流程图、图表和 Canvas 动画。</description><pubDate>Mon, 11 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;import MermaidDiagram from &quot;../../components/mdx/MermaidDiagram.vue&quot;;
import EChartsPanel from &quot;../../components/mdx/EChartsPanel.vue&quot;;
import CanvasMotion from &quot;../../components/mdx/CanvasMotion.vue&quot;;&lt;/p&gt;
&lt;p&gt;export const publishingFlow = &lt;code&gt;flowchart LR     A[写作想法] --&amp;gt; B[起草 MDX 文章]     B --&amp;gt; C[引入 Vue 组件]     C --&amp;gt; D[本地预览]     D --&amp;gt; E[发布到博客]     E --&amp;gt; F[读者看到图表与动画]&lt;/code&gt;;&lt;/p&gt;
&lt;p&gt;export const hydrationSequence = `
sequenceDiagram
participant User as User
participant Page as Astro Page
participant Vue as Vue Island
participant Chart as ECharts&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;User-&amp;gt;&amp;gt;Page: Open post
Page-&amp;gt;&amp;gt;Vue: Hydrate imported component
Vue-&amp;gt;&amp;gt;Chart: Initialize chart instance
Chart--&amp;gt;&amp;gt;User: Render interactive visual
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;`;&lt;/p&gt;
&lt;p&gt;export const trafficTrendOption = {
grid: {
top: 40,
right: 20,
bottom: 30,
left: 44,
},
tooltip: {
trigger: &quot;axis&quot;,
},
xAxis: {
type: &quot;category&quot;,
data: [&quot;Mon&quot;, &quot;Tue&quot;, &quot;Wed&quot;, &quot;Thu&quot;, &quot;Fri&quot;, &quot;Sat&quot;, &quot;Sun&quot;],
boundaryGap: false,
},
yAxis: {
type: &quot;value&quot;,
},
series: [
{
name: &quot;Visits&quot;,
type: &quot;line&quot;,
smooth: true,
data: [120, 182, 191, 234, 290, 330, 410],
areaStyle: {},
lineStyle: {
width: 3,
},
},
],
animationDuration: 1200,
};&lt;/p&gt;
&lt;p&gt;export const categoryOption = {
tooltip: {
trigger: &quot;item&quot;,
},
legend: {
bottom: 0,
},
series: [
{
name: &quot;Posts&quot;,
type: &quot;pie&quot;,
radius: [&quot;38%&quot;, &quot;68%&quot;],
avoidLabelOverlap: true,
itemStyle: {
borderRadius: 10,
borderColor: &quot;#fff&quot;,
borderWidth: 2,
},
label: {
show: true,
formatter: &quot;{b}\n{d}%&quot;,
},
data: [
{ value: 12, name: &quot;AI&quot; },
{ value: 18, name: &quot;Frontend&quot; },
{ value: 8, name: &quot;Notes&quot; },
{ value: 6, name: &quot;DevOps&quot; },
],
animationDuration: 900,
},
],
};&lt;/p&gt;
&lt;p&gt;export const systemHealthOption = {
grid: {
top: 24,
right: 20,
bottom: 30,
left: 44,
},
tooltip: {
trigger: &quot;axis&quot;,
},
xAxis: {
type: &quot;category&quot;,
data: [&quot;API&quot;, &quot;Search&quot;, &quot;Images&quot;, &quot;Deploy&quot;, &quot;Comments&quot;],
},
yAxis: {
type: &quot;value&quot;,
max: 100,
},
series: [
{
type: &quot;bar&quot;,
barWidth: &quot;46%&quot;,
data: [98, 92, 88, 95, 76],
animationDuration: 1000,
},
],
};&lt;/p&gt;
&lt;h1&gt;交互内容实验室&lt;/h1&gt;
&lt;p&gt;这篇文章的重点不是“介绍 MDX 是什么”，而是直接验证一件事：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;现在这个博客已经可以在文章内容里直接引入 Vue 组件。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;也就是说，后面你不只是能写普通段落、图片和代码块，还可以把图表、流程图、交互可视化、Canvas 动画直接塞进文章正文。&lt;/p&gt;
&lt;h2&gt;基础内容能力&lt;/h2&gt;
&lt;p&gt;在接入 &lt;code&gt;MDX + Vue&lt;/code&gt; 之前，这个博客本来就已经支持一批很适合写长文的基础表达能力。这些内容我也一起合并到这篇文章里，方便以后拿它当总样板。&lt;/p&gt;
&lt;h3&gt;标题层级、强调与链接&lt;/h3&gt;
&lt;p&gt;正文里支持&lt;strong&gt;粗体&lt;/strong&gt;、&lt;em&gt;斜体&lt;/em&gt;、&lt;s&gt;删除线&lt;/s&gt;、&lt;code&gt;行内代码&lt;/code&gt;、&lt;a href=&quot;https://astro.build/&quot;&gt;超链接&lt;/a&gt; 这些基础表达。&lt;/p&gt;
&lt;h4&gt;四级标题示例&lt;/h4&gt;
&lt;p&gt;长文章里把内容拆成多层标题后，右侧目录会更好用，文章结构也会更清楚。&lt;/p&gt;
&lt;h2&gt;列表、引用与表格&lt;/h2&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;p&gt;有序列表：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;定义主题&lt;/li&gt;
&lt;li&gt;拆出结构&lt;/li&gt;
&lt;li&gt;补齐细节&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;引用：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;好的内容页不只是堆信息，而是让文字、图表和交互都能顺着叙事往前走。&lt;/p&gt;
&lt;/blockquote&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;Markdown 基础格式&lt;/td&gt;
&lt;td&gt;已支持&lt;/td&gt;
&lt;td&gt;博客正文、笔记、教程&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mermaid&lt;/td&gt;
&lt;td&gt;已支持&lt;/td&gt;
&lt;td&gt;流程图、时序图、架构图&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ECharts&lt;/td&gt;
&lt;td&gt;已支持&lt;/td&gt;
&lt;td&gt;折线图、柱状图、饼图、仪表盘&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Canvas&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;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;h2&gt;图片、提示块与公式&lt;/h2&gt;
&lt;p&gt;普通 Markdown 图片：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/saicaca/resource/main/fuwari/home.png&quot; alt=&quot;博客预览图&quot; /&gt;&lt;/p&gt;
&lt;p&gt;原生 HTML 图片：&lt;/p&gt;
&lt;p&gt;&amp;lt;img
src=&quot;https://raw.githubusercontent.com/saicaca/resource/main/fuwari/home.png&quot;
alt=&quot;博客预览图（HTML 图片示例）&quot;
style=&quot;border-radius: 16px;&quot;
/&amp;gt;&lt;/p&gt;
&lt;p&gt;:::note
这篇文章现在既是内容能力展示页，也是交互组件实验页。
:::&lt;/p&gt;
&lt;p&gt;:::tip
以后你写新文章时，可以直接从这里复制需要的段落、图表和组件用法。
:::&lt;/p&gt;
&lt;p&gt;:::warning
如果文章里塞很多大型交互组件，首屏体积会明显上升，最好按模块控制加载方式。
:::&lt;/p&gt;
&lt;p&gt;行内公式示例：阅读时间可以近似写成 $t \approx \frac{w}{r}$。&lt;/p&gt;
&lt;p&gt;块级公式示例：&lt;/p&gt;
&lt;p&gt;$$
T = \lceil W / 200 \rceil
$$&lt;/p&gt;
&lt;h2&gt;代码块与嵌入内容&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;type Feature = {
  name: string;
  enabled: boolean;
};

const features: Feature[] = [
  { name: &quot;mermaid&quot;, enabled: true },
  { name: &quot;echarts&quot;, enabled: true },
  { name: &quot;canvas&quot;, enabled: true },
];

console.log(features.filter((item) =&amp;gt; item.enabled));
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;pnpm install
pnpm dev
pnpm check
pnpm build
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这个主题也能容纳 &lt;code&gt;iframe&lt;/code&gt; 内容：&lt;/p&gt;
&lt;p&gt;&amp;lt;iframe
title=&quot;iframe-demo&quot;
style=&quot;width: 100%; min-height: 220px; border: none; border-radius: 16px;&quot;
srcdoc=&quot;
&amp;lt;html&amp;gt;
&amp;lt;body style=&apos;margin:0;font-family:system-ui;background:linear-gradient(135deg,#0f172a,#1e293b);display:flex;align-items:center;justify-content:center;min-height:220px;color:#e2e8f0;&apos;&amp;gt;
&amp;lt;div style=&apos;text-align:center;padding:24px;max-width:520px;&apos;&amp;gt;
&amp;lt;div style=&apos;font-size:14px;letter-spacing:0.12em;opacity:0.75;text-transform:uppercase;&apos;&amp;gt;Embedded Demo&amp;lt;/div&amp;gt;
&amp;lt;h2 style=&apos;margin:12px 0 8px;font-size:28px;&apos;&amp;gt;iframe 内容可以直接嵌进文章&amp;lt;/h2&amp;gt;
&amp;lt;p style=&apos;margin:0;line-height:1.7;&apos;&amp;gt;你可以放视频、外部演示页、交互卡片，或者任何受控的 HTML 内容。&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&quot;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;lt;/iframe&amp;gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;Mermaid：流程图 / 时序图 / 架构表达&lt;/h2&gt;
&lt;p&gt;Mermaid 很适合在文章里放流程、调用链、系统关系图。&lt;/p&gt;
&lt;p&gt;&amp;lt;MermaidDiagram
client:load
title=&quot;文章发布流程&quot;
code={publishingFlow}
/&amp;gt;&lt;/p&gt;
&lt;p&gt;下面这个是时序图示例：&lt;/p&gt;
&lt;p&gt;&amp;lt;MermaidDiagram
client:load
title=&quot;页面访问时的渲染时序&quot;
code={hydrationSequence}
/&amp;gt;&lt;/p&gt;
&lt;h2&gt;ECharts：折线图、柱状图、饼图&lt;/h2&gt;
&lt;p&gt;图表这部分现在也已经适合直接进文章了。你只需要在 MDX 里准备一个 option 对象，再把它传给组件。&lt;/p&gt;
&lt;p&gt;&amp;lt;EChartsPanel
client:load
title=&quot;一周访问趋势&quot;
option={trafficTrendOption}
height={360}
renderer=&quot;canvas&quot;
/&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;EChartsPanel
client:load
title=&quot;文章分类占比&quot;
option={categoryOption}
height={380}
renderer=&quot;canvas&quot;
/&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;EChartsPanel
client:load
title=&quot;站点模块健康度&quot;
option={systemHealthOption}
height={320}
renderer=&quot;canvas&quot;
/&amp;gt;&lt;/p&gt;
&lt;p&gt;ECharts 本身就自带动画能力，所以像数值过渡、柱状图生长、折线缓动这些效果，不需要你额外再造一套轮子。&lt;/p&gt;
&lt;h2&gt;Canvas：更自由的视觉动画&lt;/h2&gt;
&lt;p&gt;如果你想要的不是标准图表，而是更自由的视觉效果，比如背景动效、粒子、波浪、轨道动画，那就更适合用 Canvas。&lt;/p&gt;
&lt;p&gt;&amp;lt;CanvasMotion client:load title=&quot;Canvas Waves&quot; preset=&quot;waves&quot; height={260} /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;CanvasMotion client:load title=&quot;Canvas Particles&quot; preset=&quot;particles&quot; height={260} /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;CanvasMotion client:load title=&quot;Canvas Orbits&quot; preset=&quot;orbits&quot; height={260} /&amp;gt;&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;/ul&gt;
&lt;h2&gt;这套写法以后怎么用&lt;/h2&gt;
&lt;p&gt;以后你写文章时，大概就是这个工作流：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;新建 &lt;code&gt;.mdx&lt;/code&gt; 文章&lt;/li&gt;
&lt;li&gt;在文件顶部 import 你要用的 Vue 组件&lt;/li&gt;
&lt;li&gt;在正文里像写普通标签一样直接插入组件&lt;/li&gt;
&lt;li&gt;用 &lt;code&gt;client:load&lt;/code&gt;、&lt;code&gt;client:visible&lt;/code&gt; 这类指令控制 hydration 时机&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;适合继续扩展的方向&lt;/h2&gt;
&lt;p&gt;既然现在已经走到 &lt;code&gt;MDX + Vue&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;li&gt;地图、网络拓扑、节点关系图&lt;/li&gt;
&lt;li&gt;带参数控制面板的小型 Demo&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果你愿意，我下一步可以继续帮你把这套能力再往前推一层，比如：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;做一个统一的 &lt;code&gt;ChartCard&lt;/code&gt; / &lt;code&gt;DiagramCard&lt;/code&gt; 组件库&lt;/li&gt;
&lt;li&gt;给文章增加可折叠 Demo 区&lt;/li&gt;
&lt;li&gt;做一个专门展示所有交互组件的实验页&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title>我的第一篇文章</title><link>https://noirelaina.github.io/ashenwitch/posts/my-first-post/</link><guid isPermaLink="true">https://noirelaina.github.io/ashenwitch/posts/my-first-post/</guid><description>这是博客上线后的第一篇文章，用来正式和大家打个招呼。</description><pubDate>Sun, 10 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;你好，欢迎来到这里&lt;/h1&gt;
&lt;p&gt;这是我博客里的第一篇文章。&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;/ul&gt;
&lt;p&gt;之所以想认真搭一个博客，是因为很多东西如果只停留在本地，过一段时间就很容易忘掉。写下来不仅方便以后回头看，也能顺手整理自己的思路。&lt;/p&gt;
&lt;h2&gt;这里会写什么&lt;/h2&gt;
&lt;p&gt;接下来我大概会主要更新这几类内容：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;前端和 Web 开发相关记录&lt;/li&gt;
&lt;li&gt;折腾部署、工具链和效率工作流&lt;/li&gt;
&lt;li&gt;个人项目的进展与总结&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;从这篇开始&lt;/h2&gt;
&lt;p&gt;这篇文章本身没有太多技术内容，它更像是一个开始。&lt;/p&gt;
&lt;p&gt;如果你正好也在折腾技术、做项目，或者只是偶然路过，欢迎以后再来看看。&lt;/p&gt;
&lt;p&gt;希望这里会慢慢变成一个对自己有用，也对别人有一点点帮助的小地方。&lt;/p&gt;
</content:encoded></item><item><title>Agent 学习笔记：从会聊天到会行动</title><link>https://noirelaina.github.io/ashenwitch/posts/agent-learning-notes/</link><guid isPermaLink="true">https://noirelaina.github.io/ashenwitch/posts/agent-learning-notes/</guid><description>一篇关于 Agent 学习的入门笔记，整理了我目前对 Agent 的理解、常见组成方式和实践中的关注点。</description><pubDate>Sun, 10 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;Agent 学习笔记：从会聊天到会行动&lt;/h1&gt;
&lt;p&gt;最近开始系统地补 Agent 相关内容。&lt;/p&gt;
&lt;p&gt;一开始我对 Agent 的理解其实很模糊，总觉得它像一个被包装过的聊天机器人，只是多接了几个工具。后来越看越发现，真正有意思的地方不在“能不能对话”，而在“能不能持续地完成任务”。&lt;/p&gt;
&lt;p&gt;对我来说，Agent 更像是一个会思考、会调用工具、会根据结果继续推进任务的执行体。它不是只回答一次，而是会围绕目标不断做下一步。&lt;/p&gt;
&lt;h2&gt;我怎么理解 Agent&lt;/h2&gt;
&lt;p&gt;如果只用一句话来描述，我现在会这样说：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Agent = 大模型 + 目标 + 工具 + 状态 + 执行循环&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;这里面最关键的不是模型本身，而是“循环”。&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;/ul&gt;
&lt;p&gt;而 Agent 更像：&lt;/p&gt;
&lt;ol&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;li&gt;直到任务完成，或者明确失败&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;也就是说，Agent 的重点不是“说得像不像人”，而是“能不能把事情往前推进”。&lt;/p&gt;
&lt;h2&gt;一个常见的 Agent 结构&lt;/h2&gt;
&lt;p&gt;我目前看到的大多数 Agent 系统，基本都绕不开下面几个部分。&lt;/p&gt;
&lt;h3&gt;1. Goal&lt;/h3&gt;
&lt;p&gt;也就是目标。&lt;/p&gt;
&lt;p&gt;目标越清楚，Agent 的行为越稳定。目标如果很模糊，比如“帮我弄好这个项目”，模型就容易不断试探、发散，最后做了很多动作，却不一定真的解决问题。&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;/ul&gt;
&lt;p&gt;例如：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;帮我把 Astro 博客部署到 GitHub Pages，
要求使用 GitHub Actions 自动发布，
并确保访问路径适配 /ashenwitch。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这个目标就比“帮我部署博客”稳定很多。&lt;/p&gt;
&lt;h3&gt;2. Tools&lt;/h3&gt;
&lt;p&gt;如果没有工具，Agent 再聪明也只能停留在纸上谈兵。&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;调用 API&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;我现在越来越觉得，很多所谓的 Agent 能力，本质上都是工具能力的外延。模型提供理解和决策，工具提供行动能力。&lt;/p&gt;
&lt;h3&gt;3. Memory / State&lt;/h3&gt;
&lt;p&gt;Agent 必须知道自己现在处在什么阶段。&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;/ul&gt;
&lt;p&gt;如果没有状态，Agent 很容易重复劳动，或者在几轮之后忘了自己到底在干什么。&lt;/p&gt;
&lt;h3&gt;4. Planner&lt;/h3&gt;
&lt;p&gt;不是所有 Agent 都一定要有显式的规划器，但“规划能力”几乎是必须的。&lt;/p&gt;
&lt;p&gt;简单任务可以一步完成，复杂任务通常需要拆解。&lt;/p&gt;
&lt;p&gt;比如“写一篇博客”看起来只有一句话，但实际过程可能是：&lt;/p&gt;
&lt;ol&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;li&gt;存入指定目录&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;如果没有规划，Agent 往往会在第一步就试图直接输出最终结果，质量会非常不稳定。&lt;/p&gt;
&lt;h3&gt;5. Executor&lt;/h3&gt;
&lt;p&gt;规划不是结束，执行才是关键。&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;/ul&gt;
&lt;p&gt;所以 Agent 系统不能只会“想”，还得能处理现实里的不确定性。&lt;/p&gt;
&lt;h2&gt;为什么 Agent 会让人觉得“更像助手”&lt;/h2&gt;
&lt;p&gt;因为它开始具备了连续性。&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;/ul&gt;
&lt;p&gt;这种感觉会比单轮问答更接近“协作”。&lt;/p&gt;
&lt;p&gt;也是因为这个原因，我觉得 Agent 最适合的场景，不一定是纯知识问答，而是那些带有明确目标、需要多步推进的任务，比如：&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;h2&gt;学 Agent 时我最关心的几个问题&lt;/h2&gt;
&lt;h3&gt;它到底是不是“自主”？&lt;/h3&gt;
&lt;p&gt;我现在的答案是：有限自主。&lt;/p&gt;
&lt;p&gt;很多 Agent 看起来很主动，其实依然是在一个被约束好的框架里运行。它的“自主”，更像是在给定目标和工具集中的局部决策能力，而不是无限制自由发挥。&lt;/p&gt;
&lt;p&gt;这个边界非常重要。&lt;/p&gt;
&lt;p&gt;如果不加约束，自主性越强，翻车概率也越高。&lt;/p&gt;
&lt;h3&gt;Prompt 重要，还是 Workflow 重要？&lt;/h3&gt;
&lt;p&gt;两者都重要，但在 Agent 场景里，我会越来越偏向认为 Workflow 更重要。&lt;/p&gt;
&lt;p&gt;Prompt 决定单步质量，Workflow 决定整体稳定性。&lt;/p&gt;
&lt;p&gt;一个提示词写得再好，如果流程没有重试、校验、回退、状态同步，系统还是会很脆。&lt;/p&gt;
&lt;h3&gt;评估为什么这么难？&lt;/h3&gt;
&lt;p&gt;因为 Agent 不是只看最后一句回答对不对。&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;也就是说，Agent 的评估更像评估“过程中的表现”，而不仅仅是“结果对错”。&lt;/p&gt;
&lt;h2&gt;我目前总结的几个实践感受&lt;/h2&gt;
&lt;h3&gt;1. 先做小闭环，再谈大而全&lt;/h3&gt;
&lt;p&gt;比起一上来做“万能 Agent”，我更认同先把一个小场景跑通。&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;/ul&gt;
&lt;p&gt;这种小闭环一旦稳定，后面再扩展能力会更自然。&lt;/p&gt;
&lt;h3&gt;2. 工具返回结果一定要尽量结构化&lt;/h3&gt;
&lt;p&gt;这一点非常现实。&lt;/p&gt;
&lt;p&gt;如果工具返回的是一大段随意文本，模型每次都要重新理解，成本高而且容易误判。相反，如果返回的是结构化数据，比如 JSON、明确状态码、固定字段，Agent 的后续决策会稳很多。&lt;/p&gt;
&lt;h3&gt;3. 不要过度迷信“一次规划到底”&lt;/h3&gt;
&lt;p&gt;复杂任务里的变化很多，一次性规划完整路径往往不现实。&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;/ul&gt;
&lt;h3&gt;4. 失败处理能力很重要&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;权限不足&lt;/li&gt;
&lt;li&gt;文件不存在&lt;/li&gt;
&lt;li&gt;格式不兼容&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果 Agent 无法识别并处理失败，那它的可用性会大打折扣。&lt;/p&gt;
&lt;h2&gt;如果让我继续学下去&lt;/h2&gt;
&lt;p&gt;接下来我大概会继续沿着这几个方向深入：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;更系统地理解 Agent 的规划方式&lt;/li&gt;
&lt;li&gt;学习多工具协作时的上下文管理&lt;/li&gt;
&lt;li&gt;关注评估方法和可靠性问题&lt;/li&gt;
&lt;li&gt;尝试自己做一些小型 Agent 工作流&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;我现在越来越觉得，Agent 的价值不只是“AI 更聪明了”，而是“AI 开始能接手一部分真实工作流”。&lt;/p&gt;
&lt;p&gt;这也是为什么这个方向会让我持续有兴趣。&lt;/p&gt;
&lt;h2&gt;结尾&lt;/h2&gt;
&lt;p&gt;这篇更像是一篇阶段性学习笔记，主要是把我目前的理解先整理出来。&lt;/p&gt;
&lt;p&gt;后面如果继续学到更具体的内容，比如：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ReAct&lt;/li&gt;
&lt;li&gt;Tool use&lt;/li&gt;
&lt;li&gt;Planning&lt;/li&gt;
&lt;li&gt;Memory&lt;/li&gt;
&lt;li&gt;Multi-agent&lt;/li&gt;
&lt;li&gt;Eval&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;我应该会再把它们拆成更细的文章继续写。&lt;/p&gt;
&lt;p&gt;至少现在，我已经不再把 Agent 只看成“会聊天的模型”了。&lt;/p&gt;
&lt;p&gt;它更像是一个开始具备执行能力的软件形态。&lt;/p&gt;
</content:encoded></item></channel></rss>