#14771·langflow

建议: AnyLLM 组件 — 一个 OpenAI 兼容的捆绑包,包含 24 个以上的中文和国际模型,具有动态模型发现功能

作者: JetragonRider创建于 2026年8月26日更新于 2026年9月11日
标签enhancement

Hi langflow 团队, 自从基于 Python 的组件系统推出以来, 我一直在使用 langflow 构建流程, 而模型提供者面板 + 套件生态系统确实是可视化流程领域中最清晰的"自带 LLM"故事。 然而, 我总是遇到一个问题(第 6505 问题表明我并不孤单): 跨提供者访问模型比需要的更加分散。 今天, 要在同一个流程中使用 DeepSeek、GPT-5 和 Gemini, 您需要: 在模型提供者面板中注册三个独立的提供者密钥(每个提供者只有一个密钥) 使用不同的组件(OpenAI 组件、DeepSeek 套件、Gemini 组件) – 每个组件都有自己的参数表面 提前知道"OpenAI 兼容"提供者是否存在 – 第 6505 问题表明用户在发现它已经存在之前, 就要求具备这种功能了。 我希望提议一个 AnyLLM 套件, 将其合并为一个组件。 AnyLLM 是一个统一的 OpenAI 兼容 API 网关 – 一个 API 密钥、一个基础 URL、来自防火墙两侧的 24 个领先模型: 中文: DeepSeek V4 Flash/Pro、Qwen3.7-Plus、GLM-5.2/5.1(最多 2M 上下文)、Kimi K2.5/K2.6、MiniMax M3/M2.7、Xiaomi MiMo v2.5 Pro/v2 Pro 国际: GPT-5.6 Luna、GPT-5.4 Mini/Nano、Gemini 3.5 Flash(多模式) 透明定价, 无加价; 支持国际卡和加密货币 – 因此 langflow 用户在没有中国电话号码或支付宝的情况下也可以访问 DeepSeek / Qwen / GLM / Kimi, 也无需单独使用 OpenAI 或 Google 帐户。 我将贡献: 遵循现有 DeepSeek 套件模式的一个套件(api_base + api_key 参数, 默认指向网关), 其中: model_name 为一个动态从 GET /v1/models 中填充的下拉框 – Ollama 组件已经证明这种模式在 langflow 中运行非常好, 这意味着模型列表始终保持同步, 网关添加模型时, 无需维护。 语言模型输出类型(如 DeepSeek 套件), 以便其直接插入 Agent / Smart Transform 组件中, 作为 LLM 驱动。 JSON 模式、流式传输和 max_tokens / temperature / model_kwargs 参数, 符合现有组件惯例。 为"我偏爱的提供者或模型未列出"部分的语言模型文档编写一个 PR – 还展示了零代码路径: 将 OpenAI 组件的基础 URL(或 OpenAI 兼容提供者) 指向 AnyLLM, 然后输入任何模型 ID, 适用于喜欢使用内置组件而不是套件的用户。 在开启 PR 之前, 有一些问题: 套件 vs. 模型提供者预设 – 一个套件组件是否是合适的形式, 还是您更喜欢在模型提供者面板中将 AnyLLM 列为预设(一键式操作, 将基础 URL 和密钥字段预先填充)? 我很乐意做任何一种; 套件为我们提供了动态模型选择器, 预设则为现有用户提供了更低的阻力。 动态模型发现 – Ollama 组件自动获取其模型列表; 在组件加载时调用 GET /v1/models 是否可接受(远程网关缓存)? 如果是, 请在 PR 中提供相关说明。 如果不是, 请在 PR 中提供相关说明。 缓存策略: 使用组件级缓存, 而不是全局缓存。 如果使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局缓存, 请在 PR 中提供相关说明。 如果不使用全局

内容来源: langflow-ai/langflow