返回资讯中心
外部精选
软件工程
#开发者实时流

Aiport:面向频繁切换模型的开发者的自改进本地LLM网关

来源标题:Aiport: A self-improving local LLM gateway for the erratic vibe coder

Aiport 是一个运行在本机(仅回环)的 Go 程序,位于应用、编程代理与各家模型提供商之间,充当统一网关。它让每个应用只需配置一个 OpenAI 或 Anthropic 风格客户端,提供商密钥集中存放在权限为 0600 的私有环境变量文件中,各应用与代理使用独立可撤销的 token。该工具面向在多仓库、多模型间频繁切换的开发者。

Hacker News 最新harelix2026/11/8 · 5 天前16 分钟阅读

以下正文由 AI 翻译自 Hacker News 最新(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。

一个为随性编码者打造、能自我改进的本地 LLM 网关。

快速开始 · 手册 · 连接应用 · 配置 · 贡献

如果你是那种随性的 vibe 编码者,你一定熟悉这样的一天:一个仓库里跑着 Claude Code,另一个仓库里跑着 Codex,Ollama 或 llama.cpp 上挂着某个模型,Bedrock、Anthropic、OpenAI 和 Meta 上还有额度。你按任务切换模型,有时任务做到一半就换,一小时内要在几个项目之间来回跳好几次。你构建的应用也要调用这些模型,于是每个应用都得把同样的提供商重新接一遍。你看不到哪个应用调用了什么,等出了问题才发现。

aiport 是一个运行在你机器上的 Go 程序(仅监听 loopback),它夹在你的应用、编码代理和各个提供商之间。

每个应用一个客户端。只需一个 OpenAI 风格或 Anthropic 风格的客户端,指向 aiport,而不用为每个提供商分别写接入代码。

密钥留在 aiport 里。提供商密钥保存在私有的 env 文件中(权限 0600,纯文本,绝不写入 YAML 配置)。每个应用和代理都有各自可吊销的 token。应用的编码代理负责连接它,你审批一个短配对码即可。

代理拿不到你的密钥。aiport agent claude 或 aiport agent codex 会带着自己的 token 启动代理,因此代理永远看不到你的提供商密钥。

按需命名。应用可以指定模型名,可以要求 fast、balanced 或 best,也可以指定任务和投入程度。

会随时间自我改进的部分

aiport 观察你的应用如何使用模型,并提出变更建议。除非你主动开启,否则任何变更都不会自动应用,而且每次变更都可以回滚。

原生格式。请求以各提供商的原生格式透传,不做翻译,以避免工具调用和流式响应在转换中失真。代价是,一个客户端只能访问与它使用相同协议的提供商。

按设计仅面向单用户。没有团队,也没有预算。LiteLLM、Portkey 或 Bifrost 更适合这类需求。

工作原理

flowchart LR A["Applications<br/>and coding agents"] -- "own aiport token" --> G(("aiport")) G -- "provider key added" --> P["Providers<br/>OpenAI · Anthropic · Bedrock · Meta<br/>Ollama · llama.cpp"] G -. "Issues and Suggestions" .-> O["You, in the dashboard"] O -. "approve, revert" .-> G Loading

应用用自己的 token 调用 aiport。aiport 把每次调用路由到你选定的提供商,保留元数据,并把反复出现的失败转化为 Issue——你可以在仪表盘里修复,也可以交给该应用的编码代理处理。

你需要 Go 1.27+(brew install go,或访问 go.dev/dl)。依赖已 vendored,仪表盘已预构建,因此不会下载其他东西。

git clone https://github.com/harelix/aiport && cd aiport make build # bin/aiport,含仪表盘 ./bin/aiport init # 选择提供商和编码代理;写入 aiport.yaml ./bin/aiport serve # 打印仪表盘地址和管理 token

或者不克隆仓库,直接安装二进制:go install github.com/harelix/aiport/cmd/aiport@latest(会装到 $(go env GOPATH)/bin;然后运行 aiport init 和 aiport serve)。

打开 serve 打印出的仪表盘地址(默认 http://127.0.0.1:8787/;init --listen 可以另选,也可以用 aiport.localhost 代替),粘贴管理 token 并设置密码。在 Providers 页面粘贴你的提供商密钥,然后对每张卡片点 Check connection:它只会发一次免费的 GET /models 请求,不生成任何内容。本地提供商(Ollama、llama.cpp)需要你自己先启动。

连接一个应用。在 Integrate 页面,打开顶部的 Instructions,把它们复制给负责该应用的编码代理。它会把应用的 SDK 切换到 http://127.0.0.1:8787 并完成配对;你审批它显示的短码。应用的 token 会写入其仓库根目录下一个被 gitignore 的 .aiport 文件,应用和它的编码代理都会读取该文件;New token 用于替换丢失的 token,垃圾桶图标用于移除应用。详见 Connect。

通过 aiport 启动编码代理。./bin/aiport agent claude --model MODEL 或 ./bin/aiport agent codex --model MODEL(加 --dry-run 可先查看)。代理拿到自己的 token,永远拿不到你的提供商密钥。

对变更做决定。Issues、Suggestions 和 Change requests 会等在 Changes 里,只有需要你处理时才会显示徽标。每个 Change 都可以回滚。

手册覆盖了每一个页面。它也内置在仪表盘中:点击帮助按钮,或任意区块旁的 ⓘ。

init 会写入 aiport.yaml,以及一个私有的 aiport.yaml.env(权限 0600),用于存放本地 token 和你在仪表盘中粘贴的密钥。它从不覆盖已有文件,提供商密钥也绝不写入 YAML。

./bin/aiport init --provider openai,anthropic --agent codex,claude # 无交互提示 ./bin/aiport check # 校验配置 ./bin/aiport auth token # 再次打印管理 token

提供商预设:openai、anthropic、bedrock、meta、ollama、llamacpp。参见配置参考和 aiport.example.yaml。

调用只会发往你配置过的提供商,并使用该提供商的密钥。aiport 存储请求元数据(时间、应用、模型、状态、延迟),从不存储提示词或响应。

代理运行会在一个独立的 git worktree 中启动你已安装的编码代理(Claude Code、Codex 或 Gemini CLI),且只在你点击时启动。命令执行前会先征求你的同意,aiport 从不提交到你的分支、合并或推送。代理自身的设置可能允许超出 aiport 可见范围的操作:请先阅读「aiport 看不到什么」一文。

你添加的扩展会参与关于 Change requests 的决策。

发现漏洞?请按 SECURITY.md 所述私下报告,不要发在公开 issue 中。

限制

aiport 仍处于实验阶段。目前尚无任何提供商与编码代理的组合通过线上兼容性门禁。token 数量和成本未被计量。提供商必须使用调用它的客户端所用的协议,因为 aiport 不做翻译。Gemini 运行的模型调用不经过 aiport,Codex 运行则使用 Codex 自己的登录。目前还没有发布版本可下载;请从源码构建。

(原文较长,此处译出前 6000 字,完整内容请点「打开原文」。)

正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。

打开原文
去社区讨论 →