搜索
首页科技周边人工智能使用AI代理创建个性化的新闻摘要

介绍

大语言模型(LLM)的功能正在迅速发展。它们使我们能够构建各种LLM应用程序。这些范围从任务自动化到工作流优化。一个令人兴奋的应用程序是使用LLMS创建智能新闻文摘或新闻通讯代理。该代理可以提取相关内容,总结它并以自定义格式交付。它可以与外部工具和数据源动态交互以获取相关信息。在本文中,让我们学习如何使用Langgraph和News API(例如News API)为个性化的每日新闻摘要构建新闻摘要代理。

使用AI代理创建个性化的新闻摘要

概述

  • 了解Langgraph及其关键组件(状态,节点和边缘)的体系结构,以构建可自定义的工作流代理。
  • 了解如何将新闻纸这样的外部API集成以获取新闻通讯中动态内容的实时数据。
  • 通过实施根据质量标准对新闻文章进行排名的评分系统,开发使用LLM进行内容评估的技能。
  • 使用Python的电子邮件汇编库将其自动化电子邮件交付自动化的实用知识。

目录

  • 关于Langgraph的简介
  • 先决条件
  • 定义应用程序流
    • 获取新闻
    • 得分新闻
    • 发送电子邮件
  • 建造代理
  • 常见问题

关于Langgraph的简介

Langgraph建在Langchain的顶部。 Langgraph是一个框架,旨在构建将LLM与自定义逻辑和工具集成的动态工作流程。这允许高度定制且复杂的工作流程结合多个工具和API。

Langgraph由三个核心组成部分组成:

  1. 状态:状态包含整个应用程序中共享的数据。可以是任何可以持有数据的Python数据结构。我们可以使用具有不同参数的状态对象来定义它。另外,我们还可以使用仅包含消息列表的预构建的MessagessTate。
  2. 节点:节点是可以读取和修改状态的函数。这些功能将状态作为读或写入状态的第一个参数。我们还有一个开始节点来表示哪个节点将获取用户输入,并首先称为“表示图”末尾的末端节点。
  3. 边缘:边缘通过不同的节点定义数据流。我们还具有有条件的边缘,该边缘使用函数来确定下一步要转到哪个节点。 Langgraph的优点是我们可以通过许多方式自定义代理。因此,可以有不止一种方法来构建该代理。

使用AI代理创建个性化的新闻摘要

如图所示,边缘连接节点,节点在状态中读取或写入数据。

另请阅读:优化组织与Genai代理商的电子邮件营销

先决条件

在开始构建LLM代理之前,请确保我们拥有所需的键和密码。

通过API访问LLM

首先为您使用的LLM生成一个API键。创建一个名称为“ .env”的文本文件。将此密钥牢固地存储在.env文件中,以使其私密且在项目中易于访问。

这是一个.env文件的示例

使用AI代理创建个性化的新闻摘要

获取新闻数据

要收集新闻内容,我们将使用https://newsapi.org/。注册一个API键并将其存储在同一.ENV文件中以进行安全访问。

发送电子邮件

要使用Python发送电子邮件,我们可以启用“较不安全的应用程序”,然后将Gmail密码存储在.ENV文件中。如果该选项不可用,我们可以按照此处提到的步骤访问Gmail。

需要库

我们已将以下版本用于主要库:

  • Langchain - 0.2.14
  • Langgraph - 0.2.14
  • Langchain-Openai - 0.1.14
  • Newsapi-Python - 0.2.7

定义应用程序流

目的是使用自然语言查询代理商,以收集有关特定主题的新闻,并通过电子邮件获取新闻通讯。为了实现此流程,我们将首先定义三个工具来处理每个关键任务,然后构建代理来调用LLM和工具。

这三个工具如下:

  1. 获取新闻:新闻API根据解析的查询检索相关的新闻文章。
  2. 评分新闻:被提取的文章传递给另一个LLM,该法学硕士评估和评分为质量。输出是按其质量得分排序的文章列表。
  3. 发表新闻:最高得分的文章将格式化为可读的电子邮件,并发送给用户。

现在,我们可以开始定义功能。

获取新闻

导入必要的库并加载.env文件

