any路由器因为跟claude code有一些参数适配的问题,所以我们可以在本地架设一个简单的网关,将参数在本地拦截,然后修改一下,再传给any大善人,就可以绕过这些参数适配的小问题了。 claudecode最新版本适用,不需要回退版本 这个本地网关做了什么 在本地监听 127.0.0.1:1998。 把 Claude Code 的请求转发到上游any的端口。 自动补认证头(Authorization / x-api-key)。 对 haiku 请求额外修正:补 context-1m-2025-08-07,并加 thinking.budget_tokens=1024。 把请求和响应写到 gateway_requests.jsonl 方便排错。 极简启动步骤 先开网关 export ANTHROPIC_BASE_URL=“any大善人地址” export ANTHROPIC_AUTH_TOKEN=“你的真实token” python3 /Users/Apple/Desktop/code/claude_gateway.py 新开一个终端再开 Claude Code ANTHROPIC_BASE_URL=“ http://127.0.0.1:1998 ” claude --enable-auto-mode 截图为证: 网关代码如下(vibe写的,很多冗余,大佬可以自行修改): #!/usr/bin/env python3 import base64 import json import os import threading from datetime import datetime, timezone from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer from urllib.error import HTTPError, URLError from urllib.parse import urlsplit, urlunsplit from urllib.request import Request, urlopen LISTEN_HOST = os.getenv("CLAUDE_GATEWAY_HOST", "127.0.0.1") LISTEN_PORT = int(os.getenv("CLAUDE_GATEWAY_PORT", "1998")) UPSTREAM_BASE_URL = os.getenv( "ANTHROPIC_BASE_URL", "https://a-ocnfniawgw.cn-shanghai.fcapp.run" ) UPSTREAM_AUTH_TOKEN = os.getenv("ANTHROPIC_AUTH_TOKEN", "") UPSTREAM_TIMEOUT = float(os.getenv("CLAUDE_GATEWAY_TIMEOUT", "120")) LOG_PATH = os.getenv( "CLAUDE_GATEWAY_LOG", os.path.join(os.path.dirname(__file__), "gateway_requests.jsonl") ) LOG_LOCK = threading.Lock() def utc_now_iso() -> str: return datetime.now(timezone.utc).isoformat() def ensure_log_parent_exists() -> None: parent = os.path.dirname(LOG_PATH) if parent: os.makedirs(parent, exist_ok=True) def decode_body_for_log(body: bytes) -> dict: if not body: return {"encoding": "utf-8", "text": ""} try: return {"encoding": "utf-8", "text": body.decode("utf-8")} except UnicodeDecodeError: return {"encoding": "base64", "text": base64.b64encode(body).decode("ascii")} def append_log(record: dict) -> None: ensure_log_parent_exists() line = json.dumps(record, ensure_ascii=False) with LOG_LOCK: with open(LOG_PATH, "a", encoding="utf-8") as f: f.write(line + "\n") def build_upstream_url(base_url: str, incoming_path: str) -> str: base = urlsplit(base_url) incoming = urlsplit(incoming_path) incoming_path_only = incoming.path or "/" base_path = base.path.rstrip("/") if base_path: merged_path = f"{base_path}{incoming_path_only}" else: merged_path = incoming_path_only return urlunsplit((base.scheme, base.netloc, merged_path, incoming.query, "")) def rewrite_request_headers(headers: dict, path: str) -> dict: rewritten = dict(headers) if UPSTREAM_AUTH_TOKEN: has_x_api_key = any(k.lower() == "x-api-key" for k in rewritten) has_authorization = any(k.lower() == "authorization" for k in rewritten) if not has_x_api_key: rewritten["x-api-key"] = UPSTREAM_AUTH_TOKEN if not has_authorization: rewritten["Authorization"] = f"Bearer {UPSTREAM_AUTH_TOKEN}" # 先做骨架,后续按 any 规则逐步覆写。 return rewritten def rewrite_request_body(body: bytes, headers: dict, path: str) -> bytes: if not body: return body content_type = "" for k, v in headers.items(): if k.lower() == "content-type": content_type = v break if "application/json" not in content_type.lower(): return body try: payload = json.loads(body.decode("utf-8")) except (UnicodeDecodeError, json.JSONDecodeError): return body model = str(payload.get("model", "")).lower() if not model.startswith("claude-haiku"): return body beta_key = None for k in headers.keys(): if k.lower() == "anthropic-beta": beta_key = k break raw_beta = headers.get(beta_key, "") if beta_key else "" beta_features = [item.strip() for item in raw_beta.split(",") if item.strip()] if "context-1m-2025-08-07" not in beta_features: beta_features.append("context-1m-2025-08-07") merged_beta = ",".join(beta_features) if beta_key: headers[beta_key] = merged_beta else: headers["anthropic-beta"] = merged_beta payload["thinking"] = {"type": "enabled", "budget_tokens": 1024} return json.dumps(payload, ensure_ascii=False, separators=(",", ":")).encode("utf-8") class ClaudeGatewayHandler(BaseHTTPRequestHandler): protocol_version = "HTTP/1.1" def do_GET(self): self._handle_proxy() def do_POST(self): self._handle_proxy() def do_PUT(self): self._handle_proxy() def do_PATCH(self): self._handle_proxy() def do_DELETE(self): self._handle_proxy() def do_OPTIONS(self): self._handle_proxy() def do_HEAD(self): self._handle_proxy() def log_message(self, fmt, *args): return def _read_request_body(self) -> bytes: content_length = int(self.headers.get("Content-Length", "0") or "0") if content_length <= 0: return b"" return self.rfile.read(content_length) def _copy_request_headers(self) -> dict: headers = {} for key, value in self.headers.items(): key_l = key.lower() if key_l in {"host", "content-length", "connection", "accept-encoding"}: continue headers[key] = value return headers def _send_response(self, status: int, headers: dict, body: bytes) -> None: self.send_response(status) ignored = {"transfer-encoding", "content-length", "connection"} for k, v in headers.items(): if k.lower() in ignored: continue self.send_header(k, v) self.send_header("Content-Length", str(len(body))) self.send_header("Connection", "close") self.end_headers() if self.command != "HEAD" and body: self.wfile.write(body) def _handle_proxy(self): req_body = self._read_request_body() req_headers = self._copy_request_headers() req_headers = rewrite_request_headers(req_headers, self.path) req_body = rewrite_request_body(req_body, req_headers, self.path) upstream_url = build_upstream_url(UPSTREAM_BASE_URL, self.path) request_log = { "timestamp": utc_now_iso(), "client_ip": self.client_address[0] if self.client_address else "", "method": self.command, "path": self.path, "upstream_url": upstream_url, "headers": dict(self.headers.items()), "body": decode_body_for_log(req_body), "body_length": len(req_body), } try: upstream_req = Request( url=upstream_url, data=req_body if req_body else None, headers=req_headers, method=self.command, ) with urlopen(upstream_req, timeout=UPSTREAM_TIMEOUT) as resp: resp_status = resp.getcode() resp_headers = dict(resp.headers.items()) resp_body = resp.read() request_log["response"] = { "status": resp_status, "headers": resp_headers, "body": decode_body_for_log(resp_body), "body_length": len(resp_body), } append_log(request_log) self._send_response(resp_status, resp_headers, resp_body) return except HTTPError as e: err_body = e.read() if hasattr(e, "read") else b"" err_headers = dict(e.headers.items()) if getattr(e, "headers", None) else {} request_log["response"] = { "status": e.code, "headers": err_headers, "body": decode_body_for_log(err_body), "body_length": len(err_body), } append_log(request_log) self._send_response(e.code, err_headers, err_body) return except (URLError, TimeoutError, Exception) as e: error_payload = { "error": "gateway_upstream_error", "message": str(e), } error_body = json.dumps(error_payload, ensure_ascii=False).encode("utf-8") request_log["response"] = { "status": 502, "headers": {"Content-Type": "application/json; charset=utf-8"}, "body": {"encoding": "utf-8", "text": error_body.decode("utf-8")}, "body_length": len(error_body), } append_log(request_log) self._send_response( 502, {"Content-Type": "application/json; charset=utf-8"}, error_body, ) def main(): server = ThreadingHTTPServer((LISTEN_HOST, LISTEN_PORT), ClaudeGatewayHandler) print(f"[gateway] listening on http://{LISTEN_HOST}:{LISTEN_PORT}") print(f"[gateway] upstream: {UPSTREAM_BASE_URL}") print(f"[gateway] auth token configured: {bool(UPSTREAM_AUTH_TOKEN)}") print(f"[gateway] log file: {LOG_PATH}") server.serve_forever() if __name__ == "__main__": main() 1 个帖子 - 1 位参与者 阅读完整话题
无论是在vscode的插件中使用,还是各种版本的gui中,都有一个通病 那就是: 可能ai还在回复,还在执行,因为时间比较长,或者是网络有延迟,或者是输出的信息让gui工具以为这就是最终的回复结果了,然后就戛然而止 即使他说接下来执行什么什么,但是界面中就是已经停止了, 看图: 这个是我使用的是vscode中的插件,昨天感觉很顺滑,今天更新了一下,然后又开始了 其他的gui工具有同样的通病,还是老老实实回到cli吧 1 个帖子 - 1 位参与者 阅读完整话题
已经在cc-switch中勾选了应用到vscode中,cc插件更新到最新版本,不选opus 1m会提示1m 上下文已经全量可用,选了1m,报错如下,终端的话是正常使用的: 1 个帖子 - 1 位参与者 阅读完整话题
版本2.1.112 兄弟们加油蹬。 CC这边我是这样设置的: 8 个帖子 - 6 位参与者 阅读完整话题
我已经被any大善人周限好几周了,然后因为claude 4.7出来了,昨天升级了一下cc到2.1.112版本,抱着测试的心态用了一下any大善人的key,没想到可以跑了。 然后我就安心睡觉了,等待今天猛猛用了,然后今天顺手升级了一下cc到114,发现因为a/的原因114版本在Windows有兼容性问题 就把包退到110版本了,因为说是口碑比较好的一个版本嘛,没想到在110版本使用any大善人就又503了…… 此时我以为是any又抽风了呢,怎么配模型都是什么503,429啥的各种报错。 一起之下就又升级到112版本,发现又可以用了 所以如果你也被any大善人的玄学可用性困扰,不妨按一下cc 112版本试试。不过只是玄学哈,不保证一定可行,佬们如果不行勿喷。 11 个帖子 - 5 位参与者 阅读完整话题
从 Any牌路由器 SubAgent 和 Haiku 模型无法正常调用的解决办法 继续讨论: 叼毛 就在今天 114 版本将npm包中的cli.js 之于node 的兼容运行部分 制品 全面更换成了 bun版 且学codex 把每个平台的制品都拆成了单独的分包 原本的 cli.js 的包现在改为了 包装脚本 cli-wrapper.cjs 用于拉取对应平台的 bun版二进制 其安装脚本 可以看到 基本是毁了 解包还出来 cli.js 也可以 但其目前的动作其实表明了 npm包的真废弃 不过也没有一步到位 因为最开始就是用bun构建但是兼容了node的 所以114目前解出来的 仍然可以 node来跑 只不过不确定后续动作 (等会整个仓库来分发新node版) 如果某日开始 cch的机制更进一步的 完全强硬实施(禁用的的环境变量移除掉) 或者 源码中直接将兼容node这部份包裹代码给移除 那时就是真正的废弃之时了 你让我强行用npm包我也不敢用了 (怕封号) 附一个乐子 有时候谣言是怎么传播的呢就很好奇 我们并未清楚那天穿山甲到底说了啥 25 个帖子 - 23 位参与者 阅读完整话题
安装后运行claude提示这个了。 该版本的 D:\tools\nodejs\node-v24.11.1-win-x64\node_modules@anthropic-ai\claude-code\bin\claude.exe 与你运行的 Windows 版本不兼容。请查看计算机的系统信息,然后联系软件发布者。 安装回旧版本 2.1.112就正常了。 npm install -g @anthropic-ai/[email protected] 15 个帖子 - 8 位参与者 阅读完整话题
最新版本cpa,号池刷新还有额度,但是显示429 3 个帖子 - 3 位参与者 阅读完整话题
3 个帖子 - 3 位参与者 阅读完整话题
在github闲逛,发现一个claude code的自动提取内存的插件,叫claude-mem,大概就是自动根据几个hook,提取内容保存,自动增加内容提问,大概就是这个意思,不过一看provider,只支持御三家,无法填国内的,看着挺好的,就是用不了,实在没国内版本的我就打算后面自己写一个算了,有的话还请佬推荐一下。 顺便说一下这个东西的作用,最近hermes之所以这么火,也是因为他的自学习能力,所谓自学习能力,其实就是内存管理,跟上面的原理是差不多的。所以claude code有了这个,等于变相也成了一个可以自己学习的编程智能体。 4 个帖子 - 3 位参与者 阅读完整话题
突然就不能用Claude启动了,上一秒还在用,关闭powershell后重新开就这样了。 程序"claude.exe"无法运行: 指定的可执行文件不是此操作系统平台的有效应用程序。 16 个帖子 - 7 位参与者 阅读完整话题
诈骗有人管吗?论坛进化太快了跟不上版本呀,也就1天没看,严重落后。 第一次听说1000的教程,不包教会的,一句话就可以的。 刚才那个佬友买GPT Pro教程被骗1000块的帖子还没看完就没了 - 搞七捻三 / 搞七捻三, Lv1 - LINUX DO 关于plus - 搞七捻三 / 搞七捻三, Lv1 - LINUX DO 1 个帖子 - 1 位参与者 阅读完整话题
比以前版本好多了,有点东西… 1 个帖子 - 1 位参与者 阅读完整话题
前几天用最新版本的Antigravity突然就用不了,一直以为是clash网络相关的问题,然后也试过清除gemini.md,以及一些配置文件,都没有用。 后来找到这个才发现是我这几天用了claude工作树导致的。。。。。 问题原因: Claude Code 的 worktree 功能会在项目根目录的 .git/config 写入 extensions.worktreeConfig = true ,而 Antigravity 的 Git 库不支持这个扩展,导致失败 解决方法是:在项目根目录下执行 git config --local --unset extensions.worktreeConfig 应该就可以了,如果还没生效就重启下 最后真是想吐槽antigravity这个坑爹货,各种奇奇怪怪的问题,版本迭代又贼慢,谷歌收购它真是亏大发了 2 个帖子 - 2 位参与者 阅读完整话题
2026、04、17 灰度测试 GPT-Image-2 没轮到我,www,新一代nanobanana来了。 国产视频happyhouse应该是追上了。 我也是plus-自己老号,bug开token的9r-plus GPT-IMAGE-2 生成海报以假乱真 搞七捻三 今天看到很多人在讨论GPT-IMAGE-2,自己去生成了几张海报试了下,效果是真不错啊,提示词很简单,就是:例如“生成跑跑卡丁车,qq 飞车这两款游戏联动活动宣传海报”这样的,以下来欣赏一下效果图: [7b41f8dca6c867884de42b617f2f4c9f] [61dd66732b673860edd9cd34bda48c71] [4f2f2f0ccf6905230792f1b63… gpt图像2发布了,强过大香蕉 搞七捻三 还记得gpt4o生图的时候,那段时间简直爆火,是一个现象级突破,然后过了段时间大香蕉来了,又一个大突破,现在gpt带着他的新生图版本来了,浅浅试了一下生成文字很有进步,期待佬们的作品 做了一个梗图 [file0000000076e0720b8a6aff826aab1297] [HF61F2lasAA0Pp8] [HF61F2jasAEd539] [HF61F2lbgAAegJ] [H… 预言一手2026年底/年中,国产模型应该就能和国外顶尖追平了(coding,大概是glm6) (视频/照片/声音,字节手握那么多音视频资源,应能够飞起来) 百度将会路边一条 我口口嗨的,各位佬不要当真 对比留档 2 个帖子 - 2 位参与者 阅读完整话题
目前我是最新版本,跟版本关系不是很大(有那么点),因为我是今天更新得新版本,前天不能用,一开始我以为是真的服务器炸了,昨天早上开始我依然不能使用,我是ultra号,中午的时候,我发现我有个号死了,额,用了反代,也不算吧就是tools上面的预热,然后我去把他T了,换了个新号,发现非常流畅(这里我以为已经恢复正常了)但是我切旧号,发现又一直出现retry,那么我推算就是古大善人,干了一件限制账户的事情,于是我全给T了,换了新号,昨天到今天,有的号偶尔retry,有的号无比流畅,算力充足(因为限制很多人用不了)。目前对我来说是这样的,但是有佬换个低版本也能流畅,如果你还是一直retry,那么可以试试换个新号,现在号也便宜哈,时间越久的越好,别整新号。这是个人分享,能不能帮到你,我不知道,我现在在流畅使用。之前也发过贴,反重力论坛也发过,好像也没啥人看。纯分享,大佬们就当看个笑话 7 个帖子 - 4 位参与者 阅读完整话题
我是在 Minimax 的编程套餐之前没有周限额的时候就买了 Plus 版,但最近想扩大额度就又买了 Max 版本,不过买完以后才发现新版 Max 版本是有周限额的,但我在套餐的使用额度里面又只看到了 5 小时限额的进度条,没有看到周限额的进度条。 所以想问一下大家,我这个情况到底有没有周限额,是不是如果真的有周限额的话是能在额度哪里看到周限额的进度条。 2 个帖子 - 2 位参与者 阅读完整话题
用的中转站,wsl中使用codex cli,版本是最新版 部分配置 sandbox_mode = "workspace-write" approval_policy = "on-request" 3 个帖子 - 2 位参与者 阅读完整话题
GPT-IMAGE-2!!!版本真神啊,修图体验真是太好了,场景一致性保持得非常不错,而且速度很快。 图一是gpt随手的一个prompt生成的图片,经过4步调整成了图二,整体的光线和环境都没什么变化,关键改图速度很快,这可比游戏捏脸有意思多了,太好玩了!!! 使用大香蕉提升到4k,emmmmm,感觉有点涂抹感,gpt原生4k赶紧放出来啊 prompt: 9:16 vertical portrait, realistic casual mirror photo in a dorm room, soft daylight, slight phone-camera wide-angle effect. An adult Chinese woman with short damp black hair sits on the edge of a lower bunk, holding a pink lace-trim dress on a hanger as if about to try it on. She wears a modest light robe, fully covered. 改图步骤: 4 个帖子 - 3 位参与者 阅读完整话题
DeepSeek v4版本从春节前就在讨论,说等圣诞放出来狙击美国佬一波,然后又说等到春节放出来,卷国内厂商,最近又听到说4月中旬会放出来,也没等到啊。这是发生了什么,是我们的期待太高,还是DeepSeek 有自己的节奏? 11 个帖子 - 10 位参与者 阅读完整话题