
一、Open WebUI API简介
Open WebUI是一个功能丰富的自托管WebUI,不仅提供了友好的用户界面,还设计了强大的API接口,允许开发者以编程方式与各种大语言模型进行交互。本文将详细介绍如何有效地调用Open WebUI API,帮助开发者将大模型能力无缝集成到自己的应用中。
核心特点
- 统一接口模式:通过单一API调用形式访问多种大语言模型
- 兼容OpenAI标准:API设计遵循OpenAI标准,便于迁移现有代码
- 多模型支持:同时支持Ollama本地模型和OpenAI兼容的云端模型
- 知识增强(RAG)功能:支持文件上传与知识库查询能力
- 开放扩展性:可调用自定义函数和工具,扩展模型能力
Open WebUI API的优势在于它提供了一种统一的方式访问不同来源的大语言模型,无论您是使用本地部署的Ollama模型,还是调用云端的OpenAI模型,都可以通过相同的接口格式进行操作,极大简化了开发流程。

二、API身份验证
在使用Open WebUI API前,您需要完成身份验证。系统支持两种认证方式:API密钥和JWT令牌。
获取API密钥
- 登录您的Open WebUI实例
- 进入设置 > 账户页面
- 找到API密钥部分,点击生成新密钥
- 保存显示的密钥(请注意:密钥仅显示一次,请安全保存)
使用API密钥进行认证:
curl -H "Authorization: Bearer YOUR_API_KEY" http://localhost:3000/api/models
安全提示:API密钥具有与您账户相同的权限,请勿在客户端代码或公开仓库中硬编码密钥。建议使用环境变量或安全的配置管理方案存储密钥。
授权请求格式
所有API请求都需要在HTTP头部包含授权信息,格式如下:
Authorization: Bearer YOUR_API_KEY
缺少有效的授权头将导致API返回401未授权错误。
三、关键API端点详解

Open WebUI提供了多个重要的API端点,下面我们将详细介绍最常用的几个核心接口:
3.1 获取可用模型列表
- 端点:
GET /api/models
- 功能:获取系统中所有可用的模型列表
- 返回:包含模型名称、提供者等信息的JSON数组
curl -H "Authorization: Bearer YOUR_API_KEY" http://localhost:3000/api/models
响应示例:
{
"data": [
{
"id": "llama3.1",
"name": "Llama 3.1",
"provider": "ollama"
},
{
"id": "gpt-3.5-turbo",
"name": "GPT-3.5 Turbo",
"provider": "openai"
}
]
}
3.2 聊天补全API
这是最核心的API端点,用于与大语言模型进行对话交互:
- 端点:
POST /api/chat/completions
- 功能:发送消息到指定模型并获取回复
- 兼容性:兼容OpenAI格式,可用于Ollama模型和OpenAI模型
主要请求参数:
model
:要使用的模型名称messages
:消息数组,包含角色和内容stream
:(可选)是否流式输出,默认为false
temperature
:(可选)生成文本的随机性,0-1之间max_tokens
:(可选)最大生成的标记数
curl -X POST http://localhost:3000/api/chat/completions \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "llama3.1",
"messages": [
{
"role": "user",
"content": "你好,能介绍一下自己吗?"
}
]
}'
3.3 Ollama API代理
Open WebUI也提供了Ollama原生API的透明代理,这对于需要生成嵌入向量或使用原始提示流式传输的场景非常有用。
- 基础URL:
/ollama/<api>
- 参考:遵循Ollama官方API规范
示例:生成文本补全(流式)
curl http://localhost:3000/ollama/api/generate -d '{
"model": "llama3.1",
"prompt": "为什么天空是蓝色的?"
}'
示例:列出可用模型
curl http://localhost:3000/ollama/api/tags
示例:生成嵌入向量
curl -X POST http://localhost:3000/ollama/api/embed -d '{
"model": "llama3.1",
"input": ["Open WebUI很棒!", "生成嵌入向量。"]
}'
四、多语言代码示例

