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開發的訪問apiString apiUrl = "https://api.moonshot.cn/v1/chat/completions";// 三種訪問標準 標準不同收費不同:moonshot-v1-8k、moonshot-v1-32k、moonshot-v1-128kString 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 *
如果覺得文章內容不錯,隨手幫忙點個贊、在看、轉發一下,如果想第一時間收到推送,也可以給我個星標?~謝謝你看我的文章。
* 往期推薦 *
Wrod 也可以添加代碼快啦!!快看有哪種你是會的吧!
Linux | 零基礎Ubuntu搭建JDK
Maven | 站在初學者的角度配置與項目創建(新手必學會)
Spring Ai | 極簡代碼從零帶你一起走進AI項目(中英)
Open Ai | 從零搭建屬于你的Ai項目(中英結合)
MongoDB | 零基礎學習與Springboot整合ODM實現增刪改查(附源碼)
Openfeign | 只傳遞城市代碼,即可獲取該地域實時的天氣數據(免費的天氣API)
API接口到底是什么
Redis | 緩存技術對后端的重要性,你知道多少?
Mongodb | 基于Springboot開發綜合社交網絡應用的項目案例(中英)
談談模塊化設計在單體架構中的應用
徹底講清楚 單體架構、集群架構、分布式架構及擴展架構
為什么還在使用單體架構
2025年Java路線一條龍服務
2025年健康新趨勢:科技與生活方式的融合
感謝閱讀?|?更多內容盡在公棕號?WMCode?| CSDN@小Mie不吃飯