<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>智能体归档 - Liao&#039;s blog</title>
	<atom:link href="https://www.laobaiblog.top/tag/%e6%99%ba%e8%83%bd%e4%bd%93/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.laobaiblog.top/tag/智能体/</link>
	<description>路漫漫其修远兮，吾将上下而求索</description>
	<lastBuildDate>Fri, 17 Apr 2026 06:52:40 +0000</lastBuildDate>
	<language>zh-Hans</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://www.laobaiblog.top/wp-content/uploads/2022/01/cropped-tyuu-32x32.png</url>
	<title>智能体归档 - Liao&#039;s blog</title>
	<link>https://www.laobaiblog.top/tag/智能体/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>5 分钟实现第一个Agent智能体：结合Hello agents实现</title>
		<link>https://www.laobaiblog.top/2026/04/15/agent_demo/</link>
		
		<dc:creator><![CDATA[大白]]></dc:creator>
		<pubDate>Wed, 15 Apr 2026 09:48:57 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[分享]]></category>
		<category><![CDATA[agent]]></category>
		<category><![CDATA[ai]]></category>
		<category><![CDATA[codex]]></category>
		<category><![CDATA[gemma4]]></category>
		<category><![CDATA[hello agent]]></category>
		<category><![CDATA[ollama]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[智能体]]></category>
		<guid isPermaLink="false">https://www.laobaiblog.top/?p=612</guid>

					<description><![CDATA[<p>本篇博文由Codex生成 如果刚开始接触智能体，一个很常见的问题是：概念都能听懂，但落到代码时还是不 &#8230;</p>
<p><a href="https://www.laobaiblog.top/2026/04/15/agent_demo/">5 分钟实现第一个Agent智能体：结合Hello agents实现</a>最先出现在<a href="https://www.laobaiblog.top">Liao&#039;s blog</a>。</p>
]]></description>
										<content:encoded><![CDATA[<blockquote><p>
  本篇博文由Codex生成
</p></blockquote>
<p>如果刚开始接触智能体，一个很常见的问题是：概念都能听懂，但落到代码时还是不知道“智能体到底是怎么跑起来的”。这篇文章就用一个极小的本地项目 <code>travel_agent_demo</code> 来回答这个问题，并把它和 <a class="wp-editor-md-post-content-link" href="https://github.com/datawhalechina/hello-agents/blob/main/docs/chapter1/%E7%AC%AC%E4%B8%80%E7%AB%A0%20%E5%88%9D%E8%AF%86%E6%99%BA%E8%83%BD%E4%BD%93.md">Datawhale《Hello Agents》</a>第一章 1.3 小节“动手体验：5 分钟实现第一个智能体”对应起来。</p>
<p>这个项目很适合入门了解，因为它没有依赖复杂框架，而是把智能体最核心的三件事直接摊开：</p>
<ul>
<li>大模型负责理解任务和决定下一步动作</li>
<li>Python 函数负责充当外部工具</li>
<li>一个循环负责执行 <code>Thought -&gt; Action -&gt; Observation</code></li>
</ul>
<p>本地使用的环境是：</p>
<ul>
<li><code>Python 3.11.3</code></li>
<li><code>Ollama</code></li>
<li><code>gemma4:31b</code></li>
<li><a class="wp-editor-md-post-content-link" href="https://app.tavily.com/"><code>tavily_key</code></a></li>
</ul>
<p>参考资料：</p>
<ul>
<li><a class="wp-editor-md-post-content-link" href="https://github.com/datawhalechina/hello-agents/blob/main/docs/chapter1/%E7%AC%AC%E4%B8%80%E7%AB%A0%20%E5%88%9D%E8%AF%86%E6%99%BA%E8%83%BD%E4%BD%93.md">Datawhale 原文</a></li>
</ul>
<h3>一、先看整体：这个智能体的结构与调用流程</h3>
<p>Datawhale 1.3 小节的目标很明确：先写一个最小可运行 Agent，再通过它理解 <code>Thought-Action-Observation</code> 范式。当前这个 <code>travel_agent_demo</code> 项目正好就是这一思路的本地版实现。</p>
<p>项目结构只有 4 个核心文件：</p>
<ul>
<li><code>config.py</code>：定义系统提示词和模型配置</li>
<li><code>tools.py</code>：定义工具函数</li>
<li><code>llm_client.py</code>：封装 OpenAI 兼容接口</li>
<li><code>agent.py</code>：驱动整个行动循环</li>
</ul>
<p>它的调用流程可以概括成下面这张图：</p>
<pre><code class="language-text line-numbers">用户输入需求
   |
   v
agent.py 收集上下文并组装 Prompt
   |
   v
llm_client.py 调用本地 Ollama / gemma4:31b
   |
   v
模型输出 Thought + Action
   |
   +---- 如果 Action 是工具调用 ----&gt; tools.py 执行函数
   |                                     |
   |                                     v
   |                              返回 Observation
   |
   v
agent.py 把 Observation 追加回上下文
   |
   v
模型继续下一轮推理
   |
   v
输出 Finish[最终答案]
</code></pre>
<p>如果换成更工程化的说法，这个项目实际上由三层组成：</p>
<ol>
<li>协议层：用提示词规定模型必须输出 <code>Thought</code> 和 <code>Action</code></li>
<li>执行层：Python 代码解析 <code>Action</code> 并调用工具</li>
<li>反馈层：把工具结果作为 <code>Observation</code> 继续喂给模型</li>
</ol>
<p>这正是 Datawhale 1.3 里最想让初学者建立起来的认知：智能体不是“会聊天的大模型”，而是“能在循环里做决策并调用工具的大模型程序”。</p>
<h3>二、环境准备</h3>
<h4>1. Python 和依赖</h4>
<p>项目依赖很少，<code>requirements.txt</code> 里只有 4 个包：</p>
<pre><code class="language-text line-numbers">openai
requests
tavily-python
python-dotenv
</code></pre>
<p>安装方式：</p>
<pre><code class="language-bash line-numbers">python -m pip install -r requirements.txt
</code></pre>
<p>这里每个依赖的作用都很明确：</p>
<ul>
<li><code>openai</code>：访问 OpenAI 兼容接口，这里用来对接 Ollama</li>
<li><code>requests</code>：请求天气接口 <code>wttr.in</code></li>
<li><code>tavily-python</code>：做网页搜索</li>
<li><code>python-dotenv</code>：从 <code>.env</code> 自动加载环境变量</li>
</ul>
<h4>2. 本地模型环境</h4>
<p>你本地已经准备好了 <code>ollama</code> 和 <code>gemma4:31b</code>，所以 LLM 侧不需要再展开安装过程。这个项目只要求 Ollama 提供 OpenAI 兼容接口即可。</p>
<p>推荐先确认模型已经就绪：</p>
<pre><code class="language-bash line-numbers">ollama list
</code></pre>
<p>如果 <code>gemma4:31b</code> 已经存在，就可以直接继续下面的配置。</p>
<h4>3. 配置 <code>.env</code></h4>
<p>项目启动时会在 <code>config.py</code>中自动执行 <code>load_dotenv()</code>，因此只需要在项目根目录准备 <code>.env</code> 文件即可。</p>
<p>建议配置如下：</p>
<pre><code class="language-env line-numbers">LLM_API_KEY=ollama
LLM_BASE_URL=http://127.0.0.1:11434/v1
LLM_MODEL=gemma4:31b
TAVILY_API_KEY=你的_tavily_key
</code></pre>
<p>这里有两个细节值得写进博客：</p>
<ul>
<li><code>LLM_API_KEY</code> 对本地 Ollama 通常只是占位符，填 <code>ollama</code> 即可</li>
<li>项目默认值里 <code>LLM_BASE_URL</code> 是 <code>http://192.168.1.201:11434/v1</code>，如果是本机运行，更推荐改成 <code>http://127.0.0.1:11434/v1</code></li>
</ul>
<h4>4. 环境准备的现实限制</h4>
<p>这个项目并不是所有功能都只靠本地模型：</p>
<ul>
<li><code>get_weather()</code> 通过 <code>wttr.in</code> 查天气，需要能访问外网</li>
<li><code>web_search()</code> 和 <code>get_attraction()</code> 依赖 Tavily，需要 <code>TAVILY_API_KEY</code></li>
</ul>
<p>也就是说：</p>
<ul>
<li>只测模型输出格式，不一定需要 Tavily</li>
<li>想完整复现“天气 -> 景点推荐 -> 最终回答”的链路，最好配置 Tavily</li>
</ul>
<h3>三、对照 Datawhale 1.3：这个项目的每个代码块在做什么</h3>
<p>Datawhale 1.3 大致分成三步：</p>
<ol>
<li>定义系统提示词</li>
<li>定义工具</li>
<li>执行行动循环</li>
</ol>
<p>本项目几乎就是这个结构的直接映射。</p>
<h4>1. <code>config.py</code>：对应 1.3 的“定义 Agent 提示词”</h4>
<p><code>config.py</code> 里的 <code>AGENT_SYSTEM_PROMPT</code> 是整个智能体的协议中心。</p>
<p>它做了四件关键事情：</p>
<ul>
<li>明确角色：你是一个“智能旅行助手”</li>
<li>明确工具：告诉模型有哪些函数可调用</li>
<li>明确格式：每次只能输出一组 <code>Thought</code> 和 <code>Action</code></li>
<li>明确结束条件：信息足够时必须输出 <code>Finish[...]</code></li>
</ul>
<p>对应代码位置：</p>
<ul>
<li>角色与任务定义：<code>config.py:14</code></li>
<li>工具清单：<code>config.py:16</code></li>
<li>输出格式约束：<code>config.py:26</code></li>
<li>结束条件与错误处理要求：<code>config.py:35</code></li>
</ul>
<p>这一块和 Datawhale 1.3 的核心思想完全一致。智能体之所以“可执行”，不是因为模型自己知道该怎么做，而是因为我们先定义了一个稳定的动作协议。</p>
<h4>2. <code>tools.py</code>：对应 1.3 的“定义工具函数”</h4>
<p><code>tools.py</code>是这个项目和外部世界交互的地方。对智能体来说，工具就是“能力边界的延伸”。</p>
<h4><code>get_weather(city: str)</code></h4>
<p>入口在 <code>tools.py:13</code>。</p>
<p>它的作用是：</p>
<ul>
<li>访问 <code>https://wttr.in/{city}?format=j1</code></li>
<li>读取返回 JSON</li>
<li>提取天气描述和温度</li>
<li>组装成模型容易理解的字符串</li>
</ul>
<p>这一段可以理解为 Datawhale 1.3 里“天气查询工具”的本地可运行版。</p>
<h4><code>web_search(query: str)</code></h4>
<p>入口在 <code>tools.py:31</code>。</p>
<p>它的作用是：</p>
<ul>
<li>通过 <code>_get_tavily_client()</code> 获取 Tavily 客户端</li>
<li>调用 Tavily 搜索网页</li>
<li>把返回的摘要、标题、链接和内容截断后整理成文本</li>
<li>作为 <code>Observation</code> 返回给模型</li>
</ul>
<p>为什么这里要手动整理结果，而不是把 Tavily 原始 JSON 直接塞回模型？原因很简单：原始结果太长、噪声太多，而智能体更需要“可读的摘要”。这也是 Prompt 工程和工具工程结合的典型做法。</p>
<h4><code>get_attraction(city: str, weather: str)</code></h4>
<p>入口在 <code>tools.py:76</code>。</p>
<p>这个函数很巧妙，它本身不直接做景点推荐，而是：</p>
<ul>
<li>根据 <code>城市 + 天气</code> 组装查询词</li>
<li>复用 <code>web_search()</code> 去搜索“适合当前天气的旅游景点推荐及理由”</li>
</ul>
<p>这和 Datawhale 1.3 中“根据天气再推荐景点”的第二步完全一致，只是这里把“景点推荐工具”实现成了“带业务语义的搜索封装”。</p>
<h4><code>AVAILABLE_TOOLS</code></h4>
<p><code>tools.py:82</code> 把全部工具注册成字典：</p>
<pre><code class="language-python line-numbers">AVAILABLE_TOOLS = {
    "get_weather": get_weather,
    "get_attraction": get_attraction,
    "web_search": web_search,
}
</code></pre>
<p>这一步的意义是把“模型输出的动作字符串”映射成“程序里真实可执行的函数”。没有这层映射，模型就只是说了一个动作名字，程序并不知道该调用谁。</p>
<h4>3. <code>llm_client.py</code>：对应 1.3 的“定义 LLM 客户端”</h4>
<p><code>llm_client.py:4</code> 只有一个很小的封装类 <code>OpenAICompatibleClient</code>，但它的作用非常关键：把本地 Ollama 包装成一个统一的“模型调用接口”。</p>
<p>核心逻辑有三步：</p>
<ul>
<li>初始化时记录 <code>model</code>、<code>api_key</code>、<code>base_url</code></li>
<li>调用 <code>chat.completions.create()</code></li>
<li>传入 <code>system prompt</code> 和当前轮次的 <code>user prompt</code></li>
</ul>
<p>对应代码位置：</p>
<ul>
<li>初始化客户端：<code>llm_client.py:7</code></li>
<li>发起模型请求：<code>llm_client.py:11</code></li>
<li>超时控制 <code>timeout=60</code>：<code>llm_client.py:20</code></li>
</ul>
<p>这部分和 Datawhale 1.3 的思路也一致：不要把模型调用散落在业务代码里，而是先包成一个可复用组件，后面主循环只负责“何时调模型”，不用关心底层细节。</p>
<h4>4. <code>agent.py</code>：对应 1.3 的“执行行动循环”</h4>
<p>真正体现 Agent 味道的地方在 <code>agent.py:26</code></p>
<p>这一段建议在博客里重点展开，因为它就是 Datawhale 1.3 里最核心的执行闭环。</p>
<h4>第一步：初始化模型和上下文</h4>
<p>在 <code>agent.py:27</code> 到 <code>agent.py:34</code> 中，程序做了两件事：</p>
<ul>
<li>创建 <code>OpenAICompatibleClient</code></li>
<li>初始化 <code>prompt_history = [f"用户请求: {user_prompt}"]</code></li>
</ul>
<p>这一步的作用是把“用户目标”变成第一轮推理的上下文。</p>
<h4>第二步：进入多轮循环</h4>
<p><code>agent.py:36</code> 开始进入 <code>for i in range(max_turns)</code>。</p>
<p>这是典型的 Agent 调度器做法：</p>
<ul>
<li>每一轮都让模型思考一次</li>
<li>每一轮最多执行一个动作</li>
<li>直到任务完成或达到最大轮数</li>
</ul>
<p>这也对应 Datawhale 1.3 里反复强调的循环思路，而不是“一次提问，一次回答”的普通聊天模式。</p>
<h4>第三步：构造本轮 Prompt</h4>
<p>在 <code>agent.py:38</code>，程序通过：</p>
<pre><code class="language-python line-numbers">full_prompt = "\n".join(prompt_history)
</code></pre>
<p>把历史上的用户请求、模型动作、工具观察结果全部拼起来，形成当前轮次完整上下文。</p>
<p>为什么要这么做？因为模型不会自动记得上一轮工具执行了什么。你必须显式把历史传回去，它才能基于新观察继续规划下一步。</p>
<h4>第四步：调用模型生成 <code>Thought + Action</code></h4>
<p><code>agent.py:39</code> 调用：</p>
<pre><code class="language-python line-numbers">llm_output = llm.generate(full_prompt, system_prompt=AGENT_SYSTEM_PROMPT)
</code></pre>
<p>这正是 Datawhale 1.3 里的“让模型先思考，再给出行动”。</p>
<p>紧接着 <code>agent.py:41</code> 到 <code>agent.py:47</code>又做了一层截断处理，目的是防止模型一次性吐出多组 <code>Thought/Action</code>。这属于很实用的工程兜底，说明这个项目已经开始考虑真实模型输出的不稳定性，而不是只停留在理想示例。</p>
<h4>第五步：解析 <code>Action</code></h4>
<p><code>agent.py:52</code>到 <code>agent.py:67</code>先判断当前输出里是否存在 <code>Action:</code>，然后继续区分两类情况：</p>
<ul>
<li>如果是 <code>Finish[...]</code>，说明任务完成，直接返回最终答案</li>
<li>如果不是 <code>Finish[...]</code>，就继续解析工具名和参数</li>
</ul>
<p>其中工具名和参数的提取逻辑被单独封装在 <code>agent.py:8</code> 的 <code>parse_action()</code> 里。这个函数用正则把：</p>
<pre><code class="language-text line-numbers">get_weather(city="北京")
</code></pre>
<p>解析成：</p>
<ul>
<li>工具名 <code>get_weather</code></li>
<li>参数字典 <code>{"city": "北京"}</code></li>
</ul>
<p>这一步就是把“语言动作”翻译成“程序动作”。</p>
<h4>第六步：执行工具</h4>
<p><code>agent.py:69</code> 到 <code>agent.py:78</code> 负责真正调用工具：</p>
<ul>
<li>先通过 <code>parse_action()</code> 解析动作</li>
<li>再到 <code>AVAILABLE_TOOLS</code> 里查找对应函数</li>
<li>最后执行函数并拿到结果</li>
</ul>
<p>这一段是整个 Agent 最关键的分界线：从这里开始，模型不再只是“生成文本”，而是真的触发了外部能力。</p>
<h4>第七步：把工具结果回填为 Observation</h4>
<p><code>agent.py:80</code> 到 <code>agent.py:83</code>会把工具结果包装成：</p>
<pre><code class="language-text line-numbers">Observation: ...
</code></pre>
<p>然后重新放回 <code>prompt_history</code>。</p>
<p>这一步就是 <code>Thought-Action-Observation</code> 闭环中最不能缺的一环。没有 Observation，模型就不知道刚才的行动产生了什么结果，也就无法进行下一轮更合理的决策。</p>
<h4>第八步：控制上下文长度</h4>
<p>和 Datawhale 1.3 的教学示例相比，这个项目多做了一点更贴近真实场景的优化：<code>agent.py:19</code> 定义了 <code>summarize_observation()</code>，在 <code>agent.py:83</code> 处对过长的观察结果进行截断。</p>
<p>这背后的原因很实际：</p>
<ul>
<li>工具返回内容可能很长</li>
<li>上下文越长，本地模型越慢</li>
<li>多轮对话里如果不控制上下文，很容易拖垮响应速度</li>
</ul>
<p>对于本地 <code>gemma4:31b</code> 这种大模型来说，这个小优化是有价值的。</p>
<h3>四、把这个项目映射回 Datawhale 1.3，可以怎么理解</h3>
<p>如果只保留最关键的对应关系，可以总结成下面这张表：</p>
<table>
<thead>
<tr>
<th>Datawhale 1.3 的概念</th>
<th>本项目中的实现</th>
</tr>
</thead>
<tbody>
<tr>
<td>系统提示词</td>
<td><code>config.py</code> 中的 <code>AGENT_SYSTEM_PROMPT</code></td>
</tr>
<tr>
<td>天气 / 景点工具</td>
<td><code>tools.py</code> 中的 <code>get_weather()</code>、<code>get_attraction()</code></td>
</tr>
<tr>
<td>模型客户端</td>
<td><code>llm_client.py</code> 中的 <code>OpenAICompatibleClient</code></td>
</tr>
<tr>
<td>行动循环</td>
<td><code>agent.py</code> 中的 <code>run_agent()</code></td>
</tr>
<tr>
<td><code>Thought-Action-Observation</code></td>
<td><code>prompt_history + 工具调用 + Observation 回填</code></td>
</tr>
<tr>
<td>结束条件</td>
<td><code>Action: Finish[...]</code></td>
</tr>
</tbody>
</table>
<p>所以这篇博客其实可以给读者一个很直接的结论：</p>
<blockquote><p>
  Datawhale 1.3 不是一个“抽象案例”，而是一个可以直接投影到真实项目结构里的最小 Agent 模型。
</p></blockquote>
<h3>五、怎么启动这个项目</h3>
<p>启动步骤很短</p>
<h4>1. 安装依赖</h4>
<pre><code class="language-bash line-numbers">python -m pip install -r requirements.txt
</code></pre>
<h4>2. 准备 <code>.env</code></h4>
<pre><code class="language-env line-numbers">LLM_API_KEY=ollama
LLM_BASE_URL=http://127.0.0.1:11434/v1
LLM_MODEL=gemma4:31b
TAVILY_API_KEY=你的_tavily_key
</code></pre>
<h4>3. 确认 Ollama 正在提供服务</h4>
<p>如果你本地已经正常运行 Ollama，这一步一般不需要额外操作。只要 <code>LLM_BASE_URL</code> 对应的接口可访问即可。</p>
<h4>4. 运行 Agent</h4>
<pre><code class="language-bash line-numbers">python agent.py
</code></pre>
<p>运行后终端会提示：</p>
<pre><code class="language-text line-numbers">请输入你的需求:
</code></pre>
<p>这时可以输入例如：</p>
<pre><code class="language-text line-numbers">帮我看一下贵阳的天气，并推荐一下热门的商圈
</code></pre>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2026/04/wp_editor_md_e587d01d44bf4596cfa9bb71a9dccb02.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2026/04/wp_editor_md_e587d01d44bf4596cfa9bb71a9dccb02.jpg" alt="" /></a></p>
<h4>5. 终端里会发生什么</h4>
<p>执行时你通常会看到类似下面的过程：</p>
<ol>
<li>模型先输出 <code>Thought</code> 和 <code>Action</code></li>
<li>如果 <code>Action</code> 是 <code>get_weather(...)</code>，程序就去查天气</li>
<li>天气结果以 <code>Observation</code> 的形式回填</li>
<li>模型再决定是否调用 <code>get_attraction(...)</code> 或 <code>web_search(...)</code></li>
<li>信息足够后，模型输出 <code>Finish[...]</code><br />
这就是一个标准的最小智能体启动过程。</li>
</ol>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/2026/04/15/agent_demo/attachment/16/"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2026/04/16.jpg" alt="" /></a></p>
<h3>六、写在最后：为什么说它是“第一个智能体”，而不只是一个脚本</h3>
<p>很多初学者第一次写这类程序时，会觉得它不过是“模型 + 函数调用”。但从 Agent 视角看，它已经具备了最基本的自主决策结构：</p>
<ul>
<li>它会先判断下一步做什么</li>
<li>它会根据当前任务选择工具</li>
<li>它会利用工具结果更新自己的后续决策</li>
<li>它会在信息足够时主动结束任务</li>
</ul>
<p>这就是智能体的最小闭环。</p>
<p>当然，这个项目还不是一个完整产品，它还缺少很多更高级的能力，比如长期记忆、重试机制、结构化函数调用、预算约束和更复杂的旅行规划。但作为“第一个智能体”的博客案例，它已经足够合理，甚至比直接上框架更适合入门。</p>
<p>如果要用一句话总结这个项目，我会写成：</p>
<blockquote><p>
  <code>travel_agent_demo</code> 的价值不在于功能多复杂，而在于它把 Datawhale 1.3 中“提示词 + 工具 + 行动循环”的智能体最小结构，用本地 Ollama 和 <code>gemma4:31b</code> 真实跑通了。
</p></blockquote>
<p><strong><a class="wp-editor-md-post-content-link" href="https://mrliao.lanzouu.com/iNAJJ3nbs9te">项目demo地址下载</a></strong></p>
<p><a href="https://www.laobaiblog.top/2026/04/15/agent_demo/">5 分钟实现第一个Agent智能体：结合Hello agents实现</a>最先出现在<a href="https://www.laobaiblog.top">Liao&#039;s blog</a>。</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
