Files
PolyLoop/.env.example
T
iomgaa 94b9923d8f chore: 加 .env.example,只列 e2e 那一层必需的键
.gitignore 里早就写好了 !.env.example 的例外,文件一直没建。只列 e2e 跑起来必需的最小集,
每个键什么意思、还有哪些可选键,权威在 PolyGateway 自己的模板里,不在本仓库复述第二遍。

两处不是照抄网关默认值的:缓存必须 none——开着的话第二次跑同样的提示词直接命中缓存返回,
而 e2e 唯一要证明的就是「真的打出去过一次」;e2e 开关和密钥分成两件事——填好密钥不等于
同意花钱,没这道闸的话有人随手跑一次全套测试就会产生真实账单。

模板填完之后实测装配得起来:GatewaySettings.from_env() 与 GatewayClient.from_env() 都过,
适配器的 parameters() 读得出源名、供应商与模型名。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-10 23:02:20 -04:00

65 lines
3.6 KiB
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# PolyLoop 的环境配置模板。复制成 .env 再填,.env 不入库(.gitignore 已经挡了)。
#
# 只有 tests/e2e/ 那一层需要它——那是唯一会打真实模型网关的测试层,其余三层
# unit / integration / contract)不读任何环境变量,`make ci` 也不读。
#
# 本库自己一个环境变量都不读。模型调用一律走 PolyGatewayCLAUDE.md §1.5),
# 下面除了第一节那个开关之外,全部是 PolyGateway 的装配入口消费的键。
#
# **这里只列 e2e 跑起来必需的那几个。** 每个键什么意思、还有哪些可选键、多源怎么配,
# 权威是 PolyGateway 自己的 .env.example——那是它的参数,不在本仓库复述第二遍
# (复述规则见 CLAUDE.md §0)。
#
# 两条读取规则,和 PolyGateway 一致:读的是**当前工作目录**下的 .env,所以测试要从仓库
# 根跑;shell 里导出的同名环境变量**优先于** .env 里的值,临时换一个模型不必改文件。
# ── 一、e2e 的开关 ────────────────────────────────────────────────
# 不是 1 的话,tests/e2e/ 整层跳过。
#
# **填好密钥不等于同意花钱**,所以它和密钥分成两件事。没有这道开关的话,任何人
# 配好 .env 之后随手跑一次全套测试,就会打出去一串真实调用并产生真实账单,而他
# 本来只是想看看测试过不过。
POLYLOOP_E2E=0
# ── 二、模型源,至少一个 ──────────────────────────────────────────
# 键的形状是 {SCOPE}__{PROVIDER}__{序号}__{字段}。**本库的 e2e 固定用 LLM 这个
# scope**,不做成可配——多一个旋钮就多一处「这次跑的到底是哪套配置」要对照两个
# 地方才答得出来。
#
# PROVIDER 那一段必须是 PolyGateway 注册表里的键(qwen / deepseek / openai …),
# 而且它是键名的一部分:换供应商要把下面四行的 QWEN 一起改掉。
#
# 挑一个便宜的小模型。e2e 验的是「这条链路通不通」——提示词拼对了没有、工具
# schema 模型认不认、回复能不能被解释、轨迹落盘对不对——不是模型答得好不好。
LLM__QWEN__1__BASE_URL=
LLM__QWEN__1__API_KEY=
LLM__QWEN__1__MODEL=
LLM__QWEN__1__TIMEOUT_S=120
# ── 三、治理参数 ──────────────────────────────────────────────────
# 这几个 PolyGateway 一律要求显式声明、不给默认值,缺了直接报错。它们是「失败了
# 怎么办」,不影响模型看见什么,所以照最常见的值填就行。
LLM__RETRY__MAX_ATTEMPTS=3
LLM__RETRY__BACKOFF_BASE_S=2.0
LLM__RETRY__BACKOFF_MAX_S=30.0
LLM__BREAKER__FAIL_THRESHOLD=5
LLM__BREAKER__COOLDOWN_S=60
# ── 四、装配选择 ──────────────────────────────────────────────────
# **缓存必须是 none。** 开着的话,第二次跑同样的提示词会直接命中缓存返回,而
# e2e 唯一要证明的就是「真的打出去过一次」——那次运行会全绿地什么都没验,而且
# 从外部看不出来它和真的打过一次有什么区别。
PGW_CACHE_BACKEND=none
# 遥测也是 none。开 sqlite 或 postgres 要另外建库,而本库不管遥测(CLAUDE.md §1.5);
# 真要看用量,那是在网关自己的账目里查,按调用标识连表。
PGW_TELEMETRY_BACKEND=none