2026-01-20

01月20日

一、今日完成情况

  • dify配置一个有作用的工作流 –完成
    • 包括对于参数的设定有自己的认识
    • 本地知识库要嵌入向量成功
    • 打通一个流程,知道各种插件功能的左右是什么,如何调用(流程不少于5个节点)
    • 配置过程当中,涉及到一个好用的插件,也是github非常好用的项目, https://github.com/firecrawl/firecrawl ,据说是目前爬虫最好的项目,我体验一下。
  • 预定–n8n需要打通一个项目 –未完成(使用Coze代替,国内还是Coze体验更好)
    • 熟练操作写入数据,并且变换数据库的表格,变换SQL语句,花样写入数据
    • 可以访问数据库,导出回答,实现这个基本功能。
    • 时间有余,尝试扩展功能,把YouTube的字幕导出
  • Claude Code工具初体验,实现效果是嵌入到obsidian当中。 –遇到问题
  • 实验室王晶师兄任务梳理 –待完成
    • 我们需要做一个AI工作流系统,对于某种分类任务要求需要达到90%以上的准确率,主要包括两方面的工作,分别是数据集的查找(1W数据)、AI工作流关键词的修改,甚至不需要修改模型,只需要修改提示词就能够达到要求。
      • 我的数据集要求,找到相关的示例运行,然后让师兄判断哪些数据集是我们需要的,话题和类别可以多一点,现在数据集模板要求还没有落地,无需数量大,只要类别多。
        • 注意事项:帮我抽数据的模型是阿里的通义千问32B,然后使用硅基流动的API就可以了。 DDL,明天。
    • SMART分解量化:
      • S:找到AI工作流的示例数据集,格式参考师兄发给我的格式
      • M:5个领域,至少10种话题的数据集,数量无要求,数据集要命名 来源-主题-类别
      • A:4小时内可以简单完成
      • R:people:王晶师兄,工具:vscode、MCP、大模型阿里千问32B
      • T:21日小下午。
  • 快速了解一下https服务的框架,常见的对服务器操作的行为,学会简单的使用curl 和 python requests库实现基本的操作。 –完成

二、今日感悟

  • 核心业务数据​:
    • 工作流配置
    • 知识库同步问题解决
    • Claude Code 支付配置,尝试很多次了说实话,国外支付。
  • ​今日工作总结:​
    • 师兄面前可以展示自己能力,老师面前就不行了,藏拙藏拙
  • ​明日工作计划:
    • 完成师兄数据寻找的任务
    • dify配置复杂工作流
    • coze尝试配置,入个门,毕竟是国内适配最好阻力最小
  • ​今日学习成长:​
    • 遇到问题解决问题呗,要耐心。

三、备注

梳理一下AI现在自动化的两种方式,第一种就是工作流的方式,就和流程图一样,把复杂的工作,写定流程,让AI一步一步来帮你完成,就和写代码一样,本质上是流程的抽象,这就是我最近在学习的dify、coze、n8n的模式:

A. Coze / n8n (工作流模式)

  • 优势 (稳定快速):
    • 就像火车: 必须沿着铁轨(连线)走。
    • 稳定: 只要你连线没连错,它 100% 按照你的预期跑,不会乱说话。
    • 快速: 不需要 AI 思考“我该用什么工具”,直接执行下一步。
  • 劣势 (不可扩展):
    • 如果你想加一个新功能(比如“增加发邮件功能”),你得去修改整个流程图,重新连线。
    • 如果不连线,它就完全没有这个能力。

可是现在新出的MCP的原理就完全不同,AI有一个工具库,他不知道接下来的任务需要调用什么工具库,而是遇到问题解决问题,因此相对来讲,会更加智能和通用一些。

B. CC / Agent / MCP (Skills 模式)

  • 优势 (通用可扩展):
    • 就像出租车: 只要告诉它目的地,司机(AI)自己看地图(Context)选路。
    • 可扩展: 你想加一个“发邮件”功能?只需要在配置里多注册一个 Skill (Tool) 扔进去就行了。原本的代码逻辑一行都不用改,AI 看到新工具自己就会用了。这就是评论里说的“同时配置多条工作流”。
  • 劣势 (不稳定):
    • 抽风风险: AI 可能会在不需要发邮件的时候突然发了一封邮件(幻觉)。
    • 慢: 每次行动前,AI 都要思考(Inference),这比跑死代码要慢。

