今天,我们将重点讨论在对接混元大模型时需要特别关注的几个要点。首先,最为关键的一点是,混元大模型的加密方式相比于其他大模型更为复杂和严密。在对接过程中,我们通常避免使用混元官方提供的SDK进行集成,主要是因为官方SDK的应用场景存在一定的限制。若能实现原生对接,将能够提供更加灵活和高效的接入方式,同时也能更好地适应我们具体的应用场景。

接下来,我们将直接分析混元大模型的加密机制,深入了解如何通过非SDK方式进行安全可靠的对接。有关混元加密方式的详细信息,可以参考官方文档,链接如下:腾讯云混元文档

签名方法v3

我们将直接使用最新的签名方法进行集成,文中提供了相应的Java代码示例。你可以方便地将这些代码示例复制并粘贴到您的项目中,从而快速实现功能,如下图所示:

这里由于混元大模型不需要region,自己自行删除即可。

申请秘钥

接下来需要申请相关的秘钥信息,可以来这里申请:

申请好后,直接写到环境变量中,或者单独提取出来放到构造器中赋值都可以。

maven依赖

在 JDK 17 中,默认不再包含 javax.xml.bind.DatatypeConverter 相关的包依赖,因此如果你使用的是 JDK 17 或更高版本,可能会遇到缺少该类导致的编译或运行时错误。为了解决这个问题,你需要手动添加一些额外的依赖。具体如下:

<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-core</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
<version>1.1.1</version>
</dependency>

参数加密

这个问题也是一个典型的“坑”。由于加密过程必须包含请求参数,所以报错的几率随之大幅增加。当时,我使用的是 Fastjson 来进行记录(record)转 JSON 操作,但 Fastjson 默认会对字段进行排序。而与此同时,使用 RestClient 类发起请求时,字段并没有进行排序,这一点并不明显,需要特别注意。更为棘手的是,这种差异通常不易察觉,必须通过拦截器才能显现出来,才能有效避免因字段顺序不同而导致的潜在错误。

这是原来使用的转json方法:JSONObject.from(payload),json结果如下:

{"Messages":[{"Content":"你好!","Role":"user"}],"Model":"hunyuan-pro","Stream":false,"Temperature":0.8}

但是restclient正常请求拦截后打印:

所以后来我直接改成了使用objectMapper。如下所示:

ObjectMapper objectMapper = new ObjectMapper();
try {
return objectMapper.writeValueAsString(record);
} catch (Exception e) {
e.printStackTrace();
return "";
}

也需要添加mvn依赖,如下所示:

<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>

因为在进行抓包操作时,直接访问混元API会遇到各种证书验证问题,导致无法直接查看请求体的具体内容。因此,为了能够准确查看请求体的结构和数据,我们改成直连本地即可,只查看请求体到底是什么样子。

public static final String DEFAULT_BASE_URL = "http://127.0.0.1:8888";

在经过测试并确认没有问题之后,我们将系统配置恢复到原来的设置。经过一系列调整和验证,最终成功完成了对接任务。

总结

通过本文的讨论,我们详细分析了在对接混元大模型时需要关注的关键要点,特别是加密机制、SDK的替代方案以及如何处理参数加密等挑战。为了确保系统的高效、安全对接,我们深入探讨了如何避免常见的错误,如字段排序问题,并提供了实用的代码示例。经过反复测试和验证,最终我们成功实现了与混元大模型的原生对接。希望这些经验能为大家在实际操作中提供有价值的参考,帮助更顺利地完成集成任务。


我是努力的小雨,一个正经的 Java 东北服务端开发,整天琢磨着 AI 技术这块儿的奥秘。特爱跟人交流技术,喜欢把自己的心得和大家分享。还当上了腾讯云创作之星,阿里云专家博主,华为云云享专家,掘金优秀作者。各种征文、开源比赛的牌子也拿了。

想把我在技术路上走过的弯路和经验全都分享出来,给你们的学习和成长带来点启发,帮一把。

欢迎关注努力的小雨,咱一块儿进步!

