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>
This commit is contained in:
@@ -0,0 +1,64 @@
|
|||||||
|
# PolyLoop 的环境配置模板。复制成 .env 再填,.env 不入库(.gitignore 已经挡了)。
|
||||||
|
#
|
||||||
|
# 只有 tests/e2e/ 那一层需要它——那是唯一会打真实模型网关的测试层,其余三层
|
||||||
|
# (unit / integration / contract)不读任何环境变量,`make ci` 也不读。
|
||||||
|
#
|
||||||
|
# 本库自己一个环境变量都不读。模型调用一律走 PolyGateway(CLAUDE.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
|
||||||
Reference in New Issue
Block a user