目錄
介紹
概述
目錄
關於Langgraph的簡介
先決條件
通過API訪問LLM
獲取新聞數據
發送電子郵件
需要庫
定義應用程序流
獲取新聞
得分新聞
解釋
{actits ['title']} " > {actits ['title']}
策劃的新聞
首頁 科技週邊 人工智慧 使用AI代理創建個性化的新聞摘要

使用AI代理創建個性化的新聞摘要

Apr 12, 2025 am 11:18 AM

介紹

大語言模型(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/imghw/default1.png" data-src="https://img.php.cn/upload/article/000/000/000/174442792064130.jpg" 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

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1321
25
PHP教程
1269
29
C# 教程
1249
24
10個生成AI編碼擴展,在VS代碼中,您必須探索 10個生成AI編碼擴展,在VS代碼中,您必須探索 Apr 13, 2025 am 01:14 AM

嘿,編碼忍者!您當天計劃哪些與編碼有關的任務?在您進一步研究此博客之前,我希望您考慮所有與編碼相關的困境,這是將其列出的。 完畢? - 讓&#8217

GPT-4O vs OpenAI O1:新的Openai模型值得炒作嗎? GPT-4O vs OpenAI O1:新的Openai模型值得炒作嗎? Apr 13, 2025 am 10:18 AM

介紹 Openai已根據備受期待的“草莓”建築發布了其新模型。這種稱為O1的創新模型增強了推理能力,使其可以通過問題進行思考

視覺語言模型(VLMS)的綜合指南 視覺語言模型(VLMS)的綜合指南 Apr 12, 2025 am 11:58 AM

介紹 想像一下,穿過​​美術館,周圍是生動的繪畫和雕塑。現在,如果您可以向每一部分提出一個問題並獲得有意義的答案,該怎麼辦?您可能會問:“您在講什麼故事?

pixtral -12b:Mistral AI&#039;第一個多模型模型 - 分析Vidhya pixtral -12b:Mistral AI&#039;第一個多模型模型 - 分析Vidhya Apr 13, 2025 am 11:20 AM

介紹 Mistral發布了其第一個多模式模型,即Pixtral-12b-2409。該模型建立在Mistral的120億參數Nemo 12B之上。是什麼設置了該模型?現在可以拍攝圖像和Tex

如何在SQL中添加列? - 分析Vidhya 如何在SQL中添加列? - 分析Vidhya Apr 17, 2025 am 11:43 AM

SQL的Alter表語句:動態地將列添加到數據庫 在數據管理中,SQL的適應性至關重要。 需要即時調整數據庫結構嗎? Alter表語句是您的解決方案。本指南的詳細信息添加了Colu

超越駱駝戲:大型語言模型的4個新基準 超越駱駝戲:大型語言模型的4個新基準 Apr 14, 2025 am 11:09 AM

陷入困境的基準:駱駝案例研究 2025年4月上旬,梅塔(Meta)揭開了其Llama 4套件的模特,擁有令人印象深刻的性能指標,使他們對GPT-4O和Claude 3.5 Sonnet等競爭對手的良好定位。倫斯的中心

多動症遊戲,健康工具和AI聊天機器人如何改變全球健康 多動症遊戲,健康工具和AI聊天機器人如何改變全球健康 Apr 14, 2025 am 11:27 AM

視頻遊戲可以緩解焦慮,建立焦點或支持多動症的孩子嗎? 隨著醫療保健在全球範圍內挑戰,尤其是在青年中的挑戰,創新者正在轉向一種不太可能的工具:視頻遊戲。現在是世界上最大的娛樂印度河之一

如何使用AGNO框架構建多模式AI代理? 如何使用AGNO框架構建多模式AI代理? Apr 23, 2025 am 11:30 AM

在從事代理AI時,開發人員經常發現自己在速度,靈活性和資源效率之間進行權衡。我一直在探索代理AI框架,並遇到了Agno(以前是Phi-

See all articles