这是两种完全不同的范式,所以下面这句话总结的特别好:AI 应用开发中两种截然不同的架构范式Workflow(工作流) vs Agentic Skills(智能体技能)

那么最近特别火的skill技术,其发展的背景和原理又是怎么样的呢?

评论原话:“预加载精简指令 + 按需加载 prompt... 本质上是 ctx eng 的技术”

这里的术语,需要分解一下到底是什么意思。

Ctx Eng (Context Engineering,上下文工程):

  • 这就是所谓的“上下文工程”。因为 LLM 的窗口(Context Window)是昂贵的且有限的(输入太多会变笨),所以不能一股脑把所有知识库都塞进去。
  • Skills 技术的本质: 动态管理上下文。用最少的 Token 维持最多的“可能性”。

同时,prompt的提示词不是一股脑的告诉AI,而是根据需求,随机应变,赋予AI新的身份。只给 AI 一个“菜单”(几百字):你现在有3个技能:1. search_twitter (用于搜索推文), 2. query_db (用于查库)...

所以我的理解是,AI工作流相当于写代码,只不过抽象层级更高,能够涉及的应用更广,本质上还是代码的那一套流程图思路,而MCP这一套就完全不同了,AI不断的尝试调用工具,解决问题,其上限会更高。

四、dify配置

1、知识库同步问题

知识库一直停留在排队的队列状态,现在需要排查问题,问题可能性情况如下:

1、网络代理问题,导致API访问不到Google的服务,嵌入模型运行失败:

修改配置文件,让代理指向7897端口,重启项目:
docker-compose

其中第11-13行修改

Pasted image 20260120121115

重启Docker:

docker compose up -d

发现问题还没解决,所以需要查看网络链路问题,现在进入调试状态:

docker compose exec api bash

在调试状态下,可以访问网络通路

Pasted image 20260120121326
curl -I https://generativelanguage.googleapis.com

发现网络通路并没有问题,可以直接得到200通路效果

Pasted image 20260120121419

2、Docker端口占用或者组件未启动:

在Docker的组件当中,有一个没启动,我单独点击,依然没有启动,于是我打算看看这个项目是干嘛的,咨询查找之后。

Pasted image 20260120122010

这是一个 “一次性任务容器” (Init Container)。它的作用通常是在 Dify 启动的最开始,快速运行一下,把文件夹的权限(chmod/chown)设置好,确保数据库和文件存储能被正常读写。

启动 -> 执行命令 -> 自动退出

所以现在这个项目是正常情况,已经启动过了,不需要再次启动了。

3、查看日志,寻找报错信息:

指令如下:

docker compose logs -f worker
worker-1  | 2026-01-20 03:29:10.472 INFO [Dummy-5] [document_indexing_task.py:51] 7163deb4f7c853fdb2998542e7b41c25 - Dataset is not found: 3801b5b1-b875-439c-9f43-45357fdd9f15

worker-1  | 2026-01-20 03:29:10.474 INFO [Dummy-5] [document_indexing_task.py:131] 7163deb4f7c853fdb2998542e7b41c25 - document indexing tenant isolation queue b8686f4f-c4ae-4c85-ac95-f4a118abd298 next tasks: []

worker-1  | 2026-01-20 03:29:10.491 INFO [Dummy-5] [trace.py:128] 7163deb4f7c853fdb2998542e7b41c25 - Task tasks.document_indexing_task.priority_document_indexing_task[6f3bd39b-300b-4da8-b3da-4da4c38a3ed9] succeeded in 0.024037958000008075s: None

worker-1  | 2026-01-20 03:29:12.467 INFO [MainThread] [strategy.py:161]  - Task tasks.document_indexing_task.priority_document_indexing_task[a653ae75-03b9-48d8-84c6-43559731314d] received

可以看到,任务没有超时,也没有卡死,但是存在的问题是,Dataset 没有找到,面对这个问题,其实还好

这说明出现了 “幽灵任务” (Zombie Task)

  • Redis(任务队列) 里还留着一张“工单”,让工人去处理 ID 为 3801... 的数据集。
  • Postgres(数据库) 里却说:“查无此人,这个数据集不存在”。

把 Redis 里积压的这些“找不到数据”的废弃任务全部清空。终端执行任务:

# 进入 Redis 容器并清空所有缓存数据
docker compose exec redis redis-cli -a difyai123456 FLUSHALL

