Android创建DeepSeek聊天对话
文章目录
- 背景
- 参考文档
- 申请DeepSeek API KEY(略)
- 代码
- 运行结果
- 小结
背景
想用Android整一个聊天机器人,测试一下功能。
参考文档
申请DeepSeek API KEY(略)
代码
参考文档中的代码已经基本满足要求,主要是返回结果为JSON格式没有解析,内容比较乱,加一些简单的解析即可。
package com.example.myapplication;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.os.StrictMode;
import android.util.Log;
import android.os.Bundle;
import android.util.Log;
import androidx.appcompat.app.AppCompatActivity;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.IOException;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
public class MainActivity extends AppCompatActivity {
private static final String API_KEY = "KEY"; // 替换为你的 DeepSeek API 密钥
private DeepSeekApiService apiService;
/*Input: msg 发送给AI的信息*/
/*返回AI的对话结果。注意:DeepSEEK 服务经常没有相应*/
String DeepSeekApi(String msg)
{
String strBody = "{\n \"messages\": [\n {\n \"content\": \""+msg+"\",\n \"role\": \"system\"\n },\n {\n \"content\": \""+msg+"\",\n \"role\": \"user\"\n }\n ],\n \"model\": \"deepseek-chat\",\n \"frequency_penalty\": 0,\n \"max_tokens\": 2048,\n \"presence_penalty\": 0,\n \"response_format\": {\n \"type\": \"text\"\n },\n \"stop\": null,\n \"stream\": false,\n \"stream_options\": null,\n \"temperature\": 1,\n \"top_p\": 1,\n \"tools\": null,\n \"tool_choice\": \"none\",\n \"logprobs\": false,\n \"top_logprobs\": null\n}";
OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, strBody);
Request request = new Request.Builder()
.url("https://api.deepseek.com/chat/completions")
.post(body)
.addHeader("Authorization", "Bearer " + API_KEY)
.addHeader("Content-Type", "application/json")
.build();
try (Response response = client.newCall(request).execute()) {
if (response.isSuccessful() && response.body() != null) {
String responseBody = response.body().string();
JSONObject jsonResponse = new JSONObject(responseBody);
// System.out.println(response.body().string());
JSONArray messages = jsonResponse.getJSONArray("choices");
int len = messages.length();
JSONObject message = messages.getJSONObject(0);
String fieldValue = message.getString("message");
JSONObject jsonResponse1 = new JSONObject(fieldValue);
fieldValue = jsonResponse1.getString("content");
return fieldValue;
}
else
{
Log.i("DeepSeek","服务器忙碌");
}
} catch (IOException | JSONException e) {
e.printStackTrace();
}
return "Failed!";
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
String res = DeepSeekApi("你是谁?简要回答");
Log.i("DeepSeek",res);
}
}
运行结果
小结
没什么难度,时间主要寻找一个Android下可用的连接代码。好些代码测试过发现已经过期,最后在DS的API文档里面找到了可用的代码。JSON不熟悉,花了点时间找错误。因为网上没有找到现成的,所以把结果记录一下。代码很简单,不多解释,这部分应该放在线程了,偷懒就直接用了。