《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助手。

相关推荐
苏打水com1 天前
《llama.cpp从零编译教程:Windows + Linux完整环境搭建》
linux·windows·llama
维核科技3 天前
Llama 3.3 vs Qwen2.5 vs DeepSeek-R1
ai·私有化部署·llama·大模型部署·私有化大模型部署
AI78406 天前
开源模型改写AI格局:Llama、通义千问、Mistral如何挑战闭源巨头
人工智能·开源·llama
leoZ2317 天前
本地跑大模型实战(七):llama.cpp 性能调优,让推理更快更省
java·人工智能·spring·生成对抗网络·语言模型·自然语言处理·llama
leoZ2317 天前
实战复盘:用 Claude Code 从零搭一个 GitHub PR 统计工具
java·人工智能·python·深度学习·自然语言处理·github·llama
yagami_gagami7 天前
第四届黄河流域公安院校电子物证个人赛服务器取证
linux·服务器·网络·mysql·安全·docker·llama
不喝水的鱼儿8 天前
本地部署 260K 上下文 Qwen-3.6-35B-A3B 与 Ornith-1.0-35B 模型及 VSCode Copilot 参数调优记录
ide·vscode·语言模型·copilot·llama
(轻舟已过万重山)9 天前
第16章 主流开源模型选型:Qwen/LLaMA/GLM/Mistral 怎么选
人工智能·开源·llama
染指11109 天前
72.高级RAG-sql检索器
python·sql·mysql·llama·llamaindex·高级rag