聊天智能体开发基础

聊天智能体开发基础
如今AI已经能够在生活中的方方面面帮助我们我也想做一个为自己量身定做的智能体那么下面我就介绍一下如何创建一个小智能体。一、准备工作1.APIKey要在我们的项目中接入市面上的大模型APIKey是必不可少的下面我以deepseek为例介绍如何接入API访问DeepSeek API官网进入API开放平台左侧找到API Keys申请一个API此处注意一定要保存好你的Key我们后面会用到这样呢APIKey就申请好了在使用时我们要充值一下才可以使用。以上就是我们智能体开发的第一步。二、开发智能体我们需要准备好一个可以访问DeepSeek打模型的类封装好聊天方法其中包括有网络请求json数据参数解析再创建该类对象调用chat方法将我们再程序中输入的问题作为参数传给该方法就可以通过该方法的返回值获取DeepSeek的回复下面我直接给出大家这个项目的全部代码因为很多内容都是固定写法大家一定要仔细看代码中的注解可以帮助大家理解这个项目。importjava.io.*;importjava.net.HttpURLConnection;importjava.net.URL;importjava.nio.charset.StandardCharsets;importjava.util.Scanner;publicclassDeepSeekClient{privatefinalStringapiKey;//DeepSeek平台密钥privatefinalStringbaseUrl;//DeepSeek接口基础地址//构造方法使用默认官方接口地址publicDeepSeekClient(StringapiKey){//this(...) 专门用来调用本类中另一个重载的构造方法//要求必须写在构造方法第一行只能出现一次this(apiKey,https://api.deepseek.com/v1);}//构造方法自定义接口地址适配私有化部署/代理地址publicDeepSeekClient(StringapiKey,StringbaseUrl){this.apiKeyapiKey;this.baseUrlbaseUrl;}//简单对话publicStringchat(StringuserMessage)throwsIOException{StringrequestBodybuildRequestBody(userMessage);//1.拼装请求JSONStringresponsesendRequest(requestBody);//2.发送HTTP请求returnextractContent(response);//3.解析AI返回结果}//构建请求JSON(手动拼接)privateStringbuildRequestBody(StringuserMessage){//转义JSON字符串中的特殊字符StringescapedMessageuserMessage.replace(\\,\\\\).replace(\,\\\).replace(\n,\\n).replace(\r,\\r).replace(\t,\\t);return{\n \model\: \deepseek-chat\,\n \messages\: [\n {\role\: \user\, \content\: \escapedMessage\}\n ],\n \temperature\: 0.7,\n \max_tokens\: 1000\n};}//发送HTTP请求privateStringsendRequest(StringjsonBody)throwsIOException{//1.拼接完整接口地址基础地址对话接口路径URLurlnewURL(baseUrl/chat/completions);HttpURLConnectionconn(HttpURLConnection)url.openConnection();//2.设置请求头、请求方式conn.setRequestMethod(POST);conn.setRequestProperty(Content-Type,application/json);//告知接口请求体是JSONconn.setRequestProperty(Authorization,Bearer apiKey);//接口鉴权(固定格式)conn.setDoOutput(true);//开启输出流允许发送POST请求体conn.setConnectTimeout(30000);//连接超时30秒conn.setReadTimeout(60000);//读取响应超时60秒//3.把JSON请求体写入数据流发送给接口try(OutputStreamosconn.getOutputStream()){os.write(jsonBody.getBytes(StandardCharsets.UTF_8));}//4.判断响应状态码2xx成功4xx/5xx错误intresponseCodeconn.getResponseCode();InputStreaminputStream(responseCode200responseCode300)?conn.getInputStream():conn.getErrorStream();//5.读取接口返回的完整JSON字符串StringBuilderresponsenewStringBuilder();try(BufferedReaderreadernewBufferedReader(newInputStreamReader(inputStream,StandardCharsets.UTF_8))){Stringline;while((linereader.readLine())!null){response.append(line);}}conn.disconnect();//关闭连接//状态码异常抛出错误信息if(responseCode400){thrownewIOException(API Error (responseCode): response);}returnresponse.toString();}//从响应中提取contentprivateStringextractContent(Stringjson){// 查找 content: 后面的内容StringsearchKey\content\:\;intstartIndexjson.indexOf(searchKey);if(startIndex-1){// 尝试带空格的格式searchKey\content\: \;startIndexjson.indexOf(searchKey);}if(startIndex-1){return无法解析响应;}//截取content对应的文本内容startIndexsearchKey.length();intendIndexstartIndex;// 查找结束的引号注意处理转义while(endIndexjson.length()){charcjson.charAt(endIndex);//找到未被转义的双引号作为内容跟结束位置if(c(endIndex0||json.charAt(endIndex-1)!\\)){//endIndex 0,规避后面下标-1的报错break;}endIndex;}if(endIndexjson.length()){return无法解析响应;}Stringcontentjson.substring(startIndex,endIndex);// 还原转义字符恢复正常换行、引号returncontent.replace(\\n,\n).replace(\\r,\r).replace(\\t,\t).replace(\\\,\).replace(\\\\,\\);}publicstaticvoidmain(String[]args){StringapiKey你的apiKey;DeepSeekClientdscnewDeepSeekClient(apiKey);while(true){System.out.println(请输入你的问题);ScannerscnewScanner(System.in);Stringquestionsc.next();//调用chat方法try{Stringanswerdsc.chat(question);System.out.println(回复answer);}catch(IOExceptione){thrownewRuntimeException(e);}}}}可以看到我们现在的智能体还没有记忆功能每次提问都是新的一次问答那么接下来我们就来加上智能体的记忆功能。实现记忆的逻辑从第一次对话开始就将用户输入的问题以及模型的回答保存到本地在后续的提问中将这份数据与新问题重新上传这样大模型就知道你之前问的问题以及回复了。下面是实现记忆功能的代码publicstaticvoidmain(String[]args){StringapiKey你的apiKey;DeepSeekClientdscnewDeepSeekClient(apiKey);Stringmemory;while(true){Stringanswer;System.out.println(请输入你的问题);ScannerscnewScanner(System.in);Stringusermessagesc.next();memory用户问题usermessage-;Stringnewmessage历史记忆memory新问题usermessage;//调用chat方法try{answerdsc.chat(newmessage);}catch(IOExceptione){thrownewRuntimeException(e);}System.out.println(回复answer);memory模型回复answer;}可以看到现在这个聊天工具已经具有记忆功能。本次分享就到这里大家快去动手练起来吧