没时间了解技术热点?让大模型帮你整理重点吧!

1. 前言

提问:技术人的精神食粮是什么❓

AI给出的第一条是“知识与学习”。学习的方式有很多种,对笔者而言了解新技术和新热点是保持职业热爱很重要的方式。完成日常工作是保证物质基础,人终究还是想追求一些精神价值😂。





但日常工作已经占用了大量的时间,此外还有生活琐事需要对线,根本就没有时间搜集并学习新知识。这时如果有一个工具能自动抓取技术热点并将长篇大论的文字浓缩为100~200字左右的摘要,这样每天花半个小时就能消化信息了,这也太棒了吧(看过摘要也算读过文章了😁)。

2. 实现思路





实现过程分三步走:信息收集->信息解读->结果展示。其中:

① 信息收集:对感兴趣的内容进行收集。实现方式可以使用聚合API、RSS或者自定义爬虫;

② 信息解读:通过大模型对内容进行解读。目前通过端直接访问的大模型大多都带有搜索能力,将网页发送给它就可以生成摘要。但多数大模型开放API不带搜索能力,需要自己抓取网页内容再传递给它处理;





③ 结果展示:将文章原始信息和解读后的摘要按照一定格式进行展示。

3. 落地方案

业余时间搞了一个DEMO:developer-hotspots-summary,基本实现了按照配置的榜单信息进行抓取和解读功能,但暂未实现“文章重复数据过滤”、“自定义爬虫”和“文章内容预处理”功能,后续会逐步完善。生成的结果样例如下,完整数据查看☞生成样例





下面简要说明实现方案:

3.1 信息收集

信息收集主要是对感兴趣的内容进行收集,可使用聚合API、RSS或者自定义爬虫。目前DEMO实现了基于聚合API和RSS的内容收集,下面介绍不同方式的基本实现思路:

① 聚合API

聚合API已经对信息进行了封装并提供了易用的接口,上手难度最低,但天下没有免费的午餐一般都会按照调用量收取一定费用。DEMO中使用今日热榜的开放APITophubdata,目前提供了7500+数据源。





接口的调用也封装的很简洁,通过修改数据源类型可实时获取最新数据,具体代码实现可以查看DEMO源码。

curl --location 'https://api.tophubdata.com/nodes/mproPpoq6O' --header 'Authorization: YOUR_ACCESS_KEY'
1{ 2 "error":false, 3 "status":200 4 "data": { 5 "hashid": "mproPpoq6O", 6 "name": "知乎", 7 "display": "热榜", 8 "domain": "zhihu.com", 9 "logo": "********", 10 "items": [ 11 { 12 "extra": "455 万热度", 13 "url": "https://www.zhihu.com/question/629047878", 14 "thumbnail": "https://pica.zhimg.com/80/v2-00a693d9ac81c601223512d5725cbacd_1440w.png", 15 "description": "美联储加息周期终于似要走到尽头了。 ", 16 "title": "美元大跳水,10 年期美债收益率大跌,离岸人民币大涨 400 点,美股五连阳,美联储加息周期到头了吗?" 17 }, 18 { 19 "extra": "206 万热度", 20 "url": "https://www.zhihu.com/question/621684259", 21 "thumbnail": "https://pic3.zhimg.com/50/v2-0e599dcb44ad61215462fdfbb58d983e_qhd.jpg", 22 "description": "感觉老一辈的亲戚总是不知道一些边界感,每次都无下限的打探我的个人问题和生活,弄得我非常的不适。要怎么样才能有礼貌的进行回应呢?", 23 "title": "过节聚餐时总感到亲戚在惯性「侵犯」我的边界,是我太敏感还是「亲戚PTSD」在作祟?" 24 } 25 ... 26 ] 27 } 28 }

其他还有历史数据获取、WebHook功能可以自己研究一下API文档。不过由于调用会收费,不是长久之计。

② RSS源

如果网站支持RSS,那么可以通过RSS源获取到页面最新的内容信息。









如果未提供源,那就要感谢 RSSHub项目了,它可以给各种奇奇怪怪的网站生成了 RSS 源,堪称“万物皆可 RSS”。再结合RSSHub Radar或脚本RSS+对当前页面RSS源进行检测,妈妈再也不用担心我找不到订阅源啦。更多扩展知识可阅读“可能是 2023 年最全的 RSS 源,微信公众号也有!”这篇文章,一些热门的RSS源可以在top-rss-list获取。





介绍完RSS源的获取方式后,下面用代码实现从rss源中获取文章名称和地址。

1import feedparser 2 3def parse_rss_feed(rss_url): 4 # 解析 RSS5 feed = feedparser.parse(rss_url) 6 # 创建一个列表存储结果 7 result = [] 8 # 遍历每个条目,提取标题和链接,并添加到结果列表中 9 for entry in feed.entries: 10 item = { 11 'title': entry.title, 12 'url': entry.link 13 } 14 result.append(item) 15 return result 16 17# 示例 RSSURL 18rss_url = 'https://www.shawnxie.top/feed.xml' 19# 调用函数并获取结果 20parsed_feed = parse_rss_feed(rss_url) 21# 打印结果 22for item in parsed_feed: 23 print(item)

