<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Data4Fun</title><link>https://data4fun.cc/</link><description>Recent content on Data4Fun</description><generator>Hugo 0.122.0</generator><language>zh</language><lastBuildDate>Thu, 22 Jan 2026 17:56:41 +0800</lastBuildDate><atom:link href="https://data4fun.cc/index.xml" rel="self" type="application/rss+xml"/><item><title>Claude Code 完美接入 Ollama 指南</title><link>https://data4fun.cc/blog/2026/01/post-20260122/</link><pubDate>Thu, 22 Jan 2026 17:56:41 +0800</pubDate><guid>https://data4fun.cc/blog/2026/01/post-20260122/</guid><description>&lt;p>作为 Anthropic 官方推出的命令行编码助手（coding assistant），Claude Code 本质上是一个通过大模型（LLM）执行复杂任务的工具。通常情况下，它需要连接云端 API。但随着 Ollama 宣布兼容 Anthropic Messages API，我们现在可以轻松地将 Claude Code 与本地模型集成。&lt;/p>
&lt;p>从工程角度看，使用本地的模型既可以作为断网情况下的一种保障方案，也可以在不改变工作流程的情况下，把本地模型作为一个测试开发环境，极大节省 Token 开销。&lt;/p>
&lt;h2 id="操作步骤">操作步骤&lt;/h2>
&lt;p>1.安装 Claude Code 和 Ollama&lt;/p>
&lt;pre tabindex="0">&lt;code>npm install -g @anthropic-ai/claude-code@latest
&lt;/code>&lt;/pre>&lt;p>Ollama 可以通过官网https://ollama.com/下载安装包安装。&lt;/p>
&lt;blockquote>
&lt;p>注意：Ollama 版本v0.14.0+，Claude Code版本v2.1.12+，可以通过下面命令验证&lt;/p>
&lt;/blockquote>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f3f3;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>claude --version
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>ollama --version
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Ollama 安装后会自动作为后台服务运行。应该可以在 http://localhost:11434 上看到它运行。&lt;/p>
&lt;p>2.下载大模型&lt;/p>
&lt;p>可以通过 Ollama 的 WebUI 页面直接下载，如下图。&lt;/p>
&lt;p>&lt;img src="https://article-1257095016.cos.ap-beijing.myqcloud.com/CleanShot%202026-01-22%20at%2016.42.35@2x.png" alt="下载模型到本地">&lt;/p>
&lt;p>也可以通过命令行快速拉取适合编码的模型。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f3f3;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#09f;font-style:italic">#查看本地模型&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>ollama list
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#09f;font-style:italic">#下载新模型&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>ollama pull qwen2.5-coder:7b
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#09f;font-style:italic">#删除模型&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>ollama rm qwen2.5-coder:7b
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#09f;font-style:italic">#查看模型基本参数&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>ollama show qwen2.5-coder:7b
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>3.配置 Claude Code 连接本地 Ollama&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f3f3;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#366">export&lt;/span> &lt;span style="color:#033">ANTHROPIC_AUTH_TOKEN&lt;/span>&lt;span style="color:#555">=&lt;/span>ollama
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#366">export&lt;/span> &lt;span style="color:#033">ANTHROPIC_BASE_URL&lt;/span>&lt;span style="color:#555">=&lt;/span>http://localhost:11434
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#09f;font-style:italic"># 启动 Claude Code 并指定本地模型&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>claude --model qwen2.5-coder:7b
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#09f;font-style:italic"># 如果想使用云端模型，命令类似&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>claude --model glm-4.6:cloud
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;img src="https://article-1257095016.cos.ap-beijing.myqcloud.com/CleanShot%202026-01-22%20at%2016.59.52.png" alt="使用本地模型">&lt;/p>
&lt;blockquote>
&lt;p>注意：如果你开启了系统代理，可能会遇到 &lt;code>API Error: Connection error&lt;/code>。这是因为流量被转发到了代理服务器而找不到 localhost。请先在终端执行：&lt;/p>
&lt;/blockquote>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f3f3;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#366">unset&lt;/span> https_proxy
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#366">unset&lt;/span> http_proxy
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>4.使用Anthropic SDK&lt;/p>
&lt;p>如果我们想更精准的把控程序的执行流程，可以使用官方的 SDK。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f3f3;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#069;font-weight:bold">import&lt;/span> &lt;span style="color:#0cf;font-weight:bold">anthropic&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#069;font-weight:bold">import&lt;/span> &lt;span style="color:#0cf;font-weight:bold">httpx&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>http_client &lt;span style="color:#555">=&lt;/span> httpx&lt;span style="color:#555">.&lt;/span>Client(
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy&lt;span style="color:#555">=&lt;/span>&lt;span style="color:#069;font-weight:bold">None&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> trust_env&lt;span style="color:#555">=&lt;/span>&lt;span style="color:#069;font-weight:bold">False&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>client &lt;span style="color:#555">=&lt;/span> anthropic&lt;span style="color:#555">.&lt;/span>Anthropic(
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> base_url&lt;span style="color:#555">=&lt;/span>&lt;span style="color:#c30">&amp;#39;http://localhost:11434&amp;#39;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> api_key&lt;span style="color:#555">=&lt;/span>&lt;span style="color:#c30">&amp;#39;ollama&amp;#39;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> http_client&lt;span style="color:#555">=&lt;/span>http_client,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#069;font-weight:bold">with&lt;/span> client&lt;span style="color:#555">.&lt;/span>messages&lt;span style="color:#555">.&lt;/span>stream(
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> model&lt;span style="color:#555">=&lt;/span>&lt;span style="color:#c30">&amp;#39;qwen2.5-coder:7b&amp;#39;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> max_tokens&lt;span style="color:#555">=&lt;/span>&lt;span style="color:#f60">1024&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> messages&lt;span style="color:#555">=&lt;/span>[{&lt;span style="color:#c30">&amp;#39;role&amp;#39;&lt;/span>: &lt;span style="color:#c30">&amp;#39;user&amp;#39;&lt;/span>, &lt;span style="color:#c30">&amp;#39;content&amp;#39;&lt;/span>: &lt;span style="color:#c30">&amp;#39;Count from 1 to 10&amp;#39;&lt;/span>}]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>) &lt;span style="color:#069;font-weight:bold">as&lt;/span> stream:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#069;font-weight:bold">for&lt;/span> text &lt;span style="color:#000;font-weight:bold">in&lt;/span> stream&lt;span style="color:#555">.&lt;/span>text_stream:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#366">print&lt;/span>(text, end&lt;span style="color:#555">=&lt;/span>&lt;span style="color:#c30">&amp;#39;&amp;#39;&lt;/span>, flush&lt;span style="color:#555">=&lt;/span>&lt;span style="color:#069;font-weight:bold">True&lt;/span>)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="调试秘籍如何与-ai-高效沟通报错">调试秘籍：如何与 AI 高效沟通报错？&lt;/h2>
&lt;p>这里再说一个调试的技巧：在配置过程中，不要死磕枯燥的错误堆栈信息。一个高效的调试技巧是：&lt;strong>向 AI 描述你的完整环境和所做的工作，而不仅仅是报错代码。&lt;/strong>&lt;/p>
&lt;p>此前我按照文档编写代码时，一直遇到 &lt;code>InternalServerError (503)&lt;/code> 错误。我直接把错误代码粘贴给 chatgpt ，它尝试了很多方法但始终没有解决。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f3f3;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>Traceback &lt;span style="color:#555">(&lt;/span>most recent call last&lt;span style="color:#555">)&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> File &lt;span style="color:#c30">&amp;#34;/Users/shaoyang/Project/stock_demo/day09/anthropic-demo.py&amp;#34;&lt;/span>, line 12, in &amp;lt;module&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#033">message&lt;/span> &lt;span style="color:#555">=&lt;/span> client.messages.create&lt;span style="color:#555">(&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> File &lt;span style="color:#c30">&amp;#34;/Users/shaoyang/Project/stock_demo/.venv/lib/python3.10/site-packages/anthropic/_utils/_utils.py&amp;#34;&lt;/span>, line 282, in wrapper
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#069;font-weight:bold">return&lt;/span> func&lt;span style="color:#555">(&lt;/span>*args, **kwargs&lt;span style="color:#555">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> File &lt;span style="color:#c30">&amp;#34;/Users/shaoyang/Project/stock_demo/.venv/lib/python3.10/site-packages/anthropic/resources/messages/messages.py&amp;#34;&lt;/span>, line 932, in create
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#069;font-weight:bold">return&lt;/span> self._post&lt;span style="color:#555">(&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> File &lt;span style="color:#c30">&amp;#34;/Users/shaoyang/Project/stock_demo/.venv/lib/python3.10/site-packages/anthropic/_base_client.py&amp;#34;&lt;/span>, line 1361, in post
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#069;font-weight:bold">return&lt;/span> cast&lt;span style="color:#555">(&lt;/span>ResponseT, self.request&lt;span style="color:#555">(&lt;/span>cast_to, opts, &lt;span style="color:#033">stream&lt;/span>&lt;span style="color:#555">=&lt;/span>stream, &lt;span style="color:#033">stream_cls&lt;/span>&lt;span style="color:#555">=&lt;/span>stream_cls&lt;span style="color:#555">))&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> File &lt;span style="color:#c30">&amp;#34;/Users/shaoyang/Project/stock_demo/.venv/lib/python3.10/site-packages/anthropic/_base_client.py&amp;#34;&lt;/span>, line 1134, in request
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> raise self._make_status_error_from_response&lt;span style="color:#555">(&lt;/span>err.response&lt;span style="color:#555">)&lt;/span> from None
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>anthropic.InternalServerError: Error code: &lt;span style="color:#f60">503&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>于是，我换了一种思路，不是直接粘贴错误代码，而是前置一步，客观地描述了一下当前的环境。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f3f3;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>import anthropic
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#033">client&lt;/span> &lt;span style="color:#555">=&lt;/span> anthropic.Anthropic&lt;span style="color:#555">(&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#033">base_url&lt;/span>&lt;span style="color:#555">=&lt;/span>&lt;span style="color:#c30">&amp;#39;http://localhost:11434&amp;#39;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#033">api_key&lt;/span>&lt;span style="color:#555">=&lt;/span>&lt;span style="color:#c30">&amp;#39;ollama&amp;#39;&lt;/span>, &lt;span style="color:#09f;font-style:italic"># required but ignored&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#555">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#033">message&lt;/span> &lt;span style="color:#555">=&lt;/span> client.messages.create&lt;span style="color:#555">(&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#033">model&lt;/span>&lt;span style="color:#555">=&lt;/span>&lt;span style="color:#c30">&amp;#39;qwen3-coder&amp;#39;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#033">max_tokens&lt;/span>&lt;span style="color:#555">=&lt;/span>1024,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#033">messages&lt;/span>&lt;span style="color:#555">=[&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#555">{&lt;/span>&lt;span style="color:#c30">&amp;#39;role&amp;#39;&lt;/span>: &lt;span style="color:#c30">&amp;#39;user&amp;#39;&lt;/span>, &lt;span style="color:#c30">&amp;#39;content&amp;#39;&lt;/span>: &lt;span style="color:#c30">&amp;#39;Hello, how are you?&amp;#39;&lt;/span>&lt;span style="color:#555">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#555">]&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#555">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>print&lt;span style="color:#555">(&lt;/span>message.content&lt;span style="color:#555">[&lt;/span>0&lt;span style="color:#555">]&lt;/span>.text&lt;span style="color:#555">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>我是用的是mac电脑，本地配置了代理，我应该如何修改上面的代码保证可以运行。
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>js版本是可以执行的
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>import Anthropic from &lt;span style="color:#c30">&amp;#34;@anthropic-ai/sdk&amp;#34;&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>const &lt;span style="color:#033">anthropic&lt;/span> &lt;span style="color:#555">=&lt;/span> new Anthropic&lt;span style="color:#555">({&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> baseURL: &lt;span style="color:#c30">&amp;#34;http://localhost:11434&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> apiKey: &lt;span style="color:#c30">&amp;#34;ollama&amp;#34;&lt;/span>, // required but ignored
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#555">})&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>const &lt;span style="color:#033">message&lt;/span> &lt;span style="color:#555">=&lt;/span> await anthropic.messages.create&lt;span style="color:#555">({&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> model: &lt;span style="color:#c30">&amp;#34;minimax-m2:cloud&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> max_tokens: 1024,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> messages: &lt;span style="color:#555">[&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#555">{&lt;/span> role: &lt;span style="color:#c30">&amp;#34;user&amp;#34;&lt;/span>, content: &lt;span style="color:#c30">&amp;#34;写一个求和的 python 函数&amp;#34;&lt;/span> &lt;span style="color:#555">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#555">]&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#555">})&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>console.log&lt;span style="color:#555">(&lt;/span>message.content&lt;span style="color:#555">[&lt;/span>1&lt;span style="color:#555">]&lt;/span>.text&lt;span style="color:#555">)&lt;/span>;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>chatgpt立刻就发现了问题，并给到我正确的执行代码。&lt;/p>
&lt;p>&lt;img src="https://article-1257095016.cos.ap-beijing.myqcloud.com/CleanShot%202026-01-22%20at%2017.15.39@2x.png" alt="ChatGPT 的回复">&lt;/p>
&lt;p>根据这次调试过程，大模型也帮我总结一个更有效的提问模板：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f3f3;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>1.贴出当前代码。
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>2.描述环境（如：Mac 系统、本地有代理）。
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>3.提供一个对比参照（如：JS 版本可以运行，Python 不行）。
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>开篇词</title><link>https://data4fun.cc/blog/2026/01/post-20260113/</link><pubDate>Tue, 13 Jan 2026 11:21:38 +0800</pubDate><guid>https://data4fun.cc/blog/2026/01/post-20260113/</guid><description>&lt;p>从 2008 年开始接触股票投资，到现在已经接近二十年了。&lt;/p>
&lt;p>这段时间里，我经历过完整的市场周期：牛市的狂热、熊市的绝望，也经历过从&amp;quot;以为自己懂了&amp;quot;，到&amp;quot;承认自己其实什么都不懂&amp;quot;的反复过程。账户数字起起落落，但真正变化更大的，是我对投资这件事的理解方式。&lt;/p>
&lt;p>很多年里，我一直有一个模糊的念头：应该把这些经历写下来。不是为了证明自己赚过多少钱，而是想留下些什么——一些关于决策、关于错误、关于长期面对不确定性的记录。&lt;/p>
&lt;p>直到最近，这个念头才逐渐变得清晰起来。&lt;/p>
&lt;p>我决定开设这个专栏。它会以投资为核心，但并不只谈&amp;quot;买什么、卖什么&amp;quot;。我更关心的是：&lt;/p>
&lt;ul>
&lt;li>
&lt;p>投资背后的概念与逻辑&lt;/p>
&lt;/li>
&lt;li>
&lt;p>普通人在真实世界中会遇到的情绪、误判与限制&lt;/p>
&lt;/li>
&lt;li>
&lt;p>如何借助技术，让这些问题变得更可验证一些&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>在这个专栏里，我会一边讲自己的投资经历，一边引入相关的基础概念；同时，也会尝试使用 Python、数据分析、以及 AI 大模型，对一些直觉判断进行复盘、辅助和检验。&lt;/p>
&lt;p>这并不是一套&amp;quot;成功方法论&amp;quot;。更多时候，它可能是一份带着不确定性的思考记录：哪些想法在长期中站得住脚，哪些只是事后看起来合理。&lt;/p>
&lt;p>如果你也经历过市场的起伏，或者正在尝试把理性工具引入投资决策，希望这些文字能对你有所帮助；如果没有，那它至少是我给自己留的一份阶段性注脚。&lt;/p>
&lt;p>专栏会慢慢写，不追热点，也不保证结论。
唯一确定的，是我会用心。&lt;/p></description></item><item><title>使用大模型有几种方法呢？</title><link>https://data4fun.cc/blog/2025/12/post-20251223/</link><pubDate>Tue, 23 Dec 2025 17:34:18 +0800</pubDate><guid>https://data4fun.cc/blog/2025/12/post-20251223/</guid><description>&lt;h2 id="1web-端">1/Web 端&lt;/h2>
&lt;p>我们最常见的是使用网页端，有个对话框，输入我们想问的问题，点击&amp;quot;发送&amp;quot;按钮，然后就等待大模型给我们返回答案了。&lt;/p>
&lt;p>其实，这可以看成一个产品，以大模型为后端的聊天工具。&lt;/p>
&lt;p>这是最直观的可以给用户体验到大模型的方式，每个模型厂商都有类似产品。&lt;/p>
&lt;p>&lt;img src="https://article-1257095016.cos.ap-beijing.myqcloud.com/CleanShot%202025-12-23%20at%2016.54.34.png" alt="ChatGPT Web端页面">&lt;/p>
&lt;h2 id="2本地部署">2/本地部署&lt;/h2>
&lt;p>有的时候企业出于安全性的考虑，会在自己的内网部署开源的大模型或企业自己训练的大模型，这个时候可以选用类似 ollama 这样的模型部署工具来使用。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f3f3;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#09f;font-style:italic"># 以命令行的方式和大模型交互&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>ollama run deepseek-r1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#09f;font-style:italic"># 以api的方式和大模型交互&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>curl -s &lt;span style="color:#c30">&amp;#34;http://127.0.0.1:11434/api/generate&amp;#34;&lt;/span> &lt;span style="color:#c30;font-weight:bold">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#c30;font-weight:bold">&lt;/span> -H &lt;span style="color:#c30">&amp;#34;Content-Type: application/json&amp;#34;&lt;/span> &lt;span style="color:#c30;font-weight:bold">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#c30;font-weight:bold">&lt;/span> -d &lt;span style="color:#c30">&amp;#39;{
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#c30"> &amp;#34;model&amp;#34;: &amp;#34;deepseek-r1:latest&amp;#34;,
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#c30"> &amp;#34;prompt&amp;#34;: &amp;#34;请简要介绍一下牛顿第一定律。&amp;#34;,
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#c30"> &amp;#34;stream&amp;#34;: false
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#c30"> }&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="3模型中转平台">3/模型中转平台&lt;/h2>
&lt;p>模型中转平台是类似 openrouter（https://openrouter.ai/）和 模力方舟（https://ai.gitee.com/serverless-api）这样的把市面上主流的大模型放在一个平台上，通过统一的接口供大家使用。&lt;/p>
&lt;p>上面两个平台使用的 url 和 key 都是第三方的，除了这种聚合模式外，还有像 liteLLM 这样的平台，它是一个开源的库，也可以对外提供统一的接口供大家使用，但是使用的 url 和 key 都是模型厂商自己的。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f3f3;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#069;font-weight:bold">from&lt;/span> &lt;span style="color:#0cf;font-weight:bold">openai&lt;/span> &lt;span style="color:#069;font-weight:bold">import&lt;/span> OpenAI
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>client &lt;span style="color:#555">=&lt;/span> OpenAI(
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> base_url&lt;span style="color:#555">=&lt;/span>&lt;span style="color:#c30">&amp;#34;https://ai.gitee.com/v1&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> api_key&lt;span style="color:#555">=&lt;/span>&lt;span style="color:#c30">&amp;#34;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>response &lt;span style="color:#555">=&lt;/span> client&lt;span style="color:#555">.&lt;/span>chat&lt;span style="color:#555">.&lt;/span>completions&lt;span style="color:#555">.&lt;/span>create(
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> messages&lt;span style="color:#555">=&lt;/span>[
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c30">&amp;#34;role&amp;#34;&lt;/span>: &lt;span style="color:#c30">&amp;#34;system&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c30">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#c30">&amp;#34;You are a helpful and harmless assistant. You should think step-by-step.&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> },
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c30">&amp;#34;role&amp;#34;&lt;/span>: &lt;span style="color:#c30">&amp;#34;user&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c30">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#c30">&amp;#34;Can you please let us know more details about your &amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> model&lt;span style="color:#555">=&lt;/span>&lt;span style="color:#c30">&amp;#34;DeepSeek-V3&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> stream&lt;span style="color:#555">=&lt;/span>&lt;span style="color:#069;font-weight:bold">True&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> max_tokens&lt;span style="color:#555">=&lt;/span>&lt;span style="color:#f60">1024&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> temperature&lt;span style="color:#555">=&lt;/span>&lt;span style="color:#f60">0.6&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> top_p&lt;span style="color:#555">=&lt;/span>&lt;span style="color:#f60">0.8&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> extra_body&lt;span style="color:#555">=&lt;/span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c30">&amp;#34;top_k&amp;#34;&lt;/span>: &lt;span style="color:#f60">20&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> },
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> frequency_penalty&lt;span style="color:#555">=&lt;/span>&lt;span style="color:#f60">1.1&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="4模型sdk">4/模型SDK&lt;/h2>
&lt;p>每家模型厂商一般除了 web 端的产品外，也提供 SDK 的方式对外提供使用，一般需要在模型厂商的官网新建 key，并且需要充值才能使用。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f3f3;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#09f;font-style:italic"># deepseek的python 版本 sdk使用方法，也有 nodejs 版本和 bash 脚本的 &lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#069;font-weight:bold">import&lt;/span> &lt;span style="color:#0cf;font-weight:bold">os&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#069;font-weight:bold">from&lt;/span> &lt;span style="color:#0cf;font-weight:bold">openai&lt;/span> &lt;span style="color:#069;font-weight:bold">import&lt;/span> OpenAI
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>client &lt;span style="color:#555">=&lt;/span> OpenAI(
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> api_key&lt;span style="color:#555">=&lt;/span>os&lt;span style="color:#555">.&lt;/span>environ&lt;span style="color:#555">.&lt;/span>get(&lt;span style="color:#c30">&amp;#39;DEEPSEEK_API_KEY&amp;#39;&lt;/span>),
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> base_url&lt;span style="color:#555">=&lt;/span>&lt;span style="color:#c30">&amp;#34;https://api.deepseek.com&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>response &lt;span style="color:#555">=&lt;/span> client&lt;span style="color:#555">.&lt;/span>chat&lt;span style="color:#555">.&lt;/span>completions&lt;span style="color:#555">.&lt;/span>create(
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> model&lt;span style="color:#555">=&lt;/span>&lt;span style="color:#c30">&amp;#34;deepseek-chat&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> messages&lt;span style="color:#555">=&lt;/span>[
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {&lt;span style="color:#c30">&amp;#34;role&amp;#34;&lt;/span>: &lt;span style="color:#c30">&amp;#34;system&amp;#34;&lt;/span>, &lt;span style="color:#c30">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#c30">&amp;#34;You are a helpful assistant&amp;#34;&lt;/span>},
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {&lt;span style="color:#c30">&amp;#34;role&amp;#34;&lt;/span>: &lt;span style="color:#c30">&amp;#34;user&amp;#34;&lt;/span>, &lt;span style="color:#c30">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#c30">&amp;#34;Hello&amp;#34;&lt;/span>},
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> stream&lt;span style="color:#555">=&lt;/span>&lt;span style="color:#069;font-weight:bold">False&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#366">print&lt;/span>(response&lt;span style="color:#555">.&lt;/span>choices[&lt;span style="color:#f60">0&lt;/span>]&lt;span style="color:#555">.&lt;/span>message&lt;span style="color:#555">.&lt;/span>content)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="5框架">5/框架&lt;/h2>
&lt;p>除了上面几种偏底层的模型的使用方法外，还有更偏向于应用侧的模型使用方式，那就是使用 Langchain 或者 openai agent sdk 这样的框架，这些框架是把大模型做了进一步的抽象，方便编写各种业务应用。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f3f3;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#09f;font-style:italic"># 使用langchain调用 DeepSeek 模型&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#069;font-weight:bold">from&lt;/span> &lt;span style="color:#0cf;font-weight:bold">langchain_deepseek&lt;/span> &lt;span style="color:#069;font-weight:bold">import&lt;/span> ChatDeepSeek
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>llm &lt;span style="color:#555">=&lt;/span> ChatDeepSeek(
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> api_key&lt;span style="color:#555">=&lt;/span>env_settings&lt;span style="color:#555">.&lt;/span>DS_API_KEY,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> model&lt;span style="color:#555">=&lt;/span>&lt;span style="color:#c30">&amp;#34;deepseek-ai/DeepSeek-R1&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> temperature&lt;span style="color:#555">=&lt;/span>&lt;span style="color:#f60">0&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> max_tokens&lt;span style="color:#555">=&lt;/span>&lt;span style="color:#069;font-weight:bold">None&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> timeout&lt;span style="color:#555">=&lt;/span>&lt;span style="color:#069;font-weight:bold">None&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> max_retries&lt;span style="color:#555">=&lt;/span>&lt;span style="color:#f60">2&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> api_base&lt;span style="color:#555">=&lt;/span>&lt;span style="color:#c30">&amp;#39;https://api.siliconflow.cn&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>messages &lt;span style="color:#555">=&lt;/span> [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#c30">&amp;#34;system&amp;#34;&lt;/span>, &lt;span style="color:#c30">&amp;#34;You are a helpful translator. Translate the user sentence to French.&amp;#34;&lt;/span>),
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#c30">&amp;#34;human&amp;#34;&lt;/span>, &lt;span style="color:#c30">&amp;#34;I love programming.&amp;#34;&lt;/span>),
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#09f;font-style:italic"># print(llm.invoke(messages))&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#09f;font-style:italic"># print(llm.invoke(&amp;#34;hello&amp;#34;).content)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>ai_message &lt;span style="color:#555">=&lt;/span> llm&lt;span style="color:#555">.&lt;/span>invoke([
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> SystemMessage(content&lt;span style="color:#555">=&lt;/span>&lt;span style="color:#c30">&amp;#34;please speak in chinese&amp;#34;&lt;/span>),
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> HumanMessage(content&lt;span style="color:#555">=&lt;/span>&lt;span style="color:#c30">&amp;#34;hello&amp;#34;&lt;/span>),
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>])
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#366">print&lt;/span>(ai_message&lt;span style="color:#555">.&lt;/span>content)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item></channel></rss>