kimi简单使用
什么是Kimi API
官网:https://platform.moonshot.cn/
Kimi API 并不是一个我所熟知的广泛通用的术语。我的推测是,你可能想问的是关于 API 的一些基础知识。API(Application Programming Interface,应用程序编程接口)是一种软件架构概念,它定义了软件组件之间如何交互的规则和定义。简单来说,API 允许不同的软件程序之间进行通信和数据交换,而不需要了解彼此的内部实现细节。例如,许多网络应用程序通过提供 API 接口,让其他开发者能够访问其功能或数据,像社交媒体平台的 API 可能允许开发者获取用户信息、发布内容等操作。
API怎么获取
控制台:https://platform.moonshot.cn/console/account
查看官方文档:大多数提供 API 服务的机构或公司会在其官方网站上提供详细的 API 文档,文档中会介绍如何注册获取 API 密钥(API Key)、API 的使用方法、可调用的接口功能等。
注册账号:很多 API 需要你先在对应的平台上注册账号,然后通过账号申请获取 API Key,这个 Key 就是你调用 API 时验证身份的凭证。
遵守使用限制和规则:获取 API 后,你需要仔细阅读其使用条款,因为不同的 API 可能有请求频率限制、数据使用范围等规定,违规使用可能会导致你的访问权限被限制甚至被封禁。
curl是什么?
curl
是一个非常流行的命令行工具和库,用于在互联网上进行数据传输。它可以与各种网络协议(如 HTTP、HTTPS、FTP 等)进行交互,功能强大且灵活。开发者和系统管理员经常使用它来测试网络连接、与 API 交互、下载或上传文件等。例如,你可以用 curl
向一个 API 发送请求,获取返回的数据,或者从一个网页上抓取内容。
测试工具测试curl
curl -X POST https://api.moonshot.cn/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $MOONSHOT_API_KEY" \
-d '{
"model": "moonshot-v1-8k",
"messages": [
{"role": "system", "content": "wmcodes是一个资源丰富的公众号"},
{"role": "user", "content": "你好,我想找个资源公众号?"}
],
"temperature": 0.3
}'
先分析格式
-X : 请求方式+路径
-H : 请求头
-d : 请求体(json格式)
ApiPost 工具测试
请求方式:POST
API接口: https://api.jikemoonshot.cn/v1/chat/completions
请求头:
Content-Type : application/json
Authorization: your-key
请求体:
{
"model": "moonshot-v1-8k",
"messages": [
{"role": "system", "content": "wmcodes是一个资源丰富的公众号"},
{"role": "user", "content": "你好,我想找个资源公众号?"}
],
"temperature": 0.3
}
其中:
model
模型:moonshot-v1-8k
: 它是一个长度为 8k 的模型,适用于生成短文本。
moonshot-v1-32k
: 它是一个长度为 32k 的模型,适用于生成长文本。
moonshot-v1-128k
: 它是一个长度为 128k 的模型,适用于生成超长文本。
moonshot-v1-8k-vision-preview
: 它是一个长度为 8k 的 Vision 视觉模型,能够理解图片内容,输出文本。
moonshot-v1-32k-vision-preview
: 它是一个长度为 32k 的 Vision 视觉模型,能够理解图片内容,输出文本。
moonshot-v1-128k-vision-preview
: 它是一个长度为 128k 的 Vision 视觉模型,能够理解图片内容,输出文本。
system
角色:用于设置对话的背景、指导 AI 的行为和风格、限制内容范围等。它对用户不可见,但对 AI 的回答逻辑至关重要。user
角色:用于表示用户输入的内容,是对话的主体部分,直接影响 AI 的回答。
temperature
精准度:这个值是0-1的,越高值那么消耗的算力越高,同时返回的数据也越精准
ApiPost 数据填写
对非 stream 格式的,返回类似如下:
{
"id": "cmpl-04ea926191a14749b7f2c7a48a68abc6",
"object": "chat.completion",
"created": 1698999496,
"model": "moonshot-v1-8k",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": " 你好,李雷!1+1等于2。如果你有其他问题,请随时提问!"
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 19,
"completion_tokens": 21,
"total_tokens": 40
}
}
对 stream 格式的,返回类似如下:
data: {"id":"cmpl-1305b94c570f447fbde3180560736287","object":"chat.completion.chunk","created":1698999575,"model":"moonshot-v1-8k","choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":null}]}
data: {"id":"cmpl-1305b94c570f447fbde3180560736287","object":"chat.completion.chunk","created":1698999575,"model":"moonshot-v1-8k","choices":[{"index":0,"delta":{"content":"你好"},"finish_reason":null}]}
...
data: {"id":"cmpl-1305b94c570f447fbde3180560736287","object":"chat.completion.chunk","created":1698999575,"model":"moonshot-v1-8k","choices":[{"index":0,"delta":{"content":"。"},"finish_reason":null}]}
data: {"id":"cmpl-1305b94c570f447fbde3180560736287","object":"chat.completion.chunk","created":1698999575,"model":"moonshot-v1-8k","choices":[{"index":0,"delta":{},"finish_reason":"stop","usage":{"prompt_tokens":19,"completion_tokens":13,"total_tokens":32}}]}
data: [DONE]
项目构建过程
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.25</version>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>3.14.8</version>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp-sse</artifactId>
<version>4.10.0</version>
</dependency>
项目构建过程
创建 枚举类
package com.jkglxt.www.enums;
public enum RoleEnum {
system,
user,
assistant;
}
创建 消息类
package com.jkglxt.www.entity;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@NoArgsConstructor
@AllArgsConstructor
@Data
@Builder
public class Message {
private String role;
private String content;
}
创建 控制器
package com.jkglxt.www.controller;
import cn.hutool.core.collection.CollUtil;
import com.jkglxt.www.entity.Message;
import com.jkglxt.www.enums.RoleEnum;
import okhttp3.*;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
@RestController
public class ChatController {
@PostMapping("/chat")
public String chat() {
OkHttpClient client = new OkHttpClient().newBuilder().connectTimeout(30, TimeUnit.SECONDS).readTimeout(30, TimeUnit.SECONDS).build();
try {
// 设置密钥--在kimi个人中心新建密钥即可获得
String apiKey = "your_api_key";
// moonshot开发的访问api
String apiUrl = "https://api.moonshot.cn/v1/chat/completions";
// 三种访问标准 标准不同收费不同:moonshot-v1-8k、moonshot-v1-32k、moonshot-v1-128k
String model = "moonshot-v1-8k";
// 设置请求头
Map<String, String> header = new HashMap<String, String>();
header.put("Authorization", "Bearer " + apiKey);
header.put("Content-Type", "application/json");
// 设置提问信息
List<Message> messages = CollUtil.newArrayList(
// new Message(RoleEnum.system.name(), "你是kimi AI"),
new Message(RoleEnum.user.name(), "什么是java 20字介绍一下")
);
String requestBody = new cn.hutool.json.JSONObject()
.putOpt("model", model)
.putOpt("messages", messages)
.toString();
Request request = new Request.Builder()
.url(apiUrl)
.headers(Headers.of(header))
.method("POST", okhttp3.RequestBody.create(MediaType.parse("application/json"),
requestBody))
.build();
try (Response response = client.newCall(request).execute()) {
String str=checkResponse(response);
System.out.println("答复:"+str);
return str;
}
} catch (Exception e) {
throw new RuntimeException("Unknown err", e);
}
}
private String checkResponse(Response response) {
if (response.isSuccessful()) {
if(response.body()==null){
throw new RuntimeException("Response body is null");
}else{
try(ResponseBody body = response.body()){
return body.string();
}catch (Exception e){
throw new RuntimeException("Error reading response body",e);
}
}
} else if(response.code()==401) {
throw new RuntimeException("Unauthorized");
} else if (response.code() == 400) {
throw new RuntimeException("Bad request");
} else if (response.code() == 429) {
throw new RuntimeException("Too many requests");
} else{
throw new RuntimeException("Error response code: "+response.code());
}
}
}
* Thanks you *
如果觉得文章内容不错,随手帮忙点个赞、在看、转发一下,如果想第一时间收到推送,也可以给我个星标⭐~谢谢你看我的文章。
* 往期推荐 *
Maven | 站在初学者的角度配置与项目创建(新手必学会)
Spring Ai | 极简代码从零带你一起走进AI项目(中英)
MongoDB | 零基础学习与Springboot整合ODM实现增删改查(附源码)
Openfeign | 只传递城市代码,即可获取该地域实时的天气数据(免费的天气API)
Mongodb | 基于Springboot开发综合社交网络应用的项目案例(中英)
感谢阅读 | 更多内容尽在公棕号 WMCode | CSDN@小Mie不吃饭