0.8B 模型能不能在本地可靠调用工具?BotPsy 值得实测的地方,不是它能不能聊几句,而是能否把“帮我算一下”变成格式正确、参数可用的函数调用,并在工具返回结果后继续完成任务。答案是:适合从低风险、边界清楚的流程开始验证,但不能把模型输出直接当成已执行的操作。
BotPsy 基于 Qwen3.5-0.8B,针对函数调用和多步智能体任务进行训练。官方资料介绍了完整精度权重和供 llama.cpp 使用的 GGUF 版本,定位是处理低到中等难度的工具任务。它负责根据用户请求和应用提供的工具,生成调用建议;工具接入、权限检查、执行与结果核验,仍由你的程序负责。
准备本地运行环境
先选一个能加载模型、并支持工具调用模板的推理后端。本文用 OpenAI 兼容接口做测试:模型服务运行在本机,Python 脚本通过接口发送请求。这样可以把推理后端和工具执行逻辑分开,后续更换量化版本时,测试代码基本不用改。
准备工作包括:
- 下载 BotPsy 的 GGUF 或完整精度权重,并核对模型卡中的文件版本、许可证和使用说明。
- 安装支持该模型架构及其聊天模板的推理后端。GGUF 可优先尝试 llama.cpp;若后端不识别模板或工具调用格式,应先解决兼容问题,不要直接把解析失败归因于模型能力。
- 安装 Python 和 OpenAI SDK:
pip install openai。 - 给本地服务配置工具调用支持,并确认服务实际监听的地址、端口和模型名称。
模型有 0.8B 参数,不代表整套运行只需要按参数量估算的内存。权重精度、量化方式、上下文长度、推理后端及缓存都会影响资源占用。可以先用设备能承受的量化版本跑通流程,再比较更高精度版本在相同任务上的结果。量化文件的具体选择、许可证和后端支持情况会变化,发布前应以官方模型卡及对应仓库说明为准。
用计算器验证工具调用
下面的脚本要求模型选择计算器工具,然后由本地程序执行运算,并把结果传回模型。它依赖服务端兼容 OpenAI 的工具调用接口;如果你的后端不支持该接口,需要按其文档调整请求格式。
import json
import os
from openai import OpenAI
client = OpenAI(
base_url=os.getenv("LOCAL_API_BASE", "http://localhost:8080/v1"),
api_key=os.getenv("LOCAL_API_KEY", "local"),
)
tools = [{
"type": "function",
"function": {
"name": "calculator",
"description": "计算两个数的和",
"parameters": {
"type": "object",
"properties": {
"a": {"type": "number"},
"b": {"type": "number"},
},
"required": ["a", "b"],
"additionalProperties": False,
},
},
}]
messages = [{"role": "user", "content": "计算 17.5 加 24.3"}]
for step in range(3):
response = client.chat.completions.create(
model=os.getenv("LOCAL_MODEL", "botpsy"),
messages=messages,
tools=tools,
tool_choice="auto",
temperature=0,
)
message = response.choices[0].message
messages.append(message.model_dump(exclude_none=True))
if not message.tool_calls:
print(message.content or "")
break
for call in message.tool_calls:
if call.function.name != "calculator":
raise ValueError(f"未知工具:{call.function.name}")
args = json.loads(call.function.arguments)
if set(args) != {"a", "b"}:
raise ValueError(f"参数不符合预期:{args}")
result = args["a"] + args["b"]
messages.append({
"role": "tool",
"tool_call_id": call.id,
"content": json.dumps({"result": result}),
})
else:
raise RuntimeError("超过最大工具调用轮数")
先确认三件事:模型是否选对工具、参数是否能解析、工具结果是否以对应的调用标识传回。示例把工具限制为加法,并拒绝未知工具和多余参数;真实应用还应检查数值范围、调用权限、超时和失败返回。循环次数也应设上限,避免模型反复调用。
不只测成功样例
一条算式跑通,只能说明最简单的路径可用。建议用同一组输入重复测试,并记录请求、模型原始响应、解析后的工具名与参数、执行结果、最终答复和停止原因。
至少覆盖以下情况:
| 测试输入 | 预期行为 |
|---|---|
| “计算 17.5 加 24.3” | 生成合法调用,结果为 41.8 |
| “帮我算一下” | 询问要计算什么,不猜测参数 |
| 工具列表里没有天气查询,却询问天气 | 不编造工具调用 |
| 参数缺失、类型错误或调用未知工具 | 程序拒绝执行并记录原因 |
多轮任务还要单独观察:模型能否先查信息,再依据工具返回继续下一步;工具出错时会不会正确说明,而不是把失败结果包装成成功。测试次数、上下文和温度都应固定,才方便比较量化版本或后端差异。
常见问题与适用边界
如果输出看起来像工具调用,却没有被程序识别,优先检查模型聊天模板、工具调用开关和后端解析器。不同后端可能要求特定的模板配置;模板不匹配时,调用可能被当作普通文本返回。若参数经常缺失或类型不对,检查工具描述和 JSON Schema 是否明确,并尝试把任务拆成更小的步骤。不要通过放宽程序校验来掩盖模型输出问题。
BotPsy 更适合权限受限、输入明确、结果可验证的端侧任务,例如格式转换、简单计算、从少量选项中选择工具,或对本地数据执行只读查询。涉及转账、删除、重要日程修改等高影响操作,应增加确认步骤和应用侧权限控制;模型本身不能替代这些保护。
需要大量事实知识、复杂推理、长流程协调,或对错误成本很高的任务,应考虑回退到更大模型,或交由人工确认。端侧运行也不自动保证整个流程没有数据外传:如果调用的工具需要访问云端服务,相关数据仍可能离开设备。
实测结论应以自己的设备、后端、量化版本和任务集为准。先用正例和负例确认工具选择、参数解析、执行反馈与停止条件,再决定是否扩大任务范围;模型规模、许可证、文件版本和后端兼容性则应在发布前重新核验。

评论列表 (1条):
加载更多评论 Loading...