news 2026/9/12 17:40:44

如何把 tinygrad LLM 服务的 OpenAI 兼容 API 接入聊天机器人并解析 tool call

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何把 tinygrad LLM 服务的 OpenAI 兼容 API 接入聊天机器人并解析 tool call

如何把 tinygrad LLM 服务的 OpenAI 兼容 API 接入聊天机器人并解析 tool call

【免费下载链接】tinygradYou like pytorch? You like micrograd? You love tinygrad! ❤️项目地址: https://gitcode.com/GitHub_Trending/tiny/tinygrad

tinygrad 自带一个 LLM 服务:用--serve启动后,它在/v1路径下提供 OpenAI 兼容 API(tinygrad/llm/serve.py)。你的聊天机器人代码不需要为 tinygrad 写专用客户端,直接用 OpenAI SDK 并把base_url指向这个服务即可;服务端负责渲染聊天模板、把模型输出中的 tool call 块解析并转换成 OpenAI 格式的tool_calls,你的机器人拿到后执行本地工具、再把结果回传,完成多轮工具循环。本文覆盖:启动服务、验证连通性、用 OpenAI SDK 发起流式/非流式请求、声明工具并解析tool_calls、以及回传工具结果的完整闭环。

准备条件

  • 已安装 tinygrad 的 Python 环境。
  • 已安装jinja2:服务会优先使用 GGUF 模型自带的 chat template(jinja2.Environment加载 tokenizer.chat_template),这是工具调用依赖的模板;未安装 jinja2 时服务端打印warning: jinja2 is not installed, the model's chat template is disabled,并回退到FallbackTemplate,该模板明确不支持 tool calling。
  • 已安装openai包(客户端侧)。test/null/test_llm_server.py 的集成测试就是直接from openai import OpenAI打这个服务。
  • 一个 GGUF 模型:内置模型名(llama3.2:1bllama3.2:3bqwen3:0.6b等,见 tinygrad/llm/cli.py 中的models字典),或本地 GGUF 文件路径。

启动 OpenAI 兼容服务

python3 -m tinygrad.llm --serve 8123 --model qwen3:0.6b

参数说明(见 cli.py):

  • --serve [PORT]:启动 OpenAI 兼容 API;带参数时为该端口,不带参数(只写--serve)默认 8000。
  • --model / -m:内置模型名或本地 GGUF 文件路径,默认取models字典第一个键(llama3.2:1b)。
  • --max_context:最大上下文长度,默认 4096。
  • --no_chat_template:跳过模型自带模板、强制使用 fallback 模板;需要工具调用时不要加。

服务启动时会打印使用的模型名、字节数、参数量与最大上下文,并执行 JIT 预热(serve 模式默认 warmup)。用浏览器直接访问http://localhost:8123会返回内置聊天页 chat.html,可以随手确认服务活着。

验证连通性:GET /v1/models

服务实现的端点有GET /v1/modelsPOST /v1/chat/completions,其他路径不处理(serve.py)。用curl做一次冒烟检查:

curl http://localhost:8123/v1/models

按 测试用例 的口径判断成功:状态码 200,响应 JSON 中object"list"data[0]["object"]"model"data[0]["id"]是本服务加载模型的名称。

接入 OpenAI 客户端

客户端只需把base_url指向服务的/v1api_key服务端不校验,测试中传的字符串是"test"(test_llm_server.py):

from openai import OpenAI client = OpenAI(base_url="http://localhost:8123/v1", api_key="test")

非流式请求

resp = client.chat.completions.create( model="qwen3:0.6b", # 用 /v1/models 返回的 id messages=[ {"role": "system", "content": "You are helpful."}, {"role": "user", "content": "Hello"}, {"role": "assistant", "content": "Hi!"}, {"role": "user", "content": "How are you?"}, ], stream=False, ) print(resp.object, resp.choices[0].finish_reason)

按 测试 的口径:resp.idchatcmpl-开头,resp.object"chat.completion"choices[0].message.role"assistant"finish_reason"stop"usageprompt_tokens/completion_tokens

流式请求

stream = client.chat.completions.create( model="qwen3:0.6b", messages=[{"role": "user", "content": "Hello"}], stream=True, stream_options={"include_usage": True}, ) for chunk in stream: if chunk.choices: delta = chunk.choices[0].delta if delta.content: print(delta.content, end="") if chunk.usage: print("\n", chunk.usage)

流式响应按 OpenAI 的chat.completion.chunk下发:首个 chunk 的delta.role"assistant",最后一个带finish_reason(test)。stream_options={"include_usage": True}时,末尾会多一个choices为空、带usage的 chunk(服务端仅在stream_options.include_usage为真或请求非流式时附带 usage,见 serve.py)。

正文按delta.content分片;如果模型输出以think块开头,块内文本会走delta.reasoning_content字段(StreamRouter),正文与推理内容可以分开渲染。

声明工具并解析 tool call

服务端如何解析 tool call

请求体里带tools字段时,服务会把它交给 chat template 渲染(serve.py)。模型输出里的工具调用块由 parse_tool_call 解析,支持两种格式:

  • JSON 格式(hermes 风格):{"name": ..., "arguments": {...}}arguments缺失时会读parameters字段;
  • XML 格式:<function=name><parameter=key>value</parameter>...</function>,参数值以合法 JSON 开头时按 JSON 解析,否则保留为字符串。

流式输出中,`

【免费下载链接】tinygradYou like pytorch? You like micrograd? You love tinygrad! ❤️项目地址: https://gitcode.com/GitHub_Trending/tiny/tinygrad

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/12 17:36:31

Arm-2D静态工程落地全链路:从源码精读到量产约束

1. 项目概述&#xff1a;为什么一个静态工程评测能决定嵌入式GUI项目的生死线Arm-2D不是个新名字&#xff0c;但真正把它当“生产级图形加速引擎”来用的团队&#xff0c;十有八九在项目中期踩过坑——UI卡顿、内存爆掉、编译失败、调试器连不上、甚至烧录后黑屏。我见过最典型…

作者头像 李华
网站建设 2026/9/12 17:34:52

MSO算法在机器人路径规划中的优化与应用

1. 项目概述&#xff1a;MSO算法在路径规划中的创新应用二维栅格地图路径规划是机器人导航和智能物流领域的核心问题&#xff0c;传统算法如A*和Dijkstra在动态复杂环境中表现欠佳。海市蜃楼搜索优化(MSO)算法作为一种新兴的元启发式方法&#xff0c;通过模拟光线折射现象实现全…

作者头像 李华
网站建设 2026/9/12 17:34:06

Flexoo印刷天线:柔性物联网设备的天线设计与集成实战解析

去年夏天我们做一款智能手环的改版&#xff0c;结构团队把整机厚度从9.5毫米硬生生压到了7毫米&#xff0c;天线部分首当其冲被砍。当时项目组里传着一句话&#xff1a;“只要天线还活着&#xff0c;这产品就还没黄。”传统方案一个个试过来——陶瓷贴片碎了两次&#xff0c;FP…

作者头像 李华
网站建设 2026/9/12 17:32:47

OpenClaw+优云智算+Coding Plan:构建AI Agent自动化工作流

1. 这个自动化框架到底要解决什么问题 先说结论&#xff1a;OpenClaw、优云智算、Coding Plan这三样东西放在一起&#xff0c;拼出来的是一条“从想法到成品”的无人值守流水线。 我去年有很长一段时间陷入一个特别拧巴的循环&#xff1a;脑子里冒出一个选题&#xff0c;先在文…

作者头像 李华