@@ -75,7 +75,7 @@ OLLAMA_API_BASE=http://localhost:11434
7575LITELLM_MODEL=ollama/qwen3:8b
7676```
7777
78- > ** 重要** :Ollama 必须使用 ` OLLAMA_API_BASE ` 配置,** 不要** 使用 ` OPENAI_BASE_URL ` ,否则系统会错误拼接 URL(如 404、` api/generate/api/show ` )。远程 Ollama 时,将 ` OLLAMA_API_BASE ` 设为实际地址(如 ` http://192.168.1.100:11434 ` )。当前依赖要求 LiteLLM ≥ 1.80.10(与 requirements.txt 一致)。
78+ > ** 重要** :Ollama 必须使用 ` OLLAMA_API_BASE ` 配置,** 不要** 使用 ` OPENAI_BASE_URL ` ,否则系统会错误拼接 URL(如 404、` api/generate/api/show ` )。远程 Ollama 时,将 ` OLLAMA_API_BASE ` 设为实际地址(如 ` http://192.168.1.100:11434 ` )。当前依赖约束为 ` litellm>= 1.80.10,!=1.82.7,!=1.82.8,<2.0.0 ` (与 requirements.txt 一致)。
7979
8080> ** 恭喜!小白读到这里就可以去运行程序了!**
8181> 想测测看通没通?在主目录打开命令行输入:` python test_env.py --llm `
@@ -98,18 +98,18 @@ LITELLM_MODEL=ollama/qwen3:8b
9898
9999- 预设里的 provider / Base URL / 示例模型只用于** 初始化表单** ;真正落盘时仍是你当前输入的 ` LLM_{CHANNEL}_PROTOCOL ` 、` LLM_{CHANNEL}_BASE_URL ` 、` LLM_{CHANNEL}_MODELS ` 、` LLM_{CHANNEL}_API_KEY(S) ` ,不会在后台偷偷改成别的 provider 名或 URL。
100100- 设置页的“获取模型”只对 ` OpenAI Compatible ` / ` DeepSeek ` 渠道调用 ` {base_url}/models ` ;“测试连接”默认只发一次最小聊天请求。可选的“运行时能力检测”必须由用户显式选择后触发,会额外发起 JSON / tools / stream / vision smoke 请求,结果仅代表当前账号、模型和 endpoint 的一次 best-effort 检测。上述检测返回的 ` stage / error_code / details / latency_ms / capability_results ` 仅用于结构化诊断提示,** 不会写回** ` .env ` ,也不会阻止保存。
101- - 运行时能力检测会产生真实 LLM 请求,可能带来 token / 图像输入费用、RPM/TPM 限流、余额不足或超时。检测失败可能来自账号权限、模型未开通、endpoint 区域、余额、服务商兼容层或 LiteLLM 转换路径,不等于该 provider 全局不支持对应能力。P3 未对所有真实 provider 做在线 smoke;兼容依据来自当前依赖窗口 ` litellm>=1.80.10,< 1.82.7 ` 下的 LiteLLM ` completion() ` / OpenAI I/O format / streaming / exception mapping,以及 OpenAI Chat Completions 的 JSON mode、tool calling、streaming 和 vision input 形状。
101+ - 运行时能力检测会产生真实 LLM 请求,可能带来 token / 图像输入费用、RPM/TPM 限流、余额不足或超时。检测失败可能来自账号权限、模型未开通、endpoint 区域、余额、服务商兼容层或 LiteLLM 转换路径,不等于该 provider 全局不支持对应能力。P3 未对所有真实 provider 做在线 smoke;兼容依据来自当前依赖约束 ` litellm>=1.80.10,!= 1.82.7,!=1.82.8,<2.0.0 ` 下的 LiteLLM ` completion() ` / OpenAI I/O format / streaming / exception mapping,以及 OpenAI Chat Completions 的 JSON mode、tool calling、streaming 和 vision input 形状。
102102- 相关外部来源:LiteLLM Python SDK / OpenAI I/O format / streaming / exception mapping:< https://docs.litellm.ai/ > ;LiteLLM OpenAI-compatible 路由:< https://docs.litellm.ai/docs/providers/openai_compatible > ;OpenAI Chat Completions:< https://platform.openai.com/docs/api-reference/chat/create > ;JSON mode:< https://platform.openai.com/docs/guides/structured-outputs?api-mode=chat > ;tool calling:< https://platform.openai.com/docs/guides/function-calling?api-mode=chat > ;streaming:< https://platform.openai.com/docs/guides/streaming-responses?api-mode=chat > ;vision input:< https://platform.openai.com/docs/guides/images-vision?api-mode=chat > 。
103103- 保存渠道时,只会更新这次提交的 key;不会因为切换渠道模式而静默迁移整个旧配置。唯一会被** 同步清理** 的是运行时模型引用:如果 ` LITELLM_MODEL ` 、` AGENT_LITELLM_MODEL ` 、` VISION_MODEL ` 或 ` LITELLM_FALLBACK_MODELS ` 指向了当前已启用渠道里已经不存在的模型,设置页会在保存前把这些失效引用清空/移除,避免运行时继续指向无效模型;即使当前启用渠道没有任何可选模型,也会清理缺少 legacy Key 支撑的托管 provider 旧值。` cohere/* ` 、` google/* ` 、` xai/* ` 这类直连模型仅用于说明历史 ` direct-env ` 兼容保留语义,不等于可用性承诺,是否可用请按各厂商官方模型/API 文档再做实际验证。
104104- 后端一致性依据:配置校验链路在 ` SystemConfigService._validate_llm_runtime_selection ` (` src/services/system_config_service.py ` )中通过 ` _uses_direct_env_provider ` (` src/config.py ` )判断运行时来源;当前仅 ` gemini ` 、` vertex_ai ` 、` anthropic ` 、` openai ` 、` deepseek ` 属于托管 key provider,` cohere ` 、` google ` 、` xai ` 不在该白名单中,因此会保留为直连模型。
105105- 回退方式也保持最小:把对应渠道模型列表改回去后重新选择主模型 / fallback,或直接用桌面端导出备份 / 手动 ` .env ` 还原之前的 ` LLM_* ` 、` LITELLM_MODEL ` 、` AGENT_LITELLM_MODEL ` 、` VISION_MODEL ` 、` LLM_TEMPERATURE ` 即可,不需要额外跑迁移脚本。
106- - 当前仓库对此链路的依赖窗口是 ` litellm>=1.80.10,< 1.82.7 ` (见 ` requirements.txt ` );回归覆盖包括 ` tests/test_system_config_service.py ` 、` tests/test_system_config_api.py ` 和 ` apps/dsa-web/src/components/settings/__tests__/LLMChannelEditor.test.tsx ` 。
106+ - 当前仓库对此链路的依赖约束是 ` litellm>=1.80.10,!= 1.82.7,!=1.82.8,<2.0.0 ` (见 ` requirements.txt ` );回归覆盖包括 ` tests/test_system_config_service.py ` 、` tests/test_system_config_api.py ` 和 ` apps/dsa-web/src/components/settings/__tests__/LLMChannelEditor.test.tsx ` 。
107107
108- > ** 外部 provider 示例模型说明** :` cohere/* ` 、` google/* ` 、` xai/* ` 等 provider 前缀值仅用于说明当前保存清理语义,** 不代表该窗口内的逐型号可用性保证 ** 。文档或测试中的具体模型名都是配置保留行为样例,不是生产推荐;实际可用性请以对应官方模型文档为准,并结合仓库依赖窗口 ` litellm>=1.80.10,< 1.82.7 ` 复核。
108+ > ** 外部 provider 示例模型说明** :` cohere/* ` 、` google/* ` 、` xai/* ` 等 provider 前缀值仅用于说明当前保存清理语义,** 不代表该依赖约束内的逐型号可用性保证 ** 。文档或测试中的具体模型名都是配置保留行为样例,不是生产推荐;实际可用性请以对应官方模型文档为准,并结合仓库依赖约束 ` litellm>=1.80.10,!= 1.82.7,!=1.82.8,<2.0.0 ` 复核。
109109
110110### 回退与兼容性证据
111111
112- - 兼容窗口与静默清理范围 :在 ` litellm>=1.80.10,< 1.82.7 ` 时 ,保存仅清理失效的 runtime 模型引用(` LITELLM_MODEL ` 、` AGENT_LITELLM_MODEL ` 、` VISION_MODEL ` 、` LITELLM_FALLBACK_MODELS ` ),` cohere/* ` 、` google/* ` 、` xai/* ` 等非渠道直连模型会被保留。
112+ - 依赖约束与静默清理范围 :在 ` litellm>=1.80.10,!= 1.82.7,!=1.82.8,<2.0.0 ` 下 ,保存仅清理失效的 runtime 模型引用(` LITELLM_MODEL ` 、` AGENT_LITELLM_MODEL ` 、` VISION_MODEL ` 、` LITELLM_FALLBACK_MODELS ` ),` cohere/* ` 、` google/* ` 、` xai/* ` 等非渠道直连模型会被保留。
113113- 回退方式:可直接用桌面端导出备份后通过 ` POST /api/v1/system/config/import ` 恢复;也可手动把 ` .env ` 中历史 ` LITELLM_* / AGENT_LITELLM_MODEL / VISION_MODEL / LLM_TEMPERATURE ` 回填后重启生效。
114114- 回退回归证据:` tests/test_system_config_service.py::test_import_desktop_env_restores_runtime_models_after_cleanup ` 覆盖“清理后用桌面导出备份恢复 runtime 引用”。
115115- 直连 provider 回归证据:` tests/test_system_config_service.py::SystemConfigServiceTestCase::test_validate_accepts_minimax_model_as_direct_env_provider ` 、` test_validate_accepts_cohere_model_as_direct_env_provider ` 、` test_validate_accepts_google_model_as_direct_env_provider ` 、` test_validate_accepts_xai_model_as_direct_env_provider ` 覆盖直连 provider 保留语义。
@@ -196,7 +196,7 @@ LITELLM_MODEL=ollama/qwen3:8b
196196- Moonshot 官方说明 Kimi API 兼容 OpenAI 接口,Base URL 使用 ` https://api.moonshot.ai/v1 ` :< https://platform.kimi.ai/docs/guide/kimi-k2-6-quickstart >
197197- LiteLLM 官方要求 OpenAI Compatible 渠道模型名使用 ` openai/ ` 前缀:< https://docs.litellm.ai/docs/providers/openai_compatible >
198198- Moonshot 官方兼容性文档区分两种固定值:** thinking 模式固定 ` 1.0 ` ,non-thinking 模式固定 ` 0.6 ` ** ;传其它值会被接口拒绝:< https://platform.moonshot.ai/docs/guide/compatibility#parameters-differences-in-request-body >
199- - 当前仓库的运行时依赖窗口是 ` litellm>=1.80.10,< 1.82.7 ` (见 ` requirements.txt ` );本次兼容逻辑按该范围回归验证了主分析 、大盘复盘、Agent 直连 LiteLLM,以及系统设置页的渠道连通性测试。
199+ - 当前仓库的运行时依赖约束是 ` litellm>=1.80.10,!= 1.82.7,!=1.82.8,<2.0.0 ` (见 ` requirements.txt ` );本次兼容逻辑按该约束回归验证了主分析 、大盘复盘、Agent 直连 LiteLLM,以及系统设置页的渠道连通性测试。
200200- 因此本项目会在请求发出前按** 实际请求模式** 归一化 ` kimi-k2.6 ` 及其 ` kimi-k2.6-* ` 变体:默认 / thinking 路径使用 ` temperature=1.0 ` ;如果你的 LiteLLM YAML 路由别名里显式写了 ` litellm_params.extra_body.thinking.type: disabled ` (或等价 non-thinking 配置),则自动切到 ` temperature=0.6 ` 。你在 ` .env ` 或 Web 设置里保存的 ` LLM_TEMPERATURE ` 不会被改写。
201201- ` SystemConfigService ` 在 Web 设置保存 / 桌面端 ` .env ` 导入时只更新你提交的 key,不会因为切到 Kimi 静默清空、迁移或重写已有 ` LLM_TEMPERATURE ` ;渠道测试请求里临时使用的 ` 1.0/0.6 ` 也不会回写到配置文件。
202202- 非 Kimi 主模型、非 Kimi fallback 以及切回普通模型后的请求,仍继续使用你配置的温度;也就是说旧配置无需迁移,切换模型即可自动恢复原行为。
@@ -205,7 +205,7 @@ LITELLM_MODEL=ollama/qwen3:8b
205205
206206### 兼容性与回退复核清单(按 PR 审核口径)
207207
208- - 运行时依赖窗口 :` litellm>=1.80.10,< 1.82.7 ` (与 ` requirements.txt ` 一致)。
208+ - 运行时依赖约束 :` litellm>=1.80.10,!= 1.82.7,!=1.82.8,<2.0.0 ` (与 ` requirements.txt ` 一致)。
209209- 回归验证入口:
210210 - 渠道模型发现与连接:` tests/test_llm_channel_config.py `
211211 - 运行时源清理与恢复(含桌面导出备份链路):` tests/test_system_config_service.py `
0 commit comments