使用AI代理創建個性化的新聞摘要
介紹
大語言模型(LLM)的功能正在迅速發展。它們使我們能夠構建各種LLM應用程序。這些範圍從任務自動化到工作流優化。一個令人興奮的應用程序是使用LLMS創建智能新聞文摘或新聞通訊代理。該代理可以提取相關內容,總結它並以自定義格式交付。它可以與外部工具和數據源動態交互以獲取相關信息。在本文中,讓我們學習如何使用Langgraph和News API(例如News API)為個性化的每日新聞摘要構建新聞摘要代理。
概述
- 了解Langgraph及其關鍵組件(狀態,節點和邊緣)的體系結構,以構建可自定義的工作流代理。
- 了解如何將新聞紙這樣的外部API集成以獲取新聞通訊中動態內容的實時數據。
- 通過實施根據質量標準對新聞文章進行排名的評分系統,開發使用LLM進行內容評估的技能。
- 使用Python的電子郵件彙編庫將其自動化電子郵件交付自動化的實用知識。
目錄
- 關於Langgraph的簡介
- 先決條件
- 定義應用程序流
- 獲取新聞
- 得分新聞
- 發送電子郵件
- 建造代理
- 常見問題
關於Langgraph的簡介
Langgraph建在Langchain的頂部。 Langgraph是一個框架,旨在構建將LLM與自定義邏輯和工具集成的動態工作流程。這允許高度定制且複雜的工作流程結合多個工具和API。
Langgraph由三個核心組成部分組成:
- 狀態:狀態包含整個應用程序中共享的數據。可以是任何可以持有數據的Python數據結構。我們可以使用具有不同參數的狀態對象來定義它。另外,我們還可以使用僅包含消息列表的預構建的MessagessTate。
- 節點:節點是可以讀取和修改狀態的函數。這些功能將狀態作為讀或寫入狀態的第一個參數。我們還有一個開始節點來表示哪個節點將獲取用戶輸入,並首先稱為“表示圖”末尾的末端節點。
- 邊緣:邊緣通過不同的節點定義數據流。我們還具有有條件的邊緣,該邊緣使用函數來確定下一步要轉到哪個節點。 Langgraph的優點是我們可以通過許多方式自定義代理。因此,可以有不止一種方法來構建該代理。
如圖所示,邊緣連接節點,節點在狀態中讀取或寫入數據。
另請閱讀:優化組織與Genai代理商的電子郵件營銷
先決條件
在開始構建LLM代理之前,請確保我們擁有所需的鍵和密碼。
通過API訪問LLM
首先為您使用的LLM生成一個API鍵。創建一個名稱為“ .env”的文本文件。將此密鑰牢固地存儲在.env文件中,以使其私密且在項目中易於訪問。
這是一個.env文件的示例
獲取新聞數據
要收集新聞內容,我們將使用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和工具。
這三個工具如下:
- 獲取新聞:新聞API根據解析的查詢檢索相關的新聞文章。
- 評分新聞:被提取的文章傳遞給另一個LLM,該法學碩士評估和評分為質量。輸出是按其質量得分排序的文章列表。
- 發表新聞:最高得分的文章將格式化為可讀的電子郵件,並發送給用戶。
現在,我們可以開始定義功能。
獲取新聞
導入必要的庫並加載.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
代理還可以根據相關性對文章進行分類。這是此功能的輸出的示例:
'@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中文網其他相關文章!

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

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

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

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

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

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

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

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

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

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