LiteLLM + NextChat部署多账号AI聊天系统

前因

公司需要一个集中统一的AI使用平台,我们最早用的是NextChat,最初是使用了一个统一的OpenAI的key,来使用Chatgpt3.5/Chatgpt4之类。

但是随着AI的蓬勃发展,单纯的chatgpt很显然是不够的,我们还希望使用Claude Sonnet,还希望使用更新的Deepseek等,我们需要一个能够支持AWS Bedrock体系的proxy,后来我们选择了one-api,使用one-api到是比较方便,可以快速对接各个平台,比如看看我们这里:
20250322171826

本来使用的好好的,但是突然之间他就不更新了,不支持最新的AWS Bedrock的Claude Sonnet3.7 以及 Deepseek-r1,搞得我这边只好想想别的办法了,还好,找到了,那就是使用LiteLLM来部署。

NextChat介绍

NextChat是一个AI聊天工具UI,可以比较完整的支持大量的现有大模型,可以自由添加和切换不同厂商的不同LLM,还能快速一键部署。我们最近2年一直在使用这个作为公司内部使用大模型的前端。
界面比较清爽,使用比较舒适,而且更新也很频繁,让人放心(一个项目如果不更新,那么很快就会被淘汰,比如我们不再使用的one-api)。
可以看看这个UI的一些官方界面:
20250325143810

LiteLLM介绍

LiteLLM是一个开源的代理库,支持多种AI平台,包括OpenAI、Anthropic、AWS Bedrock、Cohere、HuggingFace、Azure、Anthropic、Cerebrium等。
你可以使用它的python sdk来调用这些AI平台,也可以使用它的代理服务来代理这些AI平台。

调用API

调用很简单,就是综合了各个平台的sdk,然后封装成一个统一的接口,使用起来很方便。
先安装python sdk

pip install litellm
from litellm import completion
import os

## set ENV variables
os.environ["OPENAI_API_KEY"] = "your-openai-key"
os.environ["ANTHROPIC_API_KEY"] = "your-anthropic-key"

messages = [{ "content": "Hello, how are you?","role": "user"}]

# openai call
response = completion(model="openai/gpt-4o", messages=messages)

# anthropic call
response = completion(model="anthropic/claude-3-sonnet-20240229", messages=messages)
print(response)

代理服务

代理服务也很简单,就是一个代理服务,支持多种协议,比如http、grpc、websocket等。
代理服务的好处是,你可以使用它来代理多个AI平台,这样就可以让多个AI平台共用一个代理服务,这样就可以避免多个AI平台共用同一个key的问题。

pip install 'litellm[proxy]'

实战部署

很显然,我们公司需要的是LiteLLM的代理能力(他们自己也称为网关gateway能力)。

编写配置文件

我这里有一个OpenAI的key, 一个Bedrock的key, 下面是我的配置:
config.yaml:

model_list:
  - model_name: "openai/*"
    litellm_params:
      model: "openai/*"
      api_key: "这里是我的openai key"

  - model_name: sonnet-3-7
    litellm_params:
      model: bedrock/us.anthropic.claude-3-7-sonnet-20250219-v1:0
      aws_access_key_id: 这里是我的aws key
      aws_secret_access_key: 这里是我的aws secret key
      aws_region_name: us-east-1
      
  - model_name: sonnet-3-5
    litellm_params:
      model: bedrock/anthropic.claude-3-5-sonnet-20240620-v1:0
      aws_access_key_id: 这里是我的aws key
      aws_secret_access_key: 这里是我的aws secret key
      aws_region_name: us-east-1

  - model_name: deepseek-r1
    litellm_params:
      model: bedrock/converse/us.deepseek.r1-v1:0
      aws_access_key_id: 这里是我的aws key
      aws_secret_access_key: 这里是我的aws secret key
      aws_region_name: us-east-1

litellm_settings:
  modify_params: true
  drop_params: true

启动LiteLLM代理服务

使用docker启动LiteLLM代理服务:

docker run -d -p 4000:4000  -v $(pwd)/config.yaml:/app/config.yaml ghcr.io/berriai/litellm:main-latest --config /app/config.yaml

如果是windows电脑,这里的$(pwd)很有可能出现路径问题,你就直接换成你的本地路径,比如:

docker run -d -p 4000:4000  -v D:/litellm/config.yaml:/app/config.yaml ghcr.io/berriai/litellm:main-latest --config /app/config.yaml

启动next-chat

使用docker启动nextchat:

docker run -d -p 3000:3000  -e CODE=123123 -e BASE_URL="http://host.docker.internal:4000"  -e OPENAI_API_KEY="sk-1234" -e CUSTOM_MODELS="-all,+gpt-4o@OpenAI,+o3-mini@OpenAI,+sonnet-3-5@OpenAI,+deepseek-r1@OpenAI,+sonnet-3-7@OpenAI" yidadaa/chatgpt-next-web 

