部署自己的网页chatgpt
Janz Lv4

之前一直使用NextChat作为自己的Ai前端使用的,但是这个客户端最大的问题是不能同步记录,或者说同步很难用,所以使用自己的服务器部署了自己用也可以分享给朋友使用的LibreChat,它复刻了网页版的ChatGPT,同时新版本也带来了agents的功能来替代插件功能,使其拥有了更加灵活的能力。

部署内容

  • LibreChat——一个类似于网页版ChatGPT的web客户端
  • New-Api/Uni-Api——中转代理api
  • [可选]LibreChat Agents——让LibreChat实现联网搜索

Docker Compose部署LibreChat

  1. 克隆仓库

$ git clone https://github.com/danny-avila/LibreChat.git && cd LibreChat

  1. 复制.env

$ cp .env.example .env

  1. (可选)配置.env

默认LibreChat已经有几种官方的模型,例如openai,Claude,Google等,如果使用的是官方的服务,那么可以不用配置.env​直接启动即可,我自己使用了第三方的api中转,所以需要配置一下环境变量,主要是两个变量OPENAI_API_KEY​和OPENAI_REVERSE_PROXY​注意OPENAI_REVERSE_PROXY​的值需要写到/v1​。

  1. 启动

$ docker compose up -d

  1. 访问http://localhost:3080/

参考文档:www.librechat.ai/docs/local/docker

Uni-Api