(注:-a difyai123456 是 Dify 默认的 Redis 密码,如果改过 .env 里的密码,请替换它。如果提示 OK,说明清理成功。)

重启Docker,然后再次上传文件。

Pasted image 20260120124031

4、访问API频率过高问题:

任务开始运行,没毛病,现在遇到新问题,就是API调用频率过高的问题,导致Google服务中断。

Pasted image 20260120124123

服务中断日志如下:

[models] Connection Error, 429 RESOURCE_EXHAUSTED. {'error': {'code': 429, 'message': "Quota exceeded for quota metric 'Read API requests' and limit 'Model operations request limit per minute for a region' of service 'generativelanguage.googleapis.com' for consumer 'project_number:695238240160'.", 'status': 'RESOURCE_EXHAUSTED', 'details': [{'@type': 'type.googleapis.com/google.rpc.ErrorInfo', 'reason': 'RATE_LIMIT_EXCEEDED', 'domain': 'googleapis.com', 'metadata': {'consumer': 'projects/695238240160', 'service': 'generativelanguage.googleapis.com', 'quota_limit': 'ModelRequestsPerMinutePerProjectPerRegion', 'quota_limit_value': '200', 'quota_metric': 'generativelanguage.googleapis.com/model_requests', 'quota_location': 'asia-southeast1', 'quota_unit': '1/min/{project}/{region}'}}, {'@type': 'type.googleapis.com/google.rpc.Help', 'links': [{'description': 'Request a higher quota limit.', 'url': 'https://cloud.google.com/docs/quotas/help/request_increase'}]}]}}

从日志可以看出来,是频率的问题,官方的解释是这样的

  • 错误代码429 RESOURCE_EXHAUSTED
  • 原因Quota exceeded(配额超限)。
  • 具体细节:触发了 Google Gemini API 的 每分钟请求数限制 (RPM)。报错显示限制可能是 200 次/分钟,或者是免费版的更低限制。

解决方法,使用离线的模型,这样效率可以成倍增加,支持并行和API的高频率调用,我打算选用ollama的嵌入模型,主要适配中文。

2、离线模型配置

这是目前做中文 RAG 的首选模型,支持多语言且对中文优化的非常好, 体积为1GB,满足我的小内存要求。

ollama pull bge-m3

测试运行是否满足要求:

curl http://localhost:11434/api/embeddings -d '{
  "model": "bge-m3",
  "prompt": "你好,测试中文向量"
}'

基础地址配置方法:http://host.docker.internal:11434

Pasted image 20260120131516

模型名称,链接还有上下文非常重要,不能配置错误。

Pasted image 20260120132921

这里有一个小问题,就是导入文件,要新建知识库,然后导入,而不是直接导入,不然会有问题。

3、知识库问答拓扑

  • 线1:USER INPUT -> Knowledge Retrieval
  • 线2:Knowledge Retrieval -> LLM
  • 线3:LLM -> OUTPUT

关于配置问题,USER INPUT,这里的输入就是String格式,对于语音问答系统来说,所以没有什么值得注意的。

Knowledge Retrieval,是知识库的检索,众所周知,向量化数据库在召回所需要的文本之后,这只是非常粗略的筛选,可是不够精细,因此需要重拍,一下就是重排模型的配置:

Pasted image 20260120144314

这里的TOP K是最大检索的数量,为了让喂给大语言模型的资料更加充足,这里我选择10条,让检索效果更好一些。

这里的各种配置需要简单介绍,防止下次配置的时候,不知道怎么配,配什么内容。

这个知识库输出的格式,这里的是确定的,主要喂给AI的还是上下文内容,其他参数相对来讲还好一点。
Pasted image 20260120144834

METADATA FILTERING (元数据过滤):

  • 普通检索:你问管理员“帮我找关于‘AI’的书”,管理员会把所有书里带“AI”的都搬出来。
  • 元数据过滤:你问管理员“帮我找2024年出版的、**关于‘AI’**的书”。这里的“2024年”就是元数据(Metadata)。
Pasted image 20260120144946

这里的元数据过滤可以自定义,定义筛选的方法:
Pasted image 20260120145135

至此,项目已经完成成功,下面是运行的效果:

Pasted image 20260120151627 Pasted image 20260120151655 Pasted image 20260120151814

五、Firecrawl上手

