
之前一直使用NextChat作为自己的Ai前端使用的,但是这个客户端最大的问题是不能同步记录,或者说同步很难用,所以使用自己的服务器部署了自己用也可以分享给朋友使用的LibreChat,它复刻了网页版的ChatGPT,同时新版本也带来了agents的功能来替代插件功能,使其拥有了更加灵活的能力。
部署内容
Docker Compose部署LibreChat
- 克隆仓库
$ git clone https://github.com/danny-avila/LibreChat.git && cd LibreChat
- 复制
.env
$ cp .env.example .env
- (可选)配置
.env
默认LibreChat已经有几种官方的模型,例如openai,Claude,Google等,如果使用的是官方的服务,那么可以不用配置.env
直接启动即可,我自己使用了第三方的api中转,所以需要配置一下环境变量,主要是两个变量OPENAI_API_KEY
和OPENAI_REVERSE_PROXY
注意OPENAI_REVERSE_PROXY
的值需要写到/v1
。
- 启动
$ docker compose up -d
- 访问
http://localhost:3080/
参考文档:www.librechat.ai/docs/local/docker
Uni-Api
因为默认的LibreChat没有国内的大模型代理,配置起来比较麻烦,加上有一些模型没有的api请求地址和openai不同,所以出现了不少二次分发key的代理集合,可以把各家的模型接入到一起使用类openai的方式接入,只需要配置一处,即可以随处使用。我主要使用的有两个:
- New-Api:大而全的集合代理,带有统计系统,适合于运营
- Uni-Api:只有集合提供商的功能,没有其他的功能,非常的简介,甚至目前还没有前端,我目前使用的就是这个。
compose.yml文件
1
2
3
4
5
6
7
8
9
10services:
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: alwaysapi.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
39providers:
- 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启动
$ docker compose up -d
配置LibreChat使用自定义渠道
添加
docker-compose.override.yml
内容如下1
2
3
4
5
6services:
api:
volumes:
- type: bind
source: ./librechat.yaml
target: /app/librechat.yaml添加
librechat.yaml
内容如下,注意备注修改1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21version: 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配置
- 重启LibreChat即可
配置Agents使LibreChat支持联网搜索
agents
必然是Librechat的一大杀器,继承于插件,容易配置。
配置
.env
启用agents
添加EXPERIMENTAL_AGENTS=true
到.env
文件申请google search key
申请地址,需要拿到引擎id和json的api key把google申请的添加到
.env
配置文件1
2GOOGLE_SEARCH_API_KEY="" #json api key
GOOGLE_CSE_ID="" 引擎id配置agents
提供的模型中需要支持函数调用,另外需要搭配一些prompt才好。
后记
Ai还是需要有一个好的Prompt才好用的。