混元API的加密机制与原生集成实战的更多相关文章

  1. API 网关的选型和持续集成

    2019 年 8 月 31 日,OpenResty 社区联合又拍云,举办 OpenResty × Open Talk 全国巡回沙龙·成都站,APISIX 作者温铭在活动上做了< API 网关的选 ...

  2. 浅议NetMQ常见模式和消息加密机制

    浅议NetMQ常见模式和消息加密机制 概述 在传统企业级开发中,消息队列机制已经成为一种非常常见的技术实现手段,而基于NetMQ则看起来有点像一朵"奇葩",看起来从名字似乎是一个消 ...

  3. 3. 深入研究 UCenter API 之 加密与解密(转载)

    1.  深入研究 UCenter API 之 开篇 (转载) 2.  深入研究 UCenter API 之 通讯原理(转载) 3.  深入研究 UCenter API 之 加密与解密(转载) 4.  ...

  4. Web Api 的 路由机制

    ASP.NET Web API 是一种框架,用于轻松构建可以访问多种客户端(包括浏览器和移动设备)的 HTTP 服务. ASP.NET Web API 是一种用于在 .NET Framework 上构 ...

  5. api的使用机制:继承、实例化、实现(继承)配置、实例(参数化)配置、机制管理模块

    api的使用机制:继承.实例化.实现(继承)配置.实例(参数化)配置.机制管理模块 facade模式.管理模块

  6. 我的Android进阶之旅------>Android采用AES+RSA的加密机制对http请求进行加密

    前言 未加密的抓包截图 加密之后的抓包截图 基本需求及概念 AES算法 AES基本原理及算法流程 AES算法流程 RSA算法 RSA算法基本原理及流程 RSA算法实现流程 AES与RSA相结合数据加密 ...

  7. 说说API的重放机制

    API的重放机制 我们在设计接口的时候,最怕一个接口被用户截取用于重放攻击.重放攻击是什么呢?就是把你的请求原封不动地再发送一次,两次...n次,一般正常的请求都会通过验证进入到正常逻辑中,如果这个正 ...

  8. 安全篇-AES/RSA加密机制

    在服务器与终端设备进行HTTP通讯时,常常会被网络抓包.反编译(Android APK反编译工具)等技术得到HTTP通讯接口地址和参数.为了确保信息的安全,我们采用AES+RSA组合的方式进行接口参数 ...

  9. HTTPS 加密机制

    目录 1. HTTPS 概述 2. 对称加密 3. 非对称加密 4. 非对称加密改良方案 5. 非对称加密 + 对称加密 6. 中间人攻击 7. 数字证书 8. 数字签名 9. HTTPS 工作原理 ...

  10. 反射常用API以及内省机制(代码)

    学习内容: (1)获取构造函数 这里不贴Person类了,不然代码太多太乱了,只给出一些常用API // 创建字节码对象 Class<?> aClass = Class.forName(& ...

随机推荐

  1. Linux中的文件属性和 文件类型

    文件类型及属性 文件属性 每列的含义 ​ [root@oldboyedu ~]# ll -i ​ 33575029 -rw-r--r--. 1 root root 337 Nov 2 10:26 ho ...

  2. etcdv3与etcdv2特性比较

    1 客户端通信方式 etcdv3的客户端使用gRPC与server进行通信,通信的消息协议使用protobuf进行约定,代替了v2版本的HTTP-json格式,使用二进制替代文本,更加节省空间. 同时 ...

  3. 抓包工具之Charles(windows)

    激活码:  https://www.zzzmode.com/mytools/charles/ 官方地址:https://www.charlesproxy.com/ PC端如何配置才能抓取到https请 ...

  4. 让低版本gitlab焕新 —— 如何在低版本gitlab上实现高版本API功能

    前言:本文主要记录了基于低版本gitlab(v3 api)实现in-line comment功能的过程中踩过的坑及相应的解决方案,理论上其他低版本gitlab不具备的API都可以参照此类方法进行实现( ...

  5. FastExcel 合并单元格(相当的行数据,进行合并)

    目录 需求 思路 实现 Excel导出单元格全量合并策略 日期格式转换 接口代码 Service DTO 使用FastExcel数据导出:官网: https://idev.cn/fastexcel/z ...

  6. sqlserver查询某数据库下表的占用空间

    要查看 SQL Server 中哪个表占用的空间最多,您可以使用以下查询来列出所有表及其占用的空间大小,并按照占用空间从大到小进行排序: SELECT t.NAME AS TableName, p.r ...

  7. 【NAS】绿联NAS UGOS PRO 使用natfrp(Sakura Frp)内网穿透访问Docker应用

    配置加速 https://registry.cn-hongkong.aliyuncs.com 下载镜像 创建容器 [容器]-[创建]-[手动创建]- 选择你下载的镜像即可 在日志中查看密码 访问容器 ...

  8. Qt音视频开发48-通用通道管理

    一.前言 把通用的视频控件搞定以后,后期增加新的内核方便多了,不需要在好多个文件复制粘贴之类的,接下来就是需要一个统一的类来管理视频监控系统中的16个通道或者32个通道,甚至64个通道也有可能,当然, ...

  9. ASP.NET Core 中的速率限制中间件的使用

    简介 在ASP.NET Core中,速率限制中间件是用来控制客户端对Web API或MVC应用程序发出请求的速率,以防止服务器过载和提高安全性. 下面是 AddRateLimiter 的一些基本用法: ...

  10. 一篇复杂的研究🤔A Comprehensive Study of 😨Jailbreak Attack versus Defense for Large Language Models

    本认为,这篇文章的亮点在于对攻击和防御技术的多维评估,另外通过比较不同模型(如Vicuna.LLama和GPT-3.5 Turbo)对攻击和防御策略的反应,文章提供了对模型间差异的深入理解. 对现有的 ...