这里解释一下,code是nextchat的访问码,后面会提到使用方式。
-e 是添加环境变量,BASE_URL是API的基础地址,我这里是使用了LiteLLM的地址,然后 OPENAI_API_KEY是前面litellm的key(我们可以修改一下默认key), 主要是这里的CUSTOM_MODELS,先 -all就是去掉所有的默认模型(不-all的话会出来一大堆没用的),然后再添加。 这里的+gpt-4o@OpenAI是表示用OpenAI这个供应商家的gpt-4o模型,这个好理解,那么后面的+sonnet-3-5@OpenAI,+deepseek-r1@OpenAI,+sonnet-3-7@OpenAI为何也是用OpenAI这个供应商呢?因为LiteLLM是支持使用OpenAI统一的chatgpt的接口格式的,我们让nextchat认为我们就在用OpenAI。
我告诉你我在用OpenAI格式
然后我的地址和key也都是自定义的,告诉你了,那么你就把我当成是一个OpenAI的模型好了。
注意:BASE_URL中是Docker预留的本机解析的DNS,我这单机测试的时候使用的,如果把这个写成127.0.0.1或者localhost会报错。比如:

docker run -d -p 3000:3000  -e CODE=123123 -e BASE_URL="http://127.0.0.1:4000"  -e OPENAI_API_KEY="sk-1234" -e CUSTOM_MODELS="-all,+gpt-4o@OpenAI,+o3-mini@OpenAI,+sonnet-3-5@OpenAI,+deepseek-r1@OpenAI,+sonnet-3-7@OpenAI" yidadaa/chatgpt-next-web 

那么会一直提示错误

20250322173731

因为这是Docker网络隔离问题,因为我的LiteLLM也是在docker里面部署的,nextchat是在另一个docker里面部署的,他们是两个隔离的环境,如果nextchat需要使用LiteLLM, 那么需要在nextchat的docker里面添加LiteLLM的ip地址,因为LiteLLM是4000:4000,映射到主机上的,我们需要用一个主机的本地ip(而不是上面的127.0.0.1这种本地回环ip)或者docker提前预留的DNS名host.docker.internal 这样就找得到了。

使用本机ip地址也可以,比如ipconfig一下,查看地址:
20250322174103

然后:

docker run -d -p 3000:3000  -e CODE=123123 -e BASE_URL="http://10.30.110.196:4000"  -e OPENAI_API_KEY="sk-1234" -e CUSTOM_MODELS="-all,+gpt-4o@OpenAI,+o3-mini@OpenAI,+sonnet-3-5@OpenAI,+deepseek-r1@OpenAI,+sonnet-3-7@OpenAI" yidadaa/chatgpt-next-web 

如果是生产使用的话,一般会用nginx来反代LiteLLM,这样就可以避免上面的问题了,上面的BASE_URL就是具体配置的域名信息比如https://litellm.xxx.com 即可了

查看效果

LiteLLM代理和NextChat的UI都部署之后,就可以看看效果了:
进去先在设置里面填写部署时候的code:
20250322174736
对话页面就可以看到多个大模型了,可以点击切换按钮切换模型:
20250322174635

可以看看deepseek-r1的效果了:
20250322174859

生产部署

要上生产的话,最好使用docker-compose来统一部署
在config.yaml文件的同级目录中添加docker-compose.yaml文件,内容如下:

version: '3.8'

services:
  litellm:
    image: ghcr.io/berriai/litellm:main-latest
    container_name: litellm
    ports:
      - "4000:4000"
    volumes:
      - ./config.yaml:/app/config.yaml  # 确保配置文件在项目目录下
    command: --config /app/config.yaml
    restart: unless-stopped

  chatgpt-web:
    image: yidadaa/chatgpt-next-web
    container_name: chatgpt-web
    ports:
      - "3000:3000"
    environment:
      CODE: "123123"
      BASE_URL: "http://litellm:4000"   # 使用服务名代替 IP
      OPENAI_API_KEY: "sk-1234"
      CUSTOM_MODELS: "-all,+gpt-4o@OpenAI,+o3-mini@OpenAI,+sonnet-3-5@OpenAI,+deepseek-r1@OpenAI,+sonnet-3-7@OpenAI"
    depends_on:
      - litellm
    restart: unless-stopped

确保前面的config.yaml文件和docker-compose.yaml文件在同一个目录下,
20250322175939
然后执行以下命令:

docker-compose up -d

即可启动,启动成功:
20250322180038

然后访问: http://localhost:3000 即可

