<?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>AI归档 - Liao&#039;s blog</title>
	<atom:link href="https://www.laobaiblog.top/category/ai/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.laobaiblog.top/category/ai/</link>
	<description>路漫漫其修远兮，吾将上下而求索</description>
	<lastBuildDate>Tue, 28 Apr 2026 05:23:06 +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>AI归档 - Liao&#039;s blog</title>
	<link>https://www.laobaiblog.top/category/ai/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>用 DeepSeek 模型驱动 Claude Code + 安装 claude-mem 持久记忆插件</title>
		<link>https://www.laobaiblog.top/2026/04/28/deepseekapi_claude/</link>
		
		<dc:creator><![CDATA[大白]]></dc:creator>
		<pubDate>Tue, 28 Apr 2026 04:38:59 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[分享]]></category>
		<category><![CDATA[ai]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[cc]]></category>
		<category><![CDATA[claude]]></category>
		<category><![CDATA[claude-mem]]></category>
		<category><![CDATA[deepseek]]></category>
		<guid isPermaLink="false">https://www.laobaiblog.top/?p=624</guid>

					<description><![CDATA[<p>本文由Claude code+DeepSeek-V4-Flash编写 为什么这么做？ 1. Clau &#8230;</p>
<p><a href="https://www.laobaiblog.top/2026/04/28/deepseekapi_claude/">用 DeepSeek 模型驱动 Claude Code + 安装 claude-mem 持久记忆插件</a>最先出现在<a href="https://www.laobaiblog.top">Liao&#039;s blog</a>。</p>
]]></description>
										<content:encoded><![CDATA[<blockquote><p>
  本文由Claude code+DeepSeek-V4-Flash编写
</p></blockquote>
<h3>为什么这么做？</h3>
<h4>1. Claude 账号风险太高</h4>
<p>Claude 官方对账号的风控比较严格，尤其是国内用户，经常遇到莫名其妙的封号、IP 限制、支付卡被拒等问题。与其提心吊胆地养号，不如直接用国内大模型做底层引擎。DeepSeek 注册门槛低、无封号焦虑，用起来踏实。</p>
<h4>2. API 费用极其便宜</h4>
<p>DeepSeek V4 的 API 定价比 Claude 官方 API 便宜一到两个数量级。配合 Claude Code 的本地编辑模式，日常开发场景下 token 消耗可控，成本几乎可以忽略不计。不用再盯着用量生怕超支。</p>
<h4>3. claude-mem 插件的优势：上下文管理，省 token</h4>
<p>Claude Code 本身每次会话都是一次性的，切到新会话后之前的上下文就丢了。claude-mem 解决了这个痛点：</p>
<ul>
<li><strong>跨会话记忆</strong>：上次聊到哪、改过什么文件、做过什么决策，下次打开都能 recall</li>
<li><strong>节省 token</strong>：不需要每次手动粘贴背景信息，claude-mem 自动注入最相关的上下文，减少了冗余 prompt 的 token 消耗</li>
<li><strong>渐进式召回</strong>：按需检索，不会一股脑把全部历史塞进上下文，精确控制 token 开销</li>
</ul>
<p>三层加起来的效果就是：<strong>低风险 + 低成本 + 有记忆</strong>，日常编码体验比纯原版 Claude Code 还舒服。</p>
<hr />
<p>DeepSeek 也提供了 Anthropic 兼容 API，可以直接把 Claude Code 的底层模型换成 DeepSeek V4，同时再装上 claude-mem 插件让 Claude 拥有跨会话的持久记忆。整个过程很简单，记录一下。</p>
<hr />
<h3>一、获取 DeepSeek API Key</h3>
<p>首先去 <a class="wp-editor-md-post-content-link" href="https://platform.deepseek.com">DeepSeek 开放平台</a> 注册账号。</p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2026/04/wp_editor_md_8454c0cb591fb76d9ee447127db5f5fd.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2026/04/wp_editor_md_8454c0cb591fb76d9ee447127db5f5fd.jpg" alt="" /></a></p>
<p>注册后在左侧导航栏找到 <strong>API Keys</strong>，点击 <strong>Create new secret key</strong>，给 Key 取个名字，创建后复制并保存好（弹窗关了就看不到了）。</p>
<p>API 模型价格如下（限时优惠）</p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2026/04/wp_editor_md_e1e8c1101ef5998f04dbdbc3e04fc6b3.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2026/04/wp_editor_md_e1e8c1101ef5998f04dbdbc3e04fc6b3.jpg" alt="" /></a></p>
<p>API Key 的使用地址（Anthropic 兼容模式）：</p>
<pre><code class="line-numbers">https://api.deepseek.com/anthropic
</code></pre>
<p>参考官方文档：https://api-docs.deepseek.com/zh-cn/</p>
<hr />
<h3>二、 更新 Claude Code</h3>
<p>如果你是 Windows 环境，可以直接用 <code>winget</code> 更新：</p>
<pre><code class="language-powershell line-numbers">winget upgrade Anthropic.ClaudeCode
或
winget install Anthropic.ClaudeCode
</code></pre>
<p>更新过程如下：</p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2026/04/wp_editor_md_228a73b26ddb24e18a718115e620278f.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2026/04/wp_editor_md_228a73b26ddb24e18a718115e620278f.jpg" alt="" /></a></p>
<p>更新完成后，建议先确认一下版本：</p>
<pre><code class="language-powershell line-numbers">claude --version
</code></pre>
<p>我这边更新后的版本如下：</p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2026/04/wp_editor_md_fa49022c8c9c899e5c5eeb317db60bc1.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2026/04/wp_editor_md_fa49022c8c9c899e5c5eeb317db60bc1.jpg" alt="" /></a></p>
<h3>三、配置 Claude Code 的 settings.json</h3>
<p>Claude Code 的配置文件位置一般在：</p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2026/04/wp_editor_md_03ba161d22ba443d031eb3fae982fc63.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2026/04/wp_editor_md_03ba161d22ba443d031eb3fae982fc63.jpg" alt="" /></a></p>
<pre><code class="language-text line-numbers">C:\Users\你的用户名\.claude\settings.json
</code></pre>
<p>找到 Claude Code 的配置文件 <code>settings.json</code>，填入以下内容：</p>
<pre><code class="language-json line-numbers">{
  "$schema": "https://json.schemastore.org/claude-code-settings.json",
  "env": {
    "ANTHROPIC_BASE_URL": "https://api.deepseek.com/anthropic",
    "ANTHROPIC_AUTH_TOKEN": "&lt;你的 DeepSeek API Key&gt;",
    "ANTHROPIC_DEFAULT_OPUS_MODEL": "deepseek-v4-pro[1m]",
    "ANTHROPIC_DEFAULT_SONNET_MODEL": "deepseek-v4-pro[1m]",
    "ANTHROPIC_DEFAULT_HAIKU_MODEL": "deepseek-v4-flash[1m]",
    "CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": "1",
    "CLAUDE_CODE_EFFORT_LEVEL": "max"
  },
  "model": "opus"
}
</code></pre>
<p>关键点说明：</p>
<table>
<thead>
<tr>
<th>配置项</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>ANTHROPIC_BASE_URL</code></td>
<td>指向 DeepSeek 的 Anthropic 兼容接口</td>
</tr>
<tr>
<td><code>ANTHROPIC_AUTH_TOKEN</code></td>
<td>替换成刚才复制的 API Key</td>
</tr>
<tr>
<td><code>ANTHROPIC_DEFAULT_OPUS_MODEL</code></td>
<td>设为 <code>deepseek-v4-pro</code>（最强推理）</td>
</tr>
<tr>
<td><code>ANTHROPIC_DEFAULT_SONNET_MODEL</code></td>
<td>同样可用 <code>deepseek-v4-pro</code></td>
</tr>
<tr>
<td><code>ANTHROPIC_DEFAULT_HAIKU_MODEL</code></td>
<td>设为 <code>deepseek-v4-flash</code>（快速响应）</td>
</tr>
<tr>
<td><code>CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC</code></td>
<td>设为 <code>1</code> 禁用非必要流量</td>
</tr>
<tr>
<td><code>CLAUDE_CODE_EFFORT_LEVEL</code></td>
<td>设为 <code>max</code> 获得最佳效果</td>
</tr>
</tbody>
</table>
<p>保存后重启 Claude Code，模型就切换完成了。</p>
<blockquote><p>
  <strong>注意：</strong> <code>[1m]</code> 后缀是模型标识的一部分，不要去掉。模型 <code>deepseek-chat</code> 和 <code>deepseek-reasoner</code> 将在 2026 年 7 月 24 日弃用，推荐直接使用 V4 系列。
</p></blockquote>
<hr />
<h3>三、安装 claude-mem 持久记忆插件</h3>
<p><a class="wp-editor-md-post-content-link" href="https://github.com/thedotmack/claude-mem">claude-mem</a> 是一款让 Claude Code 拥有跨会话持久记忆的开源插件，它会自动记录你的操作并生成语义摘要，在后续会话中注入相关上下文。</p>
<h4>安装方式一：通过 Claude Code 插件市场</h4>
<p>在 Claude Code 会话中依次执行：</p>
<pre><code class="language-json line-numbers">/plugin marketplace add thedotmack/claude-mem
/plugin install claude-mem
/reload-plugins
</code></pre>
<h4>安装方式二：一行命令安装（推荐）</h4>
<pre><code class="language-bash line-numbers">npx claude-mem install
</code></pre>
<h3>安装后的检查</h3>
<p>确认插件正常工作：</p>
<pre><code class="language-bash line-numbers"># 查看记忆数据库中的记录数
sqlite3 ~/.claude-mem/claude-mem.db "SELECT count(*) FROM observations;"

# 健康检查
curl http://localhost:37777/health
</code></pre>
<p>如果记录数 > 0，说明已经在工作了。</p>
<h4>常见踩坑</h4>
<ol>
<li><strong>安装范围选&#8221;为本用户安装&#8221;</strong>，不要选 project 或 local</li>
<li><strong>Worker 起不来？</strong> 检查 Bun 是否正常安装，可以手动装一下</li>
<li><strong>默认模型不对？</strong> 修改 <code>~/.claude-mem/settings.json</code>：</li>
</ol>
<pre><code class="language-json line-numbers">{
  "CLAUDE_MEM_MODEL": "sonnet",
  "CLAUDE_MEM_MODE": "code--zh"
}
</code></pre>
<ol start="4">
<li><strong>修改配置后重启 worker：</strong></li>
</ol>
<pre><code class="language-bash line-numbers">cd ~/.claude/plugins/marketplaces/thedotmack
npm run worker:restart
</code></pre>
<hr />
<h3>四、最终效果</h3>
<p>配置完成后，你的 Claude Code 变成了：</p>
<ul>
<li><strong>引擎：</strong> DeepSeek V4 模型（Pro 负责推理、Flash 负责快速响应）</li>
<li><strong>记忆：</strong> claude-mem 提供跨会话上下文（打开 Web UI <code>http://localhost:37777</code> 可以实时查看记忆流）</li>
<li><strong>成本：</strong> DeepSeek API 价格远低于原版 Claude API</li>
</ul>
<p><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2026/04/wp_editor_md_e0b9f7daba4484d885feac440225716e.jpg" alt="" /></p>
<h3>参考资料</h3>
<ul>
<li><a class="wp-editor-md-post-content-link" href="https://api-docs.deepseek.com/zh-cn/">DeepSeek API 官方文档</a></li>
<li><a class="wp-editor-md-post-content-link" href="https://platform.deepseek.com">DeepSeek 开放平台</a></li>
<li><a class="wp-editor-md-post-content-link" href="https://github.com/thedotmack/claude-mem">claude-mem GitHub</a></li>
<li><a class="wp-editor-md-post-content-link" href="https://github.com/thedotmack/claude-mem/blob/main/docs/i18n/README.zh.md">claude-mem 中文安装指南</a></li>
</ul>
<p><a href="https://www.laobaiblog.top/2026/04/28/deepseekapi_claude/">用 DeepSeek 模型驱动 Claude Code + 安装 claude-mem 持久记忆插件</a>最先出现在<a href="https://www.laobaiblog.top">Liao&#039;s blog</a>。</p>
]]></content:encoded>
					
		
		
			</item>
		<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>
		<item>
		<title>🚀 Claude Code × VSCode：开发者的 AI 终端利器配置指南</title>
		<link>https://www.laobaiblog.top/2026/03/17/%f0%9f%9a%80-claude-code-x-vscode%ef%bc%9a%e5%bc%80%e5%8f%91%e8%80%85%e7%9a%84-ai-%e7%bb%88%e7%ab%af%e5%88%a9%e5%99%a8%e9%85%8d%e7%bd%ae%e6%8c%87%e5%8d%97/</link>
		
		<dc:creator><![CDATA[大白]]></dc:creator>
		<pubDate>Tue, 17 Mar 2026 12:04:22 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[分享]]></category>
		<category><![CDATA[ai]]></category>
		<category><![CDATA[Anthropic]]></category>
		<category><![CDATA[claude code]]></category>
		<category><![CDATA[macos]]></category>
		<category><![CDATA[nodejs]]></category>
		<category><![CDATA[npm]]></category>
		<category><![CDATA[vscode]]></category>
		<category><![CDATA[Windows]]></category>
		<guid isPermaLink="false">https://www.laobaiblog.top/?p=602</guid>

					<description><![CDATA[<p>Claude Code × VSCode TL;DR：手把手带你从零安装 Claude Code，并 &#8230;</p>
<p><a href="https://www.laobaiblog.top/2026/03/17/%f0%9f%9a%80-claude-code-x-vscode%ef%bc%9a%e5%bc%80%e5%8f%91%e8%80%85%e7%9a%84-ai-%e7%bb%88%e7%ab%af%e5%88%a9%e5%99%a8%e9%85%8d%e7%bd%ae%e6%8c%87%e5%8d%97/">🚀 Claude Code × VSCode：开发者的 AI 终端利器配置指南</a>最先出现在<a href="https://www.laobaiblog.top">Liao&#039;s blog</a>。</p>
]]></description>
										<content:encoded><![CDATA[<h1>Claude Code × VSCode</h1>
<blockquote><p>
  <strong>TL;DR</strong>：手把手带你从零安装 Claude Code，并在 VSCode 里解锁最强 AI 编程体验。
</p></blockquote>
<hr />
<h2>前言</h2>
<p><strong>Claude Code</strong> 是 Anthropic 推出的 CLI 工具，它不只是代码补全——它能读懂整个项目上下文、自主修改文件、执行命令、跑测试，像一个真正的结对编程伙伴坐在你的终端里。</p>
<p>配合 VSCode 扩展，你会得到一个无缝嵌入编辑器的 AI Agent。</p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/2026/03/17/%f0%9f%9a%80-claude-code-x-vscode%ef%bc%9a%e5%bc%80%e5%8f%91%e8%80%85%e7%9a%84-ai-%e7%bb%88%e7%ab%af%e5%88%a9%e5%99%a8%e9%85%8d%e7%bd%ae%e6%8c%87%e5%8d%97/%e5%be%ae%e4%bf%a1%e5%9b%be%e7%89%87_20260317201323_45_3/"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2026/03/微信图片_20260317201323_45_3.jpg" alt="" /></a></p>
<hr />
<h2>环境准备</h2>
<h3>前置依赖</h3>
<table>
<thead>
<tr>
<th>工具</th>
<th>最低版本</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>Node.js</td>
<td><code>&gt;= 18.x</code></td>
<td>运行时环境</td>
</tr>
<tr>
<td>npm</td>
<td><code>&gt;= 9.x</code></td>
<td>随 Node.js 附带</td>
</tr>
<tr>
<td>VSCode</td>
<td><code>&gt;= 1.90</code></td>
<td>编辑器本体</td>
</tr>
</tbody>
</table>
<p>检查当前环境：</p>
<pre><code class="language-bash line-numbers">node -v
npm -v
</code></pre>
<hr />
<h2>安装 Claude Code</h2>
<h3>全局安装 CLI</h3>
<p>npm（通用，所有平台）：</p>
<pre><code class="language-bash line-numbers">npm install -g @anthropic-ai/claude-code
</code></pre>
<p>WinGet（Windows，我使用的）：</p>
<pre><code class="language-bash line-numbers">winget install Anthropic.ClaudeCode
</code></pre>
<p>Homebrew（macOS / Linux）：</p>
<pre><code class="language-bash line-numbers">brew install claude
</code></pre>
<p>macOS / Linux / WSL：</p>
<pre><code class="language-bash line-numbers">curl -fsSL https://claude.ai/install.sh | bash
</code></pre>
<p>Windows PowerShell：</p>
<pre><code class="language-powershell line-numbers">irm https://claude.ai/install.ps1 | iex
</code></pre>
<p>Windows CMD：</p>
<pre><code class="language-bash line-numbers">curl -fsSL https://claude.ai/install.cmd -o install.cmd &amp;&amp; install.cmd &amp;&amp; del install.cmd
</code></pre>
<p>安装完成后验证：</p>
<pre><code class="language-bash line-numbers">claude --version
</code></pre>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2026/03/wp_editor_md_04f8e275fb5034a031ebe0e29f40be21.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2026/03/wp_editor_md_04f8e275fb5034a031ebe0e29f40be21.jpg" alt="" /></a></p>
<hr />
<h2>🚨 国内用户必读：代理配置</h2>
<blockquote><p>
  <strong>问题根源</strong>：Anthropic 屏蔽了来自中国 IP 的 API 访问，影响所有环节——OAuth 登录、API 调用、CLI 和 VSCode 扩展。即使拥有付费的 Claude Max 订阅，从中国 IP 发出的请求一律返回 403。<strong>必须先配置代理，再启动 Claude Code。</strong>
</p></blockquote>
<p><a class="wp-editor-md-post-content-link" href="https://gist.github.com/docularxu/db0053008b9f41328f29d39ffcf7c2b2?permalink_comment_id=6005883">常见报错</a>：</p>
<pre><code class="line-numbers">OAuth error: Failed to fetch user roles: Request failed with status code 403
</code></pre>
<pre><code class="line-numbers">Unable to connect to Anthropic services
Failed to connect to api.anthropic.com: ERR_BAD_REQUEST
Note: Claude Code might not be available in your country.
</code></pre>
<p>以 v2rayN 为例（设置里查看端口，默认本地代理端口 <code>10808</code>，clash默认端口改为<code>7890</code>），需将 <code>HTTPS_PROXY</code> 环境变量指向本地代理。</p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2026/03/wp_editor_md_95fd419c81c7226bf3a36406d56cda20.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2026/03/wp_editor_md_95fd419c81c7226bf3a36406d56cda20.jpg" alt="" /></a></p>
<h3>临时设置（仅当前窗口有效）</h3>
<p><strong>CMD：</strong></p>
<pre><code class="language-cmd line-numbers">set HTTPS_PROXY=http://127.0.0.1:10808
</code></pre>
<p><strong>PowerShell：</strong></p>
<pre><code class="language-powershell line-numbers">$env:HTTPS_PROXY = "http://127.0.0.1:10808"
</code></pre>
<p>设置后在<strong>同一窗口</strong>直接运行 <code>claude</code> 即可。</p>
<h3>永久设置（推荐，重启后仍有效）</h3>
<p><strong>方式一：图形界面（新手推荐）</strong></p>
<ol>
<li><code>Win + I</code> → 搜索「高级系统设置」→ 点击「环境变量」</li>
<li>在「用户变量」区域点击「新建」</li>
<li>变量名：<code>HTTPS_PROXY</code>，变量值：<code>http://127.0.0.1:10808</code></li>
<li>确定保存，重新打开命令行窗口生效</li>
</ol>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2026/03/wp_editor_md_bc687a080f0be69a91791c495e677b77.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2026/03/wp_editor_md_bc687a080f0be69a91791c495e677b77.jpg" alt="" /></a></p>
<p><strong>方式二：命令行一键设置</strong></p>
<pre><code class="language-powershell line-numbers">[Environment]::SetEnvironmentVariable("HTTPS_PROXY", "http://127.0.0.1:10808", [EnvironmentVariableTarget]::User)
</code></pre>
<p>执行后重新打开命令行窗口即可，无需重启电脑。</p>
<h3>验证是否生效</h3>
<pre><code class="language-cmd line-numbers">:: CMD
echo %HTTPS_PROXY%
</code></pre>
<pre><code class="language-powershell line-numbers"># PowerShell
echo $env:HTTPS_PROXY
</code></pre>
<p>输出 <code>http://127.0.0.1:10808</code> 即为设置成功，之后再启动 Claude Code。</p>
<hr />
<h2>启动 Claude Code</h2>
<p>进入你的项目目录，直接启动：</p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2026/03/wp_editor_md_bdbdecc37df57fb8c89920f4e96421b8.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2026/03/wp_editor_md_bdbdecc37df57fb8c89920f4e96421b8.jpg" alt="" /></a></p>
<pre><code class="language-bash line-numbers">cd your-project
claude
</code></pre>
<p>弹出以下提示，选择 1 即可继续：</p>
<pre><code class="line-numbers">Accessing workspace: C:\Users\...
Quick safety check: Is this a project you created or one you trust?
❯ 1. Yes, I trust this folder
  2. No, exit
Enter to confirm · Esc to cancel
</code></pre>
<blockquote><p>
  若遇到连接报错。
</p></blockquote>
<pre><code class="line-numbers">Unable to connect to Anthropic services  
Failed to connect to api.anthropic.com: ERR_BAD_REQUEST  
Please check your internet connection and network settings.  
Note: Claude Code might not be available in your country. Check supported countries at https://anthropic.com/supported-countries
</code></pre>
<p><strong>Windows下操作:</strong></p>
<p>按下键盘 Win + R 键，输入 cmd 后回车，打开命令行程序<br />
在命令行中运行以下命令后回车</p>
<pre><code class="language-bash line-numbers">powershell -Command "<span class="katex math inline">f='%USERPROFILE%\.claude.json';</span>j=Get-Content <span class="katex math inline">f|ConvertFrom-Json;</span>j|Add-Member -NotePropertyName 'hasCompletedOnboarding' -NotePropertyValue <span class="katex math inline">true -Force;</span>j|ConvertTo-Json|Set-Content $f"
</code></pre>
<p>重启你的Claude Cli</p>
<p>首次启动会有简短的引导流程，授权完成后即可使用。</p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2026/03/wp_editor_md_51a2e21b2bcccac52ea6d6ed8911fb34.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2026/03/wp_editor_md_51a2e21b2bcccac52ea6d6ed8911fb34.jpg" alt="" /></a></p>
<hr />
<h2>VSCode 扩展安装与配置</h2>
<h3>安装扩展</h3>
<p>打开 VSCode，按 <code>Ctrl+Shift+X</code> 打开扩展市场，搜索：</p>
<pre><code class="line-numbers">Claude Code
</code></pre>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2026/03/wp_editor_md_bc9879addb1c7d8307862eda8f54d09f.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2026/03/wp_editor_md_bc9879addb1c7d8307862eda8f54d09f.jpg" alt="" /></a></p>
<p>找到 <strong>Anthropic</strong> 官方发布的扩展，点击 Install。</p>
<p>或者直接通过命令行安装：</p>
<pre><code class="language-bash line-numbers">code --install-extension anthropic.claude-code
</code></pre>
<h3>扩展功能一览</h3>
<p>安装完成后，你将解锁以下能力：</p>
<ul>
<li><strong>内嵌聊天面板</strong> — 不离开编辑器，直接和 Claude 对话</li>
<li><strong>选中代码提问</strong> — 高亮代码后右键，发送给 Claude 分析</li>
<li><strong>差异视图</strong> — Claude 的修改建议以 diff 形式展示，一键接受或拒绝</li>
<li><strong>终端集成</strong> — Claude 可直接在 VSCode 内置终端执行命令</li>
</ul>
<hr />
<h2>核心用法速查</h2>
<h3>基础对话</h3>
<pre><code class="language-bash line-numbers"># 启动交互式会话
claude

# 单次提问（非交互模式）
claude -p "解释一下这个项目的架构"
</code></pre>
<h3>常用快捷指令</h3>
<p>在 Claude Code 会话中，输入 <code>/</code> 触发命令列表：</p>
<table>
<thead>
<tr>
<th>命令</th>
<th>功能</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>/help</code></td>
<td>查看帮助</td>
</tr>
<tr>
<td><code>/clear</code></td>
<td>清空上下文</td>
</tr>
<tr>
<td><code>/compact</code></td>
<td>压缩对话历史，节省 token</td>
</tr>
<tr>
<td><code>/model</code></td>
<td>切换模型</td>
</tr>
<tr>
<td><code>/cost</code></td>
<td>查看本次会话消耗</td>
</tr>
<tr>
<td><code>/review-pr</code></td>
<td>PR 代码审查</td>
</tr>
<tr>
<td><code>/init</code></td>
<td>初始化项目，生成 <code>CLAUDE.md</code></td>
</tr>
</tbody>
</table>
<h3>让 Claude 读懂你的项目</h3>
<p>在项目根目录启动 Claude，进入交互式会话后执行：</p>
<pre><code class="line-numbers">/init
</code></pre>
<p>这会生成一个 <code>CLAUDE.md</code>，你可以在里面写：</p>
<ul>
<li>项目架构说明</li>
<li>技术栈约定</li>
<li>代码风格要求</li>
<li>不希望 Claude 修改的文件</li>
</ul>
<p>Claude 每次启动都会自动读取这个文件。</p>
<hr />
<h2>VSCode 进阶配置</h2>
<h3>settings.json 推荐配置</h3>
<p>打开 <code>Ctrl+Shift+P</code> → <code>Open User Settings (JSON)</code>，添加：</p>
<pre><code class="language-json line-numbers">{
  "terminal.integrated.defaultProfile.windows": "Git Bash"
}
</code></pre>
<blockquote><p>
  其他 Claude Code 相关选项可在 VSCode 设置页（<code>Ctrl+,</code>）搜索 <code>claude-code</code> 查看完整列表，按需开启。
</p></blockquote>
<h3>自定义键位绑定</h3>
<p>打开 <code>Ctrl+Shift+P</code> → <code>Open Keyboard Shortcuts (JSON)</code>：</p>
<pre><code class="language-json line-numbers">[
  {
    "key": "ctrl+shift+a",
    "command": "claude-code.openChat"
  },
  {
    "key": "ctrl+shift+r",
    "command": "claude-code.reviewSelection"
  }
]
</code></pre>
<hr />
<h2>权限模式说明</h2>
<p>Claude Code 在执行文件读写、命令时会请求权限，分三种模式：</p>
<table>
<thead>
<tr>
<th>模式</th>
<th>行为</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>默认</strong></td>
<td>每次操作都询问你</td>
</tr>
<tr>
<td><code>--dangerously-skip-permissions</code></td>
<td>全自动，不询问（仅限受信任环境）</td>
</tr>
<tr>
<td><code>--allowedTools</code></td>
<td>精确指定允许的工具范围，例如 <code>--allowedTools Bash,Edit</code></td>
</tr>
<tr>
<td><code>--print</code> / <code>-p</code></td>
<td>非交互模式，单次执行后退出，适合脚本集成</td>
</tr>
</tbody>
</table>
<hr />
<h2>Hooks 机制（进阶）</h2>
<p>Claude Code 支持配置 Hooks，在特定事件触发时执行自定义脚本。</p>
<p>编辑 <code>~/.claude/settings.json</code>：</p>
<pre><code class="language-json line-numbers">{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": "echo '[HOOK] 即将执行 Bash 命令'"
          }
        ]
      }
    ]
  }
}
</code></pre>
<p>可以用来：审计命令执行、拦截危险操作、记录日志。</p>
<hr />
<h2>常见问题排查</h2>
<h3>Q：claude: command not found</h3>
<pre><code class="language-bash line-numbers"># 检查 npm 全局安装路径是否在 PATH 中
npm config get prefix
# 将 {prefix}/bin 加入 PATH
</code></pre>
<h3>Q：403 / 无法连接 Anthropic 服务（国内常见）</h3>
<p>先配置代理，参考上方「国内用户必读」章节。代理配置完成后，在<strong>同一终端窗口</strong>再次执行 <code>claude</code>。</p>
<h3>Q：VSCode 扩展无法连接</h3>
<p>代理环境变量必须在启动 VSCode 的终端中生效，或永久写入系统环境变量，VSCode 扩展才能继承代理设置。确认终端中 <code>claude</code> 命令可以正常执行后，重启 VSCode。</p>
<h2>小技巧 &amp; 最佳实践</h2>
<ul>
<li><strong>用 <code>CLAUDE.md</code> 约束行为</strong>：写明&#8221;不要修改 <code>config/</code> 目录下的文件&#8221;之类的规则，Claude 会遵守。</li>
<li><strong>善用 <code>/compact</code></strong>：长对话会消耗大量 token，及时压缩可以降低成本。</li>
<li><strong>选中代码再提问</strong>：在 VSCode 里高亮代码后打开 Claude 面板，上下文更精准。</li>
<li><strong>让 Claude 写测试</strong>：直接说&#8221;给这个函数写单元测试&#8221;，效果出奇得好。</li>
<li><strong>多模型切换</strong>：复杂推理用 Opus，日常编码用 Sonnet，速度与效果自由切换。</li>
</ul>
<hr />
<h2>总结</h2>
<pre><code class="line-numbers">安装 CLI → 装 VSCode 扩展 → 初始化 CLAUDE.md → 开始 vibe coding
</code></pre>
<p>Claude Code 最大的价值不是补全代码，而是<strong>理解项目、自主行动</strong>。把它当作一个真正的协作者，而不是一个更聪明的 Tab 键。</p>
<hr />
<p><em>本文基于 Claude Code 最新版本（2026年3月）编写，部分功能随版本更新可能有所变化。</em></p>
<p><a href="https://www.laobaiblog.top/2026/03/17/%f0%9f%9a%80-claude-code-x-vscode%ef%bc%9a%e5%bc%80%e5%8f%91%e8%80%85%e7%9a%84-ai-%e7%bb%88%e7%ab%af%e5%88%a9%e5%99%a8%e9%85%8d%e7%bd%ae%e6%8c%87%e5%8d%97/">🚀 Claude Code × VSCode：开发者的 AI 终端利器配置指南</a>最先出现在<a href="https://www.laobaiblog.top">Liao&#039;s blog</a>。</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
