Loading... views

ABM: AnyRouter Backend Manager


AnyRouter Backend Manager

Anyrouter 是一个方便的Claude白嫖工具,但是他的后端经常断联,即使运用代理也无法避免。

收到NPM镜像管理工具 nrm 的启发,我让AI帮我写了一个AnyRouter的后端管理工具,叫做 ABM (AnyRouter Backend Manager)。它可以帮你测试多个AnyRouter后端的延迟,并自动切换到最快的那个。 简单的几行代码就可以完成


            
import time

            
import requests

            
import os

            


            
# 1. 定义你想检测的后端地址

            
URLS = [

            
    "https://pmpjfbhq.cn-nb1.rainapp.top",

            
    "https://c.cspok.cn",

            
    "https://q.quuvv.cn",

            
    "https://anyrouter.top"

            
]

            


            
def check_backends():

            
    best_url = None

            
    min_latency = float('inf')

            
    

            
    print(f"{'URL':<40} | {'Latency':<12} | {'Status'}")

            
    print("-" * 65)

            
    

            
    for url in URLS:

            
        try:

            
            start_time = time.time()

            
            # 发送请求,超时设为 3 秒

            
            resp = requests.get(url, timeout=3)

            
            latency = (time.time() - start_time) * 1000 # 毫秒

            
            

            
            print(f"{url:<40} | {latency:>8.2f} ms | {resp.status_code}")

            
            

            
            # 记录最快的那个

            
            if latency < min_latency:

            
                min_latency = latency

            
                best_url = url

            
        except Exception:

            
            print(f"{url:<40} | {'Timeout':>11} | Error")

            
            

            
    print("-" * 65)

            
    

            
    # 2. 将最快的结果写入临时文件,供 Shell 读取

            
    if best_url:

            
        print(f"推荐节点: {best_url}")

            
        with open("/tmp/best_claude_url", "w") as f:

            
            f.write(best_url)

            
    else:

            
        print("没有找到可用的节点")

            
        

            
if __name__ == "__main__":

            
    check_backends()

            
import time

            
import requests

            
import os

            


            
# 1. 定义你想检测的后端地址

            
URLS = [

            
    "https://pmpjfbhq.cn-nb1.rainapp.top",

            
    "https://c.cspok.cn",

            
    "https://q.quuvv.cn",

            
    "https://anyrouter.top"

            
]

            


            
def check_backends():

            
    best_url = None

            
    min_latency = float('inf')

            
    

            
    print(f"{'URL':<40} | {'Latency':<12} | {'Status'}")

            
    print("-" * 65)

            
    

            
    for url in URLS:

            
        try:

            
            start_time = time.time()

            
            # 发送请求,超时设为 3 秒

            
            resp = requests.get(url, timeout=3)

            
            latency = (time.time() - start_time) * 1000 # 毫秒

            
            

            
            print(f"{url:<40} | {latency:>8.2f} ms | {resp.status_code}")

            
            

            
            # 记录最快的那个

            
            if latency < min_latency:

            
                min_latency = latency

            
                best_url = url

            
        except Exception:

            
            print(f"{url:<40} | {'Timeout':>11} | Error")

            
            

            
    print("-" * 65)

            
    

            
    # 2. 将最快的结果写入临时文件,供 Shell 读取

            
    if best_url:

            
        print(f"推荐节点: {best_url}")

            
        with open("/tmp/best_claude_url", "w") as f:

            
            f.write(best_url)

            
    else:

            
        print("没有找到可用的节点")

            
        

            
if __name__ == "__main__":

            
    check_backends()

            
