记录一下使用llama.cpp过程中遇到的一些问题和解决方法

写在前面:

什么未操作即同意的条款?我写的东西免费分享也不是你能随意搬运的理由啊

特此声明,若该文章被搬运到除ZEEKLOG(www.ZEEKLOG.net)以外的其他社区如2048 AI社区,则视为该社区同意将所有收益无偿捐赠给我所有

此外,我写的所有分享都是免费的,如有VIP文章也是ZEEKLOG干的,请私信我修改成免费

起因:使用LMStudio调用AI模型时发现显存占用率一直不超过80%,询问AI解决办法无果后一怒之下换用llama.cpp,遇到了一堆AI解决不了的问题,遂记录

llama.cpp下载地址如下

https://github.com/ggml-org/llama.cpp/releases

以防万一 我老年痴呆说一下如何使用llama.cpp调用模型,把下面的代码保存成bat,放在和llama-server.exe同目录下,然后运行这个bat(确保模型位置选对,GPU_LAYERS和THREADS根据机器能力)

@echo off setlocal set "MODEL_PATH=F:\Models\Yakyu" set "MODEL_FILE=Qwen3-235B-A22B-Instruct-2507-UD-Q8.gguf" set CTX_SIZE=32768 set HOST=127.0.0.1 set PORT=1234 echo 正在启动 OpenAI 兼容 API 服务... echo 模型: %MODEL_PATH%\%MODEL_FILE% echo 端口: http://%HOST%:%PORT% echo. llama-server.exe ^ -m "%MODEL_PATH%\%MODEL_FILE%" ^ --ctx-size %CTX_SIZE% ^ --host %HOST% ^ --port %PORT% echo. echo 服务已停止。按任意键关闭窗口... pause >nul

cmd窗口出现上图的“all slots are idle”说明模型加载完,此时可以调用了,如果出现乱码将 .bat 文件保存为 ANSI 编码格式即可,如果还解决不了那就是不需要管的乱码,不影响使用

注:通过 llama-server.exe -h 命令可以看到:
-fit,  --fit [on|off]                   whether to adjust unset arguments to fit in device memory ('on' or 'off', default: 'on')

也就是默认打开了自动适应, --gpu-layers、--n-cpu-moe等等这些参数不填也行,倒不如说在我的机器上不填效果最好,也有大概率每个人的设备情况不一样,

根据https://www.hardware-corner.net/gpt-oss-offloading-moe-layers/

这篇文章所写,合理设置--n-cpu-moe的值能提速(虽然对我不适用)

所以下面是可调参数多一点的版本:

@echo off setlocal set "MODEL_PATH=F:\Models\Yakyu" set "MODEL_FILE=Qwen3-Next-80B-A3B-Instruct-abliterated-Q8_0.gguf" set GPU_LAYERS=64 set THREADS=64 set CTX_SIZE=32768 set HOST=127.0.0.1 set PORT=1234 echo 正在启动 OpenAI 兼容 API 服务... echo 模型: %MODEL_PATH%\%MODEL_FILE% echo 端口: http://%HOST%:%PORT% echo. llama-server.exe ^ -m "%MODEL_PATH%\%MODEL_FILE%" ^ --gpu-layers %GPU_LAYERS% ^ --threads %THREADS% ^ --ctx-size %CTX_SIZE% ^ --n-cpu-moe 10 ^ --host %HOST% ^ --port %PORT% echo. echo 服务已停止。按任意键关闭窗口... pause >nul

多个分片(shard)组成的 GGUF 分片模型用llama-gguf-split合并成一个才能用,参考代码如下:

D:\Yakyu\llama-b7640-bin-win-cuda-12.4-x64\llama-gguf-split.exe --merge F:/Models/Yakyu/Qwen3-235B-A22B-Instruct-2507/Qwen3-235B-A22B-Instruct-2507-UD-Q8_K_XL-00001-of-00006.gguf F:/Models/Yakyu/Qwen3-235B-A22B-Instruct-2507-UD-Q8.gguf

打开cmd输一下代码就行

上图是AI(Qwen3 Max)(不是广告)的错误回答,太相信AI导致走错了不少路,仅供批判

1、SillyTavern调用时报错:Chat Completion API Assistant response prefill is incompatible with enable_thinking

当我加载的模型是DeepSeek时酒馆就会报这个错

解决办法:
①换用文本补全模式

②bat代码中增加--reasoning-budget 0来关闭思考,全代码如下:

@echo off setlocal set "MODEL_PATH=F:\Models\Yakyu" set "MODEL_FILE=DeepSeek-V3.1-Terminus-MXFP4_MOE.gguf" set CTX_SIZE=32768 set HOST=127.0.0.1 set PORT=1234 echo 模型: %MODEL_PATH%\%MODEL_FILE% echo 端口: http://%HOST%:%PORT% echo. llama-server.exe ^ -m "%MODEL_PATH%\%MODEL_FILE%" ^ --reasoning-budget 0 ^ --chat-template-file "Unslothdeepseek-v3-chat-template.jinja" ^ --ctx-size %CTX_SIZE% ^ --host %HOST% ^ --port %PORT% echo. echo 服务已停止。按任意键关闭窗口... pause >nul

你可以看到代码中还指定了chat-template,这是因为关闭思考后又出现了新的问题:

设置“--reasoning-budget 0”发现模型刚输出空白就停止了,或者ai的输出和输入没有关系,无论输入什么,输出都是“DeepSeek is an AI assistant developed by……”这是内置自动加载的聊天模板有问题,我使用了内置的deepseek3聊天模板发现不行,我不确定这与我从网上下载的gguf模型是否有关。

按照Unsloth的说法:“我们的 DeepSeek-V3.1 GGUF 包含 Unsloth 聊天模板修复 用于 llama.cpp 支持的后端。”我不是从他那里下载的模型,但他的模板确实能解决我的问题,模板如下:
 

{% if not add_generation_prompt is defined %}{% set add_generation_prompt = false %}{% endif %}{% if enable_thinking is defined and enable_thinking is false %}{% set thinking = false %}{% elif enable_thinking is defined and enable_thinking is true %}{% set thinking = true %}{% elif not thinking is defined %}{% set thinking = false %}{% endif %}{% set ns = namespace(is_first=false, is_tool=false,, is_first_sp=true, is_last_user=false) %}{%- for message in messages %}{%- if message['role'] == 'system' %}{%- if ns.is_first_sp %}{% set ns.system_prompt = ns.system_prompt + message['content'] %}{% set ns.is_first_sp = false %}{%- else %}{% set ns.system_prompt = ns.system_prompt + '\n\n' + message['content'] %}{%- endif %}{%- endif %}{%- endfor %}{{ bos_token }}{{ ns.system_prompt }}{%- for message in messages %}{%- if message['role'] == 'user' %}{%- set ns.is_tool = false -%}{%- set ns.is_first = false -%}{%- set ns.is_last_user = true -%}{{'<|User|>' + message['content']}}{%- endif %}{%- if message['role'] == 'assistant' and message['tool_calls'] is defined and message['tool_calls'] is not none %}{%- if ns.is_last_user %}{{'<|Assistant|></think>'}}{%- endif %}{%- set ns.is_last_user = false -%}{%- set ns.is_first = false %}{%- set ns.is_tool = false -%}{%- for tool in message['tool_calls'] %}{%- if not ns.is_first %}{%- if message['content'] is none %}{{'<|tool▁calls▁begin|><|tool▁call▁begin|>'+ tool['function']['name'] + '<|tool▁sep|>' + (tool['function']['arguments'] if tool['function']['arguments'] is string else tool['function']['arguments'] | tojson) + '<|tool▁call▁end|>'}}{%- else %}{{message['content'] + '<|tool▁calls▁begin|><|tool▁call▁begin|>' + tool['function']['name'] + '<|tool▁sep|>' + (tool['function']['arguments'] if tool['function']['arguments'] is string else tool['function']['arguments'] | tojson) + '<|tool▁call▁end|>'}}{%- endif %}{%- set ns.is_first = true -%}{%- else %}{{'<|tool▁call▁begin|>'+ tool['function']['name'] + '<|tool▁sep|>' + (tool['function']['arguments'] if tool['function']['arguments'] is string else tool['function']['arguments'] | tojson) + '<|tool▁call▁end|>'}}{%- endif %}{%- endfor %}{{'<|tool▁calls▁end|><|end▁of▁sentence|>'}}{%- endif %}{%- if message['role'] == 'assistant' and (message['tool_calls'] is not defined or message['tool_calls'] is none) %}{%- if ns.is_last_user %}{{'<|Assistant|>'}}{%- if message['prefix'] is defined and message['prefix'] and thinking %}{{'<think>'}} {%- else %}{{'</think>'}}{%- endif %}{%- endif %}{%- set ns.is_last_user = false -%}{%- if ns.is_tool %}{{message['content'] + '<|end▁of▁sentence|>'}}{%- set ns.is_tool = false -%}{%- else %}{%- set content = message['content'] -%}{%- if '</think>' in content %}{%- set splitted = content.split('</think>') -%}{%- set content = splitted[1:] | join('</think>') -%}{%- endif %}{{content + '<|end▁of▁sentence|>'}}{%- endif %}{%- endif %}{%- if message['role'] == 'tool' %}{%- set ns.is_last_user = false -%}{%- set ns.is_tool = true -%}{{'<|tool▁output▁begin|>' + message['content'] + '<|tool▁output▁end|>'}}{%- endif %}{%- endfor -%}{%- if add_generation_prompt and ns.is_last_user and not ns.is_tool %}{{'<|Assistant|>'}}{%- if not thinking %}{{'</think>'}}{%- else %}{{'<think>'}}{%- endif %}{% endif %}

