三七互娱技术团队

使用代理解决dify国内使用claude模型方案


01

背景

随着政策的调整,Dify 在国内无法直接访问 AWS 的 Bedrock 服务及其 Claude 模型。此情况下,Dify 面临一个迫切的问题:如何在不采取迁移数据中心等方式的前提下,确保对 Claude 模型的正常调用。这将影响到 Dify 提供服务的稳定性和用户体验,因此需要寻找切实可行的解决方案。

02

可选方案

在全面分析后,提出以下两个主要方案:

  • Dify 迁移至海外地区
    • 优点 : 通过代理服务器将请求转发至 AWS 服务,速度和响应时间更容易控制。 此方式能够保留 Dify 现有架构,使用起来更为灵活。
    • 缺点 : 需要额外配置代理服务以及处理相关的 SSL/TLS 问题。
  • Dify 使用代 理模式
    • 优点 : 理论上直接使用 AWS 服务,避免任何网络连接层面的干扰。
    • 缺点 : 由于 Dify 已经集成了其他模型与服务,迁移到海外不仅会增加额外的复杂性,也可能引起整体访问速度的显著下降,影响用户体验。

选择方案

选择方案2
补充原因 :选择使用代理模式主要基于以下几点考虑:
  • 影响最小 :不影响dify上面其它模型的使用,用户访问dify也会更流畅些。 实现成本 :相较于迁移,配置和维护代理的成本更低,更易于快速实施。
03

方案 2 的实现

代理功能

实现代理功能目前可选的有以下2种 :
  • 初步考虑使用 Squid 作为正向代理,但Dify未找到适合的配置入口来指定代理地址,因此实际上未能成功实施。 使用 Nginx 进行反向代理。Nginx 的反向代理具有高性能、灵活性和稳定性,仅需 Dify 更新 hosts 文件以绑定代理 IP 即可实现对 Claude 模型的访问,避免了端用户的复杂配置。

因此最终选择nginx反向代理来解决

使用 Nginx 反向代理设置步骤

获取 Claude 的访问地址

Claude 模型的访问地址可从 AWS 官方文档中获取,确保使用的是最新的服务地址。这些地址包括:

在实施 Nginx 反向代理时,要特别关注 HTTPS 的访问问题。由于 Claude 的接口为 HTTPS,必须处理 SSL/TLS 相关的问题。

主要涉及以下步骤 :
  • 使用stream模式,因为我们没有claude的ssl证书,使用http模式无法处理证书加解密

    配置 ssl_preread 模块,在接收 SSL/TLS 请求时读取 SNI 信息,这样能根据域名来实现反向代理到不同的claude endpoint

    upstream 通过变量的方式动态配置,配合resolver 来实现dns动态解析



参考配置如下:

dify 绑定claude域名到代理地址

因为dify是通过docker compose 部署的,因此需要修改docker-compose.yml

找到api,worker服务的部分,添加hosts配置

重启服务


END

三七互娱技术团队
扫码关注 了解更多