import time

            
import requests

            
import os

            


            
# 1. 定义你想检测的后端地址

            
URLS = [

            
    "https://pmpjfbhq.cn-nb1.rainapp.top",

            
    "https://c.cspok.cn",

            
    "https://q.quuvv.cn",

            
    "https://anyrouter.top"

            
]

            


            
def check_backends():

            
    best_url = None

            
    min_latency = float('inf')

            
    

            
    print(f"{'URL':<40} | {'Latency':<12} | {'Status'}")

            
    print("-" * 65)

            
    

            
    for url in URLS:

            
        try:

            
            start_time = time.time()

            
            # 发送请求,超时设为 3 秒

            
            resp = requests.get(url, timeout=3)

            
            latency = (time.time() - start_time) * 1000 # 毫秒

            
            

            
            print(f"{url:<40} | {latency:>8.2f} ms | {resp.status_code}")

            
            

            
            # 记录最快的那个

            
            if latency < min_latency:

            
                min_latency = latency

            
                best_url = url

            
        except Exception:

            
            print(f"{url:<40} | {'Timeout':>11} | Error")

            
            

            
    print("-" * 65)

            
    

            
    # 2. 将最快的结果写入临时文件,供 Shell 读取

            
    if best_url:

            
        print(f"推荐节点: {best_url}")

            
        with open("/tmp/best_claude_url", "w") as f:

            
            f.write(best_url)

            
    else:

            
        print("没有找到可用的节点")

            
        

            
if __name__ == "__main__":

            
    check_backends()

            
import time

            
import requests

            
import os

            


            
# 1. 定义你想检测的后端地址

            
URLS = [

            
    "https://pmpjfbhq.cn-nb1.rainapp.top",

            
    "https://c.cspok.cn",

            
    "https://q.quuvv.cn",

            
    "https://anyrouter.top"

            
]

            


            
def check_backends():

            
    best_url = None

            
    min_latency = float('inf')

            
    

            
    print(f"{'URL':<40} | {'Latency':<12} | {'Status'}")

            
    print("-" * 65)

            
    

            
    for url in URLS:

            
        try:

            
            start_time = time.time()

            
            # 发送请求,超时设为 3 秒

            
            resp = requests.get(url, timeout=3)

            
            latency = (time.time() - start_time) * 1000 # 毫秒

            
            

            
            print(f"{url:<40} | {latency:>8.2f} ms | {resp.status_code}")

            
            

            
            # 记录最快的那个

            
            if latency < min_latency:

            
                min_latency = latency

            
                best_url = url

            
        except Exception:

            
            print(f"{url:<40} | {'Timeout':>11} | Error")

            
            

            
    print("-" * 65)

            
    

            
    # 2. 将最快的结果写入临时文件,供 Shell 读取

            
    if best_url:

            
        print(f"推荐节点: {best_url}")

            
        with open("/tmp/best_claude_url", "w") as f:

            
            f.write(best_url)

            
    else:

            
        print("没有找到可用的节点")

            
        

            
if __name__ == "__main__":

            
    check_backends()

然后写入一个Shell脚本来调用它,并设置环境变量


            
function cl-check() {

            
    # 1. 直接指定虚拟环境中的 python 路径

            
    # 假设你的脚本和 .venv 都在 ~/scripts 下

            
    ~/scripts/.venv/bin/python ~/scripts/abm.py

            
    

            
    # 2. 读取结果并设置环境变量

            
    if [ -f /tmp/best_claude_url ]; then

            
        export ANTHROPIC_BASE_URL=$(cat /tmp/best_claude_url)

            
        echo "🚀 已切换: ANTHROPIC_BASE_URL=$ANTHROPIC_BASE_URL"

            
    fi

            
}

            
function cl-check() {

            
    # 1. 直接指定虚拟环境中的 python 路径

            
    # 假设你的脚本和 .venv 都在 ~/scripts 下

            
    ~/scripts/.venv/bin/python ~/scripts/abm.py

            
    

            
    # 2. 读取结果并设置环境变量

            
    if [ -f /tmp/best_claude_url ]; then

            
        export ANTHROPIC_BASE_URL=$(cat /tmp/best_claude_url)

            
        echo "🚀 已切换: ANTHROPIC_BASE_URL=$ANTHROPIC_BASE_URL"

            
    fi

            
}

            
function cl-check() {

            
    # 1. 直接指定虚拟环境中的 python 路径

            
    # 假设你的脚本和 .venv 都在 ~/scripts 下

            
    ~/scripts/.venv/bin/python ~/scripts/abm.py

            
    

            
    # 2. 读取结果并设置环境变量

            
    if [ -f /tmp/best_claude_url ]; then

            
        export ANTHROPIC_BASE_URL=$(cat /tmp/best_claude_url)

            
        echo "🚀 已切换: ANTHROPIC_BASE_URL=$ANTHROPIC_BASE_URL"

            
    fi

            
}

            
function cl-check() {

            
    # 1. 直接指定虚拟环境中的 python 路径

            
    # 假设你的脚本和 .venv 都在 ~/scripts 下

            
    ~/scripts/.venv/bin/python ~/scripts/abm.py

            
    

            
    # 2. 读取结果并设置环境变量

            
    if [ -f /tmp/best_claude_url ]; then

            
        export ANTHROPIC_BASE_URL=$(cat /tmp/best_claude_url)

            
        echo "🚀 已切换: ANTHROPIC_BASE_URL=$ANTHROPIC_BASE_URL"

            
    fi

            
}