模板文件放置如图所示,都在同一文件夹内

2、llama-server端口绑定失败

如图所示,我使用bat脚本来启动llama-server,并指定了1234端口,即上图右边代码中的:

set PORT=1234

但实际运行后,cmd 日志(上图左上)显示:server is listening on http://127.0.0.1:8080

这是 默认端口,说明 --port 1234 被忽略了或未生效。

我通过 netstat -ano | findstr :1234  一查看(上图左下),发现没有程序占用1234端口, 我就纳闷了,端口没被占用那为什么指定了不用?嫌1234数字不够吉利?

一问AI,经典无中生有,各种幻觉

注:上图中AI的回答是错的

琢磨了一圈才发现是另一台电脑在向这个端口发送请求,我在另一台电脑上的酒馆通过端口转发一直在连这个1234端口

解决方法:把酒馆关了,完美解决
 

Read more

opencode+Git集成:版本控制中AI辅助操作指南

opencode+Git集成:版本控制中AI辅助操作指南 1. 开篇:当Git遇见AI编程助手 你是否曾经在Git提交时纠结于怎么写好提交信息?或者在代码合并冲突时头疼不已?又或者想要重构代码却担心破坏现有功能? 今天我们要介绍的opencode,正是为了解决这些痛点而生。这是一个开源的AI编程助手框架,特别适合与Git版本控制系统配合使用。它能在你编码的每个环节提供智能辅助,从代码编写到提交信息生成,从冲突解决到代码审查。 最棒的是,opencode支持本地部署的模型,比如我们将要使用的Qwen3-4B-Instruct-2507,这意味着你的代码永远不会离开你的本地环境,完全保障了隐私和安全。 2. opencode是什么? 2.1 核心特点 opencode是一个2024年开源的AI编程助手框架,用Go语言编写,主打"终端优先、多模型、隐私安全"的理念。它把大语言模型包装成可插拔的智能体,支持在终端、IDE和桌面三端运行。 你可以把它理解为你的编程副驾驶,但它比一般的代码补全工具强大得多。opencode支持代码补全、重构、调试、项目规划等全流程辅助,而且可以

豆包、Kimi、通义千问、DeepSeek、Gamma、墨刀 AI”六款主流大模型(或 AI 平台)生成 PPT 的完整流程

、先厘清 3 个概念,少走弯路 1. 大模型 ≠ PPT 软件 豆包、Kimi、通义千问、DeepSeek 本身只负责“出大纲/出文案”,真正的“一键配图+排版”要靠官方 PPT 助手或第三方平台(博思 AiPPT、迅捷 AiPPT、Gamma、墨刀 AI 等)。 2. 两条主流技术路线 A. 模型自带 PPT 助手:Kimi、通义千问、Gamma。 B. 模型只做 Markdown 大纲:豆包、DeepSeek,需要再“套壳”到博思/迅捷/墨刀。 3.

保姆级教程:从零搭建你的第一个AI Agent

保姆级教程:从零搭建你的第一个AI Agent

保姆级教程:从零搭建你的第一个 AI Agent(附完整可运行代码) 手把手教你,用 Python 在 2 小时内构建一个能自主规划、调用工具、完成任务的 AI Agent 预计完成时间: 2 小时 所需技能: 基础 Python、会用命令行 适合人群: 想入门 AI Agent 开发的同学,不限工作年限 前言:为什么 2026 年你必须懂 Agent? 如果说 2024 年是大模型的元年,那 2026 年就是 AI Agent 的爆发年。 现在的 AI 已经不只是"聊天机器人"了——它开始接管我们的

一文带大家理解各种AI大模型收费指标tokens到底是什么东东

一文带大家理解各种AI大模型收费指标tokens到底是什么东东

Token收费举例 大家在使用各个模型的过程中,一定会关注到,各个模型都是按照使用的tokens进行收费的,例如: 1. 推理输入:0.6 元 / 百万 tokens * 含义:你向大模型提问、上传文档、粘贴上下文等 “给模型看的内容”,每消耗 100 万个 tokens,收费 0.6 元。 * 通俗例子:你发了一段 1000 字的文章给模型,大约 ≈ 1300 tokens(按 1 字≈1.3 token 粗算)。费用 ≈ 0.6 元 / 1,000,000 × 1,300 ≈ 0.00078