零成本搭建个人LLM路由网关

简单总结一下我是如何使用各家的大语言模型api的,之前很长一段时间使用newapi聚合各家免费的api。但是现在,主流厂商基本都已经支持openai格式调用,而且对于个人来讲,newapi很多功能都是冗余的,所以想自己写一个api负载均衡满足日常使用。 llmio 我将这个项目命名为llmio,后端由go语言实现,前端由qwen3-code + vibe coding实现,只支持openai格式。项目十分简单,通过单独设置model与provider,一个model对应n个provider。 每次接收到请求根据不同provider的权重随机选择一个,替换请求体中的原始model字段为provider设置的model,并使用go标准库的io.TeeReader(body, pw)将响应body流同时转发给客户端与日志记录。 最高效实现负载均衡代理的同时,也方便开发者查看每次请求的各种数据。 部署 项目使用github action自动构建了docker镜像,最新版为0.2.3,可以使用docker compose一键部署,数据使用sqllite保存在/app/db文件夹下的llmio.db文件中,方便一键迁移。内存占用在20m左右,十分轻量。 1services: 2 llmio: 3 image: atopos31/llmio:latest 4 ports: 5 - 7070:7070 6 volumes: 7 - ./db:/app/db 8 environment: 9 - GIN_MODE=release 10 - TOKEN=<YOUR_TOKEN> 当然,如果你没有云服务器,推荐使用sealos部署,注册就送10元额度,每天仅需0.08元。 注意,环境变量中的TOKEN同时负责api以及后台管理的鉴权。 ...

August 10, 2025

React Agent与MCP

2025年的今天,大语言模型的能力早已不再限于chatbot(只会聊天),各家模型都在文本预测的基础上扩展LLM的能力,例如Structured Outputs(结构化输出),Function calling(函数调用),MCP(模型上下文协议),同时,有人提出一种结合LLM思考与行动的协同机制-React。 React Agent 通过让LLM循环执行 推理(Reasoning)->行动(Action)->观察(Observation) 来完成任务。 本质上,可以用下面这段最小代码解释: 1for { 2 response := callLLM(context) 3 if response.ToolCalls { 4 context = executeTools(response.ToolCalls) 5 } 6 if response.Finished { return } 7} ReAct: Synergizing Reasoning and Acting in Language Models eino-React实现 Function calling LLM自身训练的结构化输出能力以及通过openai-api服务实现,让LLM能够按照指定格式输出json格式的数据,来表明自己需要去使用什么函数,参数是什么,同时支持流式生成。 例如: 之后你应该在输入的messages里面加入除user,assistant的另一个角色,名为tool,tool的content内容为函数调用结果,至于函数是如何调用,LLM和openai-api服务并不参与,由开发者执行。此时再次对话,LLM会根据上下文中函数调用结果生成回答。 openai-function-calling MCP MCP (Model Context Protocol)是一种开放协议,用于标准化应用程序如何向大型语言模型(LLMs)提供上下文。可以将 MCP 想象为 AI 应用的 typec 接口。正如 typec 提供了一种标准化的方式将您的设备连接到各种外设和配件,MCP 也提供了一种标准化的方式,将 AI 模型连接到不同的数据源和工具。 ...

July 22, 2025