《llama.cpp Server实战:把本地模型变成OpenAI兼容接口》

LlamaAI本地部署实战专栏第5篇

从命令行聊天工具到AI服务接口,让你的本地大模型拥有和OpenAI API一样的调用方式。


一、为什么需要本地AI API服务?

在前面的文章中,我们已经完成:

✅ 编译 llama.cpp

✅ 下载 GGUF 模型

✅ GPU 加速推理

✅ 命令行运行本地大模型

但是现在的使用方式:

复制代码
复制代码
./llama-cli \
-m qwen.gguf

存在一个问题:

它只能自己在终端输入,无法被其他程序调用。

真正的软件系统需要:

复制代码
复制代码
用户

↓

Web前端

↓

后端服务

↓

AI接口

↓

大模型

↓

返回结果

例如:

  • 网站聊天机器人
  • 桌面AI助手
  • VSCode插件
  • 企业知识库
  • Agent系统

因此,我们需要把:

本地模型 → API服务


二、什么是LLM API?

API(Application Programming Interface):

简单理解:

让程序之间可以互相调用的接口。

例如:

以前:

复制代码
复制代码
Python程序

↓

OpenAI服务器

↓

GPT模型

现在:

复制代码
复制代码
Python程序

↓

localhost:8080

↓

你的电脑

↓

Llama模型

三、llama.cpp Server架构

llama.cpp提供:

复制代码
复制代码
llama-server

它负责:

  • 加载模型
  • 接收HTTP请求
  • 管理上下文
  • 返回生成结果

整体结构:

复制代码
复制代码
                 用户

                  |

              Web/App

                  |

              HTTP请求

                  |

          llama-server

                  |

          llama.cpp Engine

                  |

              GGUF模型

                  |

             GPU/CPU

四、启动llama-server

进入:

复制代码
复制代码
llama.cpp/build/bin

启动:

Linux:

复制代码
复制代码
./llama-server \
-m ../../models/qwen.gguf \
--port 8080

Windows:

复制代码
复制代码
llama-server.exe `
-m ../../models/qwen.gguf `
--port 8080

启动成功:

看到:

复制代码
复制代码
Server listening on port 8080

说明:

本地AI服务启动完成。


五、测试API接口

打开浏览器:

访问:

复制代码
复制代码
http://localhost:8080

可以看到:

llama.cpp服务页面。


查看接口:

复制代码
复制代码
/v1/chat/completions

这个接口:

和OpenAI保持兼容。


六、使用curl调用本地模型

发送请求:

复制代码
复制代码
curl http://localhost:8080/v1/chat/completions \
-H "Content-Type: application/json" \
-d '
{
 "messages":[
  {
   "role":"user",
   "content":"介绍一下Transformer"
  }
 ]
}
'

返回:

复制代码
复制代码
{
 "choices":[
  {
   "message":{
    "content":"Transformer是一种..."
   }
  }
 ]
}

说明:

你的本地模型已经提供AI服务。


七、使用OpenAI SDK调用本地模型

重点来了:

因为llama.cpp兼容OpenAI接口。

所以:

以前调用:

复制代码
复制代码
OpenAI云端

现在改:

复制代码
复制代码
本地模型

代码几乎不用改变。


安装:

复制代码
复制代码
pip install openai

Python:

复制代码
复制代码
from openai import OpenAI


client = OpenAI(
    base_url="http://localhost:8080/v1",
    api_key="none"
)


response = client.chat.completions.create(
    model="local-model",
    messages=[
        {
            "role":"user",
            "content":"你好,介绍一下自己"
        }
    ]
)


print(
    response.choices[0].message.content
)

输出:

复制代码
复制代码
你好,我是运行在本地的大语言模型...

八、为什么OpenAI兼容非常重要?

假设你的项目之前:

复制代码
复制代码
client = OpenAI(
api_key="xxx"
)

现在:

复制代码
复制代码
client = OpenAI(
base_url="http://localhost:8080/v1"
)

业务代码不用大改。

这意味着:

你的AI应用可以自由切换:

复制代码
复制代码
            同一个应用

                |

      ------------------

      |                |

 OpenAI API      本地Llama

      |                |

 云端GPU          本地GPU

这也是企业私有化部署的重要方式。


九、流式输出(Streaming)

普通请求:

等待全部生成:

复制代码
复制代码
用户输入

↓

等待10秒

↓

显示答案

体验不好。

ChatGPT采用:

流式输出:

复制代码
复制代码
用户输入

↓

Token1

↓

Token2

↓

Token3

↓

不断显示

代码:

复制代码
复制代码
response = client.chat.completions.create(
    model="local-model",
    messages=[
        {
        "role":"user",
        "content":"写一个Python程序"
        }
    ],
    stream=True
)