导入操作系统 
进口JSON
导入大熊猫作为pd
从DateTime Import DateTime,TimeDelta
从ipython.display导入图像,显示
从输入导入列表,文字,可选,打字,注释
来自langchain_core.tools导入工具
来自langchain_openai进口chatopenai

来自dotenv import load_dotenv

load_dotenv('/。env')

#替代.env文件,我们也可以使用.txt文件如下
用open('mykey.txt','r')作为文件:
    OpenAi_Key = file.read()
    
os.environ ['OpenAI_API_KEY'] = OpenAi_Key

从Newsapiclient和API键启动News_API

从Newsapi Import Newsapiclient

news_api_key = os.environ ['news_api_key']

news_api = newsapiclient(api_key = news_api_key)

现在,让我们使用Langchain的“工具”装饰器来定义Langchain工具

@工具
def get_news(查询:str,past_days:int,域:str):
    ”“”
    获取有关给定参数的新闻,例如查询,过去_DAYS,等。
    args:
        查询:有关此主题的搜索新闻
        过去_DAYS:过去应该搜索几天?
        域:这些资源中的搜索新闻
    ”“”
    今天= dateTime.today()
    from_date =今天-TimeDelta(days = past_days)
    news_details = news_api.get_everything(q =查询,from_param = from_date,domains =域,
                                           sort_by ='相关性')
    返回news_details

代理还可以根据相关性对文章进行分类。这是此功能的输出的示例:

使用AI代理创建个性化的新闻摘要

'@tool'装饰器用于定义兰链工具。然后,我们可以将此工具绑定到LLM。在上述功能中,DOC字符串也很重要。这就是将LLM传递给LLM的原因,以将这些参数放在工具称呼LLM的输出中。

 #初始化LLM
gpt = chatopenai(型号=“ gpt-4o-mini”,温度= 0)

#我们可以将工具绑定到LLM,以便LLM可以根据查询返回工具。
gpt_with_tools = gpt.bind_tools([[get_news])

得分新闻

Score_news功能通过根据预定义的标准对新闻文章进行评分来处理新闻文章。然后该函数返回最高质量文章的排序列表。

导入所需的方法

来自langchain_core.pydantic_v1导入基本模型,字段
来自langchain_core.prompts导入chatprompttemplate,提示键盘
来自langchain_core.messages导入人类

让我们定义功能

def score_news(news_details:dict):
    ”“”
    计算News_articles的分数,然后按得分进行排序。
        news_details:所有新闻文章    
    
    ”“”
    #访问国家的最后一条消息。
    #将所有文章传递给LLM将增加成本。 
    #我们可以选择仅评分一些文章。
    json_articles = json.loads(news_details ['消息'] [ -  1] .content)
    如果len(json_articles)> 15:
        文章= json_articles [:15]
    别的:
        文章= json_articles
    
    #系统提示指导LLM评分文章。
    system_prompt =“”“”
    您是新闻质量评估者。
    我将为您提供新闻文章,其中包含标题,描述和截短的内容和其他详细信息。 
    根据以下标准分析和评分新闻文章:

    清晰度:文章以简洁而可理解的方式传达信息的程度。
        比例:1(不清楚)至25(非常清晰)

    可信度:基于提供的描述和其他细节,文章有多大可能可信和实际上准确?
        比例:1(不可信)至25(高度可信)

    参与潜力:文章吸引读者的注意力或引起进一步思考的可能性。
        比例:1(不参与)至25(非常吸引人)

    影响:本文的潜在社会,技术或政治后果的重要性或影响力。
        比例:1(最小影响)至25(高影响力)

    为新闻文章提供100分的总分数,并为上述每个标准的分数添加得分。

    您将评估很多新闻文章。因此,对他们进行评分,以便我们以后可以对所有这些分类。

    ”“”
    提示_template = chatprompttemplate.from_messages([(“系统”,system_prompt),(“人”,“ {news}”)))

    
    #定义pydantic类以以结构化格式获取输出。
   
    课堂新闻(基本模型):
        “”“新闻评分系统”“”
    
        total_score:int = field(description ='新闻文章的总分')
        
        来源:str = field(Description =“新闻的来源”)
        作者:可选[str] = field(default = none,description =“新闻的作者”)
        
        标题:str = field(description =“新闻的标题”)
        描述:str = field(描述=“新闻描述”)
        
        URL:str = field(description =“新闻的URL”)
        urltoimage:可选[str] = field(default = none,description =“新闻的图像URL”)

    #GPT 4O在得分方面表现更好,但成本更高。
    gpt_4o = chatopenai(型号='gpt-4o',温度= 0)
    structured_gpt = gpt_4o.with_structured_output(新闻)
    链=提示_template | structred_gpt
    
    #将每篇文章发送到LLM,以获取其他细节。
    结果= [chain.Invoke({'news':artical})。文章中文章的dict()]

    #按总分对文章进行排序。
    df = pd.dataframe(结果).sort_values(by ='tucter_score',accending = false)
    
    返回{“消息”:[humanMessage(content = df.to_dict(orient ='records'))]}}

