智能體開發(fā)技術(Python+FastAPI版) 課件 第3、4章 AI問答、每日新聞摘要_第1頁
智能體開發(fā)技術(Python+FastAPI版) 課件 第3、4章 AI問答、每日新聞摘要_第2頁
智能體開發(fā)技術(Python+FastAPI版) 課件 第3、4章 AI問答、每日新聞摘要_第3頁
智能體開發(fā)技術(Python+FastAPI版) 課件 第3、4章 AI問答、每日新聞摘要_第4頁
智能體開發(fā)技術(Python+FastAPI版) 課件 第3、4章 AI問答、每日新聞摘要_第5頁
已閱讀5頁,還剩75頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

AI問答content目錄01功能與設計分析02前后端準備工作03文本問答功能04圖像識別與生成功能與設計分析01核心功能列表AI問答系統(tǒng)概述AI問答系統(tǒng)是目前極為常見的一種AI大模型的基礎應用,很多AI應用均在此基礎之上進行拓展。本章主要利用JavaScript和FastAPI實現(xiàn)基于前后端交互的AI問答,主要包括以下功能。(1)利用FastAPI與阿里云的大模型實現(xiàn)對接,并處理流式響應。(2)實現(xiàn)基于純文本的AI問答,與平時使用的AI聊天應用類似。(3)調用阿里云的視頻理解模型實現(xiàn)圖像識別功能,解讀圖像的內容。(4)調用阿里云的通義萬相模型實現(xiàn)文本生成圖像功能,并在前端展示生成的圖像。(5)由于大模型不具備實時聯(lián)網(wǎng)功能,因此AI問答系統(tǒng)還要實現(xiàn)聯(lián)網(wǎng)搜索與問答功能。(6)對接高德地圖提供的MCP服務,用于實現(xiàn)地理位置查詢、天氣查詢等功能。(7)提供基于JavaScript調用操作系統(tǒng)本地的語音合成接口,實現(xiàn)語音朗讀功能。整體實現(xiàn)思路為什么選擇阿里云首先,阿里云作為國內領先的大模型提供商,其發(fā)布的Qwen3模型的功能絲毫不遜色于其他大模型。其次,阿里云提供的大模型的功能較為全面,AI問答系統(tǒng)涉及的文本問答、圖像識別、圖像生成、聯(lián)網(wǎng)搜索等功能均可以基于阿里云大模型實現(xiàn)。這樣做的好處是,讀者可以將學習的重心放在代碼邏輯和實現(xiàn)上,而不是各類平臺的接口對接上。整體實現(xiàn)思路前端界面設計AI問答系統(tǒng)的前端界面采用標準的HTML+CSS來實現(xiàn),設計比較簡潔。其主要有兩個關鍵點需要注意:第一個關鍵點是聊天框中的問答,由于是動態(tài)生成的DIV,因此需要使用JavaScript的文檔對象來動態(tài)創(chuàng)建一個DIV元素,即document.createElement('div');第二個關鍵點是圖像識別時需要上傳圖像并顯示,細心的讀者可能已經發(fā)現(xiàn),在AI問答系統(tǒng)項目的主界面中并沒有出現(xiàn)文件上傳的元素,而是對其進行了隱藏。文本問答功能此功能幾乎可以通過對接任意大模型來實現(xiàn),并在前端利用fetch()函數(shù)進行流式響應的讀取和填充。整體實現(xiàn)思路圖像識別功能首先,由于使用圖像識別功能時,用戶需要上傳本地圖像,因此會用到文件上傳組件。然而,該組件的默認樣式可能與整體界面風格不協(xié)調,因此建議將其隱藏??梢酝ㄟ^JavaScript代碼來觸發(fā)文件上傳功能,以保持界面設計的一致性和用戶體驗的流暢性。其次,用戶上傳的圖像不能直接傳遞至后臺,而是應暫存到瀏覽器中,并顯示預覽圖,可以考慮使用JavaScript的localStorage或sessionStorage對象來臨時保存圖像文件的Base64編碼。此后,讓用戶編寫提示詞,確定提示詞后,將圖像與提示詞一同上傳給后臺接口,后臺接口會與大模型進行交互。AI問答系統(tǒng)中圖像識別功能的運行結果如圖3-2所示。整體實現(xiàn)思路圖像生成功能圖像生成功能主要通過調用阿里云的通義萬相v2實現(xiàn),此功能的實現(xiàn)分成兩步:第一步,將用戶的提示詞提交給后臺,再由后臺轉交給通義萬相生成圖像;第二步,等待通義萬相生成結束后,獲取圖像的URL,并解析出圖像名稱,將其保存到項目目錄中,將圖像的路徑通過響應返回給前端,由前端界面渲染該圖像。注意:因為圖像生成功能響應給前端的是圖像的URL,所以不需要考慮流式響應的處理。整體實現(xiàn)思路聯(lián)網(wǎng)搜索功能在AI問答系統(tǒng)中,聯(lián)網(wǎng)搜索功能幾乎成了標配,核心原因是AI大模型本身不具備實時能力,需要具備搜索功能才能分析及總結實時數(shù)據(jù),并以大模型理解的表達形式響應給用戶。聯(lián)網(wǎng)搜索功能的本質就是根據(jù)用戶的提問,通過搜索引擎進行搜索,并將返回的搜索結果連同用戶的提問一起交給大模型進行總結、整理,并根據(jù)用戶的提問來進行回答。聯(lián)網(wǎng)搜索功能有兩種實現(xiàn)方式:第一種是通過搜索引擎搜索用戶提問,并將搜索結果界面的內容作為提示詞輸入大模型;第二種是直接調用搜索引擎提供的API,該方法可以更好地過濾搜索引擎的廣告,以JSON格式返回結果。整體實現(xiàn)思路高德MCP服務的調用如果要在AI問答系統(tǒng)中集成MCP服務調用,則必須使用代碼來開發(fā)MCP客戶端。其中,Python的mcp庫提供了對客戶端開發(fā)的支持。但是,相對于開發(fā)MCP服務器,開發(fā)MCP客戶端要更復雜一些,因為客戶端涉及與服務器的連接、接口和規(guī)范的讀取、與大模型的兩次交互、異步處理、連接狀態(tài)的維持等諸多操作。語音朗讀功能實現(xiàn)該功能的方案有兩種:第一種是直接利用JavaScript調用本地語音合成接口,實現(xiàn)簡單,且JavaScript內置支持;第二種是調用云API來進行語音合成,并將合成的語音保存為文件,在前端利用JavaScript進行播放。本章采用第一種方案實現(xiàn)語音朗讀功能。前后端準備工作02前端界面實現(xiàn)前端界面是標準的HTML+CSS實現(xiàn),且當前只考慮在PC端實現(xiàn),不考慮在移動端實現(xiàn),也不考慮響應式布局,相對比較簡單,通過常規(guī)的層疊樣式表(CascadingStyleSheets,CSS)即可完成。在templates目錄下創(chuàng)建一個名為chat.html的源代碼文件,以便在FastAPI中作為模板進行渲染,其內容及注釋如下。前端界面實現(xiàn)上述代碼中引用的style.css文件的內容如下。如果要調試上述代碼,則可以使用兩種方案:第一種是直接打開該HTML文件進行調試;第二種是在FastAPI中進行調試。這里推薦使用第二種方案。靜態(tài)目錄設置因為前端的模板界面中通常會引入CSS文件、JavaScript源文件,或者一些靜態(tài)的圖像等內容,所以必須確保前端界面中至少有一個正確的路徑。在FastAPI中,靜態(tài)目錄通常放置于項目根目錄的static目錄下,同時,要讓chat.html中引用的JavaScript文件或CSS文件路徑生效,必須完成以下兩項設置。(1)將所有靜態(tài)資源放置于static目錄下。(2)在實例化FastAPI后,需要設置靜態(tài)文件所在目錄,代碼如下。完成上述設置后,才能在HTML界面文件中使用<scriptsrc="/static/script.js"></script>正確引用JavaScript源文件。FastAPI多模塊第2章中已經學習了FastAPI的一些關鍵特性,且將所有接口代碼放到同一個Python源代碼文件中,這樣操作有一個弊端,即如果項目本身接口比較多,則該源代碼文件會很大,且難以維護。為了解決該問題,F(xiàn)astAPI提供了APIRouter對象來幫助開發(fā)者進行多模板開發(fā)。也就是說,可以先將相關功能模板的接口放到單獨的一個源文件中,再在main.py這類主代碼中進行引入,以實現(xiàn)接口的多模塊化處理。FastAPI多模塊定義了上述兩個接口后,再在main.py中進行引用,即可正常調用/get_test和/post_test這兩個接口,代碼如下。了解了上述功能后,可以將AI問答系統(tǒng)拆分為3個模塊,分別是qa模塊、recognize模塊和generate模塊。其中,qa模塊用于常規(guī)問答,recognize模塊用于圖像識別,generate模塊用于圖像生成。另外,通常項目中還存在一些公共模塊,用于在接口中調用。此時,可以創(chuàng)建一個名為module.py的源代碼文件,用于存儲非接口定義的公共代碼。文本問答功能03后端代碼實現(xiàn)首先,定義后端代碼,創(chuàng)建文件qa.py,用于對接AI大模型并生成流式響應,其基本邏輯與第2章一致,代碼如下。后端代碼實現(xiàn)其次,在main.py中引用qa模塊接口,并完善main.py中的其他代碼。前端代碼實現(xiàn)首先,講解如何在JavaScript中實現(xiàn)語音合成功能,以便問答時直接調用,代碼及注釋如下。前端代碼實現(xiàn)上述代碼完成編寫后,還不能馬上使用,需要在AI的回復中添加一個“朗讀”按鈕來進行調用。同時,在實現(xiàn)對話功能前,先定義兩個公共函數(shù)用于綁定Ctrl+Enter的按鍵事件,并將提問框滾動到底部,以查看最后的對話信息。前端代碼實現(xiàn)實現(xiàn)上述兩個功能模塊后,即可實現(xiàn)chat.html界面中的“智能問答”按鈕功能。調用doAsk()函數(shù),用于在提問框中新建一個DIV并將用戶提問框的內容添加到該DIV中。前端代碼實現(xiàn)接下來實現(xiàn)doAnswer(

)函數(shù),即前端與后端大模型通信的關鍵代碼。聯(lián)網(wǎng)搜索功能聯(lián)網(wǎng)搜索功能采用阿里云AI搜索開放平臺的服務接口來實現(xiàn),不同于阿里云靈積模型的APIKey申請,阿里云AI搜索開放平臺需要單獨申請APIKey。在阿里云AI搜索開放平臺上申請APIKey,如圖3-4所示。聯(lián)網(wǎng)搜索功能成功申請APIKey后,可以先編寫一段Python代碼進行測試。聯(lián)網(wǎng)搜索功能如果測試通過,則可開始實現(xiàn)聯(lián)網(wǎng)搜索的AI問答功能。在后臺創(chuàng)建文件module.py,用于保存搜索功能代碼,便于在接口中進行調用。聯(lián)網(wǎng)搜索功能因為前文配置前端發(fā)送請求時已經考慮了是否需要實現(xiàn)聯(lián)網(wǎng)搜索功能,所以構建的參數(shù)是params={"content":content,"search":false},這意味著如果用戶勾選了“聯(lián)網(wǎng)”復選框,則參數(shù)將變?yōu)閧"content":content,"search":true},需要在后臺qa模塊的stream接口中調整代碼。聯(lián)網(wǎng)搜索功能上述代碼的意思是,此次與大模型交互將不再單純將用戶的提問內容傳給大模型,而是要將搜索結果一并作為提示詞傳給大模型。上述后端接口代碼修改后,還需要同步修改前端的代碼,主要修改doAnswer(

)函數(shù)的代碼。開發(fā)MCP客戶端聯(lián)網(wǎng)搜索功能可以增強AI問答系統(tǒng)的問答能力,并可以針對任何提問進行搜索,功能實用性較強,但不夠有針對性。而使用MCP服務可以有針對性地拓展AI問答系統(tǒng)的特殊功能,如天氣查詢、旅游規(guī)劃、酒店查詢等。本小節(jié)將通過實現(xiàn)一個MCP客戶端,以調用高德地圖服務,配合聯(lián)網(wǎng)搜索功能,對AI問答系統(tǒng)進行完善。以下代碼演示了如何通過Python代碼獲取高德地圖的所有工具列表,并對其中的工具進行調用。開發(fā)MCP客戶端上述代碼運行后,會列出高德地圖所有MCP服務器工具,下面取其中一個工具進行展示。前文所述代碼的輸出結果就是函數(shù)定義,有描述、有參數(shù),至此,其本質上與自定義函數(shù)沒有不同。同時,經過仔細分析會發(fā)現(xiàn),inputSchema字段的值與FunctionCalling的函數(shù)定義部分完全一致。這非常有助于將其轉換為大模型的函數(shù)定義。開發(fā)MCP客戶端另外,由于mcp庫的函數(shù)全部被定義為async異步處理函數(shù),因此在上述代碼中同樣需要將函數(shù)定義為異步的,調用系統(tǒng)函數(shù)時必須使用await。理解了如何獲取工具列表以及如何調用工具后,再與大模型進行整合就比較簡單了。其核心過程就是先對用戶提問進行處理,執(zhí)行第一次大模型調用,再從中解析是否存在工具調用的需求,如果存在,則調用相應工具,最后是正常的流式響應的模型對話。在MCPClient類中,新增一個函數(shù)process_query(

),利用以下代碼即可進行AI對話與函數(shù)調用。開發(fā)MCP客戶端開發(fā)MCP客戶端函數(shù)調用增強因為FunctionCalling或MCP等調用更多地會應用于對話式AI應用中,所以要將函數(shù)調用整合到當前項目中,是完全可行的,這主要取決于用戶需要讓AI解決哪些問題。下面以通過AI提問框來發(fā)送一封郵件為例,演示如何增強AI問答系統(tǒng)的對話功能,對于其他各類功能的拓展,其思路和邏輯與之大體相同。首先,定義一個函數(shù),用于通過Python向特定郵箱地址發(fā)送一封郵件,將其保存到func_calling.py源文件中,具體代碼如下。函數(shù)調用增強由于使用QQ郵箱服務器來發(fā)送郵件,因此讀者需要進入QQ郵箱,開啟SMTP服務,并申請一個授權碼。具體操作如下:登錄QQ郵箱→單擊“設置”按鈕→單擊“賬號”按鈕,即可進入圖3-5所示的界面。按照系統(tǒng)提示申請授權碼,即可發(fā)送郵件。函數(shù)調用增強其次,完成郵件發(fā)送代碼的編寫后,需要完善兩段代碼。此時,需要根據(jù)FunctionCalling的格式要求來定義函數(shù)規(guī)格,以便大模型可以正確識別該函數(shù)的功能及參數(shù);需要修改AI對話的過程,只有對函數(shù)調用進行獨立的處理,才能將其整合到AI問答系統(tǒng)中。在func_calling.py代碼中添加以下函數(shù)定義。函數(shù)調用增強修改qa.py模塊中的智能問答功能,將函數(shù)調用與普通問答進行整合,修改后的代碼如下。圖像識別與生成04圖像識別功能在介紹圖像識別功能之前,要先了解圖像識別功能的大模型接口規(guī)范要求,可以通過查看阿里云大模型服務平臺的用戶指南學習視覺理解的接口規(guī)范。因為該接口是OpenAI兼容接口,所以代碼調用較為簡單,唯一需要注意的是圖像識別的正文需要包含圖像的Base64編碼和文本提示詞,其大致結構如下。圖像識別功能除了需要重新構建文本對話有所差異的請求,其他操作與文本對話基本一致。掌握了接口規(guī)范后,即可著手編寫后端接口代碼,并保存于recognize.py模塊中,具體內容如下。圖像識別前端圖像識別通常分為兩步:第一步是用戶上傳圖像并編寫提示詞第二步是發(fā)送給后臺以獲取大模型的輸出。因此,只設置一個按鈕顯然無法滿足功能要求,至少需要兩個按鈕。第一個按鈕是“識圖”按鈕,用于瀏覽圖像并顯示預覽效果,第二個按鈕仍然使用“智能問答”按鈕來與后端進行交互。需要注意的是,此處涉及在“智能問答”按鈕中如何判斷用戶是要進行文本問答還是要進行圖像識別的問題。從chat.html源代碼中可以看出,“識圖”按鈕調用的是addImage()函數(shù),該函數(shù)的代碼實現(xiàn)只是為了觸發(fā)文件上傳框的單擊事件,用于模擬文件上傳時的瀏覽文件功能,代碼如下。圖像識別前端當用戶瀏覽圖像后,接下來即可響應文件上傳框中的onchange="saveAndPreview()"代碼,saveAndPreview()函數(shù)用于將圖像的Base64編碼數(shù)據(jù)保存到sessionStorage中,并在提問框中進行預覽顯示。之所以使用sessionStorage而不是localStorage,是因為sessionStorage只用于臨時存儲數(shù)據(jù),關閉瀏覽器后就會清空數(shù)據(jù),不會永久保存,而AI問答系統(tǒng)也不需要永久保存。具體實現(xiàn)代碼如下。圖像識別前端如果上述代碼的功能正常,則當用戶瀏覽圖像后,可以在提問框中顯示預覽圖,其實現(xiàn)效果如圖3-7所示。圖像生成功能因為通義萬相模型不支持使用OpenAI的SDK,所以必須使用Dashscope的SDK實現(xiàn),根據(jù)文檔的示例代碼即可方便地生成圖像。創(chuàng)建generate.py后端接口,實現(xiàn)代碼如下。圖像生成功能后端代碼實現(xiàn)后,直接編寫前端代碼實現(xiàn)對接,并對生成的圖像進行渲染即可。圖像生成功能圖3-8中的提示詞還不夠完善。此時,可以選擇將這句提示詞交給智能問答系統(tǒng),讓智能問答系統(tǒng)幫助用戶優(yōu)化得到一份更加完善的提示詞。以下提示詞是由本章的AI問答系統(tǒng)生成的。每日新聞摘要content目錄01功能與設計分析02基礎功能實現(xiàn)03擴展功能實現(xiàn)功能與設計分析01核心功能列表新聞摘要系統(tǒng)在設計該項目時,要考慮以下6點。(1)選擇合適的新聞來源,本書選擇的是新浪新聞。(2)通過爬蟲技術獲取新聞標題和新聞原文內容,以便于把內容交給AI大模型進行總結和摘要。(3)由于新聞不是隨時更新的,因此每日新聞摘要項目需要具備定時更新新聞內容的能力。但是到更新時間時,因為可能某些新聞還未更新,所以數(shù)據(jù)庫還要具備去重的能力。(4)既然是新聞摘要,用戶的需求主要就是快速獲取新聞的大致信息。所以其界面要盡量簡潔,不宜提供過多功能。同時,如果用戶對某個新聞比較感興趣,則可能會想查看新聞原文內容,最好提供原文鏈接,讓用戶可以跳轉閱讀原文。(5)由于新聞類型比較豐富,如國內新聞、國際新聞、娛樂體育新聞、財經科技新聞等,因此應該具備新聞分類功能,以便用戶快速找到自己感興趣的新聞。(6)由于每天的新聞均保存在數(shù)據(jù)庫中,因此需要支持按日期展示歷史新聞,使用戶可以快速查看過去某天的新聞內容。核心功能列表新聞摘要系統(tǒng)整體實現(xiàn)思路(1)新聞原文內容爬取。使用Python中的BeautifulSoup庫可以非常方便地對網(wǎng)頁內容進行解析和提取。(2)交給大模型進行總結摘要時,只需要編寫好提示詞模板,把要求和對應的新聞原文提交給大模型,大模型就可以返回摘要內容。其準確度主要取決于大模型本身的理解能力,不過目前通義千問或DeepSeek等大模型在這方面的表現(xiàn)都較為出色。(3)在新聞實時更新方面,需要設置一個定時任務爬取新浪新聞上的最新新聞。(4)新聞分類本質上也可以通過爬蟲技術獲得,但是由于每日新聞摘要項目只針對新浪新聞進行摘要,同一個新聞站點的新聞類型通常是固定的,因此可以在代碼中預先寫好分類。(5)更新新聞時,通常需要將更新時間插入數(shù)據(jù)表,而該時間可以作為分組依據(jù)。以日期進行SQL查詢分組后,可以獲得日期的列表,并在前端界面中通過超鏈接功能將每個日期單獨設為一條超鏈接,用戶單擊相應超鏈接后就可以獲取當天的新聞摘要?;A功能實現(xiàn)02前端界面布局在掌握了某個系統(tǒng)的功能需求后,通常要優(yōu)先考慮進行項目的原型設計,或者直接開發(fā)原型界面,以便對需求和交互邏輯等進行更合理的規(guī)劃。一旦界面元素和交互邏輯基本確定,就說明需求理解已經完整和準確;再從技術層面考慮前后端的具體實現(xiàn),這樣可以確保思路上的通暢。如果是團隊開發(fā)某個項目,預先設計好原型界面可以使得成員之間的溝通更加順暢。整個新聞摘要的界面布局并不復雜,主要由頂部分類、中部新聞摘要主體、底部的按日期瀏覽這幾個部分構成,以下是HTML+CSS的布局代碼。前端界面布局前端界面布局上述界面布局代碼可以置于templates目錄下,并由Jinja2模板引擎進行渲染,這一部分內容與第3章的模板界面渲染完全一致,此處不贅述。其實現(xiàn)效果如圖4-2所示。一般來說,在設計前端界面時,由于還沒有后臺數(shù)據(jù)用于填充,因此可以先在HTML界面中任意填充一些數(shù)據(jù)進行占位,以預覽真實的實現(xiàn)效果,后續(xù)可通過Jinja2模板引擎在相應位置進行動態(tài)填充,以正常實現(xiàn)功能。數(shù)據(jù)表結構根據(jù)前文分析的結果,設計每日新聞摘要的數(shù)據(jù)表結構,如圖4-3所示。其中,id為自增長列,category為新聞類型,headline為新聞標題,hyperlink為原文超鏈接,content為新聞原始內容(保存與否均可,因為最終展現(xiàn)的不是原文而是摘要),summary為新聞摘要,createtime為該條數(shù)據(jù)的生成時間。目前,每日新聞摘要項目不需附加其他功能,只需要創(chuàng)建這一張表。BeautifulSoup庫由于每日新聞摘要項目只需爬取新浪新聞網(wǎng)站上的公開數(shù)據(jù),且只涉及幾個固定界面,比較有針對性,因此相對容易處理。每日新聞摘要項目完成以下兩個關鍵步驟后即可正常爬取到相應的內容:第一步是利用Python的requests庫發(fā)送Get請求以獲取界面的源代碼;第二步是利用BeautifulSoup庫對該源代碼進行解析,將需要的內容提取出來。新浪新聞版塊截圖如圖4-4所示,其中新聞部分的標題和超鏈接就是后續(xù)需要獲取的內容。為了獲取網(wǎng)頁中元素的屬性,需要在瀏覽器中按F12鍵打開開發(fā)者工具,以查看網(wǎng)頁源代碼和對應的元素。BeautifulSoup庫運行“pipinstallbeautifulsoup4lxml”命令,在Python環(huán)境下安裝BeautifulSoup庫。運行以下代碼,嘗試進行爬取。BeautifulSoup庫以同樣的方式編寫代碼,具體如下。以此類推,可以獲取其他類型的新聞。每日新聞摘要項目主要爬取今日要聞、國內新聞、國際新聞、財經科技、娛樂體育等幾類新聞。讀者也可以根據(jù)需要爬取其他類型的新聞,不影響每日新聞摘要項目的技術運用即可。爬取標題與超鏈接分析新聞首頁的元素屬性可以發(fā)現(xiàn),除了今日要聞的元素及屬性與其他類型新聞不同外,其他類型新聞的class屬性、ul元素及HTML層次都是一樣的,唯一區(qū)別在于id屬性和data-client屬性所對應的值不同。所以針對這些類型的新聞,可以將其封裝到一個函數(shù)體中,并將id屬性和data-client屬性作為參數(shù)進行傳遞,實現(xiàn)復用爬蟲代碼。要將新聞標題、超鏈接和新聞類型保存到數(shù)據(jù)庫中,需要創(chuàng)建一個模塊代碼文件crawler.py。該模塊用于編寫爬蟲代碼,并創(chuàng)建SQLModel庫的數(shù)據(jù)映射關系。首先,在news.py中定義數(shù)據(jù)庫引擎和映射關系,以便在其他模塊代碼中引用。爬取標題與超鏈接其次,編寫crawler.py的代碼。獲取和摘要新聞當完成新聞標題和超鏈接的爬取及保存后,可以進一步爬取新聞的完整內容,并利用AI大模型對內容進行摘要,從而將其更新到數(shù)據(jù)庫中。首先,數(shù)據(jù)庫中已經保存了新聞的標題和鏈接,所以此時遍歷news表中的新聞鏈接,即可對新聞的正文內容進行爬取。爬取的新聞正文可以保存到數(shù)據(jù)庫中,也可以不保存到數(shù)據(jù)庫中,因為每日新聞摘要項目最終呈現(xiàn)的只是經過大模型摘要后的簡短文字,所以將摘要保存到數(shù)據(jù)表中即可。其次,如何對新聞正文內容進行摘要呢?只需要將新聞正文連同提示詞提交給大模型,即可獲取摘要內容,并將該內容更新到數(shù)據(jù)表對應的行中。最后,由于新聞正文內容通常比較多,因此對接云端大模型所消耗的Token也較多,如果讀者本地部署有Ollama,則也可以嘗試利用本地大模型進行摘要,以減少Token開銷。每日新聞摘要項目仍然與云端大模型對接,以獲取更好的總結效果。獲取和摘要新聞創(chuàng)建summarize.py模塊文件,內容如下前端界面渲染完成數(shù)據(jù)庫的數(shù)據(jù)更新后,數(shù)據(jù)表中保存了新聞的標題、超鏈接和摘要,此時,便可以從數(shù)據(jù)庫中查詢此類信息,并通過模板界面將其渲染到前端。首先,在news.py模塊中通過get_news_by_dc()函數(shù)增加查詢代碼,此處為了方便后續(xù)重用,設計參數(shù)date和category,以便通過日期和新聞類型來查詢相應的新聞摘要。其中,date參數(shù)的默認值為None,如果不傳遞該參數(shù)的值,則表示獲取當天的新聞摘要,否則獲取指定日期的新聞摘要;而category的默認值為hot,表示默認獲取今日要聞類型的新聞摘要,否則獲取其他類型的新聞摘要。前端界面渲染其次,在main.py中添加接口代碼,用以填充模板界面。前端界面渲染再次,重新修改news.html模板界面,利用Jinja2進行循環(huán)的動態(tài)填充。前端界面渲染最后,運行main.py,訪問:8000/,如果效果如圖4-6所示,則表示功能成功實現(xiàn)。擴展功能實現(xiàn)03新聞分類瀏覽在編寫news.py模塊的get_news_by_dc()函數(shù)時已經考慮新聞分類功能,因此,只需在main.py中添加相應接口即可實現(xiàn)功能。新聞分類瀏覽因為前端代碼在之前已經添加了分類的超鏈接,所以不需要做任何修改便可以正常瀏覽分類新聞。上述代碼運行后,新聞摘要分類瀏覽效果如圖4-7所示。按日期瀏覽新聞如果不涉及新聞分類問題,那么按日期瀏覽新聞與按類型瀏覽新聞在實現(xiàn)思路上是相似的,例如,將接口從/china修改為/2025-05-15就實現(xiàn)了按日期瀏覽功能。但是現(xiàn)在的關鍵問題是每天的新聞均有不同類型,也就是說,每個日期下均有不同類型的新聞可以瀏覽。因此,用后臺接口處理日期的同時也需要考慮類型。基于這樣的思路,如果將接口地址設計為/2025-05-15/china,能否一次性解決問題?經過分析,這是可行的,但是有一個問題需要考慮,即按類型瀏覽和按日期瀏覽是兩個超鏈接,用戶是單獨單擊的。例如,用戶想瀏覽2025-05-13的新聞,默認可以訪問接

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論