1、为什么要学这个项目:

Firecrawl 是为 AI 时代量身定制的“超级爬虫”

传统爬虫的缺点如下,点点致命:
痛点: 网站改版了,原来的爬虫脚本(CSS 选择器)就失效了,你得不停地修代码。
痛点: 你想抓取整个文档中心或博客,但没有站点地图(Sitemap),手动一个一个链接点开太累。
痛点: 你想给你的 AI 助手(如 RAG 系统或知识库)喂一些最新的网页信息,但提取出来的东西全是乱码或无关信息。

场景 你的需求 Firecrawl 怎么做
Deep Research (深研) 写一份行业报告,需要搜索并分析 10 个竞争对手网站 使用 /search 接口,它会搜完直接把结果里的网页内容全部抓回来给你
RAG 知识库构建 把某个产品的官方文档全部导入你的本地大模型 使用 /crawl 接口,一键将整个文档中心转换成 Markdown 文件夹
自动化价格监测 监控某电商网站,当商品降价时提醒你 使用 /extract 接口,按你定义的 JSON 模式定时提取价格字段
所以,对于我这种B站高强度使用的用户来说,这个项目可以帮我实时检索B站的热点,帮我筛选视频哦,这超级爬虫还是很满足我的个人需求了,学习起来吧。

私有化部署的好处如下:

  • 数据隐私: 你抓取的数据不会流经第三方服务器。
  • 无限额度: 自己部署后,不再受官方 API 的调用次数和额度限制(仅受限于你服务器的性能)。
  • 完美集成: 它可以作为 MCP Server 轻松集成到 Cursor、Claude 或你自己的 AI Agent 工作流中。

为什么我的普通服务器无法私有化部署,原因如下:

Firecrawl 的架构包含多个组件,它们在 Docker 中是同时运行的:

  • Playwright 服务: 这是最耗内存的部分,它本质上是在后台运行无头浏览器(Chromium)来解析网页。
  • Redis & Postgres: 用于任务队列和数据存储。
  • API & Worker: 处理请求和抓取逻辑。

推荐配置: 至少 4GB RAM + 2 核 CPU 才能保证基本的流畅运行。所以,使用实验室的服务器正好,这就这决定了,只要能够连接校园网,就可以运行这个服务。

2、快速上手

示例代码可以跑一下,这里使用的是API的方法,也就是非私有部署:

from firecrawl import Firecrawl

firecrawl = Firecrawl(api_key="fc-YOUR_API_KEY")

# Scrape a website (returns a Document)
doc = firecrawl.scrape(
    "https://firecrawl.dev",
    formats=["markdown", "html"],
)
print(doc.markdown)

# Crawl a website
response = firecrawl.crawl(
    "https://firecrawl.dev",
    limit=100,
    scrape_options={"formats": ["markdown", "html"]},
    poll_interval=30,
)
print(response)

六、准备开新坑–API协议说明书

后端开发和 API 集成的核心——HTTP 协议

python(requests)和curl在发送请求的时候,无一例外都是使用http请求的,因此我必须要学习一下这两个的原理,打包方式,代码编写方式,以及协议的转化方式。

1、数据包结构

所有的 API 请求,无论用什么语言写,都逃不开这三个部分:动词 (Method)头 (Headers)身体 (Body)

「协议 → 数据包 → curl → Python」

动词有哪些呢?

Method 语义 是否有 Body 典型用途
GET 获取资源 ❌(规范上) 查询数据
POST 创建 / 提交 登录、提交表单
PUT 整体更新 更新全部资源
PATCH 局部更新 更新部分字段
DELETE 删除资源 可选 删除

2、指令理论

a、以下是GET的原理方法:

这里中间的发送的内容是空的:

curl https://httpbin.org/get

相当于发送:
GET /get HTTP/1.1

这里是直接访问网址,需要从网址得到内容,下面将展示如何传数据:

curl "https://httpbin.org/get?name=kipley&age=18"

相当于发送:
GET /get?name=kipley&age=18 HTTP/1.1

这里如果翻译为python,表述如下:

import requests

resp = requests.get(
    "https://httpbin.org/get",
    params={
        "name": "kipley",
        "age": 18
    }
)

print(resp.text)

如果有header的话,那就加入 header = {} 的参数,照猫画虎就可以了。

HTTP 概念 requests
Method requests.get()
Query 参数 params=
Headers headers=
Body