此后 每次想切换后端,只需运行 cl-check 即可。


            
source ~/.zshrc  # 确保 shell 脚本已加载

            
cl-check

            
source ~/.zshrc  # 确保 shell 脚本已加载

            
cl-check

            
source ~/.zshrc  # 确保 shell 脚本已加载

            
cl-check

            
source ~/.zshrc  # 确保 shell 脚本已加载

            
cl-check

输出:


            
  scripts git:(master)  cl-check 

            
URL                                      | Latency      | Status

            
-----------------------------------------------------------------

            
https://pmpjfbhq.cn-nb1.rainapp.top      |    58.80 ms | 403

            
https://c.cspok.cn                       |     Timeout | Error

            
https://q.quuvv.cn                       |     Timeout | Error

            
https://anyrouter.top                    |   285.82 ms | 200

            
-----------------------------------------------------------------

            
推荐节点: https://pmpjfbhq.cn-nb1.rainapp.top

            
🚀 已切换: ANTHROPIC_BASE_URL=https://pmpjfbhq.cn-nb1.rainapp.top

            
  scripts git:(master)  cl-check 

            
URL                                      | Latency      | Status

            
-----------------------------------------------------------------

            
https://pmpjfbhq.cn-nb1.rainapp.top      |    58.80 ms | 403

            
https://c.cspok.cn                       |     Timeout | Error

            
https://q.quuvv.cn                       |     Timeout | Error

            
https://anyrouter.top                    |   285.82 ms | 200

            
-----------------------------------------------------------------

            
推荐节点: https://pmpjfbhq.cn-nb1.rainapp.top

            
🚀 已切换: ANTHROPIC_BASE_URL=https://pmpjfbhq.cn-nb1.rainapp.top

            
  scripts git:(master)  cl-check 

            
URL                                      | Latency      | Status

            
-----------------------------------------------------------------

            
https://pmpjfbhq.cn-nb1.rainapp.top      |    58.80 ms | 403

            
https://c.cspok.cn                       |     Timeout | Error

            
https://q.quuvv.cn                       |     Timeout | Error

            
https://anyrouter.top                    |   285.82 ms | 200

            
-----------------------------------------------------------------

            
推荐节点: https://pmpjfbhq.cn-nb1.rainapp.top

            
🚀 已切换: ANTHROPIC_BASE_URL=https://pmpjfbhq.cn-nb1.rainapp.top

            
  scripts git:(master)  cl-check 

            
URL                                      | Latency      | Status

            
-----------------------------------------------------------------

            
https://pmpjfbhq.cn-nb1.rainapp.top      |    58.80 ms | 403

            
https://c.cspok.cn                       |     Timeout | Error

            
https://q.quuvv.cn                       |     Timeout | Error

            
https://anyrouter.top                    |   285.82 ms | 200

            
-----------------------------------------------------------------

            
推荐节点: https://pmpjfbhq.cn-nb1.rainapp.top

            
🚀 已切换: ANTHROPIC_BASE_URL=https://pmpjfbhq.cn-nb1.rainapp.top

TODO

也许未来可以用一个真的API key去test,目前后端还没有加这一层防护,先用着看。