该功能将状态作为输入,名称为news_details。由于国家包含所有消息,我们可以访问文章的最后一条消息。我们可以选择从顶部获得一些文章来节省成本。我们可以尝试不同的系统提示来获得最佳评分系统。

如果输出为定义格式,则更容易处理数据。因此,我们可以将LLM与结构化输出一起使用,其中结构是使用Pydantic类定义的。

然后,我们可以对每篇文章进行评分并将其存储在数据框架中。一旦我们使用总分数对文章进行排序,并将其添加为州的消息。

解释

1。输入

该函数将状态对象作为输入接收,其中包含所有消息。该州的最新信息持有新闻文章。为了最大程度地减少成本,我们可以限制文章的数量,而不是评分所有文章。

2。评分过程

我们为LLM提供了详细的系统提示,并根据系统提示中给出的标准指示其对每篇文章进行评分。

LLM根据系统提示中定义的标准评估每个文章,并分配100个总分,并增加每个标准的分数。

3。结构化输出

为了确保输出结构化且易于处理,我们定义了Pydantic模型(新闻)。该模型包括``total_score'',`title` titled'',`description`和`rl''等字段。通过使用这种结构化格式,LLM可以返回一致,组织良好的结果。

4。LLM集成

我们使用GPT-4O(以其在结构化任务中的准确性而闻名)来评分文章。发现在评估文章时,GPT-4O比GPT-4O-Mini好。每篇文章都通过LLM传递,并使用Pydantic转换为词典格式。

5。排序和输出

在评分了所有文章之后,我们将它们存储在Pandas DataFrame中,以降序顺序对其进行“ total_score”进行排序。然后,我们可以将排序列表作为消息返回到州,准备在工作流的下一部分中使用。

发送电子邮件

send_email功能列出了分类的新闻文章列表,生成了HTML电子邮件,并将其发送给收件人。

导入库

导入SMTPLIB,SSL
导入基础64
导入电子邮件

定义send_email功能

def send_email(sorted_news):
 
    #从国家的最后一条消息中获取分类新闻。
    articles = sorted_news ['消息'] [ -  1] .content
    
    #如果News_article具有图像,我们可以在电子邮件中显示。
    news_items_html =“”
    对于文章中的文章[:10]:
        如果文章['urltoimage']不是没有:
            news_items_html = f“”
            <div>
                <img src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/000/000/174442792064130.jpg?x-oss-process=image/resize,p_40" class="lazy" alt="”">
                <div>
                    <h3 id="a-href-E-C-actits-title-a"> <a href="%E2%80%9C"> {actits ['title']} </a> </h3>
                    <p> {文章['description']} </p>
                </div>
            </div>
            ”“”
        别的:
            news_items_html = f“”
            <div>
                <div>
                    <h3 id="a-href-E-C-actits-title-a"> <a href="%E2%80%9C"> {actits ['title']} </a> </h3>
                    <p> {文章['description']} </p>
                </div>
            </div>
            ”“”
            
    #用于造型HTML消息的CSS。我们在此处添加上面的“ news_items_html”。
    html = f“”
        
        
            
                身体 {{
                    字体家庭:Arial,sans-serif;
                    背景色:#C4C4C4;
                    保证金:0;
                    填充:0;
                }}}
                。容器 {{
                    宽度:80%;
                    最大宽度:600px;
                    保证金:0自动;
                    背景色:#ffffff;
                    填充:20px;
                    盒子阴影:0 4PX 8PX RGBA(0,0,0,0.1);
                }}}
                h1 {{
                    文字平衡:中心;
                    颜色:#333;
                }}}
                .news-item {{{
                    显示:Flex;
                    准项目:中心;
                    正当:中间的空间;
                    边界底:1px固体#EEEEE;
                    填充:15px 0;
                }}}
                .news-item h3 {{{
                    保证金:0;
                    字体大小:16px;
                    颜色:#007BFF;
                    左键:5px;
                }}}
                .news-item p {{{
                    字体大小:14px;
                    颜色:#666666;
                    保证金:5px 0;
                    左键:5px;
                }}}
                .news-item a {{{
                    颜色:#007BFF;
                    文本介绍:无;
                }}}
                .news-item img {{{
                    宽度:100px;
                    身高:100px;
                    对象拟合:封面;
                    边界拉迪乌斯:8px;
                }}}
                。页脚 {{
                    保证金顶:20px;
                    文字平衡:中心;
                    字体大小:12px;
                    颜色:#999999;
                }}}
            
        
        
            <div>
                <h1 id="策划的新闻">策划的新闻</h1>
                {news_items_html}
                <div>
                    <p>这是您的个性化新闻通讯。</p>
                </div>
            </div>
        

以上是使用AI代理创建个性化的新闻摘要的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
如何使用Huggingface Smollm建立个人AI助手如何使用Huggingface Smollm建立个人AI助手Apr 18, 2025 am 11:52 AM

利用“设备” AI的力量:建立个人聊天机器人CLI 在最近的过去,个人AI助手的概念似乎是科幻小说。 想象一下科技爱好者亚历克斯(Alex)梦见一个聪明的本地AI同伴 - 不依赖

通过斯坦福大学激动人心的新计划,精神健康的AI专心分析通过斯坦福大学激动人心的新计划,精神健康的AI专心分析Apr 18, 2025 am 11:49 AM

他们的首届AI4MH发射于2025年4月15日举行,著名的精神科医生兼神经科学家汤姆·因斯尔(Tom Insel)博士曾担任开幕式演讲者。 Insel博士因其在心理健康研究和技术方面的杰出工作而闻名

2025年WNBA选秀课程进入联盟成长并与在线骚扰作斗争2025年WNBA选秀课程进入联盟成长并与在线骚扰作斗争Apr 18, 2025 am 11:44 AM

恩格伯特说:“我们要确保WNBA仍然是每个人,球员,粉丝和公司合作伙伴,感到安全,重视和授权的空间。” anno

Python内置数据结构的综合指南 - 分析VidhyaPython内置数据结构的综合指南 - 分析VidhyaApr 18, 2025 am 11:43 AM

介绍 Python擅长使用编程语言,尤其是在数据科学和生成AI中。 在处理大型数据集时,有效的数据操作(存储,管理和访问)至关重要。 我们以前涵盖了数字和ST

与替代方案相比,Openai新型号的第一印象与替代方案相比,Openai新型号的第一印象Apr 18, 2025 am 11:41 AM

潜水之前,一个重要的警告:AI性能是非确定性的,并且特定于高度用法。简而言之,您的里程可能会有所不同。不要将此文章(或任何其他)文章作为最后一句话 - 目的是在您自己的情况下测试这些模型

AI投资组合|如何为AI职业建立投资组合?AI投资组合|如何为AI职业建立投资组合?Apr 18, 2025 am 11:40 AM

建立杰出的AI/ML投资组合:初学者和专业人士指南 创建引人注目的投资组合对于确保在人工智能(AI)和机器学习(ML)中的角色至关重要。 本指南为建立投资组合提供了建议

代理AI对安全操作可能意味着什么代理AI对安全操作可能意味着什么Apr 18, 2025 am 11:36 AM

结果?倦怠,效率低下以及检测和作用之间的差距扩大。这一切都不应该令任何从事网络安全工作的人感到震惊。 不过,代理AI的承诺已成为一个潜在的转折点。这个新课

Google与Openai:AI为学生打架Google与Openai:AI为学生打架Apr 18, 2025 am 11:31 AM

直接影响与长期伙伴关系? 两周前,Openai提出了强大的短期优惠,在2025年5月底之前授予美国和加拿大大学生免费访问Chatgpt Plus。此工具包括GPT-4O,A A A A A

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热工具

螳螂BT

螳螂BT

Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)