③ 自定义爬虫

如果上述两种方式都不能获取到想要的信息,那就只有通过自定义爬虫了。由于实现的逻辑比较定制化,DEMO中暂时没有提供相关功能。下面举例说明抓取掘金热榜数据过程,使用Selenium加载页面,然后使用BeautifulSoup解析HTML并提取所需的信息。





1from selenium import webdriver 2from selenium.webdriver.chrome.service import Service 3from webdriver_manager.chrome import ChromeDriverManager 4import time 5from bs4 import BeautifulSoup 6 7url = 'https://juejin.cn/hot/articles/6809637769959178254' 8 # 设置浏览器选项 9options = webdriver.ChromeOptions() 10options.add_argument('--headless') # 无头模式,不显示浏览器窗口 11options.add_argument('--disable-gpu') 12 13# 启动浏览器 14driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options) 15driver.get(url) 16 17# 等待页面加载完成(根据页面复杂度设置适当的等待时间) 18time.sleep(5) 19 20# 获取页面HTML 21html = driver.page_source 22 23# 使用BeautifulSoup解析HTML 24soup = BeautifulSoup(html, 'html.parser') 25 26# 查找所有文章项 27article_items = soup.find_all('a', class_='article-item-link') 28 29# 存储文章数据 30articles = [] 31 32for item in article_items: 33 link = item['href'] 34 title = item.find('div', class_='article-title').text.strip() 35 articles.append({'title': title, 'link': 'https://juejin.cn' + link}) 36 37# 输出文章数据 38for article in articles: 39 print(f"Title: {article['title']}, Link: {article['link']}") 40 41# 关闭浏览器 42driver.quit()





3.2 信息解读

通过大模型对文章内容进行解读。大模型是否具备搜索能力将影响功能实现的难易程度,OpenAI、Gemini等自带搜索能力的大模型直接将网址发送进行总结即可,而国内的大模型API大多是离线的,则需要提前对网页内容抓取和预处理。由于一些不可抗因素,DEMO使用了不带搜索能力的大模型KIMI(文档总结能力强),信息解读功能实现分为了两部分:

① 网页内容获取

由于使用的大模型API本身不带搜索能力,因此需要获取网页html静态文本信息并转换为字符串。

1from selenium import webdriver 2from selenium.webdriver.chrome.service import Service 3from webdriver_manager.chrome import ChromeDriverManager 4from selenium.webdriver.common.by import By 5from selenium.webdriver.support.ui import WebDriverWait 6from selenium.webdriver.support import expected_conditions as EC 7from bs4 import BeautifulSoup 8 9def fetch_article_content(url): 10 print(f"【LOG】fetch_article_content: {url}") 11 try: 12 # 设置浏览器选项 13 options = webdriver.ChromeOptions() 14 options.add_argument('--headless') # 无头模式,不显示浏览器窗口 15 options.add_argument('--disable-gpu') 16 17 # 启动浏览器 18 driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options) 19 driver.get(url) 20 21 # 等待页面加载完成 22 WebDriverWait(driver, 10).until( 23 EC.presence_of_element_located((By.TAG_NAME, "body")) 24 ) 25 26 # 获取页面内容 27 page_content = driver.page_source 28 driver.quit() 29 30 # 解析页面内容 31 soup = BeautifulSoup(page_content, 'html.parser') 32 text = soup.get_text() 33 cleaned_lines = [line.strip() for line in text.splitlines() if line.strip()] 34 return '\n'.join(cleaned_lines) 35 except Exception as e: 36 print(f"【LOG】获取文章内容异常: {e}") 37 return None





直接获取的内容存在较多噪音,如:评论、作者信息、目录以及推荐文章列表等,这些都会对AI生成造成影响,使得生成的结果不符合预期。因此在内容获取后最好再添加一步“预处理”或“数据清洗”动作,仅留下关联性更高的内容。目前DEMO暂未实现清洗功能,后续会调研一下通用实现方案。

② 大模型生成文章摘要

将第一步获取的内容传递给大模型API生成文章摘要。

1from openai import OpenAI 2import fetch, time 3 4# 调用kimi api生成摘要 5def summarize_content_kimi(url, key): 6 try: 7 # kimi api暂不支持搜索 需要调用内容抓取 8 content = fetch.fetch_article_content(url) 9 if content == None : return 10 # 调用kimi api生成摘要 11 client = OpenAI( 12 api_key = key, 13 base_url = 'https://api.moonshot.cn/v1', 14 ) 15 completion = client.chat.completions.create( 16 # 如果传入的文本太大可以调整模型 17 model = "moonshot-v1-32k", 18 messages = [ 19 {"role": "system", "content": "你是Kimi,你擅长对软件开发技术博客进行内容总结。你会为用户提供安全,有帮助,准确的回答。"}, 20 {"role": "user", "content": "请协助我对博客内容进行总结,150字以内,博客内容为:" + content} 21 ], 22 temperature = 0.3 23 ) 24 result = completion.choices[0].message.content 25 time.sleep(20) # 注意控制调用频率,免费版为每分钟326 return result 27 except Exception as e: 28 print(f"【LOG】使用ai总结文章异常: {e}") 29 return None

