万字详解AI实践,零手写编码用AI完成开发 + 数据清洗 + 数据处理 的每日新闻推荐,带你快速成为AI大神

用AI+dify完成前后端开发+数据处理和数据清洗。

  • 引言
  • 数据获取和数据处理
  • dify构建workflow进行数据清洗
  • 前端页面构建和前后端交互
  • 总结

引言

AI时代对开发人员的加强是非常明显的,一个开发人员可以依靠AI横跨数个自己不熟悉的领域包括前后端、算法等。让我们来做个实践,全程使用AI写代码+dify构建工作流快速完成一个获取每日热点新闻的前后端开发以及数据处理、数据清洗的任务,全程不需要我们自己动手写代码,仅跟AI聊天实现

我们来理清一下步骤:
1、点击每日新闻按钮
2、自动获取每日新闻信息
3、用LLM获取到标题、概要、作者、新闻链接
4、用dify + LLM 清洗和处理数据,获取新闻概要内容和新闻标签
5、给前端返回作者、标题、新闻链接、新闻概要内容和新闻标签
6、展示在页面上,并且点击可以跳到对应新闻页面

最后效果:
在这里插入图片描述

数据获取和数据处理

从网上搜索一下头条的每日推荐新闻的接口,我们的每日新闻来源就从这里获取。实际处理可以换成自己需要的接口并进行处理,让模型编码。
在这里插入图片描述
其实就是很简单地发送一个请求,对应代码:

fetch('http://is.snssdk.com/api/news/feed/v51/').then(response => {if (!response.ok) {throw new Error('Network response was not ok');}return response.json();}).then(data => {console.log('Success:', data);}).catch(error => {console.error('Error:', error);});

粘贴代码观察一下结果
在这里插入图片描述
观察获取到的数据很明显我们只需要url source title abstract这四个字段,分别是对应的链接地址,作者,标题,摘要,做一下数据处理,让模型编码。
在这里插入图片描述
模型帮助我们在前面代码的基础上仅提取了我们需要的部分字段,获取的代码:

fetch('http://is.snssdk.com/api/news/feed/v51/').then(response => {if (!response.ok) {throw new Error('Network response was not ok');}return response.json();}).then(data => {// 处理数据const articles = data.data.map(item => {const content = JSON.parse(item.content);return {url: content.url,source: content.source,title: content.title,abstract: content.abstract};});// 输出提取的内容console.log('Extracted Data:', articles);}).catch(error => {console.error('Error:', error);});

处理完之后就是比较简单的我们想要的数据了。
在这里插入图片描述
现在的数据只有链接标题还有一些没意义的摘要(实际上只是截取的文章前面部分),我们需要阅读前,模型就已经帮我们大致总结了一下内容以及对新闻进行了对应的打标签,这个就需要我们通过模型去完成了,我们下面用dify的工作流去完成这件事。

dify构建workflow进行数据清洗

接下来我们来做数据清洗,我希望对标题进行对应的改写,且我需要模型帮我总结内容和对内容打标签。通过dify搭建工作流(注意这里可以使用别的工具,并不一定依赖dify)。
在这里插入图片描述
使用的Prompt如下,注意我们Prompt里面需要精确提到 背景(激活参数)、任务(明确目标)、输出需求(明确要求)、例子(明确要求):

你是一名专业的记者,我从新闻网站API请求到了数据,你需要帮我对这条数据进行内容的总结和标签分类。内容总结应该在200字以内输出到模版变量<S>中,标签分类给出三个,每个标签在五个字以内,标签之间用','隔开,输出到模版变量<T>中,你仅需要输出模版内容。# 例子
输入:{source: '国际新说',title: '新能源未来在何处?',abstract: '最近几年新能源的发展非常迅速,那么未来新能源会往哪一方面发展呢?让我们一起来探讨一下'}输出:【国际新说】新能源未来在何处?(科技、新能源、发展)近年来,新能源技术快速发展,引发了对未来发展方向的广泛讨论。文章探讨了新能源可能的发展趋势。# 模版
【source】title (<T>)
<S>

看看结果。
在这里插入图片描述
在这里插入图片描述
可以看到,输入我们刚才整理好的数据已经可以完成标题改写 + 打标签 + 内容总结了

现在我们可以使用我们刚才提取的数据,结合dify的这个工作流去完成总结文章内容 + 给文章打标签的功能。接下来只需要直接调用dify生成对应的接口,让模型帮我们接口,注意跟模型描述详细的接口需求。

这个是DIFY的接口文档
在这里插入图片描述
让模型编码
在这里插入图片描述
后端代码,主要就是调用了dify生成的接口,然后处理了一下输出:

const apiKey = 'YOUR_KEY';
const apiUrl = 'https://api.dify.ai/v1/workflows/run';
const batchSize = 2;fetch('http://is.snssdk.com/api/news/feed/v51/').then(response => {if (!response.ok) {throw new Error('Network response was not ok');}return response.json();}).then(data => {// 处理数据const articles = data.data.map(item => {const content = JSON.parse(item.content);return {url: content.url,source: content.source,title: content.title,abstract: content.abstract};});// 发送请求并收集结果const results = [];const sendBatchRequests = (batch) => {const requests = batch.map(article => {const requestBody = {inputs: {message: JSON.stringify(article)},response_mode: 'blocking',user: 'api-user'};return fetch(apiUrl, {method: 'POST',headers: {'Authorization': apiKey,'Content-Type': 'application/json'},body: JSON.stringify(requestBody)}).then(response => {if (!response.ok) {throw new Error(`Request failed with status ${response.status}`);}return response.json();}).then(result => {if (result.data && result.data.outputs && result.data.outputs.text) {results.push(result.data.outputs.text);}}).catch(error => {console.error('Error:', error);});});return Promise.all(requests);};// 限制调用速率const processArticlesInBatches = async (articles) => {for (let i = 0; i < articles.length; i += batchSize) {const batch = articles.slice(i, i + batchSize);await sendBatchRequests(batch);}};return processArticlesInBatches(articles).then(() => results);}).then(results => {console.log('All results:', results);}).catch(error => {console.error('Error:', error);});

看看结果。
在这里插入图片描述
这时候清洗其实已经完成了,不过为了让整个过程更自动化和可视化,我们再用一个前端页面来展示。

前端页面构建和前后端交互

我们已经成功完成了数据处理和清洗,接下来简单地构建一下前端页面和前后端交互,注意key换成自己的,让AI编码。
在这里插入图片描述
后端代码,主要是做成了端口形式,将数据按格式返回给前端:

// server.js
import express from 'express';
import fetch from 'node-fetch';
import cors from 'cors';const app = express();
const port = 3000;
const apiKey = 'Bearer app-xxx';
const apiUrl = 'https://api.dify.ai/v1/workflows/run';
const batchSize = 2;app.use(cors());app.get('/get-daily-news', async (req, res) => {try {const response = await fetch('http://is.snssdk.com/api/news/feed/v51/');if (!response.ok) {throw new Error('Network response was not ok');}const data = await response.json();// 处理数据const articles = data.data.map(item => {const content = JSON.parse(item.content);return {url: content.url,source: content.source,title: content.title,abstract: content.abstract};});// 发送请求并收集结果const results = [];const sendBatchRequests = (batch) => {const requests = batch.map(article => {const requestBody = {inputs: {message: JSON.stringify(article)},response_mode: 'blocking',user: 'api-user'};return fetch(apiUrl, {method: 'POST',headers: {'Authorization': apiKey,'Content-Type': 'application/json'},body: JSON.stringify(requestBody)}).then(response => {if (!response.ok) {throw new Error(`Request failed with status ${response.status}`);}return response.json();}).then(result => {if (result.data && result.data.outputs && result.data.outputs.text) {results.push({text: result.data.outputs.text,url: article.url});}}).catch(error => {console.error('Error:', error);});});return Promise.all(requests);};const processArticlesInBatches = async (articles) => {for (let i = 0; i < articles.length; i += batchSize) {const batch = articles.slice(i, i + batchSize);await sendBatchRequests(batch);}};await processArticlesInBatches(articles);res.json(results);} catch (error) {console.error('Error:', error);res.status(500).json({ error: 'Internal Server Error' });}
});app.listen(port, () => {console.log(`Server is running on http://localhost:${port}`);
});

前端代码,没什么好说的就是点击按钮然后获取新闻资讯接口数据,处理一下输出展示:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>每日新闻</title>
<style>.news-item {border: 1px solid #ccc;padding: 10px;margin-bottom: 10px;margin-top: 10px;border-radius: 5px;}
</style>
</head>
<body>
<h1>每日新闻</h1>
<button id="getNewsBtn">获取每日新闻</button>
<div id="newsResults"></div>
<script>document.getElementById('getNewsBtn').addEventListener('click', async () => {try {const response = await fetch('http://localhost:3000/get-daily-news');if (!response.ok) {throw new Error(`Network response was not ok: ${response.status}`);}const results = await response.json();const newsResultsDiv = document.getElementById('newsResults');newsResultsDiv.innerHTML = '';results.forEach(result => {// 去除 ```符号const cleanedText = result.text.replace(/```/g, '');// 创建超链接const link = document.createElement('a');link.href = result.url;link.target = '_blank';link.innerHTML = cleanedText.replace(/\n/g, '<br>'); // 将文本内容替换为带有换行符的HTMLconst paragraph = document.createElement('p');paragraph.appendChild(link);const newsItem = document.createElement('div');newsItem.classList.add('news-item');newsItem.appendChild(paragraph);newsResultsDiv.appendChild(newsItem);});} catch (error) {console.error('Error:', error);}});
</script>
</body>
</html>

来看看最后效果。在这里插入图片描述
点击后会跳到新闻页面,这样我们整个项目就完成了。

总结

全程不需要自己写一行代码,我们就完成了前后端开发和数据处理、数据清洗,效率提升肉眼可见。实际上这也是未来的趋势,在AI的加持下,我们每一个人的能力都会被无限放大,早日尝试并习惯高效使用AI才能帮助我们在新时代的变革中保持竞争力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/445191.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

生信初学者教程(二十八):单细胞数据标准化

文章目录 介绍加载R包导入数据消除测序深度影响评估细胞周期的影响识别高度可变的特征缩放数据降维聚类输出结果总结介绍 scRNA-seq的标准化是一个重要的预处理步骤,目的是消除技术变异(比如比如测序深度和基因长度等因素),使基因表达和/或样本之间的比较更加可靠。标准化方…

如何彻底掌握 JavaScript 23种设计模式

设计模式是解决特定问题的常用解决方案&#xff0c;它们可以帮助开发者编写更清晰、可维护、可扩展的代码。在 JavaScript 中&#xff0c;常见的设计模式可以分为三大类&#xff1a;创建型模式、结构型模式 和 行为型模式。本文将全面介绍 JavaScript 中常见的设计模式&#xf…

Java 日志打印

使用日志打印&#xff1a; private static Logger log LoggerFactory.getLogger(DeptController.class);RequestMapping("/depts")public Result list() { // System.out.println("查询全部部门数据");log.info("查询全部部门数据");ret…

pytorch 与 pytorch lightning, pytorch geometric 各个版本之间的关系

主要参考 官方的给出的意见&#xff1b; 1. pytorch 与 pytorch lightning 各个版本之间的关系 lightning 主要可以 适配多个版本的 torch; https://lightning.ai/docs/pytorch/latest/versioning.html#compatibility-matrix&#xff1b; 2. pytorch 与 pytorch geometric 各…

【AIGC】2022-NIPS-视频扩散模型

2022-NIPS-Video Diffusion Models 视频扩散模型摘要1. 引言2. 背景3. 视频扩散模型3.1. 重建引导采样以改进条件生成 4. 实验4.1. 无条件视频建模4.2. 视频预测4.3. 文本条件视频生成4.3.1 视频与图像建模的联合训练4.3.2 无分类器指导的效果4.3.3 更长序列的自回归视频扩展 5…

线程池简单原理

设置了isRun导致任务没有执行完是因为子线程在消费队列的时候的run内while循环取队列的值&#xff0c;如果isRun为flase会停掉所有线程&#xff0c;解决是不仅isRun为false还要求队列的数据10个全取出队列大小为0. 当线程池队列满的时候任务会不会丢 可以使用默认的rejectExc…

Superset SQL模板使用

使用背景 有时想让表的时间索引生效&#xff0c;而不是在最外层配置报表时&#xff0c;再套多一层时间范围。这时可以使用SQL模板 参考官方文档 https://superset.apache.org/docs/configuration/sql-templating/#:~:textSQL%20Lab%20and%20Explore%20supports%20Jinja 我…

面试题:Redis(二)

1. 面试题 2. MoreKey案列 事故案例 2.1 生成上如何限制key*/flushdb/flushall等危险命令的使用&#xff1f; 通过redis.conf配置文件中在SECURITY选项中禁用这些命令 2.2 不用key*避免卡顿那用什么&#xff1f; 用scan命令&#xff0c;类似mysql中的limit命令 语法&…

VSCode的常用插件(持续更新)

点击左边工具栏的“扩展”&#xff0c;在搜索栏中查找对应插件&#xff0c;点击“安装”&#xff0c;安装完成后右边界面的插件会显示“卸载”按钮。 1、中文&#xff08;简体&#xff09;语言包 2、Auto Rename Tag 修改开始标签&#xff0c;结束标签也会随之自动变化。 3、O…

《Windows PE》4.3 延迟加载导入表

延迟加载导入表&#xff08;Delayed Import Table&#xff09;是PE文件中的一个数据结构&#xff0c;用于实现延迟加载&#xff08;Lazy Loading&#xff09;外部函数的机制。 延迟加载是指在程序运行时&#xff0c;只有当需要使用某个外部函数时才进行加载和绑定&#xff0c;…

wms智能供应链仓储管理系统,一站式仓储管理产品溯源解决方案

几度WMS条码仓储 管理系统是公司凭借多年为制造企业信息化服务的经验积累&#xff0c;结合WMS、条码、ERP思想而设计的智能供应链仓储系统。 主要包括以下六大模块&#xff1a;库位管理、存货管理、来料管理、发料管理、成品管理、日常管理。WMS条码仓储管理系统&#xff0c;是…

Unity中搜索不到XR Interaction Toolkit包解决方法

问题&#xff1a; 针对Unity版本2020.3在中PackageManager可能搜素不到XR Interaction Toolkit包 在Package Manager中未显示XR Interaction Toolkit包 解决方法&#xff1a; Package manager左上角&#xff0c;点加号&#xff0c;选择 Add package from git URL..&#xff0c;…

21年408数据结构

第一题&#xff1a; 解析&#xff1a;q指针指向要被删除的元素&#xff0c;当这个元素是链表中唯一一个元素时&#xff0c;q指针和尾指针都指向同一个元素&#xff0c;那么在删除掉这个元素之前&#xff0c;需要将尾指针调整到指向头指针的位置&#xff0c;此时链表为空&#x…

说下SSL/TLS四次握手过程?

参考自&#xff1a;SSL/TLS四次握手过程是怎么样的&#xff1f;HTTPS、SSL、TLS三者之间的联系和区别 一.SSL/TLS 简介 SSL(Secure Socket Layer 安全套接层)是基于 HTTPS 下的一个协议加密层&#xff0c;用于解决 HTTP 在传输数据时使用明文而导致的不安全问题。 SSL 是 HT…

【数据结构】零碎知识点(易忘 / 易错)总结回顾

一、数据结构的概念 数据结构&#xff08;Data Structure&#xff09;是计算机存储、组织数据的方式&#xff0c;指相互之间存在一种或多种特定关系的数据元素的集合。 二、算法 算法&#xff08;Algorithm&#xff09;就是定义良好的计算过程&#xff0c;它取一个或一组的值为…

二分图算法总结 C++实现

总体概念 染色法 基本思路步骤 将所有的边及其相接的边用邻接表存储起来&#xff1b;遍历所有的点&#xff0c;找到未上色的点&#xff1b;用BFS将该点及其相接的点迭代上色&#xff1b;在上述染色步骤中&#xff0c;如果相邻点的颜色相同则无法形成二分图&#xff1b; 题目…

数据结构:单链表OJ题

目录 相交链表解题思路代码 环形链表&#xff08;I&#xff09;解题思路代码 环形链表&#xff08;II&#xff09;解题思路代码 随机链表的复制&#xff08;深拷贝&#xff09;解题思路代码 相交链表 题目描述&#xff1a; 案例&#xff1a; 题目链接&#xff1a;https://l…

FunASR离线文件转写服务开发指南-debian-10.13

FunASR离线文件转写服务开发指南-debian-10.13 服务器环境 debian10.13 64位 第一步 配置静态网卡 auto eth0 iface eth0 inet static address 192.168.1.100 netmask 255.255.255.0 gateway 192.168.1.1 dns-nameservers 8.8.8.8 8.8.4.4/etc/init.d/networking restart第…

【JVM】JMM

文章目录 前置的硬件知识什么是JMMJMM的三大特性JMM中定义的原子操作happens-before先行发生原则 前置的硬件知识 硬件存储体系: 运行速度从上到下依次减慢. 由于CPU的计算速度远超与内存的处理速度,所以CPU不会直接从内存中读写,而是将内存中的变量拷贝一份副本放到CPU高速…

2022年下真题(案例分析)

一、数据流图 二、数据库设计 - ER图 三、面向对象设计 - 用例图、类图 四、算法