感觉…嗯,不好评价,这个机场最便宜的套餐就是我买的这个24/月的,反正我用起来不好评价,不知道各位佬用起来什么体验。 https://sub.grempt.com/link/217519/1366d8c8c138fcab5353 流量还有一百多G吧好像。 1 个帖子 - 1 位参与者 阅读完整话题
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 位参与者 阅读完整话题
当前对话出现retry,重开另一个session却可以正常使用,切回原对话还是retry 。这是any轮询的问题吗?还是新版cluade code的原因 而且感觉any现在retrying明显变多了 个人感觉还和上下文有关,上下文一长retry出现概率更大 报错多为: API Error: 503 {“error”:{“message”:“Service Unavailable”,“type”:“error”},“type”:“error”} · check status.claude.com 明明前一周还能爽蹬 2 个帖子 - 2 位参与者 阅读完整话题
Claude-max-20x可以2API吗?会被封吗?想组个号池,小伙伴们需要 9 个帖子 - 5 位参与者 阅读完整话题
2925 邮箱又可以了! 9 个帖子 - 6 位参与者 阅读完整话题
哪个有的佬,可以分享一下这个终身许可密钥吗,之前有,结果电脑的系统盘坏了重装系统过后就找不到了。 如有佬可以分享,感谢感谢 1 个帖子 - 1 位参与者 阅读完整话题
已经三周周限了不能使用 any 每次使用告诉我下周再试,已经几乎要心灰意冷了。今天居然可以用了。 4 个帖子 - 4 位参与者 阅读完整话题
有没有佬可以分享一点论文降重和降ai率的方法啊,本科论文,另外有没有做ppt的网站分享 6 个帖子 - 5 位参与者 阅读完整话题
https://linux.do/t/topic/1995512/59 不知道是不是故意的,让别人无法回复,提高自己中奖率 48 个帖子 - 38 位参与者 阅读完整话题
原来那个网吧特权版的,打开是可以直接看4k的吗?我现在弄完看不了呢,只能720p,4k还是要冲会员的 14 个帖子 - 9 位参与者 阅读完整话题
好几次了可以curl出来,但是hermes无法使用 6 个帖子 - 3 位参与者 阅读完整话题
常用的gpt 5.4公益站现在全部无了,求助各位佬还有哪些可以用呀,救救孩子吧 19 个帖子 - 12 位参与者 阅读完整话题
今天突然收到这个短信,这是指可以调用30000次吗 3 个帖子 - 3 位参与者 阅读完整话题
月末打算去台湾自驾环岛 预计时间7-10天 之前看到过一个佬的项目可以通过小红书检索生成旅游攻略 刚才搜了一下没找到帖子 或者有没有人有台湾环岛经历 给点儿建议 2 个帖子 - 2 位参与者 阅读完整话题
CC 实在是太贵了, 就想找个项目, 让自己的 CC 可以用 Codex api, 求佬们指个路 6 个帖子 - 4 位参与者 阅读完整话题
如题,听说红米手机可以刷机,但是又听说刷机要解bl锁,现在都不让解了 13 个帖子 - 7 位参与者 阅读完整话题
其实我觉得可以薅羊毛,如果有佬友不喜欢可以选择不关注; 还有就是有些佬友说,论坛中的非常有精华的文章有点少了,确实; 我最近发现了,很多帖子都沉淀下去了,导致很多佬友没有发现; 在这里我想发起一个wiki,做一个知识组合帖子wiki,不断佬友补充链接和更新; 希望始皇或者运营佬友可以把这个wiki帖子在文档共建板块置顶,可以让佬友学到知识,学到AI知识; 就像那个国外大佬说的,可以把零散的知识使用llm wiki方式进行整理; 以上是个人的一些小建议,大家可以说说自己的看法。 15 个帖子 - 9 位参与者 阅读完整话题
自写的反代目前看来比较稳定 之前直接分享自己用的key被举报了 没心情分享免费opus4.7了 但是如果有佬自己的号希望反代用 可以找我免费托管,代理我来提供 因为代理是按流量计费的 5 /GB 所以提供不了太多号 建议最多2个人分享一个号,更多人没测过 有可视化面板可以查使用情况 不用担心有你本人以外的人使用你的账号 5 个帖子 - 2 位参与者 阅读完整话题
最终搞定了,记录一下。 在 Home Assistant(简称HA)里安装 xiaomi-miot 插件后。 设置 → 设备与服务 → 搜索 Xiaomi Miot 在设备列表里找到你要控制的音箱,我有2个小爱音箱,其中 小米小爱音箱 Pro ,在 Miot 里叫做 Mi AI Speaker Pro,设备型号 xiaomi.wifispeaker.lx06 小米智能音箱 Pro ,在 Miot 里叫做 Xiaomi Smart Speaker Pro,设备型号 xiaomi.wifispeaker.oh2p 点击进入设备控制页面后,可以发现有很多控制功能,比如【播放文本】和【执行文本指令】。 点击“播放文本”功能前面的图标,再点击右上角的设置图标 即可看到这个功能的【实体标识符】,我理解就是一个 function id 有了这个,再配合 HA 生成的长期 token,就能写脚本控制小爱音箱说话了。 这是龙虾给我写的代码,测试通过。 1 个帖子 - 1 位参与者 阅读完整话题
一直不太习惯L站的私信页面,在IDC Flare里面看到聊天的页面可以发送直接消息,就像是其他聊天软件一样的聊天页面,但是在L站上面没看到,有知道L站怎么发送直接消息的佬吗 IDC Flare直接消息页面截图 但L站上面只有频道,没有直接消息 3 个帖子 - 2 位参与者 阅读完整话题