但是我这里除了给nextchat用,还需要给其他同事使用api来调用,因此打算部署起来,这个用nginx反代一下就可以了,反代之后的域名替换掉上面的BASE_URL即可。

<think>好的,用户现在问的是有没有大模型聊天界面的UI开源项目推荐。之前他们询问过如何本地部署DeepSeek,所以可能他们在尝试搭建自己的聊天应用,现在需要前端界面。 首先,我需要回忆一下常见的开源聊天UI项目。比如Gradio和Streamlit,这两个是Python库,适合快速搭建界面,特别是Gradio,Hugging Face的模型演示常用,用户可能已经接触过。然后是更专业的项目,比如Chatbot UI,这是一个仿ChatGPT的界面,支持多个模型,可能用户需要更接近产品级的界面。 接下来要考虑用户的需求。他们可能已经部署好了模型,现在需要一个前端让用户交互。可能需要支持多个模型,或者有扩展性,比如通过API调用。用户可能对界面美观和易用性有要求,比如响应式设计、Markdown支持、历史记录等。 然后需要评估每个推荐项目的优缺点。比如Gradio和Streamlit适合快速原型,但定制性可能不足。Chatbot UI和NextChat(原名ChatGPT Next)更接近真实产品,可能需要一些前端部署知识。Open WebUI如果用户使用Ollama,可能集成更方便,适合本地模型。其他如dify-ai和fastgpt可能更适合企业级,但需要看用户的具体情况。 还要注意用户的技术背景。如果他们熟悉Python,Gradio可能更容易上手。如果他们想要更复杂的功能,比如用户管理或数据存储,可能需要更全面的解决方案。另外,用户可能需要支持移动端,所以响应式设计是一个加分项。 最后,需要提醒用户根据技术栈和需求选择,比如是否需要开源协议允许商用,是否需要后端集成,或者是否需要额外的功能如知识库支持。可能用户后续会问如何集成自己的模型到这些UI中,所以可以提前考虑是否需要说明基本的API配置步骤。</think>以下是一些热门的开源大模型聊天界面UI项目推荐,适用于快速搭建类似 ChatGPT 的交互界面,支持本地或云端模型接入: --- ### **1. 轻量级工具(适合快速部署)** 1. **Gradio** - **特点**: Python库,5分钟搭建Web界面,支持Markdown、文件上传和流式输出 - **代码示例**: ```python import gradio as gr def chat(input_text): return "模型回复:" + input_text gr.ChatInterface(chat).launch() ``` - **GitHub**: https://github.com/gradio-app/gradio 2. **Streamlit Chat** - **特点**: 基于Streamlit的对话模板,适合数据科学家快速验证原型 - **GitHub模板**: https://github.com/streamlit/llm-examples --- ### **2. 高仿ChatGPT风格(推荐生产级使用)** 1. **Chatbot UI** - **特点**: 支持多模型API接入(OpenAI/Anthropic/Mistral等),支持对话历史、系统提示词 - **部署**: 支持Vercel一键部署,前端基于Next.js - **GitHub**: https://github.com/mckaywrigley/chatbot-ui 2. **NextChat (原名ChatGPT Next)** - **特点**: 支持Azure/本地模型API,提供用户管理、付费系统等扩展功能 - **Demo**: https://chat.nextweb.fun - **GitHub**: https://github.com/ChatGPTNextWeb/ChatGPT-Next-Web --- ### **3. 自托管企业级方案** 1. **Open WebUI** - **特点**: 专为本地部署设计(如Ollama),支持模型管理、RAG知识库检索 - **亮点**: 无需代码,Docker一键启动,界面交互最接近ChatGPT - **GitHub**: https://github.com/open-webui/open-webui 2. **dify-ai** - **特点**: 支持可视化工作流编排,内置知识库和Agent功能 - **适用场景**: 企业级AI应用开发 - **GitHub**: https://github.com/langgenius/dify --- ### **4. 其他特色项目** - **fastgpt** 支持知识库问答的对话框架,适合垂直领域应用 GitHub: https://github.com/labring/FastGPT - **quivr** 主打“第二大脑”概念,支持多格式文件上传与AI分析 GitHub: https://github.com/QuivrHQ/quivr --- ### **选择建议** - **个人/小团队**: 优先选择 `Chatbot UI` 或 `NextChat`,部署简单且社区活跃 - **本地模型测试**: 使用 `Gradio` 或 `Open WebUI` 快速验证 - **企业级应用**: 考虑 `dify-ai` 或 `fastgpt` 的完整解决方案 大部分项目通过修改API配置即可接入自研模型(如将OpenAI接口替换为本地模型的兼容API),具体可参考各项目的文档。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值