下面提供了多种编程语言调用Open WebUI API的示例代码,便于开发者快速集成。
Python示例
import requests
def chat_with_model(api_key, model="llama3.1", query="你好,请介绍一下自己"):
url = 'http://localhost:3000/api/chat/completions'
headers = {
'Authorization': f'Bearer {api_key}',
'Content-Type': 'application/json'
}
payload = {
'model': model,
'messages': [{'role': 'user', 'content': query}]
}
response = requests.post(url, headers=headers, json=payload)
return response.json()
# 示例用法
api_key = "your_api_key_here"
result = chat_with_model(api_key)
print(result['choices'][0]['message']['content'])
JavaScript/Node.js示例
async function chatWithModel(apiKey, model = "llama3.1", query = "你好,请介绍一下自己") {
const url = 'http://localhost:3000/api/chat/completions';
const response = await fetch(url, {
method: 'POST',
headers: {
'Authorization': `Bearer ${apiKey}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
model: model,
messages: [{role: 'user', content: query}]
})
});
return await response.json();
}
// 示例用法
const apiKey = "your_api_key_here";
chatWithModel(apiKey)
.then(result => console.log(result.choices[0].message.content))
.catch(error => console.error('Error:', error));
PHP示例
<?php
function chatWithModel($apiKey, $model = "llama3.1", $query = "你好,请介绍一下自己") {
$url = 'http://localhost:3000/api/chat/completions';
$data = [
'model' => $model,
'messages' => [
['role' => 'user', 'content' => $query]
]
];
$options = [
'http' => [
'header' => "Content-type: application/json\r\n" .
"Authorization: Bearer $apiKey\r\n",
'method' => 'POST',
'content' => json_encode($data)
]
];
$context = stream_context_create($options);
$result = file_get_contents($url, false, $context);
return json_decode($result, true);
}
// 示例用法
$apiKey = "your_api_key_here";
$result = chatWithModel($apiKey);
echo $result['choices'][0]['message']['content'];
?>
流式输出处理
如果需要实现类似ChatGPT那样的流式输出效果,可以设置stream: true
参数,下面是处理流式响应的Python示例:
import requests
def stream_chat(api_key, model="llama3.1", query="生成一篇短文"):
url = 'http://localhost:3000/api/chat/completions'
headers = {
'Authorization': f'Bearer {api_key}',
'Content-Type': 'application/json'
}
payload = {
'model': model,
'messages': [{'role': 'user', 'content': query}],
'stream': True
}
with requests.post(url, headers=headers, json=payload, stream=True) as response:
for line in response.iter_lines():
if line:
line = line.decode('utf-8')
if line.startswith('data: '):
data = line[6:] # 去掉 'data: ' 前缀
if data != '[DONE]':
try:
chunk = json.loads(data)
content = chunk['choices'][0]['delta'].get('content', '')
if content:
print(content, end='', flush=True)
except json.JSONDecodeError:
pass
五、知识库增强功能(RAG)
Open WebUI提供了强大的检索增强生成(RAG)功能,允许您基于外部文档和知识库进行问答。这部分将详细介绍如何通过API利用RAG功能。
5.1 上传文件
首先需要上传您希望模型引用的文档:
curl -X POST -H "Authorization: Bearer YOUR_API_KEY" -H "Accept: application/json" \
-F "file=@/path/to/your/document.pdf" http://localhost:3000/api/v1/files/
成功上传后会返回文件ID,需要记录这个ID用于后续操作。
5.2 添加文件到知识集合
将上传的文件添加到知识集合中(可选步骤):
curl -X POST http://localhost:3000/api/v1/knowledge/{knowledge_id}/file/add \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"file_id": "your-file-id-here"}'
5.3 在聊天中使用文件或知识集合
使用单个文件:
curl -X POST http://localhost:3000/api/chat/completions \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-3.5-turbo",
"messages": [
{"role": "user", "content": "根据文档内容解释主要概念。"}
],
"files": [
{"type": "file", "id": "your-file-id-here"}
]
}'
使用知识集合:
curl -X POST http://localhost:3000/api/chat/completions \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-3.5-turbo",
"messages": [
{"role": "user", "content": "分析知识库中提到的历史观点。"}
],
"files": [
{"type": "collection", "id": "your-collection-id-here"}
]
}'
5.4 Python中的RAG实现
import requests
def chat_with_document(api_key, file_id, query, model="gpt-3.5-turbo"):
url = 'http://localhost:3000/api/chat/completions'
headers = {
'Authorization': f'Bearer {api_key}',
'Content-Type': 'application/json'
}
payload = {
'model': model,
'messages': [{'role': 'user', 'content': query}],
'files': [{'type': 'file', 'id': file_id}]
}
response = requests.post(url, headers=headers, json=payload)
return response.json()
# 示例使用
api_key = "your_api_key_here"
file_id = "your_file_id_here"
result = chat_with_document(api_key, file_id, "总结这份文档的主要内容")
print(result['choices'][0]['message']['content'])
六、常见问题与调试技巧
6.1 常见错误与解决方案
401 Unauthorized(未授权)
- 问题:API密钥无效或缺失
- 解决方案:
- 检查Authorization头格式是否正确
- 确认API密钥是否有效且未过期
- 重新生成API密钥并尝试
404 Not Found(找不到资源)
- 问题:API端点URL错误或资源不存在
- 解决方案:
- 检查URL路径是否正确
- 确认Open WebUI服务是否正常运行
- 检查模型ID或文件ID是否存在
500 Internal Server Error(服务器内部错误)
- 问题:服务器处理请求时出现异常
- 解决方案:
- 检查服务器日志以获取详细错误信息
- 确认所请求的模型是否可用
- 减少请求复杂度,例如缩短输入长度
6.2 调试建议
- 启用详细日志:运行Open WebUI时设置环境变量
ENV=dev
可获取更详细的日志 - 使用Swagger文档:在开发模式下访问
/docs
路径查看交互式API文档 - 检查网络连接:确保客户端与Open WebUI服务器之间网络连接正常
- 监控模型状态:使用
/api/models
端点检查模型是否加载完成 - 增量测试:从简单的API调用开始,逐步增加复杂度,以便更容易定位问题
七、中转API服务优势
对于很多开发者和企业来说,直接调用官方API可能面临多种挑战,如网络限制、成本控制等。中转API服务(如laozhang.ai)提供了一个优化的解决方案。

7.1 laozhang.ai中转API优势
- 成本优化:相比官方API直接调用,可降低30%-80%调用成本
- 稳定性提升:针对国内网络环境优化,提供更稳定的连接
- 统一接口:通过一个API密钥访问多种大模型服务
- 简化计费:提供更灵活的计费模式和余额管理
- 降低延迟:优化的服务器架构,减少响应时间
7.2 接入示例
- 访问https://api.laozhang.ai/register/?aff_code=JnIT注册账号
- 获取API密钥
- 修改API调用地址:
// 原始调用
const url = 'http://localhost:3000/api/chat/completions';
// 替换为中转API
const url = 'https://api.laozhang.ai/v1/chat/completions';
laozhang.ai提供完全兼容OpenAI格式的API,因此可以无缝替换现有代码中的API地址,无需更改请求结构和处理逻辑。
7.3 优惠福利
通过本文链接注册laozhang.ai,即可获得免费测试额度!更多优惠和技术支持,请添加老张微信:ghj930213
八、总结与展望
Open WebUI API为开发者提供了一种强大且灵活的方式来集成多种大语言模型功能。通过本文介绍的API调用方法,您可以:
- 通过统一接口调用本地和云端各类大模型
- 利用RAG功能实现基于知识库的智能问答
- 通过流式输出创建更具交互性的用户体验
- 集成到各类应用场景,从网站到移动APP
随着Open WebUI持续更新,API功能也将不断扩展。建议定期查看官方文档以获取最新特性和改进。
希望本文能帮助您充分利用Open WebUI API的强大功能,构建更智能、更有价值的应用!如有任何问题或建议,欢迎在评论区留言讨论。