尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

聊天智能体开发基础

聊天智能体开发基础
📅 发布时间:2026/7/6 15:14:15

如今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.apiKey=apiKey;this.baseUrl=baseUrl;}//简单对话publicStringchat(StringuserMessage)throwsIOException{StringrequestBody=buildRequestBody(userMessage);//1.拼装请求JSONStringresponse=sendRequest(requestBody);//2.发送HTTP请求returnextractContent(response);//3.解析AI返回结果}//构建请求JSON(手动拼接)privateStringbuildRequestBody(StringuserMessage){//转义JSON字符串中的特殊字符StringescapedMessage=userMessage.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.拼接完整接口地址:基础地址+对话接口路径URLurl=newURL(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(OutputStreamos=conn.getOutputStream()){os.write(jsonBody.getBytes(StandardCharsets.UTF_8));}//4.判断响应状态码:2xx成功,4xx/5xx错误intresponseCode=conn.getResponseCode();InputStreaminputStream=(responseCode>=200&&responseCode<300)?conn.getInputStream():conn.getErrorStream();//5.读取接口返回的完整JSON字符串StringBuilderresponse=newStringBuilder();try(BufferedReaderreader=newBufferedReader(newInputStreamReader(inputStream,StandardCharsets.UTF_8))){Stringline;while((line=reader.readLine())!=null){response.append(line);}}conn.disconnect();//关闭连接//状态码异常,抛出错误信息if(responseCode>=400){thrownewIOException("API Error ("+responseCode+"): "+response);}returnresponse.toString();}//从响应中提取contentprivateStringextractContent(Stringjson){// 查找 "content": " 后面的内容StringsearchKey="\"content\":\"";intstartIndex=json.indexOf(searchKey);if(startIndex==-1){// 尝试带空格的格式searchKey="\"content\": \"";startIndex=json.indexOf(searchKey);}if(startIndex==-1){return"无法解析响应";}//截取content对应的文本内容startIndex+=searchKey.length();intendIndex=startIndex;// 查找结束的引号,注意处理转义while(endIndex<json.length()){charc=json.charAt(endIndex);//找到未被转义的双引号,作为内容跟结束位置if(c=='"'&&(endIndex==0||json.charAt(endIndex-1)!='\\')){//endIndex == 0,规避后面下标-1的报错break;}endIndex++;}if(endIndex>=json.length()){return"无法解析响应";}Stringcontent=json.substring(startIndex,endIndex);// 还原转义字符,恢复正常换行、引号returncontent.replace("\\n","\n").replace("\\r","\r").replace("\\t","\t").replace("\\\"","\"").replace("\\\\","\\");}publicstaticvoidmain(String[]args){StringapiKey="你的apiKey";DeepSeekClientdsc=newDeepSeekClient(apiKey);while(true){System.out.println("请输入你的问题:");Scannersc=newScanner(System.in);Stringquestion=sc.next();//调用chat方法try{Stringanswer=dsc.chat(question);System.out.println("回复:"+answer);}catch(IOExceptione){thrownewRuntimeException(e);}}}}


可以看到,我们现在的智能体还没有记忆功能,每次提问都是新的一次问答,那么接下来,我们就来加上智能体的记忆功能。

  • 实现记忆的逻辑:从第一次对话开始,就将用户输入的问题以及模型的回答保存到本地,在后续的提问中将这份数据与新问题重新上传,这样大模型就知道你之前问的问题以及回复了。

下面是实现记忆功能的代码:

publicstaticvoidmain(String[]args){StringapiKey="你的apiKey";DeepSeekClientdsc=newDeepSeekClient(apiKey);Stringmemory="";while(true){Stringanswer;System.out.println("请输入你的问题:");Scannersc=newScanner(System.in);Stringusermessage=sc.next();memory+="用户问题:"+usermessage+"-";Stringnewmessage="历史记忆:"+memory+"新问题:"+usermessage;//调用chat方法try{answer=dsc.chat(newmessage);}catch(IOExceptione){thrownewRuntimeException(e);}System.out.println("回复:"+answer);memory+="模型回复:"+answer;}


可以看到,现在这个聊天工具已经具有记忆功能。
本次分享就到这里,大家快去动手练起来吧!

相关新闻

  • 基于Metasploit的内网渗透实战:从外网突破到域控攻陷
  • MCP基础版本
  • 第一篇:Java 语言核心特性与运行机制

最新新闻

  • CodexBar终极指南:如何实时监控56个AI服务的Token消耗与成本
  • Leanstral-1.5-119B-A6B在数学证明中的应用:完美oid空间案例研究
  • 前后端国密加解密实战:SM2+SM4混合加密方案全解析
  • three.quarks时间控制终极指南:慢动作与时间缩放效果完全教程
  • 【计算机Java毕业设计案例】基于 SpringBoot 的北部湾特色农业资源展示平台的设计与实现 基于 SpringBoot 的乡村农产品助农销售服务系统(程序+文档+讲解+定制)
  • MegaDepth:基于互联网照片的单视图深度预测革命性算法完全指南

日新闻

  • AI智能体安全防护框架AgentGuard:从原理到实战部署指南
  • KMX63与PIC18F26K40硬件组合及低功耗设计实践
  • 基于YOLO13改进的门体检测模型:C3k2模块与PoolingFormer技术解析

周新闻

  • 基于YOLOv12的番茄成熟度智能检测系统开发
  • 终极RimWorld模组管理指南:用RimSort告别模组冲突烦恼
  • AI Agent框架开发:从理论到实践的完整指南

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号