b、以下是post的方法:

post是发送内容,提交表单。

curl -X POST https://httpbin.org/post \
  -H "Content-Type: application/json" \
  -d '{"username":"admin","password":"123456"}'

等价的 HTTP 数据包:

POST /post HTTP/1.1
Host: httpbin.org
Content-Type: application/json
Content-Length: 43

{"username":"admin","password":"123456"}

等价的python的request代码:

import requests

resp = requests.post(
    "https://httpbin.org/post",
    json={
        "username": "admin",
        "password": "123456"
    }
)

print(resp.json())

3、指令实践

参考这个文档, https://api-docs.deepseek.com/api/list-models ,介绍了curl的模板格式。

curl https://api.deepseek.com/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_DEEPSEEK_API_KEY" \
  -d '{
    "model": "deepseek-chat",
    "messages": [
      {"role": "system", "content": "You are a helpful assistant."},
      {"role": "user", "content": "你好,请介绍一下你自己"}
    ],
    "stream": false
  }'

模板上的教程解释如下(我替换token):
我的token简单记录一下:sk-ac9de92adbf84894a983f8c48bd34e64

curl -L -X POST 'https://api.deepseek.com/chat/completions' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer sk-ac9de92adbf84894a983f8c48bd34e64' \
--data-raw '{
  "messages": [
    {
      "content": "You are a helpful assistant",
      "role": "system"
    },
    {
      "content": "Hi",
      "role": "user"
    }
  ],
  "model": "deepseek-chat",
  "thinking": {
    "type": "disabled"
  },
  "frequency_penalty": 0,
  "max_tokens": 4096,
  "presence_penalty": 0,
  "response_format": {
    "type": "text"
  },
  "stop": null,
  "stream": false,
  "stream_options": null,
  "temperature": 1,
  "top_p": 1,
  "tools": null,
  "tool_choice": "none",
  "logprobs": false,
  "top_logprobs": null
}'

这个post请求发送之后,返回的内容如下:

{"id":"7dd7c25b-0efa-4396-b6e6-b680f2352bba","object":"chat.completion","created":1768912348,"model":"deepseek-chat","choices":[{"index":0,"message":{"role":"assistant","content":"Hello! How can I assist you today? 😊"},"logprobs":null,"finish_reason":"stop"}],"usage":{"prompt_tokens":10,"completion_tokens":11,"total_tokens":21,"prompt_tokens_details":{"cached_tokens":0},"prompt_cache_hit_tokens":0,"prompt_cache_miss_tokens":10},"system_fingerprint":"fp_eaab8d114b_prod0820_fp8_kvcache"}**%**

我翻译为python代码尝试一下:

import requests

url = "https://api.deepseek.com/chat/completions"
headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer sk-ac9de92adbf84894a983f8c48bd34e64"
}

payload = {
	"messages": [
	    {
	      "content": "You are a helpful assistant",
	      "role": "system"
	    },
	    {
	      "content": "Hi",
	      "role": "user"
	    }
	  ],
	  "model": "deepseek-chat",
	  "thinking": {
	    "type": "disabled"
	  },
	  "frequency_penalty": 0,
	  "max_tokens": 4096,
	  "presence_penalty": 0,
	  "response_format": {
	    "type": "text"
	  },
	  "stop": None,
	  "stream": False,
	  "stream_options": None,
	  "temperature": 1,
	  "top_p": 1,
	  "tools": None,
	  "tool_choice": "none",
	  "logprobs": False,
	  "top_logprobs": None
}

response = requests.post(
    url,
    headers=headers,
    json=payload,   # ← 自动 JSON 序列化
    timeout=25
)

print(response.json())

单独调试,发送信息之后显示返回的response如下:

{'id': 'ea4b088b-db29-4b93-9127-be865a4cef76', 'object': 'chat.completion', 'created': 1768912827, 'model': 'deepseek-chat', 'choices': [{'index': 0, 'message': {'role': 'assistant', 'content': 'Hello! How can I assist you today? 😊'}, 'logprobs': None, 'finish_reason': 'stop'}], 'usage': {'prompt_tokens': 10, 'completion_tokens': 11, 'total_tokens': 21, 'prompt_tokens_details': {'cached_tokens': 0}, 'prompt_cache_hit_tokens': 0, 'prompt_cache_miss_tokens': 10}, 'system_fingerprint': 'fp_eaab8d114b_prod0820_fp8_kvcache'}