因为默认的LibreChat没有国内的大模型代理,配置起来比较麻烦,加上有一些模型没有的api请求地址和openai不同,所以出现了不少二次分发key的代理集合,可以把各家的模型接入到一起使用类openai的方式接入,只需要配置一处,即可以随处使用。我主要使用的有两个:

  • New-Api:大而全的集合代理,带有统计系统,适合于运营
  • Uni-Api:只有集合提供商的功能,没有其他的功能,非常的简介,甚至目前还没有前端,我目前使用的就是这个。
  1. compose.yml文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    services:
    uni-api:
    container_name: uniapi
    image: yym68686/uni-api:latest
    ports:
    - '0.0.0.0:8010:8000'
    volumes:
    - ./api.yaml:/home/api.yaml # 如果已经设置 CONFIG_URL,不需要挂载配置文件
    - ./uniapi_db:/home/data # 如果不想保存统计数据,不需要挂载该文件夹
    restart: always
  2. api.yaml文件
    官网有示例,我只配置了中转openai的代理和硅基流动,官方配置详细示例

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    providers:
    - provider: api # 服务提供商名称, 如 openai、anthropic、gemini、openrouter,随便取名字,必填
    base_url: https://xxxxx/v1/chat/completions # 后端服务的API地址,必填
    api: sk-Z1JMOZyECWvAkoPiE49dD221B59xxxxxxxxxxxx # 提供商的API Key,必填
    # model: # 选填,如果不配置 model,会自动通过 base_url 和 api 通过 /v1/models 端点获取可用的所有模型。
    # - gpt-4o # 可以使用的模型名称,必填
    # - claude-3-5-sonnet-20240620: claude-3-5-sonnet # 重命名模型,claude-3-5-sonnet-20240620 是服务商的模型名称,claude-3-5-sonnet 是重命名后的名字,可以使用简洁的名字代替原来复杂的名称,选填
    # - dall-e-3
    tools: true
    - provider: siliconflow
    base_url: https://api.siliconflow.cn/v1/chat/completions
    api: # 支持多个 API Key,多个 key 自动开启轮训负载均衡,至少一个 key,必填
    - sk-jueqfzdklhewxkajbelgtxxxxxxxxxxxxxxxxxxxxxxxxxxx
    - sk-sspwxmxmvoksgsqjuefnnxxxxxxxxxxxxxxxxxxxxxxxxxxx
    # model:
    # - Qwen/QwQ-32B-Preview
    # - Qwen/Qwen2.5-Coder-32B-Instruct
    # - claude-3-5-sonnet-20240620: claude-3-5-sonnet # 重命名模型,claude-3-5-sonnet-20240620 是服务商的模型名称,claude-3-5-sonnet 是重命名后的名字,可以使用简洁的名字代替原来复杂的名称,选填
    # tools: true # 是否支持工具,如生成代码、生成文档等,默认是 true,选填

    api_keys:
    - api: sk-WifWIaIxCvS2dJc_hBQvFxxxxxxxxxxxxxxxxxxxxx # API Key,用户使用本服务需要 API key,必填
    model: # 该 API Key 可以使用的模型,必填。默认开启渠道级轮询负载均衡,每次请求模型按照 model 配置的顺序依次请求。与 providers 里面原始的渠道顺序无关。因此你可以设置每个 API key 请求顺序不一样。
    - api/* # 可以使用的模型名称,可以使用所有提供商提供的 gpt-4o 模型
    - siliconflow/* # 可以使用的模型名称,可以使用所有提供商提供的 claude-3-5-sonnet 模型
    # - gemini/* # 可以使用的模型名称,仅可以使用名为 gemini 提供商提供的所有模型,其中 gemini 是 provider 名称,* 代表所有模型
    role: admin

    preferences: # 全局配置
    model_timeout: # 模型超时时间,单位为秒,默认 100 秒,选填
    gpt-4o: 10 # 模型 gpt-4o 的超时时间为 10 秒,gpt-4o 是模型名称,当请求 gpt-4o-2024-08-06 等模型时,超时时间也是 10 秒
    claude-3-5-sonnet: 10 # 模型 claude-3-5-sonnet 的超时时间为 10 秒,当请求 claude-3-5-sonnet-20240620 等模型时,超时时间也是 10 秒
    default: 10 # 模型没有设置超时时间,使用默认的超时时间 10 秒,当请求的不在 model_timeout 里面的模型时,超时时间默认是 10 秒,不设置 default,uni-api 会使用 环境变量 TIMEOUT 设置的默认超时时间,默认超时时间是 100 秒
    o1-mini: 30 # 模型 o1-mini 的超时时间为 30 秒,当请求名字是 o1-mini 开头的模型时,超时时间是 30 秒
    o1-preview: 100 # 模型 o1-preview 的超时时间为 100 秒,当请求名字是 o1-preview 开头的模型时,超时时间是 100 秒
    cooldown_period: 300 # 渠道冷却时间,单位为秒,默认 300 秒,选填。当模型请求失败时,会自动将该渠道排除冷却一段时间,不再请求该渠道,冷却时间结束后,会自动将该模型恢复,直到再次请求失败,会重新冷却。当 cooldown_period 设置为 0 时,不启用冷却机制。
    error_triggers: # 错误触发器,当模型返回的消息包含错误触发器中的任意一个字符串时,该渠道会自动返回报错。选填
    - The bot's usage is covered by the developer
    - process this request due to overload or policy
  3. 启动
    $ docker compose up -d

配置LibreChat使用自定义渠道

  1. 添加docker-compose.override.yml​内容如下

    1
    2
    3
    4
    5
    6
    services:
    api:
    volumes:
    - type: bind
    source: ./librechat.yaml
    target: /app/librechat.yaml
  2. 添加librechat.yaml​内容如下,注意备注修改

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    version: 1.1.5
    cache: true
    endpoints:
    custom:
    - name: "Selfapi"
    apiKey: "" # 上面填写的api_keys中的api
    baseURL: "http://uniapi:8000/v1" # uni-api的地址,如果用docker 桥接模式可以用容器名:端口的形式
    models:
    default: ["Qwen/QwQ-32B-Preview", "Qwen/Qwen2.5-Coder-32B-Instruct", "o1-mini", "o1-preview", "gpt-4o-mini", "gpt-4o", "claude-3-5-sonnet", "command-r-plus"]
    fetch: true
    titleConvo: true
    titleModel: "QwQ-32B-Preview"
    summarize: false
    summaryModel: "QwQ-32B-Preview"
    forcePrompt: false
    modelDisplayLabel: "Selfapi"
    dropParams:
    - "stop"
    - "user"
    - "presence_penalty"
    - "frequency_penalty"

参考文档:librechat.yaml配置

  1. 重启LibreChat即可

配置Agents使LibreChat支持联网搜索

agents​必然是Librechat的一大杀器,继承于插件,容易配置。

  1. 配置.env​启用agents
    添加EXPERIMENTAL_AGENTS=true​到.env​文件

  2. 申请google search key
    申请地址,需要拿到引擎id和json的api key

  3. 把google申请的添加到.env​配置文件

    1
    2
    GOOGLE_SEARCH_API_KEY="" #json api key
    GOOGLE_CSE_ID="" 引擎id
  4. 配置agents
    image
    image​​image

  5. 提供的模型中需要支持函数调用,另外需要搭配一些prompt才好。

后记

Ai还是需要有一个好的Prompt才好用的。

 评论
评论插件加载失败
正在加载评论插件
由 Hexo 驱动 & 主题 Keep