当前位置: 首页 > news >正文

AI客服问答自动生成文章(基于deepseek实现)

小编一直在用AI做网站平台文章的润色或者二创。一直有一个想法,在自己网站加一个AI智能客服,通过文心或者deepseek来智能回答网友提出的问题,这样就能减少很多人工回复的麻烦,提高互动效率。

开发背景

其实很多网友提出的问题非常有针对性,而且对于其他网友来说也是非常迫切想解决的共性问题,所以我就想把网友提问和AI智能回复的内容自动整理成文章自动发布到网站平台的问答专区。这样做有两个目的:

1、现在的AI大模型已经非常成熟,大多AI的回复也比较中肯实用

2、本身网站内容的更新也需要关键词或者标题,往往自己去抓取的关键词还不如网友的问题更具有实用性

具体实现

因为我的网站是基于zblog搭建的博客,我的想法就是前台直接加一个栏目菜单作为问答窗口,然后后端识别到用户的提问后直接转到deepseek或者百度文心进行创作,把创作后的内容再返回到前端问答窗口,最后再同步把网友的问题作为标题,把AI返回的内容作为文章内容进行入库操作,这样就能通过网友的问答实时更新网站文章。

1、前端

前端我通过写了一个聊天窗口的插件,嵌入到菜单栏,中途也让deepseek给我做了一个前端的简化,通过js传参数到后端。

前端传参代码:

  // 调用API获取AI回复async function fetchAIResponse(userMessage) {try {// 创建FormData对象并添加reply参数const formData = new FormData();formData.append('reply', userMessage);const response = await fetch('/zb_users/plugin/yx_ai_kefu/ling/reply.php', {method: 'POST',body: formData});if (!response.ok) {throw new Error(`API请求失败: ${response.status}`);}// 直接解析为JSON对象,JavaScript会自动处理Unicode转义序列return await response.json();} catch (error) {console.error('API请求错误:', error);throw error;}}

中间转码这些细节就不多说了。

2、后端

后端主要是通过调用AI的API接口并实现参数返回,我最开始想用deepseek,也成功接入并测试了,效果还不错,不过我想用一个免费的并且效果比较好的,于是我直接用了百度的智能体API,百度智能体可以免费实用deepseek模型,GPT4模型,不过通过API每天的调用上限是500条,我看我目前的每日提问数量也差不多够了,果断选择百度智能体API。

智能体API申请也很简单,直接百度搜:百度智能体,然后登录自己的百度账号建立一个与你网站内容相关的智能体,然后点击”部署“,选择通过API部署,会自动生成一个密钥,接入方式大同小异。

$url = "https://agentapi.baidu.com/assistant/getAnswer?appId=xxxaaa&secretKey=xxxxxx";$postdata = ["message" => ["content" => ["type" => "text","value" => ["showText" => $reply]]],"source" => "xxxxx","from" => "openapi","openId" => $userid
];$ajax = Network::Create();
$ajax->open('POST', $url);
$ajax->setTimeOuts(600, 600, 0, 0);
$ajax->setRequestHeader('Content-Type', 'application/json');
$ajax->setRequestHeader('User-Agent', 'Apifox/1.0.0 (https://apifox.com)');
$ajax->setRequestHeader('Accept-Encoding', 'gzip');
$ajax->setRequestHeader('Authorization', 'Bearer '.$AppID);
curl_setopt($ajax->ch, CURLOPT_ENCODING, 'gzip');
$ajax->send(json_encode($postdata, JSON_UNESCAPED_UNICODE));// 获取原始响应
$response = json_decode($ajax->responseText, true);if (isset($response['data']['content'][0]['data'])) {$text2 = $response['data']['content'][0]['data'];$text = preg_replace("#^(好的|以下|为你|请注意)[^\n]+\n\n#", '', $text2);$text = preg_replace("#(^|\n\n)(内容概要|正文|内容|概要|标题)(:)?\n\n#isu", "\n", $text);$text = str_replace('\\n\\n', "\n", $text);// 创建文章$Parsedown = new \Parsedown();$content = $Parsedown->text($response['data']['content'][0]['data']);try {// 新建文章对象$categoryId=49;$article = new Post();$article->Title = $reply; // 截取用户提问作为标题$article->Content = $content;$article->Intro = ''; // 摘要可为空$article->CateID = $categoryId; // 设置栏目ID$article->AuthorID = $userid; // 当前用户ID$article->PostTime = time(); // 当前时间$article->Status = 0; // 0:草稿 1:等待审核 2:公开 3:私有// 保存文章$article->Save();

实测效果还不错,返回参数的同时直接转码入库就可以了。

http://www.xdnf.cn/news/351109.html

相关文章:

  • JAVA简单例题+抽象+继承
  • openssl中BIO的使用
  • PostgreSQL创建只读账号
  • 数据中台建设系列(五):SQL2API驱动的数据共享与服务化实践
  • 游戏引擎学习第266天:添加顶部时钟概览视图。
  • TensorFlow深度学习实战(15)——编码器-解码器架构
  • 可视化图解算法36: 序列化二叉树-I(二叉树序列化与反序列化)
  • 用 Java 实现 哲学家就餐问题
  • 数字信号处理|| 离散序列的基本运算
  • IPv6协议
  • 基于Transformer与SHAP可解释性分析的神经网络回归预测模型【MATLAB】
  • 英文单词 do、play、go 的区别
  • 大模型的RAG技术系列(二)
  • ADV7842KBCZ - 5 富利威长期稳定供应
  • MLX-Audio:高效音频合成的新时代利器
  • 【图片识别内容改名】图片指定区域OCR识别并自动重命名,批量提取图片指定内容并重命名,基于WPF和阿里云OCR识别的解决
  • wpf UserControl 更换 自定义基类
  • 三款实用电脑工具
  • 【CTFSHOW_Web入门】命令执行
  • K8S - GitLab CI 自动化构建镜像入门
  • 按位宽提取十六进制值
  • OpenCV的 ccalib 模块用于自定义标定板的检测和处理类cv::ccalib::CustomPattern()----函数calibrate
  • uniapp开发的项目上传到国内主流应用市场(华为、小米、oppo、vivo)
  • COLT_CMDB_aix_diskinfo.sh
  • OCCT中的基础变换
  • C++卡特兰数讲解
  • Java 显式锁与 Condition 的使用详解
  • Android MVC架构的现代化改造:构建清晰单向数据流
  • AI搜索的未来:技术纵深发展与关键突破路径
  • Kubernetes 手动部署 Prometheus 学习计划