> 技术文档 > OpenWebUI如何对外提供HTTP接口?_openwebui api

OpenWebUI如何对外提供HTTP接口?_openwebui api

from 公众号:程序员more

OpenWebUI通过HTTP方式提供对外接口,使得开发者可以通过HTTP方式快速对接拥有RAG能力的模型基座。

01 OpenWebUI配置app key

OpenWebUI使用BearerToken机制对 API 请求进行身份验证。从 Open WebUI 中的“设置>帐户”获取 API 密钥,或者使用 JWT(JSON Web 令牌)进行身份验证。如下图获取API Key

其中JWT是有时效性限制,API密钥是永久的。

02 API使用说明

注意每次请求都需要将API KEY密钥设置到HTTP请求头

Authorization: Bearer eyJhbGci***

基础接口功能包括列出在OpenWebUI注册的模型和模型进行聊天。

接口作用

列出所有已经配置在OpenWebUI的模型

地址

/api/models

方法

GET

请求示例

127.0.0.1:3000/api/models

响应结果

{\"data\": [{\"id\": \"deepseek-r1:1.5b\",\"name\": \"deepseek-r1:1.5b\",\"object\": \"model\",\"created\": 1741313196,\"owned_by\": \"ollama\",\"ollama\": {\"name\": \"deepseek-r1:1.5b\",\"model\": \"deepseek-r1:1.5b\",\"modified_at\": \"2025-02-26T09:59:46.3066414+08:00\",\"size\": 1117322599,\"digest\": \"a42b25d8c10a841bd24724309898ae851466696a7d7f3a0a408b895538ccbc96\",\"details\": {\"parent_model\": \"\",\"format\": \"gguf\",\"family\": \"qwen2\",\"families\": [\"qwen2\"],\"parameter_size\": \"1.8B\",\"quantization_level\": \"Q4_K_M\"},\"urls\": [0]},\"actions\": []}]}

以下是简单的聊天调用,文章下面会介绍关联知识库的聊天调用方式

接口作用

调用后端模型进行聊天

地址

/api/chat/completions

方法

POST

请求示例

{      \"model\": \"deepseek-r1:1.5b\",      \"messages\": [        {          \"role\": \"user\",          \"content\": \"你好啊\"        }      ]}

参数说明

model

/api/models接口返回的模型id

role

user=⽤户输⼊

assistant=AI助⼿的回复

system=系统,即设定AI的⾏为

tool=⼯具调⽤返回值

content

提问内容

响应结果

{    \"id\": \"deepseek-r1:1.5b-09322e4f-ba07-42fc-894c-c64424240670\",    \"created\": 1741313942,    \"model\": \"deepseek-r1:1.5b\",    \"choices\": [        {            \"index\": 0,            \"logprobs\": null,            \"finish_reason\": \"stop\",            \"message\": {                \"content\": \"\\n\\n\\n\\n你好!很高兴见到你,有什么我可以帮忙的吗?\",                \"role\": \"assistant\"            }        }    ],    \"object\": \"chat.completion\",    \"usage\": {        \"response_token/s\": 22.73,        \"prompt_token/s\": 41.32,        \"total_duration\": 890745200,        \"load_duration\": 19290900,        \"prompt_eval_count\": 5,        \"prompt_tokens\": 5,        \"prompt_eval_duration\": 121000000,        \"eval_count\": 17,        \"completion_tokens\": 17,        \"eval_duration\": 748000000,        \"approximate_total\": \"0h0m0s\",        \"total_tokens\": 22,        \"completion_tokens_details\": {            \"reasoning_tokens\": 0,            \"accepted_prediction_tokens\": 0,            \"rejected_prediction_tokens\": 0        }    }}

参数说明

message.content

响应内容

 聊天中使用流式响应

接口作用

在聊天中使用流式响应,结果不是一次性返回,而是分段返回,参数中设置stream等于true

地址

/api/chat/completions

方法

POST

请求示例

{      \"model\": \"deepseek-r1:1.5b\",      \"messages\": [        {          \"role\": \"user\",          \"content\": \"什么是java\"        }      ],      \"stream\":true}

响应结果

图片

数据以流式响应:

data: {\"id\": \"deepseek-r1:1.5b-fc918971-baab-4f2f-a359-cafb9c104ab2\", \"created\": 1741331179, \"model\": \"deepseek-r1:1.5b\", \"choices\": [{\"index\": 0, \"logprobs\": null, \"finish_reason\": null, \"delta\": {\"content\": \"\\u7684\\u5173\\u952e\"}}], \"object\": \"chat.completion.chunk\"}

……

data: {\"id\": \"deepseek-r1:1.5b-0fae48d0-162d-4cef-ba42-54ef12a27c4f\", \"created\": 1741331179, \"model\": \"deepseek-r1:1.5b\", \"choices\": [{\"index\": 0, \"logprobs\": null, \"finish_reason\": null, \"delta\": {\"content\": \"\\u3002\"}}], \"object\": \"chat.completion.chunk\"}

……

data: {\"id\": \"deepseek-r1:1.5b-33a7f78c-0052-47d7-a674-0560458b8107\", \"created\": 1741331179, \"model\": \"deepseek-r1:1.5b\", \"choices\": [{\"index\": 0, \"logprobs\": null, \"finish_reason\": \"stop\", \"delta\": {}}], \"object\": \"chat.completion.chunk\", \"usage\": {\"response_token/s\": 20.83, \"prompt_token/s\": 52.63, \"total_duration\": 99595060200, \"load_duration\": 1483943500, \"prompt_eval_count\": 5, \"prompt_tokens\": 5, \"prompt_eval_duration\": 95000000, \"eval_count\": 2042, \"completion_tokens\": 2042, \"eval_duration\": 98014000000, \"approximate_total\": \"0h1m39s\", \"total_tokens\": 2047, \"completion_tokens_details\": {\"reasoning_tokens\": 0, \"accepted_prediction_tokens\": 0, \"rejected_prediction_tokens\": 0}}}

……

data: [DONE]

 请求中附带知识库文件或者知识库集合

接口作用

请求中附带知识库文件或者知识库集合

地址

/api/chat/completions

方法

POST

请求参数指定知识文件

{      \"model\": \"gpt-4-turbo\",      \"messages\": [        {\"role\": \"user\", \"content\": \"Explain the concepts in this document.\"}      ],      \"files\": [        {\"type\": \"file\", \"id\": \"your-file-id-here\"}      ]}

请求参数指定知识集合

{      \"model\": \"gpt-4-turbo\",      \"messages\": [        {\"role\": \"user\", \"content\": \"Provide insights on the historical perspectives covered in the collection.\"}      ],      \"files\": [        {\"type\": \"collection\", \"id\": \"your-collection-id-here\"}      ]}

接下来了解知识库上传相关API。

03 RAG部分

Retrieval Augmented Generation (RAG) 功能通过整合外部来源的数据来增强响应。下面将说明知识库创建与知识库数据上传相关接口,如没有说明统一的请求头Content-Type=application/json

上传知识库的流程:

1. 创建知识库,接口:/api/v1/knowledge/create;

2. 上传知识库文件,接口:/api/v1/files/

3. 关联知识库与知识库文件,接口:/api/v1/knowledge/{知识库id}/file/add

接口与参数的简单说明

创建知识库

接口

POST /api/v1/knowledge/create

请求参数

{\"name\":\"知识库名称\",\"description\":\"知识库说明\",\"access_control\":null}

响应结果

{    \"id\": \"知识库Id:e13f471f-cc6c-4df1-9210-8eb586bf8b6b\",    \"user_id\": \"e42bf055-03e4-421e-894d-c18a58b6b73d\",    \"name\": \"test\",    \"description\": \"for test\",    \"data\": null,    \"meta\": null,    \"access_control\": null,    \"created_at\": 1741317031,    \"updated_at\": 1741317031,    \"files\": null}

上传知识库文件

接口

POST /api/v1/files/

请求参数

文件以二进制流上传

请求头:content-type:multipart/form-data;

响应结果

{    \"id\": \"77cb080c-5de8-4ffb-9304-d658e44a4dfb\",    \"user_id\": \"e42bf055-03e4-421e-894d-c18a58b6b73d\",    \"hash\": \"93737981707e6327ca3adf45a7ae11bfd33bc7fcbb0de82c85c390efa1a2f01c\",    \"filename\": \"日志.txt\",    \"data\": {        \"content\": \"文件上传内容\"    },    \"meta\": {        \"name\": \"日志.txt\",        \"content_type\": \"text/plain\",        \"size\": 5587,        \"data\": {},        \"collection_name\": \"file-77cb080c-5de8-4ffb-9304-d658e44a4dfb\"    },    \"created_at\": 1741317221,    \"updated_at\": 1741317221}

上传知识库文件

接口

POST  /api/v1/knowledge/{id}/file/add

id对应/api/v1/knowledge/create接口响应的知识库id

请求参数

{\"file_id\":\"77cb080c-5de8-4ffb-9304-d658e44a4dfb\"}

file_id对应/api/v1/files接口响应的id

响应结果

{    \"id\": \"e13f471f-cc6c-4df1-9210-8eb586bf8b6b\",    \"user_id\": \"e42bf055-03e4-421e-894d-c18a58b6b73d\",    \"name\": \"test\",    \"description\": \"for test\",    \"data\": {        \"file_ids\": [            \"77cb080c-5de8-4ffb-9304-d658e44a4dfb\"        ]    },    \"meta\": null,    \"access_control\": null,    \"created_at\": 1741317031,    \"updated_at\": 1741317226,    \"files\": [        {            \"id\": \"77cb080c-5de8-4ffb-9304-d658e44a4dfb\",            \"user_id\": \"e42bf055-03e4-421e-894d-c18a58b6b73d\",            \"hash\": \"93737981707e6327ca3adf45a7ae11bfd33bc7fcbb0de82c85c390efa1a2f01c\",            \"filename\": \"日志.txt\",            \"path\": \"/app/backend/data/uploads/77cb080c-5de8-4ffb-9304-d658e44a4dfb_日志.txt\",            \"data\": {                \"content\": \"文件内容\"            },            \"meta\": {                \"name\": \"日志.txt\",                \"content_type\": \"text/plain\",                \"size\": 5587,                \"data\": {},                \"collection_name\": \"e13f471f-cc6c-4df1-9210-8eb586bf8b6b\"            },            \"access_control\": null,            \"created_at\": 1741317221,            \"updated_at\": 1741317221        }    ]}

 如果想实现多轮会话,可以看/api/v1/chats/{chat_id},它主要负责管理会话,包括查询(GET)、新增(POST),主要通过chat_id关联/api/chat/completions。

如果想了解其他的接口我们可以通过在浏览器打开调试窗口查看网络调用情况。