for chunk in response:

    print(
      chunk.choices[0]
      .delta.content,
      end=""
    )

效果:

实时输出。


十、本地AI聊天网页实现

现在架构:

复制代码
复制代码
              浏览器

                |

             Vue/React

                |

              FastAPI

                |

          llama-server

                |

             Qwen模型

例如:

前端:

Vue3

复制代码
复制代码
fetch(
"http://localhost:8000/chat"
)

后端:

FastAPI:

复制代码
复制代码
@app.post("/chat")
def chat(msg):

    result = client.chat.completions.create(
        model="local",
        messages=[
          {
           "role":"user",
           "content":msg
          }
        ]
    )

    return result

最终:

拥有自己的:

本地ChatGPT网页。


十一、启动参数优化

实际部署:

推荐:

复制代码
复制代码
./llama-server \
-m qwen.gguf \
--port 8080 \
-ngl 999 \
-c 4096 \
-b 512

参数:

参数 作用
-m 模型路径
--port 服务端口
-ngl GPU层数
-c 上下文长度
-b batch大小

十二、多用户并发

如果多人访问:

需要调整:

并发槽位

参数:

复制代码
复制代码
--parallel

例如:

复制代码
复制代码
--parallel 4

表示:

同时处理4个请求。

架构:

复制代码
复制代码
用户1
 |
用户2
 |
用户3
 |
用户4

       ↓

 llama-server

       ↓

    GPU

十三、后台运行服务

Linux:

使用:

复制代码
复制代码
nohup

例如:

复制代码
复制代码
nohup ./llama-server \
-m qwen.gguf \
--port 8080 &

查看:

复制代码
复制代码
ps aux | grep llama

停止:

复制代码
复制代码
kill PID

十四、常见问题

1. 端口被占用

错误:

复制代码
复制代码
Address already in use

解决:

换端口:

复制代码
复制代码
--port 8081

2. API返回空结果

检查:

  • 模型是否加载成功
  • 请求格式是否正确
  • message格式是否正确

3. 速度慢

检查:

复制代码
复制代码
nvidia-smi

确认:

GPU是否工作。

增加:

复制代码
复制代码
-ngl 999

十五、本篇总结

今天完成:

✅ 理解LLM服务架构

✅ 启动llama-server

✅ 将本地模型API化

✅ 使用OpenAI SDK调用

✅ 实现流式输出

✅ 构建本地ChatGPT基础架构

现在你的系统:

从:

复制代码
复制代码
命令行AI

升级为:

复制代码
复制代码
AI服务平台

完整架构:

复制代码
复制代码
        Web应用

            |

       OpenAI SDK

            |

      llama-server

            |

      llama.cpp

            |

      GGUF模型

            |

       GPU加速

下一篇预告

《让本地Llama拥有企业知识:RAG离线知识库完整实现》

下一篇将进入真正的AI应用开发:

  • 为什么大模型不知道你的资料
  • RAG技术原理
  • PDF文档解析
  • Embedding模型
  • FAISS向量数据库
  • 本地知识库问答系统

最终实现:

一个完全离线运行的私人知识库AI助手。

相关推荐
qyyyyy5705 天前
PDF 转 JSON 怎么做?从表格和元数据提取到 LLM 结构化处理
数据库·pdf·json·erlang·llama
薛定e的猫咪5 天前
【大模型量化】使用 llama.cpp 完成量化、本地推理与服务化部署
人工智能·深度学习·算法·llama
CODER03045 天前
win11系统编译安装cuda版llama-cpp-python(踩完所有的坑)
开发语言·python·llama
今天吃饺子6 天前
超高创新模型!TF-SAX-Llama 轴承故障诊断
大语言模型·llama·故障诊断
明月千里赴迢遥7 天前
Node搭建代理清洗API请求
llama
Rei22487 天前
使用llama.cpp的Qwen3.6-27B-Q8本地部署详解【Linux GPU】
linux·运维·llama
蛋先生DX8 天前
大模型本地部署神器的瘦身进阶原理,就这两招?
llm·llama·ollama
爱学习的小白柏8 天前
【AI问数技术】多Agent协同架构:查询规划/SQL生成/洞察分析/报告生成
java·网络·人工智能·windows·sql·架构·llama
qy2016skq9 天前
OpenClaw 源码解读——入门与破局9 双插件协同:Quota Guard 负责“停“,Model Router 负责“绕“
langchain·prompt·aigc·embedding·ai编程·llama·agi
CHPCWWHSU9 天前
llama.cpp + DeepSeek-Harness 构建本地大模型推理与Agent智能体系统
llama