docker 部署 AI 网关及 PII 配置

绕海飞行的鱼🐟 发布于 18 小时前 6 次阅读


找了好久一直想找个带 PII 配置的 docker compose 部署的网关,第一个找到的是 LiteLLM,试用了一堆其他类型的网关后,兜兜转转又回到了 LiteLLM。。。

我想,虽然“大数据下无隐私”这句话的含金量还在不断升高,也知道最好的 PII 脱敏就是本地部署,只能说目前现状对我来说是最优解了,或许后续我也可以自己写一个,毕竟有 AI~

网关不少,但带有基本 PII 的真的不多(或许我没有搜全),一方面对个人用户而言, vibe coding 本身一些敏感信息可以通过设置排除在外;另一方面,真的有 PII 需求的,那也是企业级用户,用的企业级路由,完全可以自己花钱搞一个。🤣一来二去开源类的网关基本也是奔着定制收费和企业用户去的了。。。

今天说的仅仅是 LiteLLM 的部署,顺便带上自带的过滤,也就是脱敏功能,至于 LiteLLM + Presidio 的部署,有点太过臃肿了,后面有机会再看吧!首先用官方的 docker-compose.yaml 就可以跑起来,这里我稍微改了一下(带了数据库,不带的话,就没有数据统计功能了):

services:
  litellm:
    image: docker.litellm.ai/berriai/litellm:main-stable
    container_name: litellm
    environment:
      DATABASE_URL: "postgresql://llmproxy:dbpassword9090@litellm_db:5432/litellm"
      STORE_MODEL_IN_DB: "True" # 需要通过 WEB UI 实时编辑的话,这项默认设置为 TRUE
      LITELLM_MASTER_KEY: "sk-1234" # 改成你需要的管理员密码
    depends_on:
      - litellm_db
    healthcheck:  # Defines the health check configuration for the container
      test:
        - CMD-SHELL
        - python3 -c "import urllib.request; urllib.request.urlopen('http://localhost:4000/health/liveliness')"  # Command to execute for health check
      interval: 30s  # Perform health check every 30 seconds
      timeout: 10s   # Health check command times out after 10 seconds
      retries: 3     # Retry up to 3 times if health check fails
      start_period: 40s  # Wait 40 seconds after container start before beginning health checks
    ports:
      - 4000:4000
    restart: unless-stopped
    networks:
      - mynet


  litellm_db:
    image: postgres:16
    restart: unless-stopped
    container_name: litellm_db
    environment:
      - POSTGRES_DB=litellm
      - POSTGRES_USER=llmproxy
      - POSTGRES_PASSWORD=dbpassword9090
    ports:
      - "5432:5432"
    volumes:
      - ./litellm_postgres_data:/var/lib/postgresql/data # Persists Postgres data across container restarts
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -d litellm -U llmproxy"]
      interval: 1s
      timeout: 5s
      retries: 10
    networks:
      - mynet

networks:
  mynet:
    external: true

docker compose up -d 起来后,直接访问 4000 端口就行了。

点击 LiteLLM Admin Panel on /ui 之后就可以配置了(很遗憾,目前没中文,不过社区在推进中)。

默认用户名为 admin,密码为 docker compose 中你设置的 LITELLM_MASTER_KEY

添加模型

点击 Models + Endpoints 打开后,点击右侧 Add Model 添加模型:

  • Provider 中选对应模型厂商
  • LiteLLM Model Name(s) 中选择你希望添加的模型(可多选,如果你想要全部添加,可以直接选 ALL XXX Models
  • API Key 填你的 KEY

最后点最底下的 Test Connect 测试下链接,OK 就点 Add Model 添加!

至此,一个模型就添加完了,当然,你也可以这样添加多个模型。

创建 LiteLLM KEY

模型有了,接下来就是创建密钥了,点击 Virtual Keys 后,右侧点击 Create New Key,一般填写一个 Key Name 就可以了。

模型优先级设置

当然,如果添加了多个厂商,我希望优先用 XX,后面用 XX 怎么样设置呢?

点开 Optional Settings,接着点开 Router Settings 之后,选择 fallbacks 标签,Primary Model 选择你的主要模型(或模型厂商,比如 deepseek/*),下面可以选择次要模型。

比如当使用 deepseek 模型时,我可以优先使用 deepseek 官方的 API,当使用其他模型时,我又可以使用 openrouter 中的模型,两不耽误:

设置围栏

点击左侧 Guardrails 栏,点击右侧标签 Guardrails 后,点击 Add New Guardrail 下的 Add Provider Guardrail 打开添加界面:

  • Guardrail Name:规则名,随便取
  • Guardrail Provider:选 LiteLLM Content Filter
  • Mode:保持默认 pre_call
  • Always On:如果对所有 Virtual Key 需要默认启用,就设置为 Yes,否则就在各 key 内设置

其他保持默认,点击 Next:

这一步主要对企业用户而言,可以拦截某些言论输出或者竞争对手比较信息,对于我个人而言没用,点 Next:

这里就是对 PII 的一些过滤了,可以选系统已有的,没有的话,也可以自己正则添加,Action 行为:Mask 是替换为掩码,Block 则是拦截该请求了。点击 Next:

这里是添加一些关键字,也是企业级适用,比如某些言论关键字,或者特定字符串、提示语等,可酌情选择,点最后一个 Next:

这项保持默认就行了,最后点 Create guardrail 完成创建!

测试围栏

创建好后,点第三个标签 Test Playground 可以看到你之前创建的配置,选中后可以测试结果:

可以看到已经对设置的敏感信息 MASK 处理了。