ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

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

如何把 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/tinygradtinygrad 自带一个 LLM 服务用--serve启动后它在/v1路径下提供 OpenAI 兼容 APItinygrad/llm/serve.py。你的聊天机器人代码不需要为 tinygrad 写专用客户端直接用 OpenAI SDK 并把base_url指向这个服务即可服务端负责渲染聊天模板、把模型输出中的 tool call 块解析并转换成 OpenAI 格式的tool_calls你的机器人拿到后执行本地工具、再把结果回传完成多轮工具循环。本文覆盖启动服务、验证连通性、用 OpenAI SDK 发起流式/非流式请求、声明工具并解析tool_calls、以及回传工具结果的完整闭环。准备条件已安装 tinygrad 的 Python 环境。已安装jinja2服务会优先使用 GGUF 模型自带的 chat templatejinja2.Environment加载 tokenizer.chat_template这是工具调用依赖的模板未安装 jinja2 时服务端打印warning: jinja2 is not installed, the models chat template is disabled并回退到FallbackTemplate该模板明确不支持 tool calling。已安装openai包客户端侧。test/null/test_llm_server.py 的集成测试就是直接from openai import OpenAI打这个服务。一个 GGUF 模型内置模型名llama3.2:1b、llama3.2:3b、qwen3: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/models和POST /v1/chat/completions其他路径不处理serve.py。用curl做一次冒烟检查curl http://localhost:8123/v1/models按 测试用例 的口径判断成功状态码 200响应 JSON 中object为listdata[0][object]为modeldata[0][id]是本服务加载模型的名称。接入 OpenAI 客户端客户端只需把base_url指向服务的/v1api_key服务端不校验测试中传的字符串是testtest_llm_server.pyfrom openai import OpenAI client OpenAI(base_urlhttp://localhost:8123/v1, api_keytest)非流式请求resp client.chat.completions.create( modelqwen3: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?}, ], streamFalse, ) print(resp.object, resp.choices[0].finish_reason)按 测试 的口径resp.id以chatcmpl-开头resp.object为chat.completionchoices[0].message.role为assistantfinish_reason为stopusage含prompt_tokens/completion_tokens。流式请求stream client.chat.completions.create( modelqwen3:0.6b, messages[{role: user, content: Hello}], streamTrue, 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_reasontest。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 格式functionnameparameterkeyvalue/parameter.../function参数值以合法 JSON 开头时按 JSON 解析否则保留为字符串。流式输出中【免费下载链接】tinygradYou like pytorch? You like micrograd? You love tinygrad! ❤️项目地址: https://gitcode.com/GitHub_Trending/tiny/tinygrad创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表