七、Claude Code 初上手

长远考虑,作为一个专业极客来说,Claude Code是一定要学会的,唯一的问题只是Claude API的模型访问困哪,不过这个框架可以配置其他API,没问题。

启动终端

claude

出师未捷身先死,这里显示访问服务失败,看看是什么问题。

Pasted image 20260120225146

网络没问题,是这个终端连接是需要官方的API的,果然被卡主了。

代理地址一点问题都没有,新加坡的纯净地址,这里的银行卡卡住了,这一步真是一点都绕不过去,不然我ChatGPT和Claude就打通了:
Pasted image 20260120230546

有点烦,虚拟信用卡之前可以用的那家公司也倒闭了,而且香港卡也没法使用。自己有一张国内的万事达卡,可是无法消费,据说Claude是比OpenAI还要严格的。下面评估一下各种方案以及其可行性,B站YouTube吹得天花乱坠的,Claude新出的功能多少好,真正国内执行起来就是难度很大嘛。

“风控三角”IP 地址账单地址卡片归属地

我的IP地址一定是新加坡,我的地址是纯净的地址,所以我也不会更换,那就是支付卡的位置问题。

支付网关使用的是 Stripe,且风控策略比 OpenAI 还要严格。它不仅检测 IP,还会检测卡段(BIN Code)

虚拟卡比如说Prepaid Debit 容易被分控,然后账号就被加入黑名单了,导致刚刚充值就封号。

方案 1:尝试 WildCard 或 Crydit(如果不怕折腾)

  • 目前国内开发者圈子里,WildCard 的成功率在近期似乎比 Crydit 稍高一些,专门针对 OpenAI/Claude 做过优化(但也比普通卡贵)。

可是野卡现在跑路了,所以找不到比野卡还要成功率高的公司了。

方案 2:找代充/代付(风险高但省事)

  • 市面上有专门出售“已绑定好卡并充值了 5 美元 API 额度”的 Claude 账号(通常被称为“带 API 的号”)。
  • 风险: 这种号容易被封,因为可能是黑卡刷的。极其不推荐

方案 C:代付服务(推荐备选)

  • 有一些合规的代付服务(Virtual Credit Card specifically for Ads/SaaS),比如某些面向跨境电商的支付平台,可以尝试搜索支持 Stripe 的企业级虚拟卡,但门槛较高。

最安全的方案,使用国内中转API,稍微贵一点。正在尝试ing。

https://jason-effi-lab.notion.site/23798ac998118032b5fdcd2d014e9d62?p=2e898ac998118042baf6c0ef470e72cb&pm=s

1、国内使用教程

Claude Code 安装指南

Claude Code 对于中国大陆用户,直接使用面临网络与账号双重门槛。但可以通过本地部署 + 国产大模型兼容层(GLM/DeepSeek)方案,实现无障碍安装使用。
操作起来很简单,只需要3个步骤即可。

1. 基础环境与工具安装

Claude Code 依赖 Node.js 环境运行。请确保已安装 Node.js
下载Nodejs之后,双击安装即可。

打开终端(Windows 推荐 PowerShell/CMD,Mac 使用 Terminal),按顺序执行以下命令完成从检查到安装的全流程:

  1. 检查 Node.js 环境(必须有版本号返回)
node -v
npm -v
  1. 安装 Claude Code(使用 -g 进行全局安装)
npm install -g @anthropic-ai/claude-code
  1. 验证安装
claude --version

看到版本号即安装成功。输出示例:2.1.2 (Claude Code)

如果在npm install这一步遇到卡顿,建议搜索watt toolkit加速器(windows应用商店搜索然后安装),或者使用国内npm中转,具体做法是在npm install命令后面添加参数:

npm install -g @anthropic-ai/claude-code --registry=https://registry.npmmirror.com
2. Claude账号问题

安装完成后,需要解决“谁来驱动”的问题,根据你的网络与账号情况选择路径:

  • 路径 A:标准模式(美国、欧洲等支持地区)
    如果你身处海外环境且有 Anthropic 账号,直接运行 claude login,系统会打开浏览器,让你登录Claude,进行 OAuth 授权。登录完成后即可顺畅使用Claude Code。那么对于你来说,现在已经安装成功了。

  • 路径 B:兼容模式(中国大陆推荐)
    国内用户无需注册 Anthropic 账号,可直接使用智谱 GLMDeepSeek的 API 来驱动 Claude Code。这两者均提供了官方兼容接口。具体看第三步。