3.3 结果展示

将文章原始信息和解读后的摘要按照一定格式进行展示。这部分诉求因人而异,对笔者来说方便信息阅读即可,因此使用markdown_strings生成了简单的md表格。

1import markdown_strings as md 2... 3contents = [] 4file_title = date + '热门文章' 5contents.append(md.header(file_title, 1)) 6contents.append(md.blockquote('Power By: [developer-hotspots-summary](https://github.com/Xiaoxie1994/developer-hotspots-summary).')) 7for key, value in result.items(): 8 contents.append(md.header(key, 2)) 9 table_title = ['文章'] 10 table_summary= ['摘要'] 11 for item in value: 12 table_title.append(f"[{item['title'].replace("|", "")}]({item['url'].replace(" ", "")})") 13 table_summary.append(item['summary']) 14 contents.append(md.table([table_title, table_summary])) 15with open('./result/' + file_title + '.md', 'w', encoding="utf8") as file: 16 file.write("\n".join(contents))

4. 总结

笔者对此类功能零开发经验,整个过程搜索了大量的资料并使用大模型辅助,整体感觉很不错,很多诉求大模型都可以给出比较接近的解决方案,细节问题也可以通过多轮对话进行解决。DEMO还有很多可以优化的地方,后续会优化一下抓取逻辑提供更多免费的抓取方式并加上重复文章过滤能力,对于文章解读这块也会接入一些自带搜索能力的大模型,尽量让文章的解读更准确和精炼。

最后,很期待后续大模型会进化成什么样,但又有点小怕😂。不过回顾历史,解放生产力后往往会创造新的生产力,作为历史洪流中的一粒尘埃,还是顺势而为吧。

5. 参考资料

•Selenium 浏览器自动化项目

•可能是 2023 年最全的 RSS 源,微信公众号也有!

•sum4all

•GPT-4o

点赞
收藏

评论区

加载中...

相关推荐

MySQL 那些常见的错误设计规范

MySQL那些常见的错误设计规范依托于互联网的发达,我们可以随时随地利用一些等车或坐地铁的碎片时间学习以及了解资讯。同时发达的互联网也方便人们能够快速分享自己的知识,与相同爱好和需求的朋友们一起共同讨论。但是过于方便的分享也让知识变得五花八门,很容易让人接收到错误的信息。这些错误最多的都是因为技术发展迅速,而且没有空闲时间去及时更新已经发布的内容所导致。为

【Flutter 实战】移动开发技术简介

1.1移动开发技术简介本节将主要介绍一下移动开发技术的进化历程,主要是想让读者知道Flutter技术出现的背景。笔者认为,了解一门新技术出现的背景是非常重要的,因为只有了解之前是什么样的,才能理解为什么会是现在这样。1.1.1原生开发与跨平台技术原生开发原生应用程序是指某一个移动平台(比如iOS或安卓)所特有的应用,使用相应平台支持的开

前端必须熟悉的几种布局方式

前言最近在准备整理基础,准备跳槽,找个好一点的东家。😎记录学习整理的过程,希望能帮到年后跳槽的你,让我们一起来巩固基础吧。<br/目前在一家国企单位,朝九晚五的生活让我感到舒适,有大量的时间,做自己喜欢的事。时间久了,我感到了焦虑,由于公司是非互联网,开发也是根据自己已知技术去开发,技术成长很慢,技术氛围没那么强,想突破一下自己,是该逃离舒

这19款最好用的免费安全工具,使用不当或许面临牢狱之灾。

前言:大家好我是周杰伦!工具本身没有好坏,但如果能充分利用好的工具,往往能达到意想不到的效果,安全行业尤其如此。这期推荐的是一些免费而且很优秀的安全软件工具,无论是渗透测试,开源情报,还是漏洞评估,都能让安全人的日常工作更轻松。将近20款最好的免费安全工具,最实用的干货分享,没时间的朋友,建议先马再看!如果你是一名信息安全从业者,应该对Nmap、Wi

Redis 热点key

压测报redis热点问题热点问题概述产生原因热点问题产生的原因大致有以下两种:用户消费的数据远大于生产的数据(热卖商品、热点新闻、热点评论、明星直播)。在日常工作生活中一些突发的的事件,例如:双十一期间某些热门商品的降价促销,当这其中的某一件商品被数万次点

AI大有可为:NAIE平台助力垃圾分类

摘要:生活垃圾的分类和处理是目前整个社会都在关注的热点,如何对生活垃圾进行简洁高效的分类与检测对垃圾的运输处理至关重要。AI技术在垃圾分类中的应用成为了关注焦点。如今AI已经是这个时代智能的代名词了,任何领域都有AI的身影,垃圾分类及监管等场景自然也少不了“AI”的赋能。不过,垃圾往往属于商品的极端变形体,情况比较特殊。目前的技术在视觉