ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

gpt4free 如何用 config.yaml 定义自定义模型路由:condition 条件、quota 余额与 error_count 回退

2026/9/10 13:29:21 拓冰建站 浏览量
gpt4free 如何用 config.yaml 定义自定义模型路由:condition 条件、quota 余额与 error_count 回退 gpt4free 如何用 config.yaml 定义自定义模型路由condition 条件、quota 余额与 error_count 回退【免费下载链接】gpt4freeThe official gpt4free repository | various collection of powerful language models | opus 4.6 gpt 5.3 kimi 2.5 deepseek v3.2 gemini 3项目地址: https://gitcode.com/GitHub_Trending/gp/gpt4free在 gpt4freeg4f里客户端只能用固定的模型名调用某个 provider。如果你希望用自己的名字比如my-gpt4发请求让 g4f 按「quota 余额、最近错误次数」自动在多个 provider 之间选择和回退就需要编写config.yaml自定义路由文件。g4f 在读取 cookie 目录时自动加载该文件路由机制与 LiteLLM 的路由配置思路类似参见 docs/config-yaml-routing.md。本文覆盖文件放在哪里、models条目怎么写、condition里quota/balance/error_count三个变量怎么用、以及用 Python API 验证路由是否生效。准备条件已安装 g4f。README 给出的 PyPI 安装方式是要求 Python 3.10pip install -U g4f[all]加载config.yaml依赖 PyYAML必须单独确认它已安装pip install pyyaml完整requirements.txt中已包含 PyYAML。如果环境中没有 PyYAMLg4f 会记录一条 warning 并跳过config.yaml的加载——路由不会生效但程序不会报错这是排查配置没生效时首先要确认的一项。config.yaml 放在哪里、何时被加载config.yaml必须与你的.har/.jsoncookie 文件放在同一个目录文档称之为 cookies dir文档给出的位置是默认位置~/.config/g4f/cookies/config.yaml备选位置./har_and_cookies/config.yaml注意 SKILL.md 中给出的示例路径是~/.g4f/cookies/config.yaml两处写法不完全一致核心规则以文档为准——config.yaml 要和 cookie 文件同目录g4f 在读取 cookie 目录时例如 API server 启动时或调用read_cookie_files()时自动加载它不需要单独配置加载动作。仓库里有一个可直接参考的完整示例文件 etc/examples/config.yaml。定义路由models、providers、condition文件结构如下来自 docs/config-yaml-routing.mdmodels: - name: model-name # the name clients use providers: - provider: ProviderName # g4f provider class name model: provider-model # model name passed to that provider condition: expression # optional – see below - provider: ... # fallback provider (no condition always eligible) model: ...各字段的必填情况KeyRequired说明name必填客户端使用的模型名。providers必填有序的 provider 候选列表。provider必填g4f provider 类名如OpenaiAccount、PollinationsAI。model可选转发给该 provider 的模型名缺省时默认使用路由的name。condition可选布尔表达式控制该 provider 何时可用。客户端请求这个name时g4f 按providers列表顺序逐个尝试对每个候选先求值它的conditioncondition 缺省或求值为True时该 provider 可用求值为False时跳过它尝试列表中的下一个直到有一个成功。condition 表达式怎么写condition是一个在每次请求前求值的布尔表达式可以引用三类变量quota —— provider 的完整余额字典实现了get_quota()的 provider 会返回一个provider 专属格式的字典结果在内存中缓存 5 分钟TTL 可通过QuotaCache.ttl配置并在收到 429 响应时立即失效。用点号语法访问任意字段各 provider 的格式Providerget_quota()返回格式文档给出的 condition 示例PollinationsAI{balance: float}quota.balance 0Yupp{credits: {remaining: int, total: int}}quota.credits.remaining 100PuterJSAPI 返回的原始 metering JSONquota.total_requests 1000GeminiCLI{buckets: [...]}error_count 3GithubCopilotusage details dicterror_count 5字典里不存在的键解析为0.0不会抛错。balance —— 简写别名balance是quota.balance的简写保留用于向后兼容对返回{balance: float}的PollinationsAI最常用其他 provider 建议显式使用quota.*形式。error_count —— 最近一小时错误数该 provider 在最近1 小时内记录的错误次数超过 1 小时的错误自动清除。每次 provider 抛异常时计数器加 1。在 condition 里引用它可以避免反复重试一个正在连续失败的 provider。支持的运算符、!、andornot、括号()分组。文档给出的 condition 示例# PollinationsAI – uses quota.balance shorthand condition: balance 0 condition: balance 0 or error_count 3 # Yupp – provider-specific nested quota field condition: quota.credits.remaining 0 condition: quota.credits.remaining 0 or error_count 3 # Any provider – error-count-only conditions work universally condition: error_count 3 condition: error_count 0注意or的语义balance 0 or error_count 3表示余额大于 0或最近一小时错误少于 3 次时该 provider 可用——即余额耗尽但还没连续失败时仍会尝试这是文档示例采用的回退写法。一个完整的路由文件示例以下是文档给出的完整config.yaml对应仓库内 etc/examples/config.yaml定义了三个路由分别演示balance简写、Yupp 嵌套 quota 字段、以及纯error_count条件# ~/.config/g4f/cookies/config.yaml models: # PollinationsAI: use quota.balance shorthand - name: my-gpt4 providers: - provider: OpenaiAccount model: gpt-4o condition: balance 0 or error_count 3 - provider: PollinationsAI model: openai-large # Yupp: provider-specific nested quota field - name: yupp-chat providers: - provider: Yupp model: gpt-4o condition: quota.credits.remaining 0 or error_count 3 - provider: PollinationsAI model: openai-large # Universal: error-count-only condition works for any provider - name: llama-fast providers: - provider: Groq model: llama-3.3-70b condition: error_count 3 - provider: DeepInfra model: meta-llama/Llama-3.3-70B-Instructmy-gpt4的行为是OpenaiAccount满足balance 0 or error_count 3时优先使用它转发模型gpt-4o不满足时跳过落到无 condition 的PollinationsAI无 condition 即永远可用转发模型openai-large。请求路由模型客户端直接请求name定义的模型名即可。文档给出的 Python 客户端示例from g4f.client import Client client Client() response client.chat.completions.create( modelmy-gpt4, # defined in config.yaml messages[{role: user, content: Hello!}], ) print(response.choices[0].message.content)如果走 API server按 README 的启动方式运行后请求对应的接口python -m g4f --port 8080 --debugg4f 在 server 启动读取 cookie 目录时就会加载同目录下的config.yaml。用 Python API 验证路由是否生效路由机制暴露在g4f.providers.config_provider模块中文档给出的验证方式from g4f.providers.config_provider import ( RouterConfig, # load / query routes QuotaCache, # inspect / invalidate quota cache ErrorCounter, # inspect / reset error counters evaluate_condition, # evaluate a condition string directly ) # 从自定义路径重新加载路由/path/to/config.yaml 替换为你实际的路径 RouterConfig.load(/path/to/config.yaml) # 检查路由是否存在返回 ModelRouteConfig 或 None route RouterConfig.get(my-gpt4) # 手动失效某个 provider 的 quota 缓存例如发现 429 后 QuotaCache.invalidate(OpenaiAccount) # 查看某个 provider 当前的错误计数 count ErrorCounter.get_count(OpenaiAccount) # 直接求值一个 condition 字符串PollinationsAI 风格 quota ok evaluate_condition(balance 0 or error_count 3, {balance: 0.0}, 2) # True上面evaluate_condition返回True是文档示例的结果余额为 0.0、错误计数为 2 时or的第二支error_count 3成立。文档还给了 Yupp 嵌套 quota 的示例ok evaluate_condition( quota.credits.remaining 0, {credits: {remaining: 500, total: 5000}}, 0, ) # True因此验证流程可以落地为RouterConfig.get(my-gpt4)不是None说明路由已加载用evaluate_condition拿真实的 quota 字典和ErrorCounter.get_count的结果求值判断当前候选是否会被跳过请求发出后若某 provider 返回 429确认QuotaCache中该 provider 的条目已被清除下次路由决策会重新取 quota。仓库内的单元测试 etc/unittest/config_provider.py 覆盖了这些行为可以作为预期行为对照QuotaCache的 set/get/过期/invalidate、ErrorCounter的 increment/get_count/1 小时窗口清除、condition 各类运算符组合、RouterConfig.load解析 YAML 等。排查与限制PyYAML 缺失g4f 记 warning 并跳过config.yaml加载表现为自定义模型名查不到。先pip install pyyaml。文件不存在不会抛异常路由表保持为空RouterConfig.get(...)返回None见 etc/unittest/config_provider.py 的test_load_missing_file。YAML 语法非法同样不抛异常只记录一条 error 日志路由表为空。condition 里引用未定义变量evaluate_condition会抛ValueError而 quota 字典里缺少的字段包括嵌套子键解析为0.0这是两者要区分的地方。所有候选都被跳过或 provider 类名不存在请求会失败单元测试中对应的断言是RuntimeError。429 处理provider 返回 HTTP 429 时该 provider 的 quota 缓存条目立即失效下一次路由决策会重新拉取 quota 再判断。缓存时间quota 值内存缓存 5 分钟QuotaCache.ttl可配置error_count统计窗口固定为最近 1 小时超时自动清除。写 condition 时要知道这两个时间尺度——余额变化最长延迟 5 分钟可见错误状态 1 小时后自动恢复。完成上述验证后RouterConfig.get(my-gpt4)返回非None、evaluate_condition按预期返回布尔值、客户端请求my-gpt4能拿到内容即说明自定义路由已经按condition条件、quota 余额与error_count回退的设定在工作。【免费下载链接】gpt4freeThe official gpt4free repository | various collection of powerful language models | opus 4.6 gpt 5.3 kimi 2.5 deepseek v3.2 gemini 3项目地址: https://gitcode.com/GitHub_Trending/gp/gpt4free创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考