从ollama到llama.cpp

如果你用过ollama,那你不妨再来玩玩llama.cpp,这个更强悍,为了继续使用原来在ollama下载的模型,只需要运行以下bat文件即可

bash 复制代码
@echo off
chcp 65001 >nul 2>&1
setlocal enabledelayedexpansion

:: ============================================
:: 配置区域 - 请根据你的实际情况修改
:: ============================================
set "LLAMA_CPP_PATH=D:\llama_cpp"
set "OLLAMA_MODELS_PATH=D:\.ollama\models"

:: ============================================
:: 颜色设置
:: ============================================
color 0A

:: ============================================
:: 第一步:获取模型列表
:: ============================================
echo ========================================
echo     欢迎使用 llama.cpp 启动器
echo ========================================
echo.
echo 正在获取已安装的模型列表...
echo.

set "model_count=0"
for /f "skip=1 tokens=1 delims= " %%a in ('ollama list 2^>nul') do (
    set /a model_count+=1
    set "model_!model_count!=%%a"
    echo [!model_count!] %%a
)

if !model_count! equ 0 (
    echo.
    echo [错误] 没有找到任何模型,请先运行 ollama pull 下载模型。
    pause
    exit /b
)

echo.
echo 共找到 !model_count! 个模型

:: ============================================
:: 第二步:让用户选择模型
:: ============================================
:select_model
echo.
set /p model_choice="请输入要使用的模型编号 (1-!model_count!): "

if !model_choice! lss 1 goto invalid_choice
if !model_choice! gtr !model_count! goto invalid_choice

set "selected_model=!model_!model_choice!!"
echo.
echo 你选择了: !selected_model!
goto find_model_file

:invalid_choice
echo [错误] 无效的编号,请重新输入。
goto select_model

:: ============================================
:: 第三步:查找模型文件
:: ============================================
:find_model_file
echo.
echo 正在查找模型文件...

set "found_file="
set "max_size=0"

for /f "delims=" %%f in ('dir /b "%OLLAMA_MODELS_PATH%\blobs\sha256-*" 2^>nul') do (
    set "file_path=%OLLAMA_MODELS_PATH%\blobs\%%f"
    call :get_file_size "!file_path!"
    if !file_size! gtr !max_size! (
        set "max_size=!file_size!"
        set "found_file=%%f"
    )
)

if defined found_file (
    set "model_path=%OLLAMA_MODELS_PATH%\blobs\!found_file!"
    echo 找到模型文件: !found_file!
) else (
    echo [错误] 在 blobs 目录未找到任何模型文件。
    pause
    exit /b
)

if not exist "!model_path!" (
    echo [错误] 模型文件不存在: !model_path!
    pause
    exit /b
)

:: ============================================
:: 第四步:选择运行模式
:: ============================================
:select_mode
echo.
echo ========================================
echo      请选择运行模式
echo ========================================
echo [1] 命令行交互模式 (llama-cli)
echo [2] 服务模式 (llama-server)
echo.
set /p mode_choice="请输入模式编号 (1-2): "

if "!mode_choice!"=="1" goto cli_mode
if "!mode_choice!"=="2" goto server_mode
echo [错误] 无效的选择,请重新输入。
goto select_mode

:: ============================================
:: 第五步A:命令行交互模式
:: ============================================
:cli_mode
echo.
echo ========================================
echo 启动命令行交互模式
echo ========================================
echo.

set "llama_cli=%LLAMA_CPP_PATH%\llama-cli.exe"
if not exist "!llama_cli!" (
    echo [错误] 找不到 llama-cli.exe
    echo 路径: !llama_cli!
    echo.
    set /p custom_path="请拖入 llama-cli.exe 文件或输入完整路径: "
    if not exist "!custom_path!" (
        echo [错误] 文件不存在,退出。
        pause
        exit /b
    )
    set "llama_cli=!custom_path!"
)

echo 正在启动模型,请稍候...
echo.
echo 提示: 输入问题后按回车,输入 /exit 或按 Ctrl+C 退出
echo.

"!llama_cli!" -m "!model_path!" --color auto -cnv

if errorlevel 1 (
    echo.
    echo 尝试使用备选模式...
    "!llama_cli!" -m "!model_path!" -p "Hello, please introduce yourself"
)

pause
goto end

:: ============================================
:: 第五步B:服务模式
:: ============================================
:server_mode
echo.
echo ========================================
echo 启动服务模式
echo ========================================
echo 服务地址: http://localhost:8080
echo API端点: http://localhost:8080/v1/chat/completions
echo 按 Ctrl+C 停止服务
echo ========================================
echo.

set "llama_server=%LLAMA_CPP_PATH%\llama-server.exe"
if not exist "!llama_server!" (
    echo [警告] 找不到 llama-server.exe
    echo 路径: !llama_server!
    echo.
    set /p custom_path="请拖入 llama-server.exe 文件或输入完整路径: "
    if not exist "!custom_path!" (
        echo [错误] 文件不存在,退出。
        pause
        exit /b
    )
    set "llama_server=!custom_path!"
)

echo.
echo 配置选项 (直接回车使用默认值):
set /p host="主机地址 (默认 127.0.0.1): "
if "!host!"=="" set "host=127.0.0.1"

set /p port="端口 (默认 8080): "
if "!port!"=="" set "port=8080"

set /p context="上下文大小 (默认 4096): "
if "!context!"=="" set "context=4096"

set /p gpu_layers="GPU层数 (默认 0, 有显卡可设 20-40): "
if "!gpu_layers!"=="" set "gpu_layers=0"

echo.
echo ========================================
echo 启动参数:
echo 模型: !selected_model!
echo 地址: http://!host!:!port!
echo 上下文: !context!
echo GPU层数: !gpu_layers!
echo ========================================
echo.

"!llama_server!" -m "!model_path!" --host !host! --port !port! -c !context! --n-gpu-layers !gpu_layers!

if errorlevel 1 (
    echo.
    echo [错误] 服务启动失败
)
pause
goto end

:: ============================================
:: 子函数:获取文件大小
:: ============================================
:get_file_size
set "file_size=%~z1"
exit /b

:: ============================================
:: 结束
:: ============================================
:end
endlocal

运行后,非常方便,系统自动列出原来的模型

下来选择运行模型,1是命令,2是webui

命令行如下:

如果选择服务模式

服务已启动,打开http://127.0.0.1:8080,熟悉的界面

相关推荐
加油码1 小时前
动静态库的链接底层原理(进阶版)
linux·c++
s_w.h2 小时前
【 计网 】计算机网络基础
服务器·计算机网络
H_oRIZoN_3 小时前
Linux入门DAY23(C语言树形结构)
linux·c语言·数据结构
kdxiaojie3 小时前
Linux USB驱动阅读笔记(1)
linux·笔记·学习·usb
JacksonMx3 小时前
Java CompletableFuture 异步编程实战:从入门到架构师避坑指南
linux·数据库·python
byte轻骑兵4 小时前
【BlueZ 】蓝牙 SDAP 协议入门:BlueZ 中设备服务发现的基础逻辑
linux·人工智能·bluez·电脑蓝牙·嵌入式蓝牙
mounter6254 小时前
GCCRS 突破与 Rust 入核:Linux 工具链的重大变革
linux·开发语言·rust·linux kernel·kernel
怪侠_岭南一只猿4 小时前
[简单理解]小龙虾是怎么一回事?
运维·服务器·ai
海兰4 小时前
【应用】Wastnet 框架的 SSE (Server-Sent Events)从协议原理到实践指南
运维·服务器·人工智能