現(xiàn)rss新聞?dòng)嗛? alt=)
創(chuàng)作靈感如果你只想了解具體實(shí)現(xiàn)步驟可以直接跳過(guò)這部分背景介紹直接查看后面的實(shí)現(xiàn)環(huán)節(jié)。最近嘗試使用了 Dify想探索能否自己搭建一個(gè)工具流。雖然效果可能不如專業(yè)的訂閱工具但可以作為一次實(shí)踐和探索。因此我構(gòu)建了這個(gè)使用 Dify 對(duì)話獲取新聞的流程歡迎對(duì) Dify 玩法感興趣的朋友一起交流。最初我參考了他人編寫的代碼但在運(yùn)行過(guò)程中發(fā)現(xiàn)其中存在一些函數(shù)語(yǔ)法錯(cuò)誤于是決定重新搭建整個(gè)流程。環(huán)境Dify Docker OllamaOllama 本地模型并非必需可以省略大模型解讀步驟直接輸出結(jié)果或者替換為線上模型。最后我會(huì)提供原始文件只要 Dify 能夠正常運(yùn)行流程即可順利執(zhí)行。效果步驟創(chuàng)建一個(gè)新空白應(yīng)用設(shè)置用戶輸入點(diǎn)擊第一步編輯字段選擇下拉用戶下拉選項(xiàng)選擇哪個(gè)平臺(tái)的新聞新建條件分支點(diǎn)擊用戶輸入的號(hào)。根據(jù)用戶的選項(xiàng)做不同處理添加rss路由點(diǎn)擊條件分支的加號(hào)選擇工具找到rssHub訂閱這個(gè)在首頁(yè)-集成-工具里面安裝填寫頂級(jí)域名到.com再填地址后面的/../..獲取消息條數(shù)運(yùn)行看下能不能請(qǐng)求到數(shù)據(jù)返回格式基本長(zhǎng)這樣如果不長(zhǎng)這樣也沒(méi)關(guān)系先拿數(shù)據(jù)后面再說(shuō)同理在條件分類的else第二個(gè)添加另一個(gè)rss訂閱最好改個(gè)名字區(qū)分一下點(diǎn)擊編輯框自定義路由填寫新名字聯(lián)合早報(bào)rss地址#https://plink.anyfeeder.com/zaobao/realtime/china代碼執(zhí)行目的將請(qǐng)求到的數(shù)據(jù)通過(guò)python或JavaScript解析成markdown格式添加兩個(gè)變量代表接收到的兩個(gè)rss訂閱數(shù)據(jù)格式選擇json填寫python代碼輸出變量名字填寫下不填使用默認(rèn)也可以后面基本能分辨python怎么寫將路由執(zhí)行后的數(shù)據(jù)復(fù)制出來(lái)到Qwen或其他大模型問(wèn)答里面輸入幫我編寫python函數(shù)這是一段rss新聞數(shù)據(jù)示例要求將這段json數(shù)據(jù)使用python語(yǔ)法轉(zhuǎn)化為markdown形式輸出。這是一個(gè)變量的情況也就是一個(gè)rss數(shù)據(jù)情況那多個(gè)怎么辦需要做判斷再加上有幾個(gè)數(shù)據(jù)例如5個(gè)rss數(shù)據(jù)那就寫幫我編寫python函數(shù)有5個(gè)變量傳入每個(gè)變量是一段rss新聞數(shù)據(jù)要求判斷這5個(gè)變量是否有值將有值的數(shù)據(jù)使用python語(yǔ)法轉(zhuǎn)化為markdown形式輸出。我這寫2個(gè)rss數(shù)據(jù)為例多個(gè)你就在輸入變量那里添加多個(gè)變量arg1,arg2,agr3...并且改下python代碼preimport json from datetime import datetimedef main(arg1None, arg2None): # 判斷參數(shù)1是否有效不為None if arg1 is not None: data arg1 # 參數(shù)1無(wú)效判斷參數(shù)2 elif arg2 is not None: data arg2 # 都無(wú)效賦值空數(shù)組 else: data []# 1. 若傳入字符串嘗試解析為 JSON if isinstance(data, str): try: data json.loads(data) except json.JSONDecodeError: raise ValueError(輸入字符串不是有效的 JSON) # 2. 兼容字典或列表 if isinstance(data, dict): sections data.get(json, []) elif isinstance(data, list): sections data else: raise TypeError(輸入必須是字典、列表或 JSON 字符串) markdown_lines [] markdown_lines.append(# 即時(shí)新聞精選\n) markdown_lines.append(gt; 【免責(zé)聲明】本平臺(tái) / 程序僅通過(guò)公開(kāi) RSS 訂閱協(xié)議抓取第三方公開(kāi)資訊標(biāo)題、摘要、簡(jiǎn)介全文版權(quán)歸屬原文作者與發(fā)布平臺(tái)。\n1.所有內(nèi)容僅用于個(gè)人閱覽、信息整理、非商用學(xué)習(xí)參考\n2.每條內(nèi)容均標(biāo)注來(lái)源出處與原文直達(dá)鏈接不私自篡改、轉(zhuǎn)載全文\n3.若權(quán)利人發(fā)現(xiàn)內(nèi)容不當(dāng)展示可聯(lián)系我方收到通知后 24 小時(shí)內(nèi)下架對(duì)應(yīng)內(nèi)容。\n我方不享有任何第三方內(nèi)容著作權(quán)不承擔(dān)內(nèi)容侵權(quán)連帶責(zé)任。\n) markdown_lines.append(---\n) for section in sections: section_title section.get(title, 新聞匯總) markdown_lines.append(f## {section_title}\n) markdown_lines.append(f*數(shù)據(jù)源{section.get(url, )}*\n) markdown_lines.append(---\n) entries section.get(entries, []) for idx, entry in enumerate(entries, 1): title entry.get(title, 無(wú)標(biāo)題) link entry.get(link, #) published entry.get(published, ) content entry.get(content, ) try: dt datetime.strptime(published, %Y-%m-%d %H:%M:%S) time_str dt.strftime(%Y年%m月%d日 %H:%M) except: time_str published markdown_lines.append(f### {idx}. [{title}]({link})\n) markdown_lines.append(f **發(fā)布時(shí)間** {time_str}\n) if content: clean_content .join(content.split()) summary clean_content[:200] ... if len(clean_content) gt; 200 else clean_content markdown_lines.append(f {summary}\n) else: markdown_lines.append( *無(wú)內(nèi)容摘要*\n) markdown_lines.append(---\n) markdown_lines.append(\n? *以上信息由聯(lián)合早報(bào) RSS 提供僅供參考。* ?) markdown_output \n.join(markdown_lines) # 3. 返回字典根據(jù)要求可修改鍵名 return {markdown: markdown_output}/code/pre路由執(zhí)行的數(shù)據(jù)格式在這里交給大模型幫你寫python轉(zhuǎn)化markdown代碼大模型解讀對(duì)數(shù)據(jù)進(jìn)行分析可以忽略選擇直接回復(fù)也可以提示詞如下第3步內(nèi)容你是結(jié)構(gòu)化新聞信息提取助手 輸入素材為《即時(shí)新聞》RSS 新聞合集需要逐條拆解新聞只需對(duì).markdown每項(xiàng)內(nèi)容進(jìn)行解讀解讀內(nèi)容50-80字并將解讀內(nèi)容添加到每項(xiàng)的鍵:解讀中 輸出時(shí)原markdown格式保留不要省略每項(xiàng)的內(nèi)容不要?jiǎng)h減內(nèi)容 最后統(tǒng)一輸出markdown格式試運(yùn)行看下推理效果直接回復(fù)最后輸出。預(yù)覽效果隨便輸入內(nèi)容發(fā)送如果格式是這樣就基本可以發(fā)布了有用的話幫我點(diǎn)個(gè)贊謝謝end