<?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/category/share/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.laobaiblog.top/category/share/</link>
	<description>路漫漫其修远兮，吾将上下而求索</description>
	<lastBuildDate>Thu, 30 Apr 2026 07:23:55 +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/category/share/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>黑神话悟空各章节精美壁纸及通关场景一览</title>
		<link>https://www.laobaiblog.top/2026/04/30/blackwukong/</link>
		
		<dc:creator><![CDATA[大白]]></dc:creator>
		<pubDate>Thu, 30 Apr 2026 07:17:25 +0000</pubDate>
				<category><![CDATA[分享]]></category>
		<category><![CDATA[black wukong]]></category>
		<category><![CDATA[壁纸]]></category>
		<category><![CDATA[悟空]]></category>
		<category><![CDATA[游戏科学]]></category>
		<category><![CDATA[黑神话]]></category>
		<guid isPermaLink="false">https://www.laobaiblog.top/?p=631</guid>

					<description><![CDATA[<p>黑神话第一章·黑风山 黑神话第二章·黄风岭 黑神话第三章·小西天 黑神话第四章·盘丝洞 黑神话第五章 &#8230;</p>
<p><a href="https://www.laobaiblog.top/2026/04/30/blackwukong/">黑神话悟空各章节精美壁纸及通关场景一览</a>最先出现在<a href="https://www.laobaiblog.top">Liao&#039;s blog</a>。</p>
]]></description>
										<content:encoded><![CDATA[<blockquote><p>
  黑神话第一章·黑风山
</p></blockquote>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/?attachment_id=632"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2026/04/黑神话第一章黑风山-scaled.png" alt="" /></a></p>
<hr />
<blockquote><p>
  黑神话第二章·黄风岭
</p></blockquote>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/?attachment_id=633"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2026/04/黑神话第二章黄风岭-scaled.png" alt="" /></a></p>
<hr />
<blockquote><p>
  黑神话第三章·小西天
</p></blockquote>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/?attachment_id=635"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2026/04/黑神话第三章小西天-scaled.png" alt="" /></a></p>
<hr />
<blockquote><p>
  黑神话第四章·盘丝洞
</p></blockquote>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/?attachment_id=636"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2026/04/黑神话第四章盘丝洞-scaled.png" alt="" /></a></p>
<hr />
<blockquote><p>
  黑神话第五章·火焰山
</p></blockquote>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/?attachment_id=637"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2026/04/黑神话第五章火焰山-scaled.png" alt="" /></a></p>
<hr />
<blockquote><p>
  黑神话第六章·花果山
</p></blockquote>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/?attachment_id=634"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2026/04/黑神话第六章花果山-scaled.png" alt="" /></a></p>
<hr />
<blockquote><p>
  黑神话隐藏章·梅见峰
</p></blockquote>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/?attachment_id=638"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2026/04/黑神话隐藏章梅见峰-scaled.png" alt="" /></a></p>
<hr />
<p><strong><a class="wp-editor-md-post-content-link" href="https://mrliao.lanzouu.com/b0hdvzcqf">原图下载密码</a>：dabai</strong></p>
<p><a href="https://www.laobaiblog.top/2026/04/30/blackwukong/">黑神话悟空各章节精美壁纸及通关场景一览</a>最先出现在<a href="https://www.laobaiblog.top">Liao&#039;s blog</a>。</p>
]]></content:encoded>
					
		
		
			</item>
		<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>
		<item>
		<title>《画》</title>
		<link>https://www.laobaiblog.top/2025/08/20/%e3%80%8a%e7%94%bb%e3%80%8b-2/</link>
		
		<dc:creator><![CDATA[大白]]></dc:creator>
		<pubDate>Wed, 20 Aug 2025 01:25:55 +0000</pubDate>
				<category><![CDATA[分享]]></category>
		<category><![CDATA[画画]]></category>
		<guid isPermaLink="false">https://www.laobaiblog.top/?p=584</guid>

					<description><![CDATA[<p><a href="https://www.laobaiblog.top/2025/08/20/%e3%80%8a%e7%94%bb%e3%80%8b-2/">《画》</a>最先出现在<a href="https://www.laobaiblog.top">Liao&#039;s blog</a>。</p>
]]></description>
										<content:encoded><![CDATA[<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/?attachment_id=585"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2025/08/1.jpg" alt="" /></a></p>
<p><span id="more-584"></span></p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/?attachment_id=586"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2025/08/2.jpg" alt="" /></a></p>
<p><a href="https://www.laobaiblog.top/2025/08/20/%e3%80%8a%e7%94%bb%e3%80%8b-2/">《画》</a>最先出现在<a href="https://www.laobaiblog.top">Liao&#039;s blog</a>。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>《画》</title>
		<link>https://www.laobaiblog.top/2025/08/04/%e3%80%8a%e7%94%bb%e3%80%8b/</link>
		
		<dc:creator><![CDATA[大白]]></dc:creator>
		<pubDate>Mon, 04 Aug 2025 03:47:08 +0000</pubDate>
				<category><![CDATA[分享]]></category>
		<category><![CDATA[画画]]></category>
		<guid isPermaLink="false">https://www.laobaiblog.top/?p=572</guid>

					<description><![CDATA[<p><a href="https://www.laobaiblog.top/2025/08/04/%e3%80%8a%e7%94%bb%e3%80%8b/">《画》</a>最先出现在<a href="https://www.laobaiblog.top">Liao&#039;s blog</a>。</p>
]]></description>
										<content:encoded><![CDATA[<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/?attachment_id=575"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2025/08/墨竹.jpg" alt="" /></a></p>
<hr />
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/?attachment_id=574"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2025/08/猫.jpg" alt="" /></a></p>
<hr />
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/?attachment_id=573"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2025/08/旧巷.jpg" alt="" /></a></p>
<p><a href="https://www.laobaiblog.top/2025/08/04/%e3%80%8a%e7%94%bb%e3%80%8b/">《画》</a>最先出现在<a href="https://www.laobaiblog.top">Liao&#039;s blog</a>。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>R.I.P Alist部署文档备份</title>
		<link>https://www.laobaiblog.top/2025/06/12/r-i-p-alist%e9%83%a8%e7%bd%b2%e6%96%87%e6%a1%a3%e5%a4%87%e4%bb%bd/</link>
		
		<dc:creator><![CDATA[大白]]></dc:creator>
		<pubDate>Thu, 12 Jun 2025 03:30:17 +0000</pubDate>
				<category><![CDATA[Docker]]></category>
		<category><![CDATA[分享]]></category>
		<category><![CDATA[alist]]></category>
		<category><![CDATA[docker]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[开源]]></category>
		<category><![CDATA[收购]]></category>
		<category><![CDATA[隐私]]></category>
		<guid isPermaLink="false">https://www.laobaiblog.top/?p=558</guid>

					<description><![CDATA[<p>因为alist被收购在开源社区引发的波动，该开源项目被“贵州不够科技”公司收购，文档和下载链接被修改 &#8230;</p>
<p><a href="https://www.laobaiblog.top/2025/06/12/r-i-p-alist%e9%83%a8%e7%bd%b2%e6%96%87%e6%a1%a3%e5%a4%87%e4%bb%bd/">R.I.P Alist部署文档备份</a>最先出现在<a href="https://www.laobaiblog.top">Liao&#039;s blog</a>。</p>
]]></description>
										<content:encoded><![CDATA[<blockquote><p>
  因为alist被收购在开源社区引发的波动，该开源项目被“贵州不够科技”公司收购，文档和下载链接被修改：中文文档被大幅修改，加入了微信链接，更大范围的收集用户信息等非技术内容。有鉴于此，打算自行写一个备份文档，文中镜像已备份到我自己的仓库，备份来自未收购前的版本。
</p></blockquote>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2025/06/wp_editor_md_1a6e67e00424d38f2aad9a1a374956f7.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2025/06/wp_editor_md_1a6e67e00424d38f2aad9a1a374956f7.jpg" alt="" /></a></p>
<h1>Docker安装</h1>
<h3>AList镜像</h3>
<p><a class="wp-editor-md-post-content-link" href="https://openlistteam.github.io/docs/zh/guide/">旧版WiKi文档</a>：端口建议更改成另一个复杂端口，避免扫描攻击。</p>
<pre><code class="language-shell line-numbers">#未收购前版本(推荐)
docker run -d --restart=always -v /etc/alist:/opt/alist/data -p 5244:5244 -e PUID=0 -e PGID=0 -e UMASK=022 --name="alist" opslaobai/alist:v3.39.4

#3.45当前最新版本（2025-06-12）
docker run -d --restart=always -v /etc/alist:/opt/alist/data -p 5244:5244 -e PUID=0 -e PGID=0 -e UMASK=022 --name="alist" opslaobai/alist:latest

#初始密码指首次启动时的登录凭证。若后续忘记管理员用户名或密码，您可执行以下命令以随机生成新密码:
docker exec -it alist ./alist admin random

#或者您也可以手动设置新密码，​​NEW_PASSWORD​​ 表示您需要设置的密码:
docker exec -it alist ./alist admin set NEW_PASSWORD
</code></pre>
<p>我最新的镜像仓库地址：<a class="wp-editor-md-post-content-link" href="https://hub.docker.com/r/opslaobai/alist/tags">laobai</a>，更换相应的docker镜像即可拉取2025-06-12最新上传版本。（有兴趣再更新版本）</p>
<h3>Docker compose</h3>
<pre><code class="language-shell line-numbers">version: '3.3'
services:
  alist:
    image: 'opslaobai/alist:v3.39.4'
    container_name: alist
    volumes:
      - '/etc/alist:/opt/alist/data'
    ports:
      - '5244:5244'
    environment:
      - PUID=0
      - PGID=0
      - UMASK=022
    restart: unless-stopped

</code></pre>
<h5>环境变量参数</h5>
<table>
<thead>
<tr>
<th>名称</th>
<th>默认值</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>PUID</td>
<td>0</td>
<td>运行身份 UID</td>
</tr>
<tr>
<td>PGID</td>
<td>0</td>
<td>运行身份 GID</td>
</tr>
<tr>
<td>UMASK</td>
<td>022</td>
<td><a class="wp-editor-md-post-content-link" href="https://en.wikipedia.org/wiki/Umask">防止新创建的文件/目录被组或其他用户意外修改</a></td>
</tr>
<tr>
<td>RUN_ARIA2</td>
<td></td>
<td>是否同时运行 ARIA2，当镜像含有 aria2 环境时默认为 true，否则为 false</td>
</tr>
<tr>
<td>TZ</td>
<td></td>
<td>默认为 UTC 时区，如果你想指定时区，则可以设置此变量，例如：Asia/Shanghai</td>
</tr>
</tbody>
</table>
<hr />
<h4>投毒风险引担忧</h4>
<p>社区最关心的是潜在的供应链投毒风险。据报道，此前金华某公司收购Oneinstack和LNMP后曾尝试进行投毒，但被安全公司发现。</p>
<p>贵州不够科技此前还收购了Java工具库Hutool。有用户指出，该公司收购的开源软件都出现了异常情况。目前最大的风险在于，Alist使用了私有API服务，如果原开发者不再提供相关API支持，用户可能面临无法使用的困境。</p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2025/06/wp_editor_md_61e9a03ffdfd6d541d06bda3c2462b3d.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2025/06/wp_editor_md_61e9a03ffdfd6d541d06bda3c2462b3d.jpg" alt="" /></a></p>
<p><a href="https://www.laobaiblog.top/2025/06/12/r-i-p-alist%e9%83%a8%e7%bd%b2%e6%96%87%e6%a1%a3%e5%a4%87%e4%bb%bd/">R.I.P Alist部署文档备份</a>最先出现在<a href="https://www.laobaiblog.top">Liao&#039;s blog</a>。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Ubuntu安装Ollama,Huggingface下载GGUF大模型手动导入Ollama</title>
		<link>https://www.laobaiblog.top/2025/04/01/ollama-gguf/</link>
		
		<dc:creator><![CDATA[大白]]></dc:creator>
		<pubDate>Tue, 01 Apr 2025 07:57:35 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[分享]]></category>
		<category><![CDATA[huggingface]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[ollama]]></category>
		<category><![CDATA[ubuntu]]></category>
		<guid isPermaLink="false">https://www.laobaiblog.top/?p=546</guid>

					<description><![CDATA[<p>在 Ubuntu 24.04 上部署 Ollama + DeepSeek，可以构建一个安全、可控的本 &#8230;</p>
<p><a href="https://www.laobaiblog.top/2025/04/01/ollama-gguf/">Ubuntu安装Ollama,Huggingface下载GGUF大模型手动导入Ollama</a>最先出现在<a href="https://www.laobaiblog.top">Liao&#039;s blog</a>。</p>
]]></description>
										<content:encoded><![CDATA[<blockquote><p>
  在 Ubuntu 24.04 上部署 Ollama + DeepSeek，可以构建一个安全、可控的本地 AI 知识库系统，适用于企业文档管理、个人学习助手等场景。本教程将详细介绍安装配置步骤，帮助用户快速搭建属于自己的 AI 知识库，实现高效信息检索与智能交互。
</p></blockquote>
<h3>一、Ollama 下载与部署</h3>
<p>Ollama 是一个开源项目，可以使用官网推荐的脚本方式安装，也可以直接访问 github 下载 release 包后进行手动安装。我这里选择手动安装<code>ollama-linux-amd64.tgz</code></p>
<h4>1. 自动安装</h4>
<pre><code class="language-shell line-numbers">curl -fsSL https://ollama.com/install.sh | sh
</code></pre>
<h4>2. 手动安装</h4>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2025/04/wp_editor_md_f15c1e22299dd452b3c75bd3294b5074.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2025/04/wp_editor_md_f15c1e22299dd452b3c75bd3294b5074.jpg" alt="" /></a></p>
<pre><code class="language-shell line-numbers">#最新版本在github上查看
wget https://github.com/ollama/ollama/releases/download/v0.6.3/ollama-linux-amd64.tgz
#可以使用以下命令进行解压缩并拷贝到系统目录中：
sudo tar -C /usr -zxvf ollama-linux-amd64.tgz
#这样就直接部署完成了
ollama -v
#显示 ollama version is 0.6.3 查看安装版本进行验证。
</code></pre>
<h4>3. 创建 Ollama 用户及系统服务</h4>
<p>出于安全性、隔离性和系统管理的考虑，需要创建 ollama 用户，执行以下命令：</p>
<pre><code class="language-shell line-numbers"># 新增用户
sudo useradd -r -s /bin/false -U -m -d /usr/share/ollama ollama
# 修改用户信息
sudo usermod -a -G ollama <span class="katex math inline">(whoami)
创建系统服务 service 文件：

# 编辑文件
sudo vi /etc/systemd/system/ollama.service
# 文件内容
[Unit]
Description=Ollama Service
After=network-online.target

[Service]
ExecStart=/usr/bin/ollama serve
User=ollama
Group=ollama
Restart=always
RestartSec=3
Environment="PATH=</span>PATH"
Environment="OLLAMA_HOST=0.0.0.0:11434"
Environment="OLLAMA_ORIGINS=*"

[Install]
WantedBy=default.target
</code></pre>
<h4>4. 配置重载及开机自启</h4>
<pre><code class="language-shell line-numbers"># 重载配置
sudo systemctl daemon-reload
# 启动服务
sudo systemctl start ollama.service
# 查看服务状态
sudo systemctl status ollama.service
# 设置服务开机自启动
sudo systemctl enable ollama.service
</code></pre>
<h3>二、Huggingface模型下载</h3>
<p><a class="wp-editor-md-post-content-link" href="https://huggingface.co/">Huggingface官网下载（科学上网）</a></p>
<ol>
<li>ollama因为网络不稳定的原因，所以在这里没有ollama pull XXX模型，在这里根据自身显卡规格选择想要运行的模型，用这两个模型作为参考：</li>
</ol>
<ul>
<li><a class="wp-editor-md-post-content-link" href="https://huggingface.co/unsloth/DeepSeek-R1-Distill-Qwen-32B-GGUF/tree/main">unsloth/DeepSeek-R1-Distill-Qwen-32B-GGUF</a></li>
</ul>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2025/04/wp_editor_md_cf5a1b7c1d1cd29251b246290255c3cf.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2025/04/wp_editor_md_cf5a1b7c1d1cd29251b246290255c3cf.jpg" alt="" /></a></p>
<ul>
<li><a class="wp-editor-md-post-content-link" href="https://huggingface.co/Qwen/QwQ-32B-GGUF">Qwen/QwQ-32B-GGUF</a></li>
</ul>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2025/04/wp_editor_md_8add52e0c967508a9cc7032be3132d8c.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2025/04/wp_editor_md_8add52e0c967508a9cc7032be3132d8c.jpg" alt="" /></a></p>
<p>下载并上传到服务器<code>/data/models/XXX</code>模型目录下</p>
<pre><code class="language-shell line-numbers">#参数解析
DeepSeek：DeepSeek 发布的模型文件
R1：深度思考模型
Distill：模型蒸馏
Qwen：与阿里巴巴推出的通义千问系列模型相关
32B：32 Billion，即 320 亿参数的版本
Q4：4-bit 量化
K：量化分组，是量化算法中的一种优化技术
M：中等量化粒度
gguf：GPT-Generated Unified Format，是一种专为大型模型设计的二进制文件存储格式
</code></pre>
<h3>三、Ollama手动加载模型运行</h3>
<p>把<strong><code>DeepSeek-R1-Distill-Qwen-32B-Q4_K_M.gguf</code></strong>及<strong><code>qwq-32b-q4_k_m.gguf</code></strong>两个模型文件放到对应的<strong><code>deepseek</code></strong>及<strong><code>qwq</code></strong>目录下。</p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2025/04/wp_editor_md_84e92d9b67262d046758b6409a1d931c.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2025/04/wp_editor_md_84e92d9b67262d046758b6409a1d931c.jpg" alt="" /></a></p>
<h5>1. 在DeepSeek模型文件同级目录下创建文件<code>ollama-deepseek</code>并写入以下内容：</h5>
<pre><code class="language-shell line-numbers">FROM ./DeepSeek-R1-Distill-Qwen-32B-Q4_K_M.gguf
</code></pre>
<pre><code class="language-shell line-numbers">#然后在模型文件目录执行以下命令导入模型文件：
ollama create DeepSeek-R1-Distill-Qwen-32B-GGUF -f ./ollama-deepseek
</code></pre>
<h5>2. 在Qwq模型文件同级目录下创建文件<code>ollama-qwq</code>并写入以下内容：</h5>
<pre><code class="language-shell line-numbers">FROM ./qwq-32b-q4_k_m.gguf
</code></pre>
<pre><code class="language-shell line-numbers">#然后在模型文件目录执行以下命令导入模型文件：
ollama create QwQ-32B-GGUF -f ./ollama-qwq
</code></pre>
<h3>四、查看模型与运行模型</h3>
<p>可以使用命令<code>ollama list</code>查看已加载的模型列表：</p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2025/04/wp_editor_md_53dcc1feda2e1a8c640041ba809b3a1b.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2025/04/wp_editor_md_53dcc1feda2e1a8c640041ba809b3a1b.jpg" alt="" /></a></p>
<p>然后通过命令<code>ollama run &lt;model-name&gt;</code>就可以运行指定的模型了</p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2025/04/wp_editor_md_83e2136af7bdf2b143a48fc317a9d51a.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2025/04/wp_editor_md_83e2136af7bdf2b143a48fc317a9d51a.jpg" alt="" /></a></p>
<p><a href="https://www.laobaiblog.top/2025/04/01/ollama-gguf/">Ubuntu安装Ollama,Huggingface下载GGUF大模型手动导入Ollama</a>最先出现在<a href="https://www.laobaiblog.top">Liao&#039;s blog</a>。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Docker compose安装配置向量数据库Milvus，配置可视化Attu</title>
		<link>https://www.laobaiblog.top/2025/04/01/docker-compose%e5%ae%89%e8%a3%85%e9%85%8d%e7%bd%ae%e5%90%91%e9%87%8f%e6%95%b0%e6%8d%ae%e5%ba%93milvus%ef%bc%8c%e9%85%8d%e7%bd%ae%e5%8f%af%e8%a7%86%e5%8c%96attu/</link>
		
		<dc:creator><![CDATA[大白]]></dc:creator>
		<pubDate>Tue, 01 Apr 2025 06:49:19 +0000</pubDate>
				<category><![CDATA[Docker]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[分享]]></category>
		<category><![CDATA[docker]]></category>
		<category><![CDATA[docker compose]]></category>
		<category><![CDATA[milvus]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[向量数据库]]></category>
		<category><![CDATA[开源]]></category>
		<guid isPermaLink="false">https://www.laobaiblog.top/?p=544</guid>

					<description><![CDATA[<p>介绍Milvus向量数据库的安装过程，包括创建工作目录、下载docker-compose.yml文件 &#8230;</p>
<p><a href="https://www.laobaiblog.top/2025/04/01/docker-compose%e5%ae%89%e8%a3%85%e9%85%8d%e7%bd%ae%e5%90%91%e9%87%8f%e6%95%b0%e6%8d%ae%e5%ba%93milvus%ef%bc%8c%e9%85%8d%e7%bd%ae%e5%8f%af%e8%a7%86%e5%8c%96attu/">Docker compose安装配置向量数据库Milvus，配置可视化Attu</a>最先出现在<a href="https://www.laobaiblog.top">Liao&#039;s blog</a>。</p>
]]></description>
										<content:encoded><![CDATA[<blockquote><p>
  介绍Milvus向量数据库的安装过程，包括创建工作目录、下载docker-compose.yml文件、配置attu可视化面板和修改安全设置。
</p></blockquote>
<h3>环境准备</h3>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2025/04/wp_editor_md_5f5908886322910b08bd5deb0f4862ee.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2025/04/wp_editor_md_5f5908886322910b08bd5deb0f4862ee.jpg" alt="" /></a></p>
<ul>
<li>docker版本：28.0.4</li>
<li>docker compose版本：v2.34.0</li>
</ul>
<h3>Milvus向量数据库简介</h3>
<p><strong>Milvus是一款开源的向量数据库，它专为AI应用设计，用于管理和检索海量的特征向量</strong>。Milvus的优势主要包括：</p>
<ul>
<li>高效的向量检索性能：Milvus采用了多种先进的索引算法，如IVF, HNSW, ANNOY等，能够在大规模数据集上实现高效的近似最近邻搜索。</li>
<li>易于扩展和维护：Milvus支持水平和垂直扩展，能够适应不断增长的数据规模和查询需求。它的分布式架构使得数据存储和计算能力可以灵活扩展。</li>
<li>多种数据持久化选项：Milvus支持SSD, HDD等多种存储介质，并且可以与多种持久化存储解决方案集成，如MinIO, S3等。</li>
<li>丰富的数据接口：Milvus提供了Python, Java, RESTful等多种语言的SDK，方便开发者在不同的应用场景中使用。</li>
<li>强大的可扩展性和兼容性：支持各种大小和类型的向量数据，可以与现有的数据处理和机器学习工作流程无缝集成。</li>
<li>容器化和云原生支持：支持Docker和Kubernetes，方便在云环境中部署和管理。</li>
<li>开源社区支持：作为一个开源项目，Milvus拥有活跃的社区，不断有新的功能和改进被加入。</li>
</ul>
<p>Milvus适用于各种需要高效向量检索的应用场景，如推荐系统、图像检索、自然语言处理等。由于其高效、易用和可扩展的特性，Milvus在AI应用开发中越来越受欢迎。</p>
<h3>安装Milvus</h3>
<p><strong>1. 创建工作目录（自定义）</strong></p>
<pre><code class="language-shell line-numbers"># 切换到root目录
cd /root
# 新建一个名为milvus的目录用于存放数据 目录名称可以自定义
mkdir milvus
# 进入到新建的目录
cd milvus
</code></pre>
<p><strong>2. 下载并编辑docker-compose.yml</strong></p>
<p><a class="wp-editor-md-post-content-link" href="https://github.com/milvus-io/milvus/releases/download/v2.5.7/milvus-standalone-docker-compose-gpu.yml">Github查看最新版本</a>，选择带有GPU的yml配置文件下载（<strong>nvidia显卡</strong>）。也可以借鉴<a class="wp-editor-md-post-content-link" href="https://milvus.io/docs/zh/install_standalone-docker-compose.md">官网指南</a></p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2025/04/wp_editor_md_6f59b57bfdf0a0011b6760617fe0f3a4.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2025/04/wp_editor_md_6f59b57bfdf0a0011b6760617fe0f3a4.jpg" alt="" /></a></p>
<p><span id="more-544"></span><br />
<a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2025/04/wp_editor_md_0eeb45cac25f24508d7879025e257bfb.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2025/04/wp_editor_md_0eeb45cac25f24508d7879025e257bfb.jpg" alt="" /></a></p>
<p><strong>3. 下载milvus.yml文件</strong></p>
<p>该文件是milvus的配置文件，容器中内置，但如果要修改配置，需要单独下载，这里为了做访问控制，就需要修改配置。</p>
<pre><code class="language-shell line-numbers"># 注意改成自己对应的milvus版本号
wget https://raw.githubusercontent.com/milvus-io/milvus/v2.5.7/configs/milvus.yaml
</code></pre>
<p>下载好后，确保该文件位于milvus工作目录下，然后编辑该文件，<strong>找到其中的<code>common &gt; security &gt; authorizationEnabled</code>并将其设置为<code>true</code></strong>。</p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2025/04/wp_editor_md_f74e87dac045cf2c7493aaa799ff253e.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2025/04/wp_editor_md_f74e87dac045cf2c7493aaa799ff253e.jpg" alt="" /></a></p>
<p><strong>3. 下载milvus-standalone-docker-compose-gpu.yml文件，在其中添加attu可视化面板的容器。并修改docker-compose.yml做资源映射</strong></p>
<pre><code class="language-shell line-numbers">version: '3.5'
services:
  etcd:
    container_name: milvus-etcd
    image: quay.io/coreos/etcd:v3.5.18
    environment:
      - ETCD_AUTO_COMPACTION_MODE=revision
      - ETCD_AUTO_COMPACTION_RETENTION=1000
      - ETCD_QUOTA_BACKEND_BYTES=4294967296
      - ETCD_SNAPSHOT_COUNT=50000
    volumes:
      - <span class="katex math inline">{DOCKER_VOLUME_DIRECTORY:-.}/volumes/etcd:/etcd
    command: etcd -advertise-client-urls=http://etcd:2379 -listen-client-urls http://0.0.0.0:2379 --data-dir /etcd
    healthcheck:
      test: ["CMD", "etcdctl", "endpoint", "health"]
      interval: 30s
      timeout: 20s
      retries: 3

  minio:
    container_name: milvus-minio
    image: minio/minio:RELEASE.2023-03-20T20-16-18Z
    environment:
      MINIO_ACCESS_KEY: minioadmin
      MINIO_SECRET_KEY: minioadmin
    ports:
      - "9001:9001"
      - "9000:9000"
    volumes:
      -</span>{DOCKER_VOLUME_DIRECTORY:-.}/volumes/minio:/minio_data
    command: minio server /minio_data --console-address ":9001"
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
      interval: 30s
      timeout: 20s
      retries: 3

  standalone:
    container_name: milvus-standalone
    image: milvusdb/milvus:v2.5.7-gpu
    command: ["milvus", "run", "standalone"]
    security_opt:
    - seccomp:unconfined
    environment:
      ETCD_ENDPOINTS: etcd:2379
      MINIO_ADDRESS: minio:9000
    volumes:
      - <span class="katex math inline">{DOCKER_VOLUME_DIRECTORY:-.}/volumes/milvus:/var/lib/milvus
      # 新增下面这一行来实现配置文件的映射
      -</span>{DOCKER_VOLUME_DIRECTORY:-.}/milvus.yaml:/milvus/configs/milvus.yaml
    ports:
      - "19530:19530"
      - "9091:9091"
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              capabilities: ["gpu"]
              device_ids: ["0"]
    depends_on:
      - "etcd"
      - "minio"

# 在原docker-compose文件的这个位置添加下面这个attu容器，注意版本号和行前空格。
  attu:
    container_name: attu
    image: zilliz/attu:v2.5.6
    environment:
      MILVUS_URL: milvus-standalone:19530
    ports:
      - "8000:3000"  # 外部端口8000可以自定义
    depends_on:
      - "standalone"

networks:
  default:
    name: milvus
</code></pre>
<h3>启动Mlivus</h3>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2025/04/wp_editor_md_e450eccd322cd2343c926939c6f070e3.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2025/04/wp_editor_md_e450eccd322cd2343c926939c6f070e3.jpg" alt="" /></a></p>
<pre><code class="language-shell line-numbers"># 安装目录下运行命令
# 拉取镜像
docker-compose pull
# 启动容器
docker-compose up -d
# 查看启动状态（健康状态）
docker-compose ps -a
# 停止容器
docker-compose down
</code></pre>
<p>放开端口：连接数据库需要放开19530端口，这是milvus的默认端口，可在docker-compose.yml中修改。访问可视化面板放开8000端口（刚才自己设置的）做反向代理的话可以不用放开此端口。</p>
<h3>验证效果</h3>
<p>访问可视化面板并修改密码：<strong>http://ip:8000</strong></p>
<p><strong>默认账号：root<br />
默认密码：Milvus</strong></p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2025/04/wp_editor_md_bb1b7a1216bf2fd642e12ed929bf989c.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2025/04/wp_editor_md_bb1b7a1216bf2fd642e12ed929bf989c.jpg" alt="" /></a></p>
<p><a href="https://www.laobaiblog.top/2025/04/01/docker-compose%e5%ae%89%e8%a3%85%e9%85%8d%e7%bd%ae%e5%90%91%e9%87%8f%e6%95%b0%e6%8d%ae%e5%ba%93milvus%ef%bc%8c%e9%85%8d%e7%bd%ae%e5%8f%af%e8%a7%86%e5%8c%96attu/">Docker compose安装配置向量数据库Milvus，配置可视化Attu</a>最先出现在<a href="https://www.laobaiblog.top">Liao&#039;s blog</a>。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Ubuntu24.04 TLS桌面版安装Nvidia显卡驱动</title>
		<link>https://www.laobaiblog.top/2025/03/31/ubuntu24-04-tls%e6%a1%8c%e9%9d%a2%e7%89%88%e5%ae%89%e8%a3%85nvidia%e6%98%be%e5%8d%a1%e9%a9%b1%e5%8a%a8/</link>
		
		<dc:creator><![CDATA[大白]]></dc:creator>
		<pubDate>Mon, 31 Mar 2025 09:58:58 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[分享]]></category>
		<category><![CDATA[ai]]></category>
		<category><![CDATA[deepseek]]></category>
		<category><![CDATA[gcc]]></category>
		<category><![CDATA[nvidia]]></category>
		<category><![CDATA[ubuntu]]></category>
		<guid isPermaLink="false">https://www.laobaiblog.top/?p=525</guid>

					<description><![CDATA[<p>在经历无数次重装系统以及网上教程参差不齐的踩坑之路之后，终于找到了行之有效的方法。 一、硬件环境 硬 &#8230;</p>
<p><a href="https://www.laobaiblog.top/2025/03/31/ubuntu24-04-tls%e6%a1%8c%e9%9d%a2%e7%89%88%e5%ae%89%e8%a3%85nvidia%e6%98%be%e5%8d%a1%e9%a9%b1%e5%8a%a8/">Ubuntu24.04 TLS桌面版安装Nvidia显卡驱动</a>最先出现在<a href="https://www.laobaiblog.top">Liao&#039;s blog</a>。</p>
]]></description>
										<content:encoded><![CDATA[<blockquote><p>
  在经历无数次重装系统以及网上教程参差不齐的踩坑之路之后，终于找到了行之有效的方法。
</p></blockquote>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2025/03/wp_editor_md_5a6cc48511a7c1850a7735fdc8e6ba96.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2025/03/wp_editor_md_5a6cc48511a7c1850a7735fdc8e6ba96.jpg" alt="" /></a></p>
<h3>一、硬件环境</h3>
<table>
<thead>
<tr>
<th>硬件</th>
<th>型号</th>
</tr>
</thead>
<tbody>
<tr>
<td>CPU</td>
<td>i7-14700K</td>
</tr>
<tr>
<td>显卡</td>
<td>七彩虹5090D ADOC 32G</td>
</tr>
<tr>
<td>内存</td>
<td>金士顿 128G</td>
</tr>
</tbody>
</table>
<h3>二、软件环境</h3>
<table>
<thead>
<tr>
<th>规格</th>
<th>版本</th>
</tr>
</thead>
<tbody>
<tr>
<td>系统</td>
<td><a class="wp-editor-md-post-content-link" href="https://cn.ubuntu.com/download">Ubuntu24.04 TLS 桌面版</a></td>
</tr>
<tr>
<td><strong>内核版本</strong></td>
<td><strong>6.13.8-061308-generic</strong></td>
</tr>
<tr>
<td><strong>gcc版本</strong></td>
<td><strong>gcc 14.2.0</strong> (Ubuntu 14.2.0-4ubuntu2~24.04)</td>
</tr>
</tbody>
</table>
<h3>2.1内核升级</h3>
<h4>2.1.1  在进行内核升级之前，建议更新系统中的所有软件包，以确保兼容性：</h4>
<pre><code class="language-shell line-numbers">sudo apt update
sudo apt upgrade -y
</code></pre>
<h4>2.1.2 下载内核包 原装6.11内核版本必须升级到6.13版本以上，gcc版本升级到14</h4>
<ul>
<li><strong>下载地址</strong>：</li>
<li><a class="wp-editor-md-post-content-link" href="https://kernel.ubuntu.com/mainline/v6.13.8/amd64/">kernel.ubuntu.com</a>，<strong>需要科学上网</strong>。</p>
</li>
<li>
<p><a class="wp-editor-md-post-content-link" href="https://pan.quark.cn/s/e79b0f21c268">夸克网盘：<strong>rmuW</strong></a></p>
</li>
</ul>
<pre><code class="language-shell line-numbers">1. linux-headers-6.13.8-061308_6.13.8-061308.202503222044_all.deb
2. linux-headers-6.13.8-061308-generic_6.13.8-061308.202503222044_amd64.deb
3. linux-image-unsigned-6.13.8-061308-generic_6.13.8-061308.202503222044_amd64.deb
4. linux-modules-6.13.8-061308-generic_6.13.8-061308.202503222044_amd64.deb
</code></pre>
<h4>2.1.3 安装内核包</h4>
<pre><code class="language-shell line-numbers">sudo dpkg -i linux-headers-6.13.8-061308_6.13.8-061308.202503222044_all.deb
sudo dpkg -i linux-headers-6.13.8-061308-generic_6.13.8-061308.202503222044_amd64.deb
sudo dpkg -i linux-modules-6.13.8-061308-generic_6.13.8-061308.202503222044_amd64.deb
sudo dpkg -i linux-image-unsigned-6.13.8-061308-generic_6.13.8-061308.202503222044_amd64.deb


#安装过程中，如果遇到依赖问题，可以运行以下命令进行修复
sudo apt --fix-broken install

#更新Grub并重启系统,安装内核后，需要更新Grub引导配置，以确保新内核能够被引导。执行以下命令
sudo update-grub
#完成Grub更新后，重启系统以加载新内核
sudo reboot

#验证内核升级
uname -r
#6.13.8-061308-generic
</code></pre>
<h3>2.2 gcc升级14.2</h3>
<h4>2.2.1 检查当前GCC版本</h4>
<pre><code class="language-shell line-numbers">gcc --version
</code></pre>
<h4>2.2.2 使用APT工具自动安装</h4>
<p>Ubuntu的APT包管理工具可以方便地安装GCC，但默认安装的可能是最新版本。要安装特定版本，可以使用以下命令：</p>
<pre><code class="language-shell line-numbers">sudo apt update
sudo apt install gcc-&lt;version&gt; g++-&lt;version&gt;

#例如，要安装GCC 14.2.0版本，可以输入：
sudo apt install gcc-14 g++-14
</code></pre>
<h3>三、安装NVIDIA驱动</h3>
<table>
<thead>
<tr>
<th>Distribution</th>
<th>$distro</th>
<th>$arch</th>
<th>$arch_ext</th>
</tr>
</thead>
<tbody>
<tr>
<td>Ubuntu 24.04 LTS</td>
<td>ubuntu2404</td>
<td>x86_64</td>
<td>amd64</td>
</tr>
</tbody>
</table>
<p>执行安装前准备工作。当前正在运行的内核的内核头文件和开发包可以通过以下方式安装：</p>
<pre><code class="language-shell line-numbers">apt install linux-headers-$(uname -r)
</code></pre>
<h4>3.1 下载 NVIDIA 驱动程序：</h4>
<pre><code class="language-shell line-numbers">wget https://developer.download.nvidia.com/compute/nvidia-driver/<span class="katex math inline">version/local_installers/nvidia-driver-local-repo-</span>distro-<span class="katex math inline">version_</span>arch_ext.deb
#根据系统版本及驱动版，替换相应参数，即真实地址：
https://developer.download.nvidia.com/compute/nvidia-driver/570.124.06/local_installers/nvidia-driver-local-repo-ubuntu2404-570.124.06_1.0-1_amd64.deb
#NVIDIA 驱动程序版本 $version
</code></pre>
<h4>3.2 安装Nvidia驱动：</h4>
<pre><code class="language-shell line-numbers">dpkg -i nvidia-driver-local-repo-ubuntu2404-570.124.06_1.0-1_amd64.deb
apt update
注册临时公有 GPG 密钥：
cp /var/nvidia-driver-local-repo-ubuntu2404-570.124.06/nvidia-driver-*-keyring.gpg /usr/share/keyrings/
</code></pre>
<h4>3.3 Network Repository 安装</h4>
<p>安装新的 cuda-keyring 软件包：</p>
<pre><code class="language-shell line-numbers">wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-keyring_1.1-1_all.deb
dpkg -i cuda-keyring_1.1-1_all.deb
apt update
</code></pre>
<h4>3.4 启动驱动程序安装</h4>
<pre><code class="language-shell line-numbers"># Open Kernel Modules
apt install nvidia-open
# Proprietary Kernel Modules
apt install cuda-drivers
# 重启系统
reboot
</code></pre>
<h3>四、验证效果</h3>
<pre><code class="language-shell line-numbers">nvidia-smi
</code></pre>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2025/03/wp_editor_md_a7a70e297505c94abc9093406fc8d7a4.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2025/03/wp_editor_md_a7a70e297505c94abc9093406fc8d7a4.jpg" alt="" /></a></p>
<p><a class="wp-editor-md-post-content-link" href="https://docs.nvidia.com/datacenter/tesla/driver-installation-guide/index.html">官网参考地址</a>：https://docs.nvidia.com/datacenter/tesla/driver-installation-guide/index.html</p>
<p><a href="https://www.laobaiblog.top/2025/03/31/ubuntu24-04-tls%e6%a1%8c%e9%9d%a2%e7%89%88%e5%ae%89%e8%a3%85nvidia%e6%98%be%e5%8d%a1%e9%a9%b1%e5%8a%a8/">Ubuntu24.04 TLS桌面版安装Nvidia显卡驱动</a>最先出现在<a href="https://www.laobaiblog.top">Liao&#039;s blog</a>。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>中国完整的历史朝代表</title>
		<link>https://www.laobaiblog.top/2024/09/19/history/</link>
		
		<dc:creator><![CDATA[大白]]></dc:creator>
		<pubDate>Thu, 19 Sep 2024 07:26:01 +0000</pubDate>
				<category><![CDATA[分享]]></category>
		<category><![CDATA[历史]]></category>
		<category><![CDATA[朝代]]></category>
		<guid isPermaLink="false">https://www.laobaiblog.top/?p=507</guid>

					<description><![CDATA[<p>有点意思的历史小知识 夏朝:约前2070-约前1600年禹 共计:470年 商朝:约前1600-约前 &#8230;</p>
<p><a href="https://www.laobaiblog.top/2024/09/19/history/">中国完整的历史朝代表</a>最先出现在<a href="https://www.laobaiblog.top">Liao&#039;s blog</a>。</p>
]]></description>
										<content:encoded><![CDATA[<blockquote><p>
  有点意思的历史小知识
</p></blockquote>
<ol>
<li>夏朝:约前2070-约前1600年禹 共计:470年</li>
<li>商朝:约前1600-约前1046年汤 共计:554年</li>
<li>西周:约前1046-前771年周武王姬发 共计:275年</li>
<li>东周:前770-前256年周平王姬宜白 共计:514年</li>
<li>秦朝:前221-前207年秦始皇赢政 共计:15年</li>
<li>西楚:前207-前202年西楚霸王项羽 共计:5年</li>
<li>西汉:前202-公元8年汉高祖刘邦 共计:210年</li>
<li>新朝:公元8-公元23年新太祖王莽 共计:15年</li>
<li>玄汉:公元23-25年更始帝刘玄 共计:2年</li>
<li>东汉:公元25-220年汉光武帝刘秀 共计:195年</li>
<li>三国:公元220-280年魏、蜀、吴 共计:60年</li>
<li>西晋:公元265-317年晋武帝司马炎 共计:52年</li>
<li>东晋:公元317-420年晋元帝司马睿 共计:103年</li>
<li>十六国:公元304-439年 前凉、成汉、前赵、后北凉、西凉、后凉、南凉、前燕、后燕、南燕、北燕、夏、前秦、西秦、后秦等 共计:135年</li>
<li>南朝:公元420-589年宋、齐、梁、陈 共计:169年</li>
<li>北朝:公元439-581年北魏、东魏、西魏、北齐、北周 共计:142年</li>
<li>隋朝:公元581-618年隋文帝杨坚 共计:37年</li>
<li>唐朝:公元618-907年唐高祖李渊 共计:289年</li>
<li>武周:公元690-705年武则天 共计:15年</li>
<li>五代:公元907-960年后梁、后唐、后晋、后汉、后周 共计:53年</li>
<li>十国:公元891-979年前蜀、杨吴、吴越、马楚、闽国、南汉、南平、后蜀、南唐、北汉等 共计:88年</li>
<li>北宋:公元960-1127年宋太祖赵匡胤 共计:167年</li>
<li>南宋:公元1127-1279年宋高宗赵构 共计:152年</li>
<li>辽朝:公元907-1125年耶律阿保机 共计:218年</li>
<li>西夏:公元1038-1227年夏景宗李元昊 共计:189年</li>
<li>金朝:公元1115-1234年完颜阿骨打 共计:119年</li>
<li>元朝:公元1271-1368年忽必烈 共计:97年</li>
<li>明朝:公元1368-1644年明太祖朱元璋 共计:276年</li>
<li>清朝:公元1636-1912年努尔哈赤 共计:276年</li>
</ol>
<p><a href="https://www.laobaiblog.top/2024/09/19/history/">中国完整的历史朝代表</a>最先出现在<a href="https://www.laobaiblog.top">Liao&#039;s blog</a>。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>使用docker部署pgsql，构建容灾高可用集群</title>
		<link>https://www.laobaiblog.top/2024/09/19/dockerpgbk/</link>
		
		<dc:creator><![CDATA[大白]]></dc:creator>
		<pubDate>Thu, 19 Sep 2024 07:04:30 +0000</pubDate>
				<category><![CDATA[Docker]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[分享]]></category>
		<category><![CDATA[docker]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[pgpool]]></category>
		<category><![CDATA[pgsql]]></category>
		<category><![CDATA[集群]]></category>
		<category><![CDATA[高可用]]></category>
		<guid isPermaLink="false">https://www.laobaiblog.top/?p=504</guid>

					<description><![CDATA[<p>postgresql + pgpool 构建容灾高可用集群(数据同步流复制/主备自动切换)，在pos &#8230;</p>
<p><a href="https://www.laobaiblog.top/2024/09/19/dockerpgbk/">使用docker部署pgsql，构建容灾高可用集群</a>最先出现在<a href="https://www.laobaiblog.top">Liao&#039;s blog</a>。</p>
]]></description>
										<content:encoded><![CDATA[<blockquote><p>
  postgresql + pgpool 构建容灾高可用集群(数据同步流复制/主备自动切换)，在postgresql官网看了<a class="wp-editor-md-post-content-link" href="https://www.pgpool.net/mediawiki/index.php/Documentation">pgpool-II的文档</a>，发现部署比较麻烦，为了方便快捷还是使用docker部署。
</p></blockquote>
<h1>一、简介</h1>
<p><code>bitnami/postgresql-repmgr</code>是<code>PostgreSQL HA</code>对应的docker镜像，<code>PostgreSQL HA</code> 是 PostgreSQL 集群解决方案，其中包括 PostgreSQL 复制管理器，这是一个用于管理 PostgreSQL 集群上的复制和故障转移的开源工具。</p>
<p><code>bitnami/pgpool</code>是<code>Pgpool-II</code> 对应的docker镜像，是 PostgreSQL 代理。它位于 PostgreSQL 服务器和它们的客户端之间，提供连接池、负载平衡、自动故障转移和复制。</p>
<h1>二、部署环境</h1>
<ul>
<li>系统：CentOS Linux release 7.9.2009 (Core)</li>
<li>postgresql Version：postgresql-repmgr:14</li>
<li>pgpool Version：latest</li>
<li>Docker Version：20.10.21</li>
</ul>
<h3>1. 拉取docker镜像</h3>
<p>稳妥起见，这里选用了postgresql 14版本，其次如果遭遇docker镜像拉取网络问题，可以参考我的这篇博文<a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/2024/07/16/docker%e4%bb%93%e5%ba%93%e9%95%9c%e5%83%8f%e4%bb%a3%e7%90%86%e6%89%93%e9%80%a0%e5%b1%9e%e4%ba%8e%e8%87%aa%e5%b7%b1%e7%9a%84docker-hub/">打造属于自己的Docker Hub镜像代理网站</a>，或者在镜像前加入私有镜像站。</p>
<pre><code class="language-shell line-numbers">docker pull bitnami/postgresql-repmgr:14
docker pull bitnami/pgpool:latest

#私有镜像站eg
docker pull hub-mirror.c.163.com/bitnami/postgresql-repmgr:14
docker pull hub-mirror.c.163.com/bitnami/pgpool:latest
</code></pre>
<h3>2. 启动pgsql数据库</h3>
<ol>
<li>创建文件夹并授权</li>
</ol>
<pre><code class="language-shell line-numbers">cd /
mkdir data
cd data
mkdir repmgr1
mkdir repmgr2
chmod 777 /data/repmgr1
chmod 777 /data/repmgr2
</code></pre>
<ol start="2">
<li>创建docker网络</li>
</ol>
<pre><code class="language-shell line-numbers">docker network create pg-network
</code></pre>
<ol start="3">
<li>启动数据库<br />
为了数据持久化，我们把/bitnami/postgresql目录挂载到/data/repmgr1目录下。以下两条命令可以自行做成bash脚本启动。</li>
</ol>
<pre><code class="language-shell line-numbers">#pg-0数据库启动
docker run -v /data/repmgr1:/bitnami/postgresql --detach --restart always --name pg-0 -p 30350:5432 --network pg-network --env REPMGR_PARTNER_NODES=pg-0,pg-1 --env REPMGR_NODE_NAME=pg-0 --env REPMGR_NODE_NETWORK_NAME=pg-0 --env REPMGR_PRIMARY_HOST=pg-0 --env REPMGR_PASSWORD=123456 --env POSTGRESQL_PASSWORD=123456 bitnami/postgresql-repmgr:14
</code></pre>
<pre><code class="language-shell line-numbers">#pg-1数据库启动
docker run -v /data/repmgr2:/bitnami/postgresql --detach --restart always --name pg-1 -p 30351:5432 --network pg-network --env REPMGR_PARTNER_NODES=pg-0,pg-1 --env REPMGR_NODE_NAME=pg-1 --env REPMGR_NODE_NETWORK_NAME=pg-1 --env REPMGR_PRIMARY_HOST=pg-0 --env REPMGR_PASSWORD=123456 --env POSTGRESQL_PASSWORD=123456 bitnami/postgresql-repmgr:14
</code></pre>
<ol start="4">
<li>查看启动状态</li>
</ol>
<pre><code class="language-shell line-numbers">docker ps
</code></pre>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2024/09/wp_editor_md_53c9eb917a6049470cd79aaad78f45c2.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2024/09/wp_editor_md_53c9eb917a6049470cd79aaad78f45c2.jpg" alt="" /></a></p>
<h3>3. 启动Pgpool</h3>
<p>注意，这里的<code>--add-host</code>参数对应的IP是你<strong>本地的宿主机IP</strong>，请自行修改。</p>
<pre><code class="language-shell line-numbers">docker run --detach --restart always --name pgpool -p 9999:5432 \
  --env PGPOOL_BACKEND_NODES=0:pg-0:30350,1:pg-1:30351 \
  --env PGPOOL_SR_CHECK_USER=postgres \
  --env PGPOOL_SR_CHECK_PASSWORD=123456 \
  --env PGPOOL_ENABLE_LDAP=no \
  --env PGPOOL_POSTGRES_USERNAME=postgres \
  --env PGPOOL_POSTGRES_PASSWORD=123456 \
  --env PGPOOL_ADMIN_USERNAME=postgres \
  --env PGPOOL_ADMIN_PASSWORD=123456 \
  --add-host=pg-0:192.168.1.204 \
  --add-host=pg-1:192.168.1.204 \
  bitnami/pgpool:latest
</code></pre>
<p>启动成功后，查看pgpool日志，通过pgpool可以实现数据库的负载均衡和读写分离。</p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2024/09/wp_editor_md_1665dd6bb789f5d7a5650c91028b8746.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2024/09/wp_editor_md_1665dd6bb789f5d7a5650c91028b8746.jpg" alt="" /></a></p>
<h3>4. 测试验证</h3>
<ol>
<li>navicat连接pgpool，创建user表并插入数据，看看<code>pg-0</code>及<code>pg-1</code>是否同步插入。</li>
</ol>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2024/09/wp_editor_md_08857131284d85b7fd726fb0d4a5c480.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2024/09/wp_editor_md_08857131284d85b7fd726fb0d4a5c480.jpg" alt="" /></a></p>
<hr />
<p><code>pgpool</code>创建<code>user</code>表，插入数据</p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2024/09/wp_editor_md_d61298966092bba2948e0fc3b46626da.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2024/09/wp_editor_md_d61298966092bba2948e0fc3b46626da.jpg" alt="" /></a></p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2024/09/wp_editor_md_fb9a7662185c7a42dc7b0ed10ab8928d.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2024/09/wp_editor_md_fb9a7662185c7a42dc7b0ed10ab8928d.jpg" alt="" /></a></p>
<ol start="2">
<li>验证：<code>pg-0</code>、<code>pg-1</code>同步插入</li>
</ol>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2024/09/wp_editor_md_b71f72be299bfc3ae3136718e6abe34e.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2024/09/wp_editor_md_b71f72be299bfc3ae3136718e6abe34e.jpg" alt="" /></a></p>
<p>以上方法非常简单，最后程序直接访问9999端口即可实现读写分离。</p>
<p><strong>缺点：<br />
只能再一个宿主机上执行，不能跨主机。Pgpool和Pgsql有更多的高可用方法，后续还可以深入，多服务器部署及新增组件等。</strong></p>
<p>参考地址：<br />
<a class="wp-editor-md-post-content-link" href="https://www.pgpool.net/mediawiki/index.php/Documentation">官网WIKI</a><br />
<a class="wp-editor-md-post-content-link" href="https://www.cnblogs.com/applerosa/p/13160566.html">postgresql + pgpool 构建容灾高可用集群(数据同步流复制/主备自动切换)</a><br />
<a class="wp-editor-md-post-content-link" href="https://www.cnblogs.com/hacker-linner/p/16173012.html">pgpool-II 4.3 中文手册</a><br />
<a class="wp-editor-md-post-content-link" href="https://www.cnblogs.com/qgdtq/p/17106567.html">Postgresql通过docker进行高可用部署<br />
</a><br />
<a class="wp-editor-md-post-content-link" href="https://www.cnblogs.com/eternityCulture/p/17528840.html">使用docker部署pg集群（postgresql+postgis+pgrouting+pgpool）</a></p>
<p><a href="https://www.laobaiblog.top/2024/09/19/dockerpgbk/">使用docker部署pgsql，构建容灾高可用集群</a>最先出现在<a href="https://www.laobaiblog.top">Liao&#039;s blog</a>。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Docker仓库镜像代理打造属于自己的Docker Hub</title>
		<link>https://www.laobaiblog.top/2024/07/16/docker%e4%bb%93%e5%ba%93%e9%95%9c%e5%83%8f%e4%bb%a3%e7%90%86%e6%89%93%e9%80%a0%e5%b1%9e%e4%ba%8e%e8%87%aa%e5%b7%b1%e7%9a%84docker-hub/</link>
		
		<dc:creator><![CDATA[大白]]></dc:creator>
		<pubDate>Tue, 16 Jul 2024 07:22:31 +0000</pubDate>
				<category><![CDATA[Docker]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[分享]]></category>
		<category><![CDATA[Cldouflare]]></category>
		<category><![CDATA[docker]]></category>
		<category><![CDATA[Docker Hub]]></category>
		<category><![CDATA[Pages]]></category>
		<category><![CDATA[Workers]]></category>
		<category><![CDATA[国内访问Docker镜像]]></category>
		<category><![CDATA[镜像代理]]></category>
		<category><![CDATA[镜像加速]]></category>
		<guid isPermaLink="false">https://www.laobaiblog.top/?p=491</guid>

					<description><![CDATA[<p>本博文基于原博CMLiussss Blog编写，旨在中转对 Docker 官方镜像仓库，帮助国内用户 &#8230;</p>
<p><a href="https://www.laobaiblog.top/2024/07/16/docker%e4%bb%93%e5%ba%93%e9%95%9c%e5%83%8f%e4%bb%a3%e7%90%86%e6%89%93%e9%80%a0%e5%b1%9e%e4%ba%8e%e8%87%aa%e5%b7%b1%e7%9a%84docker-hub/">Docker仓库镜像代理打造属于自己的Docker Hub</a>最先出现在<a href="https://www.laobaiblog.top">Liao&#039;s blog</a>。</p>
]]></description>
										<content:encoded><![CDATA[<blockquote><p>
  本博文基于<a class="wp-editor-md-post-content-link" href="https://blog.090227.xyz/p/CF-Workers-docker.io/">原博CMLiussss Blog</a>编写，旨在中转对 Docker 官方镜像仓库，帮助国内用户访问被墙的Docker hub，只建议私人或公司内部使用，不推荐使用该项目搭建公共服务。使用你自己的域名搭建公共服务有可能会遭受<strong>污染、反诈或被墙</strong>，推荐小规模自用即可。
</p></blockquote>
<h3>环境准备</h3>
<ul>
<li><strong><a class="wp-editor-md-post-content-link" href="https://github.com/login">GitHub账号</a></strong></li>
<li><strong><a class="wp-editor-md-post-content-link" href="https://dash.cloudflare.com/login">Cloudflare账号</a></strong></li>
<li><strong>一个属于自己的域名</strong></li>
</ul>
<hr />
<h3>一、Docker代理工具介绍</h3>
<p><strong><a class="wp-editor-md-post-content-link" href="https://github.com/cmliu/CF-Workers-docker.io">本项目</a>是一个基于 <a class="wp-editor-md-post-content-link" href="https://github.com/cmliu/CF-Workers-docker.io">Cloudflare Workers 的 Docker 镜像代理工具</a>，旨在中转对 Docker 官方镜像仓库的请求，解决访问限制并加速访问。</strong></p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2024/07/wp_editor_md_54e68b1d728e37cc1b057801abf85a92.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2024/07/wp_editor_md_54e68b1d728e37cc1b057801abf85a92.jpg" alt="" /></a></p>
<h4>为什么需要这个工具？</h4>
<p>由于<strong>神秘原因</strong>，国内用户逐渐无法访问Docker Hub仓库。这对于我们开发者来说是个不小的难题。<br />
<a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2024/07/wp_editor_md_c53beb24b163c998a0165abb6f568c6d.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2024/07/wp_editor_md_c53beb24b163c998a0165abb6f568c6d.jpg" alt="" /></a></p>
<hr />
<h3>二、GitHub Fork本项目</h3>
<p><strong>点击 <a class="wp-editor-md-post-content-link" href="https://github.com/cmliu/CF-Workers-docker.io">Github项目</a>中的<code>Fork</code>到本地自己的仓库即可。</strong></p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2024/07/wp_editor_md_0e00ec03a8460fa925fa682908356f15.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2024/07/wp_editor_md_0e00ec03a8460fa925fa682908356f15.jpg" alt="" /></a></p>
<hr />
<h3>三、登录Cloudflare创建Pages自动化</h3>
<p><strong>登录 <a class="wp-editor-md-post-content-link" href="https://dash.cloudflare.com/login">cloudflare</a> ，点击<code>Works和Pages并创建</code>，选择<code>Pages</code>再连接到刚才我们Fork到Github本地仓库的项目</strong></p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2024/07/wp_editor_md_76dad882587baf9cc54c944df2618a9e.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2024/07/wp_editor_md_76dad882587baf9cc54c944df2618a9e.jpg" alt="" /></a></p>
<hr />
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2024/07/wp_editor_md_a34eaf7dcacdd2a28d70807887cb2942.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2024/07/wp_editor_md_a34eaf7dcacdd2a28d70807887cb2942.jpg" alt="" /></a></p>
<hr />
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2024/07/wp_editor_md_86ba8012e8339c2a42b9409ddfedc8ab.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2024/07/wp_editor_md_86ba8012e8339c2a42b9409ddfedc8ab.jpg" alt="" /></a></p>
<hr />
<h3>四、开始部署设置</h3>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2024/07/wp_editor_md_e74f76e3b13e8fb90924dd6c42b6ed77.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2024/07/wp_editor_md_e74f76e3b13e8fb90924dd6c42b6ed77.jpg" alt="" /></a></p>
<p><strong>部署完成后可以进入Pages里的自动化项目，给它设置一个自定义域名。假如我有一个顶级域名：<code>laobaiblog.top</code>，那我可以再自定义域名中配置一个：<code>docker.laobaiblog.top</code>作为我的Docker代理域名。</strong></p>
<hr />
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2024/07/wp_editor_md_7bf1740f0ea23278e45d721a9670e861.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2024/07/wp_editor_md_7bf1740f0ea23278e45d721a9670e861.jpg" alt="" /></a></p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2024/07/wp_editor_md_cbb717c6ddab71dc8f27120b9f7fb026.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2024/07/wp_editor_md_cbb717c6ddab71dc8f27120b9f7fb026.jpg" alt="" /></a></p>
<p><strong>选择DNS解析，在域名解析中添加上Cloudflare生成给你的<code>CNAME记录</code>。</strong></p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2024/07/wp_editor_md_5f933d2a167bf8dee77028eef8dc2e44.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2024/07/wp_editor_md_5f933d2a167bf8dee77028eef8dc2e44.jpg" alt="" /></a></p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2024/07/wp_editor_md_9b62328b1e2623cae1dd08273937c5cd.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2024/07/wp_editor_md_9b62328b1e2623cae1dd08273937c5cd.jpg" alt="" /></a></p>
<p><strong>在你自己的域名解析管理中，添加CNAME记录，填入<code>主机记录</code>及<code>记录值</code>参数，等待5分钟后检查DNS记录。完成后访问代理域名会发现自动跳转为官网Docker Hub，且无需翻墙就说明已经实现了docker镜像代理。</strong></p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2024/07/wp_editor_md_831105c29803556dddd33044e0c27f87.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2024/07/wp_editor_md_831105c29803556dddd33044e0c27f87.jpg" alt="" /></a></p>
<h4>地址栏输入你的自定义域名搜索镜像查询，毫无压力。</h4>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2024/07/wp_editor_md_fde65cd2e8d255a3d7be1a361546fb15.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2024/07/wp_editor_md_fde65cd2e8d255a3d7be1a361546fb15.jpg" alt="" /></a></p>
<hr />
<h3>五、配置验证</h3>
<p><strong>在国内服务器上拉取镜像发现无法拉取，一直显示等待连接，各个大厂的镜像源都无法使用或仅内部使用。</strong></p>
<pre><code class="language-shell line-numbers">docker pull nginx
</code></pre>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2024/07/wp_editor_md_c42c15e2933dbf64781e4dde383a515d.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2024/07/wp_editor_md_c42c15e2933dbf64781e4dde383a515d.jpg" alt="" /></a></p>
<hr />
<p><strong>拉取镜像时加上自己代理的域名。拉取镜像仓库的命令 <code>docker pull docker.laobaiblog.top/nginx</code> 即可拉取镜像。</strong></p>
<pre><code class="language-shell line-numbers">docker pull docker.laobaiblog.top/nginx
</code></pre>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2024/07/wp_editor_md_8dfc141d01a9a43a184d395b3e677dd0.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2024/07/wp_editor_md_8dfc141d01a9a43a184d395b3e677dd0.jpg" alt="" /></a></p>
<p><strong>你甚至可以将你的域名配置在<code>daemon.json</code>中，即可直接使用<code>docker pull nginx</code>无需再加上域名的前缀。在这里也提供了一些大佬无私分享的代理域名。</strong></p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2024/07/wp_editor_md_a3cf47fc63957e428b02f1a13124bd95.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2024/07/wp_editor_md_a3cf47fc63957e428b02f1a13124bd95.jpg" alt="" /></a></p>
<pre><code class="language-shell line-numbers">#编辑daemon.json
vim /etc/docker/daemon.json
:wq

#重启daemon配置
systemctl daemon-reload

#重启docker
systemctl restart docker.service

</code></pre>
<hr />
<table>
<thead>
<tr>
<th>DockerHub 镜像仓库</th>
<th>镜像地址</th>
</tr>
</thead>
<tbody>
<tr>
<td>bestcfipas镜像服务</td>
<td>https://docker.registry.cyou</td>
</tr>
<tr>
<td></td>
<td>https://docker-cf.registry.cyou</td>
</tr>
<tr>
<td>zero_free镜像服务</td>
<td>https://docker.jsdelivr.fyi</td>
</tr>
<tr>
<td></td>
<td>https://dockercf.jsdelivr.fyi</td>
</tr>
<tr>
<td></td>
<td>https://dockertest.jsdelivr.fyi</td>
</tr>
<tr>
<td>docker proxy</td>
<td>https://dockerpull.com</td>
</tr>
<tr>
<td></td>
<td>https://dockerproxy.cn</td>
</tr>
<tr>
<td>Docker镜像加速站</td>
<td>https://hub.uuuadc.top</td>
</tr>
<tr>
<td></td>
<td>https://docker.1panel.live</td>
</tr>
<tr>
<td></td>
<td>https://hub.rat.dev</td>
</tr>
</tbody>
</table>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/2022/01/18/centos7%e5%ae%89%e8%a3%85docker%e5%b9%b6%e6%9b%b4%e6%94%b9%e9%bb%98%e8%ae%a4%e5%ad%98%e5%82%a8%e6%96%87%e4%bb%b6%e4%bd%8d%e7%bd%ae/" title="Centos7安装Docker并更改默认存储文件位置">Centos7安装Docker并更改默认存储文件位置</a></p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/2022/02/23/centos7%e7%a6%bb%e7%ba%bf%e5%ae%89%e8%a3%85docker-ce/" title="CentOS7离线安装docker-ce">CentOS7离线安装docker-ce</a></p>
<p><a href="https://www.laobaiblog.top/2024/07/16/docker%e4%bb%93%e5%ba%93%e9%95%9c%e5%83%8f%e4%bb%a3%e7%90%86%e6%89%93%e9%80%a0%e5%b1%9e%e4%ba%8e%e8%87%aa%e5%b7%b1%e7%9a%84docker-hub/">Docker仓库镜像代理打造属于自己的Docker Hub</a>最先出现在<a href="https://www.laobaiblog.top">Liao&#039;s blog</a>。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>CentOS7 Openssh离线升级至9.8p1，OpenSSL升级至1.1.1w</title>
		<link>https://www.laobaiblog.top/2024/07/09/centos7-openssh%e7%a6%bb%e7%ba%bf%e5%8d%87%e7%ba%a7%e8%87%b39-8p1%ef%bc%8copenssl%e5%8d%87%e7%ba%a7%e8%87%b31-1-1w/</link>
		
		<dc:creator><![CDATA[大白]]></dc:creator>
		<pubDate>Tue, 09 Jul 2024 07:02:40 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[分享]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[openssh]]></category>
		<category><![CDATA[openssl]]></category>
		<guid isPermaLink="false">https://www.laobaiblog.top/?p=481</guid>

					<description><![CDATA[<p>Openssh经过一段时间的等保测试，看来又得重新升级。略微删减了一下脚本，在离线环境中使用。 相关 &#8230;</p>
<p><a href="https://www.laobaiblog.top/2024/07/09/centos7-openssh%e7%a6%bb%e7%ba%bf%e5%8d%87%e7%ba%a7%e8%87%b39-8p1%ef%bc%8copenssl%e5%8d%87%e7%ba%a7%e8%87%b31-1-1w/">CentOS7 Openssh离线升级至9.8p1，OpenSSL升级至1.1.1w</a>最先出现在<a href="https://www.laobaiblog.top">Liao&#039;s blog</a>。</p>
]]></description>
										<content:encoded><![CDATA[<p><em>Openssh经过一段时间的等保测试，看来又得重新升级。略微删减了一下脚本，在离线环境中使用。</em></p>
<h3>相关环境</h3>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2024/07/wp_editor_md_b07c39eeaf26c7ab4682643f5f4515e4.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2024/07/wp_editor_md_b07c39eeaf26c7ab4682643f5f4515e4.jpg" alt="" /></a></p>
<ul>
<li>系统：CentOS Linux release 7.9.2009 (Core)</li>
<li><a class="wp-editor-md-post-content-link" href="https://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/">OpenSSH版本</a> : 7.4p1 &#8212;> <a class="wp-editor-md-post-content-link" href="https://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/">9.8p1</a></li>
<li><a class="wp-editor-md-post-content-link" href="https://www.openssl.org/source/old/1.1.1/index.html">OpenSSL版本</a> ：1.0.2k &#8212;> <a class="wp-editor-md-post-content-link" href="https://www.openssl.org/source/openssl-1.1.1w.tar.gz">1.1.1w</a></li>
<li>zlib版本(需要外网下载，根据需要更换版本)：<a class="wp-editor-md-post-content-link" href="http://www.zlib.net/zlib-1.3.1.tar.gz">1.3.1</a></li>
</ul>
<h3>Openssh离线安装升级</h3>
<ul>
<li><strong><a class="wp-editor-md-post-content-link" href="https://mrliao.lanzouj.com/i0vwY23zevab">蓝奏云下载</a></strong> (离线安装包也已经整理好相关脚本依赖，防止CSDN白嫖党，解压密码：laobai)</li>
</ul>
<p>文中常用命令：</p>
<pre><code class="language-shell line-numbers">#查看Linux信息
[root@asdasd ~] uname -a
Linux ZKHY 3.10.0-1160.62.1.el7.x86_64 1 SMP Tue Apr 5 16:57:59 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
#查看centos版本
[root@asdasd ~] cat /etc/centos-release
CentOS Linux release 7.9.2009 (Core)
#查看ssh版本
[root@adasd ~] ssh -V
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips  26 Jan 2017
#创建脚本安装目录
[root@asdasd ~]mkdir -p /root/OpenSSH
</code></pre>
<h4><strong>1. 将脚本解压放到<code>/root/OpenSSH</code>下。</strong></h4>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2024/07/wp_editor_md_a0e52f483aa36d9df645ad23c70ef4b5.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2024/07/wp_editor_md_a0e52f483aa36d9df645ad23c70ef4b5.jpg" alt="" /></a></p>
<h4><strong>2. 授权脚本运行升级Openssh及Openssl,静待升级即可。</strong></h4>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2024/07/wp_editor_md_eaade98e038fc094bb60fa7bd0141f7b.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2024/07/wp_editor_md_eaade98e038fc094bb60fa7bd0141f7b.jpg" alt="" /></a></p>
<pre><code class="language-shell line-numbers">#进入安装目录
[root@asdasd ~]# cd /root/OpenSSH/
[root@asdasd OpenSSH]# ll
total 13024
-rw-r--r-- 1 root root 1910393 Jul  9 14:38 openssh-9.8p1.tar.gz
-rw-r--r-- 1 root root 9893384 Jul  9 14:38 openssl-1.1.1w.tar.gz
drwxr-xr-x 3 root root    4096 Jul  9 14:38 packages
-rw-r--r-- 1 root root    5590 Jul  9 14:38 UpdateOpenSSH.sh
-rw-r--r-- 1 root root 1512791 Jul  9 14:38 zlib-1.3.1.tar.gz
#授权脚本执行权限
[root@asdasd OpenSSH]# chmod a+x UpdateOpenSSH.sh
#运行升级脚本
[root@asdasd OpenSSH]# ./UpdateOpenSSH.sh
</code></pre>
<h3>升级效果</h3>
<pre><code class="language-shell line-numbers">#输入命令查看升级效果
ssh -V
OpenSSH_9.8p1, OpenSSL 1.1.1w  11 Sep 2023
</code></pre>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2024/07/wp_editor_md_1365d8240319cd0ef00abd7fdb36661b.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2024/07/wp_editor_md_1365d8240319cd0ef00abd7fdb36661b.jpg" alt="" /></a></p>
<p><a href="https://www.laobaiblog.top/2024/07/09/centos7-openssh%e7%a6%bb%e7%ba%bf%e5%8d%87%e7%ba%a7%e8%87%b39-8p1%ef%bc%8copenssl%e5%8d%87%e7%ba%a7%e8%87%b31-1-1w/">CentOS7 Openssh离线升级至9.8p1，OpenSSL升级至1.1.1w</a>最先出现在<a href="https://www.laobaiblog.top">Liao&#039;s blog</a>。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>胡闹厨房2 Steam全dlc解锁器</title>
		<link>https://www.laobaiblog.top/2024/07/04/%e8%83%a1%e9%97%b9%e5%8e%a8%e6%88%bf2-steam%e5%85%a8dlc%e8%a7%a3%e9%94%81%e5%99%a8/</link>
		
		<dc:creator><![CDATA[大白]]></dc:creator>
		<pubDate>Thu, 04 Jul 2024 02:36:50 +0000</pubDate>
				<category><![CDATA[分享]]></category>
		<category><![CDATA[Overcooked]]></category>
		<category><![CDATA[steam]]></category>
		<category><![CDATA[解锁]]></category>
		<guid isPermaLink="false">https://www.laobaiblog.top/?p=478</guid>

					<description><![CDATA[<p>Overcooked! 2（胡闹厨房2），Steam全DLC解锁器，下载解压至游戏安装目录下即可 下 &#8230;</p>
<p><a href="https://www.laobaiblog.top/2024/07/04/%e8%83%a1%e9%97%b9%e5%8e%a8%e6%88%bf2-steam%e5%85%a8dlc%e8%a7%a3%e9%94%81%e5%99%a8/">胡闹厨房2 Steam全dlc解锁器</a>最先出现在<a href="https://www.laobaiblog.top">Liao&#039;s blog</a>。</p>
]]></description>
										<content:encoded><![CDATA[<p><strong><em>Overcooked! 2（胡闹厨房2），Steam全DLC解锁器，下载解压至游戏安装目录下即可</em></strong></p>
<h4>下载地址</h4>
<p><strong><a class="wp-editor-md-post-content-link" href="https://mrliao.lanzouj.com/i9bry23e2j4f">蓝奏云下载</a></strong></p>
<h4>游戏目录</h4>
<p><strong>在Steam库里右键胡闹厨房2-管理-浏览本地文件，把解压后的三个文件直接放到里面即可。进入游戏后在【附加物】菜单栏中可以看到DLC已全解锁。</strong></p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2024/07/wp_editor_md_ebb227f233047121f23e9eae668fafbc.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2024/07/wp_editor_md_ebb227f233047121f23e9eae668fafbc.jpg" alt="" /></a></p>
<p><a href="https://www.laobaiblog.top/2024/07/04/%e8%83%a1%e9%97%b9%e5%8e%a8%e6%88%bf2-steam%e5%85%a8dlc%e8%a7%a3%e9%94%81%e5%99%a8/">胡闹厨房2 Steam全dlc解锁器</a>最先出现在<a href="https://www.laobaiblog.top">Liao&#039;s blog</a>。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>使用Nginx转发代理ChatGpt接口，Java调用实现多轮对话</title>
		<link>https://www.laobaiblog.top/2024/01/15/%e4%bd%bf%e7%94%a8nginx%e8%bd%ac%e5%8f%91%e4%bb%a3%e7%90%86chatgpt%e6%8e%a5%e5%8f%a3%ef%bc%8cjava%e8%b0%83%e7%94%a8%e5%ae%9e%e7%8e%b0%e5%a4%9a%e8%bd%ae%e5%af%b9%e8%af%9d/</link>
		
		<dc:creator><![CDATA[大白]]></dc:creator>
		<pubDate>Mon, 15 Jan 2024 07:50:02 +0000</pubDate>
				<category><![CDATA[Docker]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[分享]]></category>
		<category><![CDATA[ChatGPT]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[域名]]></category>
		<guid isPermaLink="false">https://www.laobaiblog.top/?p=462</guid>

					<description><![CDATA[<p>一、理论概述 ChatGpt接口目前只能在国外互联网环境中使用，国内想要使用相关服务的话可以寻求代理 &#8230;</p>
<p><a href="https://www.laobaiblog.top/2024/01/15/%e4%bd%bf%e7%94%a8nginx%e8%bd%ac%e5%8f%91%e4%bb%a3%e7%90%86chatgpt%e6%8e%a5%e5%8f%a3%ef%bc%8cjava%e8%b0%83%e7%94%a8%e5%ae%9e%e7%8e%b0%e5%a4%9a%e8%bd%ae%e5%af%b9%e8%af%9d/">使用Nginx转发代理ChatGpt接口，Java调用实现多轮对话</a>最先出现在<a href="https://www.laobaiblog.top">Liao&#039;s blog</a>。</p>
]]></description>
										<content:encoded><![CDATA[<h3>一、理论概述</h3>
<p>ChatGpt接口目前只能在国外互联网环境中使用，国内想要使用相关服务的话可以寻求代理，在这里使用的是一台国外服务器安装Nginx服务进行相关代理。</p>
<h3>二、环境要求</h3>
<ul>
<li>一台拥有公网IP的国外服务器</li>
<li>一个域名及免费ssl证书（可在腾讯云免费申请ssl证书）</li>
<li>一个ChatGpt账号及相关的<a class="wp-editor-md-post-content-link" href="https://platform.openai.com/api-keys">APIkey</a></li>
</ul>
<p>以上就是所有需要用到的环境，<strong><em>请注意，如要使用接口还需要<a class="wp-editor-md-post-content-link" href="https://platform.openai.com/account/billing/overview">充值API</a>额度</em></strong>。除此之外还需要将你的域名解析到公网IP上。完成准备工作后进行以下操作。</p>
<h3>三、Nginx转发</h3>
<ol>
<li>在服务器中安装nginx，这里使用的是docker服务，根据以往博文中可自行安装Docker服务。</li>
</ol>
<pre><code class="language-shell line-numbers">#服务器中新建一个nginx目录，下级目录新建conf.d、logs、ssl三个目录
mkdir -p nginx/conf.d
mkdir -p nginx/logs
mkdir -p nginx/ssl

#在nginx目录中新建start.sh脚本
vim start.sh

docker stop nginx
docker rm nginx
docker run  -p 80:80  -p 443:443 --name nginx --net=host  --restart=always  --privileged=true \
    -v `pwd`/conf.d/:/etc/nginx/conf.d \
    -v `pwd`/logs/:/var/log/nginx  \
    -v `pwd`/ssl/:/var/ssl \
    -e TZ="Asia/Shanghai" \
    nginx:latest

#输入 :wq 保存后授权并执行即可
chmod a+x start.sh
./start.sh
</code></pre>
<ol start="2">
<li>将域名ssl证书放置在ssl目录下后，编辑nginx转发代理，执行<code>start.sh</code>脚本重启nginx服务。</li>
</ol>
<pre><code class="language-shell line-numbers">vim conf.d/gpt.conf

#填入域名信息
server {
        listen       443 ssl;
        server_name  域名;
        ssl_certificate /var/ssl/域名.crt;     #配置证书位置
        ssl_certificate_key /var/ssl/域名.key; #配置秘钥位置】

        ssl_session_timeout 5m;
        ssl_protocols SSLv2 SSLv3 TLSv1.2;
        ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
        ssl_prefer_server_ciphers on;

        underscores_in_headers on;
        charset utf-8;

        location /v1/ {
             proxy_ssl_server_name on;
             proxy_ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
             proxy_pass https://api.openai.com;
        }
}
</code></pre>
<p>以上便完成了针对chatgpt接口地址 <strong><em><code>api.openai.com</code></em></strong> 的转发工作，转发后的地址既是你的域名。</p>
<h3>四、Java实例调用实现多轮对话</h3>
<ol>
<li>新建Maven项目ChatGPTClient，在<code>pom.xml</code>中添加后续用到的依赖，重构后拉取。</li>
</ol>
<pre data-language=XML><code class="language-markup line-numbers">&lt;dependency&gt;
            &lt;groupId&gt;com.squareup.okhttp3&lt;/groupId&gt;
            &lt;artifactId&gt;okhttp&lt;/artifactId&gt;
            &lt;version&gt;4.9.3&lt;/version&gt;
&lt;/dependency&gt;
&lt;dependency&gt;
            &lt;groupId&gt;com.google.code.gson&lt;/groupId&gt;
            &lt;artifactId&gt;gson&lt;/artifactId&gt;
            &lt;version&gt;2.8.9&lt;/version&gt; &lt;!-- 使用最新的可用版本 --&gt;
&lt;/dependency&gt;
</code></pre>
<ol start="2">
<li>java代码</li>
</ol>
<pre><code class="language-shell line-numbers">import okhttp3.*;
import com.google.gson.*;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class ChatGPTClient {
    private final String apiKey;
    private final OkHttpClient client;
    private final List&lt;Message&gt; messages;
    private final Gson gson;
    private int tokenCount = 0;
    private int inputTokenCount = 0;
    private int outputTokenCount = 0;

    public ChatGPTClient(String apiKey) {
        this.apiKey = apiKey;
        this.client = new OkHttpClient();
        this.messages = new ArrayList&lt;&gt;();
        this.gson = new Gson();
    }

    public String sendMessage(String message) throws IOException {
        updateTokenCount(message, true);

        messages.add(new Message("system", "user", message));
//model模型选择可以有gpt-3.5-turbo、gpt-4、gpt-4-turbo价格以此类推
        RequestBody body = RequestBody.create(
                MediaType.get("application/json; charset=utf-8"),
                "{\"model\": \"gpt-3.5-turbo\", \"messages\": " + gson.toJson(messages) + "}"
        );

        Request request = new Request.Builder()
                .url("https://你的域名地址/v1/chat/completions")
                .addHeader("Authorization", "Bearer " + this.apiKey)
                .addHeader("Content-Type", "application/json")
                .post(body)
                .build();

        try (Response response = client.newCall(request).execute()) {
            JsonObject respJson = JsonParser.parseString(response.body().string()).getAsJsonObject();
            JsonArray choices = respJson.getAsJsonArray("choices");
            if (choices != null &amp;&amp; choices.size() &gt; 0) {
                JsonObject firstChoice = choices.get(0).getAsJsonObject();
                String aiResponse = firstChoice.getAsJsonObject("message").get("content").getAsString();

                updateTokenCount(aiResponse, false);

                messages.add(new Message("system", "assistant", aiResponse));

                System.out.println("输入的 Token 数: " + inputTokenCount);
                System.out.println("输出的 Token 数: " + outputTokenCount);
                System.out.println("总使用的 Token 数: " + tokenCount);

                return aiResponse;
            }
        }
        return "无法获取响应。";
    }

    private void updateTokenCount(String text, boolean isInput) {
        int count = 0;
        for (char c : text.toCharArray()) {
            count += (String.valueOf(c).matches("[\\u0000-\\u00ff]") ? 1 : 4);
        }
        int tokens = (int) Math.ceil(count / 4.0);
        tokenCount += tokens;
        if (isInput) {
            inputTokenCount += tokens;
        } else {
            outputTokenCount += tokens;
        }
    }

    private static class Message {
        String role;
        String content;

        public Message(String type, String role, String content) {
            this.role = role;
            this.content = content;
        }
    }

    public static void main(String[] args) throws IOException {
        ChatGPTClient client = new ChatGPTClient("YOUR-API-KEY");

        Scanner scanner = new Scanner(System.in, "UTF-8");
        String input;
        while (true) {
            System.out.print("输入消息（输入 'bye' 结束对话）: ");
            input = scanner.nextLine();
            if ("bye".equalsIgnoreCase(input)) {
                break;
            }
            String response = client.sendMessage(input);
            System.out.println("ChatGPT 回应: " + response);
        }
    }
}

</code></pre>
<p>在以上代码中，增加了每次对话后所使用的token值，以便查询核对接口使用费。可在官网查询相关定价。</p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2024/01/wp_editor_md_7ca6ffab890759733ec128bda9db6a20.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2024/01/wp_editor_md_7ca6ffab890759733ec128bda9db6a20.jpg" alt="" /></a></p>
<h3>五、运行结果</h3>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2024/01/wp_editor_md_86a520f2c97f583072037ca931be6455.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2024/01/wp_editor_md_86a520f2c97f583072037ca931be6455.jpg" alt="" /></a></p>
<p><a href="https://www.laobaiblog.top/2024/01/15/%e4%bd%bf%e7%94%a8nginx%e8%bd%ac%e5%8f%91%e4%bb%a3%e7%90%86chatgpt%e6%8e%a5%e5%8f%a3%ef%bc%8cjava%e8%b0%83%e7%94%a8%e5%ae%9e%e7%8e%b0%e5%a4%9a%e8%bd%ae%e5%af%b9%e8%af%9d/">使用Nginx转发代理ChatGpt接口，Java调用实现多轮对话</a>最先出现在<a href="https://www.laobaiblog.top">Liao&#039;s blog</a>。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>CentOS7 Openssh升级至9.5p1，OpenSSL升级至1.1.1w</title>
		<link>https://www.laobaiblog.top/2023/11/22/centos7-openssh%e5%8d%87%e7%ba%a7%e8%87%b39-5p1%ef%bc%8copenssl%e5%8d%87%e7%ba%a7%e8%87%b31-1-1w/</link>
		
		<dc:creator><![CDATA[大白]]></dc:creator>
		<pubDate>Wed, 22 Nov 2023 06:08:25 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[分享]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[openssh]]></category>
		<category><![CDATA[openssl]]></category>
		<category><![CDATA[zlib]]></category>
		<guid isPermaLink="false">https://www.laobaiblog.top/?p=439</guid>

					<description><![CDATA[<p>前言：近期等保出现了openssh相关漏洞，所以改了一下之前的在线升级脚本，将Openssh升级至9 &#8230;</p>
<p><a href="https://www.laobaiblog.top/2023/11/22/centos7-openssh%e5%8d%87%e7%ba%a7%e8%87%b39-5p1%ef%bc%8copenssl%e5%8d%87%e7%ba%a7%e8%87%b31-1-1w/">CentOS7 Openssh升级至9.5p1，OpenSSL升级至1.1.1w</a>最先出现在<a href="https://www.laobaiblog.top">Liao&#039;s blog</a>。</p>
]]></description>
										<content:encoded><![CDATA[<p><em>前言：近期等保出现了openssh相关漏洞，所以改了一下之前的在线升级脚本，将Openssh升级至9.5p1，OpenSSL升级至1.1.1w，已测试放心食用。</em></p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/2024/07/09/centos7-openssh%e7%a6%bb%e7%ba%bf%e5%8d%87%e7%ba%a7%e8%87%b39-8p1%ef%bc%8copenssl%e5%8d%87%e7%ba%a7%e8%87%b31-1-1w/">已更新最新OpenSSH9.8p1</a></p>
<h3>相关环境</h3>
<ul>
<li>系统：CentOS Linux release 7.9.2009 (Core)</li>
<li>OpenSSH版本: <a class="wp-editor-md-post-content-link" href="https://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.5p1.tar.gz">9.5p1</a></li>
<li>OpenSSL版本：<a class="wp-editor-md-post-content-link" href="https://www.openssl.org/source/openssl-1.1.1w.tar.gz">1.1.1w</a></li>
<li>zlib版本(需要外网下载，根据需要更换版本)：<a class="wp-editor-md-post-content-link" href="http://www.zlib.net/zlib-1.3.1.tar.gz">1.2.12</a></li>
</ul>
<h3>联网升级安装</h3>
<p><strong><a class="wp-editor-md-post-content-link" href="https://mrliao.lanzouj.com/igONT1flluxc">脚本蓝奏云下载</a></strong>（离线安装包也已经整理好相关脚本依赖，防止CSDN白嫖党，解压密码：laobai）</p>
<pre><code class="language-shell line-numbers">#创建安装目录
mkdir -p /root/OpenSSH/zlib/
</code></pre>
<p><strong>将zlib-1.2.12.tar.gz依赖包上传至/root/OpenSSH/zlib/目录下运行压缩包中的脚本即可</strong></p>
<pre><code class="language-shell line-numbers">#将脚本放入/root/OpenSSH目录下
cd /root/OpenSSH

#将下段代码复制粘贴后授权运行即可
chmod a+x UpdateOpenSSH.sh
./UpdateOpenSSH.sh
</code></pre>
<p><a class="wp-editor-md-post-content-link" href="https://mrliao.lanzouj.com/iOH1o1flp0oh"><strong>脚本下载</strong></a>（网页可能会有符号替换，不建议复制）</p>
<pre><code class="language-shell line-numbers">#!/bin/bash

clear
echo ------------------------------------------
echo        CentOS7 openssh升级到9.5p1
echo              <span class="katex math inline">(date +%F-%T)
echo         注意环境，使用前请做好测试！！！
echo ------------------------------------------
sleep 3s
clear
echo 安装进程开始  3
sleep 1s
clear
echo 安装进程开始  3  2
sleep 1s
clear
echo 安装进程开始  3  2  1
sleep 1s
clear
echo 刷新yum元数据缓存
sleep 2s

yum makecache
sleep 3s
clear
echo 检测安装telnet服务
sleep 1s
echo 尝试启动telnet服务
sleep 1s
cp /etc/securetty /etc/securetty.bak
grep  "pts/0"  /etc/securetty ||  echo 'pts/0' >> /etc/securetty
grep  "pts/1"  /etc/securetty ||  echo 'pts/1' >> /etc/securetty
systemctl restart telnet.socket &&  systemctl restart xinetd
ps -ef |grep xinetd | egrep -v grep > /dev/null
if [</span>? -eq 0 ]
then
    echo 检测到telnet服务已启动……
    systemctl enable telnet.socket
    systemctl enable xinetd
        sleep 2s
else
    echo 未检测到telnet服务，开始安装服务……
    sleep 2s
    yum -y install xinetd telnet-server
    sleep 2s
    clear
    echo 安装telnet服务结束，启动服务……
    systemctl restart telnet.socket &&  systemctl restart xinetd
    systemctl enable telnet.socket
    systemctl enable xinetd
    sleep 1s
fi
clear
echo 关闭SElinux及防火墙并禁用……
sleep 2s
setenforce 0
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
cat /etc/selinux/config
systemctl stop firewalld.service
systemctl disable firewalld.service
sleep 2s
clear
echo 安装程序依赖包……
sleep 2s
#yum -y localinstall ls packages/*.rpm
yum -y install gcc gcc-c++ make pam pam-devel openssl-devel pcre-devel perl zlib-devel
sleep 1s
clear
echo 停止并卸载原有ssh
sleep 3s
systemctl stop sshd
cp -r /etc/ssh /etc/ssh.old
cp -r /etc/init.d/ssh /etc/init.d/ssh.old
rpm -qa | grep openssh
sleep 1s
rpm -e `rpm -qa | grep openssh` --nodeps
rpm -qa | grep openssh
sleep 1s
clear

echo 判断是否需要安装wget
WGET=`rpm -qa | grep wget`
if [<span class="katex math inline">WGET -z ];then
    yum install -y wget
fi
echo 准备文件和参数
echo ################################################################
echo 服务器无法联网下载的可以将所需要的升级包放到/root/OpenSSH目录下
echo ################################################################
file=/root/OpenSSH
#zlib=http://www.zlib.net/zlib-1.2.12.tar.gz
openssl=https://www.openssl.org/source/openssl-1.1.1w.tar.gz
openssh=https://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.5p1.tar.gz 
echo 创建目录
mkdir -p</span>file/zlib
mkdir -p <span class="katex math inline">file/openssl
mkdir -p</span>file/openssh
echo 联网通过wget下载安装包
cd <span class="katex math inline">file
#echo 开始下载zlib
#wget</span>zlib
echo 开始下载openssl
wget --no-check-certificate <span class="katex math inline">openssl
echo 开始下载openssh
wget --no-check-certificate</span>openssh
###安装相关依赖包###
yum install -y gcc make perl zlib zlib-devel pam pam-devel

echo 安装zlib
sleep 2s
tar -xzf zlib*.tar.gz -C <span class="katex math inline">file/zlib 
sleep 2s
cd</span>file/zlib/zlib*
./configure --prefix=/usr/local/zlib && make && make install
ls -l /usr/local/zlib
cd ..
sleep 1s
clear
echo 配置zlib
grep  "/usr/local/zlib/lib"  /etc/ld.so.conf.d/zlib.conf ||  echo '/usr/local/zlib/lib' >> /etc/ld.so.conf.d/zlib.conf
ldconfig -v
sleep 1s
clear
echo 安装openssl
sleep 5s
mv -f /usr/bin/openssl /usr/bin/openssl.old
mv -f /usr/include/openssl /usr/include/openssl.old
mv -f /usr/lib64/openssl /usr/lib64/openssl.old
rm -rf /usr/local/ssl
cd <span class="katex math inline">file
tar -xzf openssl*.tar.gz -C</span>file/openssl
cd <span class="katex math inline">file/openssl/openssl*
./config --prefix=/usr/local/ssl --openssldir=/usr/local/ssl shared zlib && make && make install
cd ..
sleep 5s
clear
echo 配置openssl
sleep 5s
ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/ssl/include/openssl /usr/include/openssl
ln -s /usr/local/lib64/libssl.so.1.1 /usr/lib64/libssl.so.1.1
ln -s /usr/local/lib64/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1
grep  "/usr/local/ssl/lib"  /etc/ld.so.conf.d/ssl.conf ||  echo '/usr/local/ssl/lib' >> /etc/ld.so.conf.d/ssl.conf
grep  "/usr/local/lib"  /etc/ld.so.conf.d/ssl.conf ||  echo '/usr/local/lib' >> /etc/ld.so.conf.d/ssl.conf
ldconfig -v
openssl version -a
sleep 5s
clear
echo 安装openssh
sleep 5s
rm -rf /etc/ssh
cd</span>file
tar -xzf openssh*.tar.gz -C <span class="katex math inline">file/openssh
cd</span>file/openssh/openssh*
./configure --prefix=/usr --sysconfdir=/etc/ssh --with-openssl-includes=/usr/local/ssl/include --with-ssl-dir=/usr/local/ssl   --with-zlib --with-md5-passwords
make
sleep 5s
sudo chmod 600 /etc/ssh/ssh_host_rsa_key
sudo chmod 600 /etc/ssh/ssh_host_ecdsa_key
sudo chmod 600 /etc/ssh/ssh_host_ed25519_key
make install
cd ..
pwd
sleep 5s
clear
echo 配置openssh
sleep 10s
echo "PasswordAuthentication yes"   >> /etc/ssh/sshd_config
echo "PermitRootLogin yes" >> /etc/ssh/sshd_config
echo 'Banner /etc/issue' >> /etc/ssh/sshd_config
cp -p openssh-9.5p1/contrib/redhat/sshd.init /etc/init.d/sshd
chmod +x /etc/init.d/sshd
sudo chmod 600 /etc/ssh/ssh_host_rsa_key
sudo chmod 600 /etc/ssh/ssh_host_ecdsa_key
sudo chmod 600 /etc/ssh/ssh_host_ed25519_key
chkconfig --add sshd
chkconfig sshd on
systemctl restart sshd
sleep 10s
clear
systemctl status sshd
if [ $? -eq 0 ]
then
    clear
    echo SSH安装并运行成功，开始关闭并禁用telnet
    sleep 1s
    systemctl stop telnet.socket &&  systemctl stop xinetd
    systemctl disable telnet.socket &&  systemctl disable xinetd
    sleep 1s
    echo 升级完成,安装ssh2扩展支持
    sleep 5s
    yum install libssh2 -y
    clear
    echo 安装进程结束
    sleep 5s
else
    echo SSH未成功安装或配置，安装进程即将退出，请检查日志……
    sleep 5s
fi

</code></pre>
<h3>升级成功</h3>
<pre><code class="language-shell line-numbers">#输入命令查看升级效果
ssh -V
OpenSSH_9.5p1, OpenSSL 1.1.1w  11 Sep 2023
</code></pre>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2023/11/wp_editor_md_4c74046be04e58d1cfd0c80ae1ed264d.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2023/11/wp_editor_md_4c74046be04e58d1cfd0c80ae1ed264d.jpg" alt="" /></a></p>
<ul>
<li>这是我之前的博文：<a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/2022/04/01/centos-7-%e7%a6%bb%e7%ba%bf%e6%9b%b4%e6%96%b0%e5%8d%87%e7%ba%a7-openssh-8-8p1/">CentOS 7 离线更新升级 openSSH 8.8p1</a></li>
<li>另附手动升级博文：<a class="wp-editor-md-post-content-link" href="https://www.cnblogs.com/simendavid/archive/2023/10/27/17792570.html#!comments">湖南馒头:CentOS7 OpenSSL升级1.1.1w；OpenSSH 升级 9.5p1 保姆级教程 </a></li>
</ul>
<p><a href="https://www.laobaiblog.top/2023/11/22/centos7-openssh%e5%8d%87%e7%ba%a7%e8%87%b39-5p1%ef%bc%8copenssl%e5%8d%87%e7%ba%a7%e8%87%b31-1-1w/">CentOS7 Openssh升级至9.5p1，OpenSSL升级至1.1.1w</a>最先出现在<a href="https://www.laobaiblog.top">Liao&#039;s blog</a>。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>navicat连接服务器sql server报错常见问题(转载)</title>
		<link>https://www.laobaiblog.top/2023/09/22/navicat%e8%bf%9e%e6%8e%a5%e6%9c%8d%e5%8a%a1%e5%99%a8sql-server%e6%8a%a5%e9%94%99%e5%b8%b8%e8%a7%81%e9%97%ae%e9%a2%98%e8%bd%ac%e8%bd%bd/</link>
		
		<dc:creator><![CDATA[大白]]></dc:creator>
		<pubDate>Fri, 22 Sep 2023 02:27:38 +0000</pubDate>
				<category><![CDATA[分享]]></category>
		<guid isPermaLink="false">https://www.laobaiblog.top/?p=422</guid>

					<description><![CDATA[<p>有一段时间没有更新，主要是没找到感兴趣的，就更新下遇到问题的解决方法，双击原博地址 服务器部署sql &#8230;</p>
<p><a href="https://www.laobaiblog.top/2023/09/22/navicat%e8%bf%9e%e6%8e%a5%e6%9c%8d%e5%8a%a1%e5%99%a8sql-server%e6%8a%a5%e9%94%99%e5%b8%b8%e8%a7%81%e9%97%ae%e9%a2%98%e8%bd%ac%e8%bd%bd/">navicat连接服务器sql server报错常见问题(转载)</a>最先出现在<a href="https://www.laobaiblog.top">Liao&#039;s blog</a>。</p>
]]></description>
										<content:encoded><![CDATA[<p><em>有一段时间没有更新，主要是没找到感兴趣的，就更新下遇到问题的解决方法，<a class="wp-editor-md-post-content-link" href="https://blog.51cto.com/vmuu/5737125">双击原博地址</a></em></p>
<p><strong><em>服务器部署sql server，想用我电脑的Navcat来连接，结果报错如下</em></strong></p>
<pre><code class="language-shell line-numbers">[08001] [Microsoft][sQL Server Native Client 10.O]Named Pipes Provider: Could not open a connection to SQL Server [53]. (53) 
[HYTO0] [Microsoft][SQL Server Native Client 10.0]Login timeout expired (0)
 [01SO0] [Microsoft][SQL Server Native Client 10.0]Invalid connection string attribute (0) j08o01] [Microsoffj[sQL Server Native Client 10.0)A network-related or instance-specific error has occurred while establishing aconnection to SQL Server. Server is not found or not accessible.Check if instance name is correct and if SQL Server is configured toallow remote connections. For more information see sQL Server Books Online.(53)
</code></pre>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2023/09/wp_editor_md_088ae02da8b6add15dff97a948e00cef.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2023/09/wp_editor_md_088ae02da8b6add15dff97a948e00cef.jpg" alt="" /></a></p>
<p>翻译翻译：</p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2023/09/wp_editor_md_a564a8b2cedd988723271b72a8c9494a.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2023/09/wp_editor_md_a564a8b2cedd988723271b72a8c9494a.jpg" alt="" /></a></p>
<h3>解决方法：</h3>
<h4>服务器放行端口</h4>
<p><strong>1.服务器安全组防火墙放行1433端口。</strong></p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2023/09/wp_editor_md_bf2d8b184767d01fb6c9216bf6e83e09.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2023/09/wp_editor_md_bf2d8b184767d01fb6c9216bf6e83e09.jpg" alt="" /></a></p>
<p><strong>2.本地防火墙放行端口</strong></p>
<p>在电脑的防火墙中设置入站规则，把服务器的端口号放行</p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2023/09/wp_editor_md_6555a5110a8636ba5eb0feb0777e6844.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2023/09/wp_editor_md_6555a5110a8636ba5eb0feb0777e6844.jpg" alt="" /></a></p>
<p><span id="more-422"></span></p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2023/09/wp_editor_md_e79dd40f8bb91b25d3ebc20f22da2bdc.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2023/09/wp_editor_md_e79dd40f8bb91b25d3ebc20f22da2bdc.jpg" alt="" /></a></p>
<p><strong>3.开启TCP/IP连接</strong></p>
<p>在sql server控制面板中检查一下TCP/IP是否为“已启用”的状态，一般来说这个是不会默认开始的，需要手动开启。</p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2023/09/wp_editor_md_fb7717e8820d98384ebed45cf23eedaa.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2023/09/wp_editor_md_fb7717e8820d98384ebed45cf23eedaa.jpg" alt="" /></a></p>
<p>除了在sql server控制面板中可以设置以外，在电脑的【计算机管理】中也有，不要单击右键启动，这样显示的是启动了，但是里面的ip设置那里是没有启动的。点进去检查一下启用状态。还有端口号也在这，可以更改，放行的时候注意端口号。</p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2023/09/wp_editor_md_2d68ae86ffa4fb555aac99ea5eea0591.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2023/09/wp_editor_md_2d68ae86ffa4fb555aac99ea5eea0591.jpg" alt="" /></a></p>
<p>重启一下sql server服务，在【任务管理器】或【服务器管理器】、【SqlServer控制面板】中也能对服务进行重启，但是一次只能重启一个服务，在【计算机管理】中的“服务”窗口可以顺带重启跟这个服务有依赖的其他服务。</p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2023/09/wp_editor_md_87a2cfdfa2ca5b6f308a452210198091.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2023/09/wp_editor_md_87a2cfdfa2ca5b6f308a452210198091.jpg" alt="" /></a></p>
<p><!--more--></p>
<p><a href="https://www.laobaiblog.top/2023/09/22/navicat%e8%bf%9e%e6%8e%a5%e6%9c%8d%e5%8a%a1%e5%99%a8sql-server%e6%8a%a5%e9%94%99%e5%b8%b8%e8%a7%81%e9%97%ae%e9%a2%98%e8%bd%ac%e8%bd%bd/">navicat连接服务器sql server报错常见问题(转载)</a>最先出现在<a href="https://www.laobaiblog.top">Liao&#039;s blog</a>。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>电梯里的疯女人</title>
		<link>https://www.laobaiblog.top/2023/03/10/%e7%94%b5%e6%a2%af%e9%87%8c%e7%9a%84%e7%96%af%e5%a5%b3%e4%ba%ba/</link>
		
		<dc:creator><![CDATA[大白]]></dc:creator>
		<pubDate>Fri, 10 Mar 2023 02:49:11 +0000</pubDate>
				<category><![CDATA[分享]]></category>
		<category><![CDATA[梦]]></category>
		<guid isPermaLink="false">https://www.laobaiblog.top/?p=397</guid>

					<description><![CDATA[<p>「梦不知其所起」 只记得梦的开始我已经上电梯了，应该是刚刚才上来，电梯也在我松开18楼按钮那一刻开始 &#8230;</p>
<p><a href="https://www.laobaiblog.top/2023/03/10/%e7%94%b5%e6%a2%af%e9%87%8c%e7%9a%84%e7%96%af%e5%a5%b3%e4%ba%ba/">电梯里的疯女人</a>最先出现在<a href="https://www.laobaiblog.top">Liao&#039;s blog</a>。</p>
]]></description>
										<content:encoded><![CDATA[<p>「梦不知其所起」</p>
<p>只记得梦的开始我已经上电梯了，应该是刚刚才上来，电梯也在我松开18楼按钮那一刻开始运行了。</p>
<p>面对开门的方向站定，随意打量着电梯里的情况，主要是看楼层，想着什么时候到。楼梯里加上我有三个人，一个女人在角落按钮处侧对着我们，那个疯女人在旁边靠近门一边。</p>
<p>“<strong>这里是向下的电梯!</strong>”</p>
<p>突兀的听到了这个女人的声音。声音里带着满是憎恶和嫌弃，也带着凄厉的质问似的。<br />
那女人站在我的右侧前方，转过身面对着我。</p>
<p>我看了一下亮着灯的两个按钮，确实还有一个 <strong>【-1】</strong> 楼，电梯也在向下运行。</p>
<p><strong>“你有病，老子不能先下后上？有病赶紧去治。”</strong><br />
我盯着她毫不客气的回到。<br />
「叮」，这时候负一楼也到了。那个疯女人没回应便出去了。</p>
<p><strong>“这里是向下的电梯”</strong><br />
我又听到了这句话，是从角落那个女人口中小声说出来的。</p>
<p>我已经很不耐烦了。 <strong>“怎么，你也有病？”</strong><br />
正好看到她准备出去，也看到了她贴在耳边的手机，瞬间也反应过来，她应该是向手机对面的人讲诉刚才电梯里发生的争执。</p>
<p><strong>“抱歉，实在不好意思”</strong> 我讪讪的赔笑道。<br />
她朝我笑了笑走了。</p>
<p>电梯门关上了，朝着18楼上升。<br />
「叮」，门打开了，就在我准备迈出门槛的一瞬间，<br />
电梯的线缆断裂并急速向下坠去，丝毫没准备的我跌坐在地板角落。<br />
求生的欲望让我死死的拉住扶手想要站起来扎个标准马步保命，可身体却像黏在地板一样不能动弹，也或许是腿已经软了。</p>
<p>坠地很快，没有一丝疼痛感，只记得身体麻麻的，眼前一片白光，越来越白，思绪完全不像影视中可以回溯一生，混沌无序，仿佛灵魂也在逐渐上升。</p>
<p><strong>我醒了，凌晨4点52。</strong></p>
<p><a href="https://www.laobaiblog.top/2023/03/10/%e7%94%b5%e6%a2%af%e9%87%8c%e7%9a%84%e7%96%af%e5%a5%b3%e4%ba%ba/">电梯里的疯女人</a>最先出现在<a href="https://www.laobaiblog.top">Liao&#039;s blog</a>。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>ChatGPT Java实例接入</title>
		<link>https://www.laobaiblog.top/2023/02/21/chatgpt%e6%8e%a5%e5%85%a5%e5%ae%9e%e4%be%8b/</link>
		
		<dc:creator><![CDATA[大白]]></dc:creator>
		<pubDate>Tue, 21 Feb 2023 06:51:06 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[分享]]></category>
		<category><![CDATA[ChatGPT]]></category>
		<category><![CDATA[openAi]]></category>
		<category><![CDATA[人工智能]]></category>
		<guid isPermaLink="false">https://www.laobaiblog.top/?p=385</guid>

					<description><![CDATA[<p>前言：ChatGPT因为国内的各种原因，官网目前已经提高了原生IP的访问门槛。 现状 应该有很多人和 &#8230;</p>
<p><a href="https://www.laobaiblog.top/2023/02/21/chatgpt%e6%8e%a5%e5%85%a5%e5%ae%9e%e4%be%8b/">ChatGPT Java实例接入</a>最先出现在<a href="https://www.laobaiblog.top">Liao&#039;s blog</a>。</p>
]]></description>
										<content:encoded><![CDATA[<p><em>前言：ChatGPT因为国内的各种原因，官网目前已经提高了原生IP的访问门槛。</em></p>
<h2>现状</h2>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2023/02/wp_editor_md_05555a3648930d6f79441546e9b1d2d4.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2023/02/wp_editor_md_05555a3648930d6f79441546e9b1d2d4.jpg" alt="" /></a></p>
<p>应该有很多人和我一样，之前能在<a class="wp-editor-md-post-content-link" href="https://chat.openai.com/chat">官网</a>直接使用<a class="wp-editor-md-post-content-link" href="https://chat.openai.com/chat">ChatGPT</a>，现在因为节点IP不够纯正而被限制访问，不过好在<strong>官网提供的API接口是正常使用的</strong>，所以曲线救国思路就是：</p>
<ul>
<li>申请官网API keys</p>
</li>
<li>
<p>查看官网实例调用ChatGPT</p>
</li>
<li>
<p>API调用额度查看</p>
</li>
</ul>
<h4>申请API keys</h4>
<p>前文：<a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/2022/12/08/chatgpt%e6%b3%a8%e5%86%8c%e4%bd%bf%e7%94%a8%e7%b3%bb%e5%88%97%e4%b8%80/">ChatGPT注册使用系列一</a>文中，注册好账号后，在<a class="wp-editor-md-post-content-link" href="https://platform.openai.com/account/api-keys">个人页</a>创建自己的<strong>API keys</strong></p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2023/02/wp_editor_md_8fced2b62d0e7686a5329f9aac7e7c0e.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2023/02/wp_editor_md_8fced2b62d0e7686a5329f9aac7e7c0e.jpg" alt="" /></a></p>
<h4>官网支持语言一览</h4>
<p><a class="wp-editor-md-post-content-link" href="https://platform.openai.com/docs/libraries/community-libraries">官网</a>中可以看到ChatGPT已经支持很多语言接入了。</p>
<p><a class="wp-editor-md-post-content-link" href="https://github.com/TheoKanning/openai-java">openai-java</a></p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2023/02/wp_editor_md_d57dfa1fcca95a80803e95b3ef67dc47.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2023/02/wp_editor_md_d57dfa1fcca95a80803e95b3ef67dc47.jpg" alt="" /></a></p>
<h4>调用费用</h4>
<p>程序接入到 ChatGPT，<strong>调用接口要收费的</strong>。<br />
不过<strong>新注册的账号，前3个月免费使用，总消费额度不超过18美元</strong>。<br />
我的账号是到2023年4月1日，这期间只要调用费用不超过18美元相当于是免费使用</p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2023/02/wp_editor_md_5ebb08c846a4ad8dee1ca49bcaadae83.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2023/02/wp_editor_md_5ebb08c846a4ad8dee1ca49bcaadae83.jpg" alt="" /></a></p>
<h2>官网实例接入</h2>
<p>以上准备工作及注意事项做好之后，我们就可以开始接入ChatGPT了。<br />
下面是官网给出的调用例子（只是其中一个使用场景）</p>
<pre><code class="language-shell line-numbers">curl https://api.openai.com/v1/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_KEY" \
-d '{"model": "text-davinci-003", "prompt": "中国的首都是什么地方？", "temperature": 0, "max_tokens": 7}'
</code></pre>
<p><strong>重要参数解释：</strong></p>
<ul>
<li><strong>model：接入模型</strong><br />
<a class="wp-editor-md-post-content-link" href="https://platform.openai.com/docs/models/gpt-3">OpenAI API</a>提供了一系列具有不同功能和价格点的模型,其中，GPT-3是最为智能的模型，也是收费最高的，后面代码中我们将使用其中的text-davinci-003。<br />
<a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2023/02/wp_editor_md_6853edb2ae5e4b1cbd79af59a0cb414a.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2023/02/wp_editor_md_6853edb2ae5e4b1cbd79af59a0cb414a.jpg" alt="" /></a><br />
<a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2023/02/wp_editor_md_b937e808a676673c239b6f648d95f652.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2023/02/wp_editor_md_b937e808a676673c239b6f648d95f652.jpg" alt="" /></a></li>
</ul>
<h4>使用场景</h4>
<p>官网给我们列出来很多使用<strong><a class="wp-editor-md-post-content-link" href="https://platform.openai.com/examples">场景</a></strong></p>
<ul>
<li>Answers（问答场景）<br />
<a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2023/02/wp_editor_md_fbc63daab97421d75e28d4c28f1b5da2.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2023/02/wp_editor_md_fbc63daab97421d75e28d4c28f1b5da2.jpg" alt="" /></a></p>
</li>
<li>
<p>Classification（分类场景）<br />
<a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2023/02/wp_editor_md_b07d4627ab63e58198215d23daaae228.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2023/02/wp_editor_md_b07d4627ab63e58198215d23daaae228.jpg" alt="" /></a></p>
</li>
<li>
<p>Code(代码场景)<br />
<a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2023/02/wp_editor_md_8488f7a00c66e29339a3010ebb8d1d04.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2023/02/wp_editor_md_8488f7a00c66e29339a3010ebb8d1d04.jpg" alt="" /></a></p>
</li>
<li>
<p>Conversation（谈话场景）<br />
<a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2023/02/wp_editor_md_cd7e8e6dc56b453179e0aadba442b109.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2023/02/wp_editor_md_cd7e8e6dc56b453179e0aadba442b109.jpg" alt="" /></a></p>
</li>
<li>
<p>Translation（翻译场景）<br />
<a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2023/02/wp_editor_md_b5ebdd7240f8fad098e99708d6230ded.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2023/02/wp_editor_md_b5ebdd7240f8fad098e99708d6230ded.jpg" alt="" /></a></p>
</li>
<li>
<p>Transformation（转换场景）<br />
<a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2023/02/wp_editor_md_6f99e394d7cfe6f39bdcea29263e58c2.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2023/02/wp_editor_md_6f99e394d7cfe6f39bdcea29263e58c2.jpg" alt="" /></a></p>
</li>
</ul>
<h3>代码实现</h3>
<p>官网有大约49种场景。代码中，我们以<strong>Answers（问答场景）</strong> 为例，只要<strong>点场景图标</strong>，就可以<strong>跳到该场景查看对应参数调用实例</strong>了。具体如下：</p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2023/02/wp_editor_md_fa0e4302233c0949146cd7560d873a89.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2023/02/wp_editor_md_fa0e4302233c0949146cd7560d873a89.jpg" alt="" /></a></p>
<h4>postman调用测试</h4>
<p><em>可以在github中下载对应汉化版本的 <a class="wp-editor-md-post-content-link" href="https://github.com/hlmd/Postman-cn">postman</a>，参考<a class="wp-editor-md-post-content-link" href="https://www.quanxiaoha.com/article/postman-set-cn.html">相应教程</a></em></p>
<ul>
<li><strong>选择请求方式，填入接口地址，添加自己账号创建的Token</strong></li>
</ul>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2023/02/wp_editor_md_ad7183ad7ef3c68d755eeb4235eddb60.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2023/02/wp_editor_md_ad7183ad7ef3c68d755eeb4235eddb60.jpg" alt="" /></a></p>
<ul>
<li><strong>请求头中添加Content-Type类型为json</strong></li>
</ul>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2023/02/wp_editor_md_7ec77d39456140b33981c109d868e937.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2023/02/wp_editor_md_7ec77d39456140b33981c109d868e937.jpg" alt="" /></a></p>
<ul>
<li><strong>拼接json格式的入参</strong></li>
</ul>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2023/02/wp_editor_md_8b99f937d1cff8abb84c8d82f8f1609e.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2023/02/wp_editor_md_8b99f937d1cff8abb84c8d82f8f1609e.jpg" alt="" /></a></p>
<ul>
<li><strong>调用成功</strong></li>
</ul>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2023/02/wp_editor_md_cdb357d4266204eccc28d6db3927745b.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2023/02/wp_editor_md_cdb357d4266204eccc28d6db3927745b.jpg" alt="" /></a></p>
<h4>Java代码调用</h4>
<ol>
<li>IDEA新建一个Maven项目：ChatGPT</li>
<li>POM添加Hutool依赖，使用Hutool工具发送http post请求，json对象封装等等。</li>
</ol>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2023/02/wp_editor_md_02bb4f54a9babded6dda5f3ce7fbb502.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2023/02/wp_editor_md_02bb4f54a9babded6dda5f3ce7fbb502.jpg" alt="" /></a><br />
3. <strong>Java代码</strong></p>
<pre><code class="language-java line-numbers">import cn.hutool.http.*;
import cn.hutool.json.JSONObject;
import java.util.HashMap;
import java.util.Map;
public class ChatGptDemo {
    public static void main(String[] args) {
        Map&lt;String,String&gt; headers = new HashMap&lt;String,String&gt;();
        headers.put("Content-Type","application/json;charset=UTF-8");

        JSONObject json = new JSONObject();
        //选择模型
        json.set("model","text-davinci-003");
        //添加我们需要输入的内容
        json.set("prompt","中国的首都在哪里？");
        json.set("temperature",0.9);
        json.set("max_tokens",2048);
        json.set("top_p",1);
        json.set("frequency_penalty",0.0);
        json.set("presence_penalty",0.6);

        HttpResponse response = HttpRequest.post("https://api.openai.com/v1/completions")
                .headerMap(headers, false)
                .bearerAuth("API keys")
                .body(String.valueOf(json))
                .timeout(5 * 60 * 1000)
                .execute();

        System.out.println(response.body());
    }
}
</code></pre>
<p>调用返回结果：</p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2023/02/wp_editor_md_80bc1f3014183f70417ebdfd5e72c59f.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2023/02/wp_editor_md_80bc1f3014183f70417ebdfd5e72c59f.jpg" alt="" /></a></p>
<p><span id="more-385"></span></p>
<p>使用场景有很多，具体需求可以在官网实例中找到自己感兴趣的场景学习研究。目前Github上有很多优秀的基于ChatGPT二次开发的封装的项目，可以多多试验。<br />
&#8211; <a class="wp-editor-md-post-content-link" href="https://zhuanlan.zhihu.com/p/597371088#:~:text=%E7%9B%98%E7%82%B9%E8%BF%91%E6%9C%9F%E9%9D%9E%E5%B8%B8%E7%81%AB%E7%83%AD%E7%9A%84ChatGPT%E5%BC%80%E6%BA%90%E9%A1%B9%E7%9B%AE%201%20ChatGPT%20Vscode%20Plugin%202%20wechat-chatgpt,3%20ChatGPT%20for%20Google%204%20chatgpt-api%205%20awesome-chatgpt-prompts">盘点近期非常火热的ChatGPT开源项目</a></p>
<ul>
<li><a class="wp-editor-md-post-content-link" href="https://github.com/search?q=chatgpt">Github项目</a><br />
<a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2023/02/wp_editor_md_e0554dde3570512c0360d4849ce37c01.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2023/02/wp_editor_md_e0554dde3570512c0360d4849ce37c01.jpg" alt="" /></a></li>
</ul>
<p><!--more--></p>
<p>我也根据一个<a class="wp-editor-md-post-content-link" href="https://github.com/slippersheepig/chatgpt-web">开源小项目</a>搭建了一个网页版ChatGPT<br />
https://github.com/slippersheepig/chatgpt-web</p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2023/02/wp_editor_md_56fec56cbff554deb16365657736a89f.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2023/02/wp_editor_md_56fec56cbff554deb16365657736a89f.jpg" alt="" /></a></p>
<p><!--more--></p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2023/02/wp_editor_md_008801e6c58082083fc00cfdbd1864e4.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2023/02/wp_editor_md_008801e6c58082083fc00cfdbd1864e4.jpg" alt="" /></a></p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2023/02/wp_editor_md_272b1739f0fe2ef4b1de8837ee761ad4.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2023/02/wp_editor_md_272b1739f0fe2ef4b1de8837ee761ad4.jpg" alt="" /></a></p>
<p><strong>PS：18美元的免费额度，大概能回答54000000字。每天限制调用200次</strong></p>
<p><a href="https://www.laobaiblog.top/2023/02/21/chatgpt%e6%8e%a5%e5%85%a5%e5%ae%9e%e4%be%8b/">ChatGPT Java实例接入</a>最先出现在<a href="https://www.laobaiblog.top">Liao&#039;s blog</a>。</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