3. 核心配置:使用兼容模型,绕过Claude登录验证

为了让 Claude Code 连接到兼容模型(智谱GLM, DeepSeek)。

  • 请求 / 响应结构与 Anthropic 基本一致
  • 可直接作为 Claude Code 的后端
  • 不需要登录 Anthropic 官网账号

方案一:通过命令行设置环境变量

我们需要配置 BASE_URLAPI_KEY
为了避免每次重启终端丢失配置,以下命令将直接写入系统永久环境变量

  • 智谱 GLM Base URL: https://open.bigmodel.cn/api/anthropic
  • DeepSeek Base URL: https://api.deepseek.com/anthropic

请根据你的系统,复制对应的命令块运行(只需运行一次):

Windows 用户 (CMD 命令提示符)

使用 setx 命令写入用户级永久变量

setx ANTHROPIC_BASE_URL "https://open.bigmodel.cn/api/anthropic"
setx ANTHROPIC_AUTH_TOKEN "你的_GLM_API_KEY"
setx ANTHROPIC_MODEL "glm-4.6"

注意:运行后需重启 CMD 窗口才会生效

macOS / Linux 用户 (Shell)
echo 'export ANTHROPIC_BASE_URL="https://open.bigmodel.cn/api/anthropic"' >> ~/.zshrc
echo 'export ANTHROPIC_AUTH_TOKEN="你的_GLM_API_KEY"' >> ~/.zshrc
echo 'export ANTHROPIC_MODEL=glm-4.6' >> ~/.zshrc

source ~/.zshrc

如果使用DeepSeek则使用DeepSeek的url和api key,模型名则是deepseek-chat。

方案二:通过配置文件修改环境变量

通过修改本地配置文件,可以强制 Claude Code (CLI) 连接到 DeepSeek 或其他兼容 Anthropic 协议的模型,并跳过官方的浏览器登录验证。

1. 文件结构总览

需要修改的文件位于用户根目录下。请确保文件位置和层级完全一致:

C:\Users\用户名\
│
├── 📄 .claude.json                 <-- 【状态文件】 修改这个文件内容,添加"hasCompletedOnboarding": true,
│
└── 📂 .claude\                     <-- 【配置文件夹】 这是claude全局文件夹
    └── ⚙️ settings.json            <-- 【配置文件】 新建这个settings.json文件,并添加环境变量
2. 详细配置指南
  1. 配置 API 连接 (.claude\settings.json)
    此文件用于接管网络请求,将其重定向到第三方服务(如 GLM/DeepSeek)。
  • 路径: C:\Users\你的用户名\.claude\settings.json
  • 内容: 新建这个setting.json文件,用记事本打开,在里面添加下面这段内容:
{
    "env": {
        // 将地址改为 DeepSeek 或 GLM 的 Anthropic 兼容接口
        "ANTHROPIC_BASE_URL": "https://api.deepseek.com/anthropic",
        // 填写对应的 API Key
        "ANTHROPIC_AUTH_TOKEN": "你的API Key",
        // 禁用遥测和联网检查,防止因地区问题导致的报错
        "CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": "1"
    }
}
  1. 绕过登录验证 (.claude.json)
    此文件用于伪造“老用户”状态,防止 CLI 启动时弹出浏览器进行 OAuth 验证。
  • 路径: C:\Users\你的用户名\.claude.json
  • 内容: 用记事本打开这个文件,在其中添加一项
	"hasCompletedOnboarding": true,  // 核心:告诉程序已完成新手引导,直接进入对话
3. 启动与常用指令

环境变量配置完毕后,无需登录,直接启动即可。

  • 启动程序:在命令行中输入 claude,然后回车。
    • 成功标志:出现 “Welcome to Claude Code” 欢迎语,且未弹出浏览器。
  • 退出程序:在交互界面输入exit,回车。

常用交互指令

  • /clear:清除上下文记忆(节省 Token,开启新任务时推荐)。
  • /compact:压缩上下文(处理长任务时使用)。
  • /help:查看所有可用命令。
  • Alt + Enter (Win) / Opt + Enter (Mac):在对话框中换行。

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 kipleyarch@gmail.com
Obsidian