- 作者:老汪软件技巧
- 发表时间:2024-09-23 04:00
- 浏览量:
写在最前
本故事主要讲述通过 SDK 调用混元大模型的四种方式
每一种方式都各有千秋,适用于不同的场景
那么问题来了,你会选择哪一种呢?
故事开始
丹尼尔:蛋兄,听说腾讯云出了个混世大魔王!
蛋先生:啥魔王?
丹尼尔:混元大模型,哈哈。瞧我这张嘴啊
蛋先生:我还以为有啥大新闻呢。没错,千呼万唤始出来,腾讯云终于也发布了自己的大模型服务,个人开发者也可以用,而且还有免费版哦!
丹尼尔:哇~,免费哦,那我可得去薅一波,怎么接入呢?
蛋先生:其实有多种接入方式,我来讲讲其中的四种,就看你的需求了
丹尼尔:洗耳恭听!
准备工作
蛋先生:首先,你需要一张入场券
丹尼尔:在哪里搞到这些东西呢?
蛋先生:请按照 腾讯混云大模型快速入门 先创建密钥(包括 SecretId 和 SecretKey)和 API Key,这就是你的入场卷,待会会用到哦
丹尼尔:没问题,我去去就来
A moment later ...
蛋先生:搞定啦?那我们继续?
丹尼尔:嗯,Let's go
姿势一:混元 SDK
蛋先生:第一种方式是使用官方的混元 SDK,这也是最直接的方式
丹尼尔:哦,这我喜欢,简单直接,和我这个人一样,不喜欢拐弯抹角
蛋先生:额!不过,这种方式有一个前提条件,就是你的应用从始至终都必须依赖混元大模型。不过即便如此,我一般也不推荐这种方式。原因不是别的,单纯是从编程的可扩展性角度考虑。就像我们在后端连接数据库时,也会声明接口,而不是直接指定某个数据库,以便将来有切换其他数据库的可能性,虽然实际项目中这种切换的概率很低
丹尼尔:了解了。既然提到了,那就看下这种直接的方式是怎么样的呗
蛋先生:没问题,我给你个极简的示例。不过需要用到 secretId 和 secretKey,所以一般是建议在服务端调用的。毕竟把钥匙放在客户端,太不安全了
const tencentcloud = require("tencentcloud-sdk-nodejs-hunyuan");
const HunyuanClient = tencentcloud.hunyuan.v20230901.Client;
async function main() {
const clientConfig = {
credential: {
secretId: "xxx",
secretKey: "xxx",
},
};
const client = new HunyuanClient(clientConfig);
const res = await client.ChatCompletions({
Model: "hunyuan-lite", // 这里可以换成混元的其它大模型
Messages: [
{
Role: "user",
Content: "大模型是什么?",
},
],
});
console.log(res.Choices[0].Message.Content);
}
main();
姿势二:OpenAI SDK
丹尼尔:明白了。那么第二种方式呢?
蛋先生:第二种方式是使用 OpenAI SDK
丹尼尔:我有两个问题。首先,使用 OpenAI SDK,不也绑死了大模型平台吗?其次,混元为什么可以使用 OpenAI SDK?
蛋先生:好问题,我来一一解答
第一个问题,因为 OpenAI 是大模型领域的领航者,它的接口规范设计经过大量项目和实际应用的检验,经历了多次迭代,可以说几乎已成事实上的行业标准。很多后起之秀的大模型服务都会兼容 OpenAI 的接口设计。还有一些工具,比如 LiteLLM,通过提供代理服务,让你可以使用 OpenAI 的格式来调用多种 LLM API。所以,使用 OpenAI SDK,不仅可以调用 OpenAI 自家的服务,还可以调用许许多多直接或间接兼容 OpenAI 接口设计的大模型服务
第二个问题,混元大模型就是前面提到的兼容了 OpenAI 接口设计的众多后起之秀中的一员,因此我们可以直接使用 OpenAI SDK 来调用
丹尼尔:也算是对前辈 OpenAI 的一种致敬吧
蛋先生:说得好。所以这种方式特别适合那些原本使用 OpenAI(或其它兼容的大模型服务)但现在想切换到混元大模型的场景,或者需要同时接入多个兼容 OpenAI 接口规范的大模型服务的情况
丹尼尔:那看下怎么接呗
蛋先生:同样来个极简示例。这里用到了 API Key,为了安全起见,一般也是在服务端运行
const OpenAI = require("openai");
async function main() {
const client = new OpenAI({
apiKey: "xxx", // 混元 APIKey
baseURL: "https://api.hunyuan.cloud.tencent.com/v1",
});
const completion = await client.chat.completions.create({
model: "hunyuan-lite", // 这里可以换成混元的其它大模型
messages: [{ role: "user", content: "大模型是什么?" }],
});
console.log(completion.choices[0]?.message?.content);
}
main();
姿势三:LangChain
丹尼尔:我觉得使用 OpenAI SDK 这种方式已经挺不错了
蛋先生:是挺好的。不过毕竟这是 OpenAI 自家的标准,不是所有的大模型平台都兼容它,想法不一致是很正常的,有差异才更有趣,百家争鸣嘛
丹尼尔:也是这个道理
蛋先生:为了屏蔽不同大模型平台之间的差异,有一些中立的第三方工具,如 LangChain 就应运而生了。借助它,开发者只需简单配置,就能无缝切换各种大模型,而无需关心它们之间的规范差异
丹尼尔:嗯,这感觉是更进一步了,更加包容。我已经迫不及待想看看到底是什么样的了
蛋先生:要通过 LangChain 使用大模型,各个大模型都需要提供接入实现。目前,混元还没提供官方实现,但由于它兼容了 OpenAI 的接口设计,所以我们可以直接使用,无需等待官方实现。跟第二点一样的理由,建议运行在服务端。以下是一个简洁的示例代码:
import { ChatOpenAI } from "@langchain/openai";
import { HumanMessage } from "@langchain/core/messages";
async function main() {
const model = new ChatOpenAI({
model: "hunyuan-lite", // 这里可以换成混元的其它大模型
apiKey: "xxx",
configuration: {
baseURL: "https://api.hunyuan.cloud.tencent.com/v1",
},
});
const msg = await model.invoke([
new HumanMessage({ content: "大模型是什么?" }),
]);
console.log(msg.content);
}
main();
姿势四:腾讯云云开发 AI+
丹尼尔:感觉我们在一步步地升华。使用 LangChain 理论上可以对接所有大模型。那么第四种方式是什么呢?
蛋先生:嗯,你可能注意到了,前面几种方式都建议在服务端运行,毕竟涉及到一些密钥的信息。但是如果我想在 Web 端或微信小程序中直接调用大模型呢?这样就可以省去搭建服务端的麻烦
丹尼尔:是哦
蛋先生:因此,腾讯云云开发 AI+ 就填补了这个空缺
丹尼尔:哇~,真是深谙需求。那这个怎么使用呢
蛋先生:只需在腾讯云云开发的后台启用相应服务即可
以下依然提供一个极简示例,更多详情请参考 官方文档
html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Documenttitle>
<script src="//static.cloudbase.net/cloudbase-js-sdk/2.8.6-beta.0/cloudbase.full.js">script>
<script>
async function main() {
const app = cloudbase.init({
env: "xxx",
});
const auth = app.auth();
await auth.signInAnonymously(); // 或者使用其他登录方式
const ai = await app.ai();
const hy = ai.createModel("hunyuan");
const res = await hy.generateText({
model: "hunyuan-lite", // 这里可以换成混元的其它大模型
messages: [{ role: "user", content: "大模型是什么?" }],
});
console.log(res.rawResponse.Response.Choices[0].Message.Content);
}
main();
script>
head>
<body>body>
html>
丹尼尔:嗯,那我基本知道该怎么用了。我要去薅羊毛了,拜拜!
蛋先生:祝你好运!