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 8080Windows:
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 openaiPython:
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 80812. 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助手。