(三)鏈式工作流構建——打造智能對話的強大引擎

上一篇:(二)輸入輸出處理——打造智能對話的靈魂

在前兩個階段,我們已經搭建了一個基礎的智能對話,并深入探討了輸入輸出處理的細節。今天,我們將進入智能對話的高級階段——鏈式工作流構建。這一階段的目標是通過鏈式調用和復雜邏輯編排,讓對話系統具備更強大的處理能力和更靈活的應用場景。(建議從第一篇食用)

一、鏈式調用:構建任務處理流水線

鏈式調用是智能對話的核心功能之一,它允許我們將多個處理步驟串聯起來,形成一個完整的任務處理流水線。通過這種方式,我們可以讓智能對話自動完成一系列復雜的任務。

導入相關包

from langchain_community.chat_models import ChatZhipuAI
from langchain_core.runnables import RunnablePassthrough
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain_core.runnables import RunnableLambda
from langchain_core.runnables import RunnableBranch
from langchain_core.runnables.base import RunnableEach

基礎鏈式調用

chain = (RunnablePassthrough()  # 傳遞原始輸入| ChatPromptTemplate.from_template("將以下文本翻譯成{language}:{text}")| chat  # GLM-4-Flash模型| StrOutputParser()  # 提取文本內容
)
result = chain.invoke({"text": "Hello, world!", "language": "中文"})
print(result)

這段代碼展示了如何通過鏈式調用實現文本翻譯功能。輸入的文本首先被傳遞到模板中,然后由模型進行處理,最后通過解析器提取結果。這種流水線式的處理方式不僅高效,而且易于擴展。

結果如下:

你好,世界!

多步驟組合鏈

# 定義子鏈1:生成菜譜
recipe_chain = (ChatPromptTemplate.from_template("生成{cuisine}菜譜")| chat| StrOutputParser()
)# 定義子鏈2:生成購物清單
shopping_chain = (ChatPromptTemplate.from_template("根據菜譜列出食材:{recipe}")| chat| StrOutputParser()
)# 組合鏈
full_chain = {"recipe": recipe_chain,  # 先執行菜譜生成"cuisine": RunnablePassthrough()  # 傳遞原始輸入
} | shopping_chain  # 將菜譜結果傳遞給購物清單鏈result = full_chain.invoke("川菜")
print(result)

通過多步驟組合鏈,我們可以將多個子任務串聯起來,形成一個完整的任務流程。這種設計方式特別適合需要多步驟處理的復雜任務,比如菜譜生成和購物清單生成。

結果如下:

根據您提供的麻婆豆腐菜譜,以下是所需的食材列表:1. 老豆腐
2. 豬肉末
3. 姜蒜末
4. 蔥花
5. 豆瓣醬
6. 花椒粉
7. 食用油
8. 生抽
9. 老抽(可選)
10. 料酒
11. 水淀粉
12. 雞精或味精(可選)
13. 清水
14.

二、異步處理:提升系統的并發能力

在實際應用中,對話系統往往需要同時處理多個請求。異步處理技術可以顯著提升系統的并發能力,讓系統更加高效。

基礎異步調用

import asyncioasync def async_query():chain = (ChatPromptTemplate.from_template("用比喻解釋{concept}")| chat| StrOutputParser())return await chain.ainvoke({"concept": "機器學習"})# 運行異步任務
result = await async_query()
print(result)

通過異步調用,我們可以讓系統在等待一個任務完成的同時處理其他任務,從而提高系統的整體效率。

結果如下:

機器學習就像是一個聰明的學生,他不需要老師反復講解,只要給他一些例子,他就能自己學會如何解決問題。這個過程就像是一個孩子通過觀察和模仿來學習說話和走路。在這個比喻中,例子就是“數據”,而學生就是“算法”。算法通過不斷分析這些數據,就像孩子通過不斷模仿來學習語言和動作一樣,最終能夠獨立地識別模式和做出決策。

批量異步處理

async def batch_process():chain = (ChatPromptTemplate.from_template("生成關于{theme}的標題")| chat| StrOutputParser())# 并行處理多個請求tasks = [chain.ainvoke({"theme": "人工智能"}),chain.ainvoke({"theme": "氣候變化"})]return await asyncio.gather(*tasks)results = await batch_process()
print(results)

批量異步處理可以同時處理多個請求,特別適合需要同時生成多個結果的場景。

結果如下:(由于是批量處理,所以返回是列表形式)

['1. "人工智能:未來科技浪潮中的引領者"\n2. "智能革命:人工智能如何改變我們的世界"\n3. "從科幻走向現實:人工智能的無限可能"\n4. "AI賦能未來:探索人工智能的無限邊界"\n5. "智能時代來臨:人工智能如何重塑產業格局"\n6. "人工智能:開啟智慧生活新篇章"\n7. "智能進化論:人工智能技術發展歷程解析"\n8. "AI賦能教育:人工智能如何助力人才培養"\n9. "人工智能:推動醫療健康產業變革的力量"\n10. "智能時代,人工智能如何助力社會治理創新"', '1. "全球氣候變暖:挑戰與應對之道"\n2. "極端天氣頻發,氣候變化警鐘長鳴"\n3. "綠色未來:攜手應對氣候變化危機"\n4. "氣候變化下的生態危機:我們能做什么?"\n5. "低碳生活,共建地球家園——應對氣候變化行動指南"\n6. "氣候變化對農業的影響:挑戰與轉型之路"\n7. "從巴黎協定到行動:全球氣候治理的挑戰與機遇"\n8. "城市如何應對氣候變化:可持續發展的綠色策略"\n9. "氣候變化與人類健康:揭示未知風險與應對策略"\n10. "綠色能源革命:推動全球氣候治理新格局"']

三、流式處理:實時響應與分析

流式處理技術可以讓我們實時獲取模型的輸出,并在輸出過程中進行分析和處理。這種技術特別適合需要實時反饋的場景。

基礎流式輸出

chain = (ChatPromptTemplate.from_template("用100字介紹{topic}")| chat| StrOutputParser()
)for chunk in chain.stream({"topic": "人工智能"}):print(chunk, end="", flush=True)

通過流式輸出,我們可以實時獲取模型的輸出,這在需要即時反饋的場景中非常有用。

結果如下:(實時輸出結果,好像打字機一樣,一個或幾個字輸出)

人工智能是計算機科學領域,研究、開發用于模擬、延伸和擴展人的智能的理論、方法、技術及應用系統。它通過算法和機器學習,使計算機具備學習、推理、感知和決策能力,廣泛應用于各行各業。

帶中間狀態的流式處理

def word_counter(input_text):word_count = len(input_text.split())yield f"當前字數:{word_count}\n"analysis_chain = (ChatPromptTemplate.from_template("分析{AI_tool}的市場競爭力")| chat| StrOutputParser()| RunnableLambda(word_counter)  # 添加自定義處理
)for chunk in analysis_chain.stream({"AI_tool": "deepseek"}):print(chunk)

通過在流式處理中加入自定義邏輯,我們可以在輸出過程中實時分析和處理數據。

結果如下:

當前字數:61

四、復雜邏輯編排:讓系統更智能

復雜邏輯編排是智能對話系統的核心能力之一。通過條件分支和循環處理,我們可以讓系統根據不同的輸入執行不同的邏輯。

條件分支路由

def classify_input(text: str) -> str:if "笑話" in text:return "joke"elif "新聞" in text:return "news"return "other"# 定義子鏈
joke_chain = (ChatPromptTemplate.from_template("生成關于{topic}的笑話")| chat| StrOutputParser()
)
news_chain = (ChatPromptTemplate.from_template("寫一則關于{topic}的簡訊")| chat| StrOutputParser()
)
default_chain = (ChatPromptTemplate.from_template("回答關于{topic}的問題")| chat| StrOutputParser()
)# 構建分支邏輯
branch = RunnableBranch((lambda x: classify_input(x["topic"]) == "joke", joke_chain),(lambda x: classify_input(x["topic"]) == "news", news_chain),default_chain
)# 測試分支
print(branch.invoke({"topic": "人工智能笑話"}))  # 輸出笑話
print(branch.invoke({"topic": "科技新聞"}))  # 輸出簡訊

通過條件分支,我們可以讓系統根據輸入的不同執行不同的邏輯。這種設計方式特別適合需要處理多種類型輸入的場景。

結果如下:

# 第一個輸出
為什么人工智能不喜歡去健身房?因為它只想“訓練數據”,而不是“鍛煉身體”!😄
# 第二個輸出
【科技新聞簡訊】
我國科學家成功研發新型太陽能電池,效率提升30%近日,我國科研團隊在太陽能電池領域取得重大突破,成功研發出一種新型太陽能電池。該電池采用新型材料,通過優化設計,將光電轉換效率提升至30%,創下了國際領先水平。據悉,該技術有望廣泛應用于光伏發電、太陽能充電等領域,為我國新能源產業發展提供有力支持。目前,該成果已申請國際專利,并計劃在未來五年內實現產業化應用。

循環處理

prompt = ChatPromptTemplate.from_template("什么是{topic}")
model = chat
output_parser = StrOutputParser()chain = prompt | model | output_parserloop_chain = RunnableEach(bound=chain)response = loop_chain.invoke([{'topic': '人工智能'},{'topic': '機器學習'},{'topic': '深度學習'}
])
print(response)

通過循環處理,我們可以批量處理多個輸入,特別適合需要批量生成內容的場景。

結果如下:

['人工智能(Artificial Intelligence,簡稱AI)是指由人制造出來的系統所表現出的智能行為。這種智能可以是機器學習、自然語言處理、視覺識別、決策制定、問題解決等多種形式。人工智能的目標是使計算機能夠執行通常需要人類智能才能完成的任務。\n\n以下是人工智能的一些關鍵特點:\n\n1. **機器學習**:通過算法從數據中學習并改進性能。\n2. **自然語言處理**:讓機器能夠理解和生成人類語言。\n3. **計算機視覺**:讓機器能夠“看到”和理解圖像或視頻。\n4. **機器人技術**:將人工智能集成到物理機器人中。\n5. **專家系統**:模擬人類專家解決問題的能力。\n\n人工智能的應用領域非常廣泛,包括但不限于以下方面:\n\n- **醫療**:輔助診斷、藥物研發等。\n- **交通**:自動駕駛、交通流量管理等。\n- **金融**:風險評估、欺詐檢測等。\n- **教育**:個性化學習、自動評分等。\n- **娛樂**:游戲、虛擬助手等。\n\n人工智能的發展對人類社會具有深遠的影響,但也帶來了一些倫理和安全方面的挑戰。因此,在推動人工智能發展的同時,也需要關注其潛在的風險和影響,并采取措施確保其健康、可持續發展。', '機器學習是人工智能(AI)的一個分支,它使計算機系統能夠從數據中學習并做出決策或預測,而無需顯式編程。簡單來說,機器學習就是讓計算機通過經驗改進其性能的過程。\n\n以下是機器學習的一些關鍵點:\n\n1. **數據驅動**:機器學習依賴于大量數據來訓練模型。這些數據可以是結構化的(如數據庫中的表格)或非結構化的(如圖像、文本、音頻和視頻)。\n\n2. **算法**:機器學習使用各種算法來分析數據并從中學習。這些算法可以是監督學習、無監督學習或強化學習。\n\n3. **監督學習**:在這種方法中,模型從標記的數據(即已知結果)中學習。例如,通過學習大量已標記的電子郵件,模型可以學會將新電子郵件分類為垃圾郵件或非垃圾郵件。\n\n4. **無監督學習**:在這種方法中,模型從未標記的數據中學習。例如,無監督學習可以用于發現客戶購買模式或市場趨勢。\n\n5. **強化學習**:在這種方法中,模型通過與環境的交互來學習。它通過嘗試不同的行動并從中學習來優化其行為。\n\n6. **應用**:機器學習在各個領域都有廣泛的應用,包括自然語言處理、圖像識別、推薦系統、醫療診斷、自動駕駛汽車等。\n\n7. **挑戰**:盡管機器學習有許多優勢,但也面臨一些挑戰,如數據隱私、偏見、可解釋性和倫理問題。\n\n總之,機器學習是一種強大的技術,它使計算機能夠從數據中學習,并在此過程中不斷提高其性能。', '深度學習是機器學習的一個子領域,主要研究的是如何使用神經網絡來模擬人腦處理信息的方式,以實現對數據的自動學習和提取特征。它通過構建具有多層節點的神經網絡模型,使得模型能夠自動從原始數據中學習到更深層次的特征表示。\n\n以下是深度學習的一些關鍵點:\n\n1. **神經網絡**:深度學習的基礎是神經網絡,特別是深度神經網絡(DNN)。神經網絡由多個層組成,包括輸入層、隱藏層和輸出層。\n\n2. **多層結構**:與傳統的單層神經網絡相比,深度神經網絡包含多個隱藏層,這使得模型能夠學習更復雜的特征和模式。\n\n3. **自動特征提取**:深度學習模型可以自動從原始數據中提取特征,無需人工干預。這使得深度學習在圖像識別、語音識別等領域具有顯著優勢。\n\n4. **大規模數據**:深度學習通常需要大量的數據進行訓練,以使模型能夠學習到有效的特征表示。\n\n5. **優化算法**:深度學習模型通常使用梯度下降等優化算法進行訓練,以最小化預測誤差。\n\n6. **應用領域**:深度學習在多個領域取得了顯著成果,包括圖像識別、語音識別、自然語言處理、推薦系統等。\n\n深度學習在近年來取得了巨大進展,推動了人工智能技術的發展。隨著計算能力的提升和數據量的增加,深度學習有望在更多領域發揮重要作用。']

總結

鏈式工作流構建是智能對話的核心能力,它不僅決定了處理效率,還影響著靈活性和擴展性。通過鏈式調用、異步處理、流式處理和復雜邏輯編排等技術,我們可以讓對話變得更加智能、高效和實用。

未來,我們可以進一步探索以下方向:

  • 更復雜的任務編排:結合 RAG 技術,實現多步驟任務的自動化處理。
  • 實時交互優化:通過流式處理和異步技術,進一步提升系統的響應速度。
  • 多模態支持:支持圖片、語音等多種輸入輸出形式,讓對話系統更加多樣化。

祝我們學習愉快! 😊

下一篇:(四)數據檢索與增強生成——讓對話系統更智能、更高效

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/900280.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/900280.shtml
英文地址,請注明出處:http://en.pswp.cn/news/900280.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【MATLAB定位例程】TDOA(到達時間差)的chan-tylor,三維環境,附完整代碼

該代碼實現了基于三維空間的動態目標TDOA定位,結合了Chan算法(解析解)與Taylor級數展開法(迭代優化)的雙重優勢。 文章目錄 運行結果MATLAB代碼代碼講解代碼功能概述核心算法原理代碼結構解析可視化與結果分析運行結果 定位示意圖: 三軸狀態曲線: 三軸誤差曲線: MA…

Golang的文件同步與備份

Golang的文件同步與備份 一、Golang介紹 也稱為Go語言,是谷歌開發的一種編程語言,具有高效的并發編程能力和出色的內存管理。由于其快速的編譯速度和強大的標準庫,Golang在網絡應用、云平臺和大數據等領域得到了廣泛應用。 二、文件同步與備份…

ARXML文件解析-2

目錄 1 摘要2 常見ARXML文件注意事項以及常見問題2.1 注意事項2.2 常見問題2.3 答疑 3 ARXML解讀/編輯指南3.1 解讀ARXML文件的步驟3.2 編輯ARXML文件的方法3.3 驗證與調試 4 總結 1 摘要 本文主要對ARXML文件的注意事項、常見問題以及解讀與編輯進行詳細介紹。 上文回顧&…

3535 數組分割

3535 數組分割 ??難度:困難 🌟考點:2023、省賽、動態規劃 📖 📚 import java.util.*;public class Main {static int MOD 1000000007;static int N 1005;public static void main(String[] args) {Scanner sc …

Git操作指南

Git操作指南 1.安裝并配置Git Git官網:https://git-scm.com/downloads 安裝完成后,打開Git Bash,配置Git: git config --global user.email "emailexample.com" git config --global user.name "Your Name&quo…

Linux常用基礎命令應用

目錄 一、文件與目錄操作(12個核心命令)?? ??1. pwd - 顯示當前路徑?? ??2. ls - 查看目錄內容?? ??3. cd - 切換目錄?? ??4. mkdir - 創建目錄?? ??5. touch - 創建文件?? ??6. cp - 復制文件/目錄?? ??7. mv - 移動…

zookeeper基本概念和核心作用

圖片來源: 02-Zookeeper概念_嗶哩嗶哩_bilibili02-Zookeeper概念是黑馬程序員Zookeeper視頻教程,快速入門zookeeper技術的第2集視頻,該合集共計24集,視頻收藏或關注UP主,及時了解更多相關視頻內容。https://www.bilib…

關于HikariDataSource (null)的誤解,順帶提出一種mybaits-Plus mapper映射失敗的容易被忽視的原因

首先探究此問題并無什么實際意義,純屬是個人好奇使然,也順帶熟悉了一下Springboot 數據庫連接的相關問題,本人純小白說的不對的地方懇請大佬指正!! 關于HikariDataSource (null)的誤解 問題的發現 Value("${myba…

Centos7上安裝docker - yum在線的方式

步驟一 : 安裝 yum-utils yum install -y yum-utils步驟二 : 替換docker 的國內的源 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo執行完成后,會在 /etc/yum.repos.d/ 目錄下 新增 doc…

250405-VSCode編輯launch.json實現Debug調試Open-WebUI

A. 最終效果 根據__init__.py配置launch.json 根據中utils/chat.py中form_data的messages [{role: user, content: 唐老鴨}],可以找到用戶輸入,進而通過關鍵詞或模型調用的方式,對敏感問題進行特殊處理。 B. 文件配置 launch.json // { // /…

①(PROFINET 轉 Modbus TCP)EtherCAT/Ethernet/IP/Profinet/ModbusTCP協議互轉工業串口網關

型號 協議轉換通信網關 PROFINET 轉 Modbus TCP MS-GW35 概述 MS-GW35 是 PROFINET 和 Modbus TCP 協議轉換網關,為用戶提供一種 PLC擴展的集成解決方案,可以輕松容易將 Modbus TCP 網絡接入 PROFINET 網絡中,方便擴展,不受限制…

分治-歸并排序-逆序對問題

目錄 1.升序(以右邊的合并組為基準) 2.降序(以左邊的合并組為基準) 3.逆對序--固定下標 1.升序(以右邊的合并組為基準) 找出左邊有多少個數比我(nums[right])大 應該在每一次合并之前,進行…

(四)數據檢索與增強生成——讓對話系統更智能、更高效

上一篇:(三)鏈式工作流構建——打造智能對話的強大引擎 在前三個階段,我們已經搭建了一個基礎的智能對話,并深入探討了輸入輸出處理和鏈式工作流構建的細節。今天,我們將進入智能對話系統的高級階段——數…

JVM虛擬機篇(二):深入剖析Java與元空間(MetaSpace)

這里寫目錄標題 JVM虛擬機篇(二):深入剖析Java與元空間(MetaSpace)一、引言二、全面認識Java2.1 Java的起源與發展歷程2.2 Java的特性2.2.1 簡單性2.2.2 面向對象2.2.3 平臺無關性2.2.4 健壯性2.2.5 安全性2.2.6 多線程…

如何查看 MySQL 的磁盤空間使用情況:從表級到數據庫級的分析

在日常數據庫管理中,了解每張表和每個數據庫占用了多少磁盤空間是非常關鍵的。這不僅有助于我們監控數據增長,還能為性能優化提供依據。 Google Gemini中國版調用Google Gemini API,中國大陸優化,完全免費!https://ge…

[Windows] XHS-Downloader V2.4 | 小紅書無水印下載工具 支持多平臺批量采集

[Windows] XHS-Downloader 鏈接:https://pan.xunlei.com/s/VON4ygFN1JcyzLJJIOqIpqodA1?pwdsinu# XHS-Downloader 是一款開源免費的小紅書內容下載工具,支持無水印視頻 / 圖文提取、多鏈接批量處理及賬號作品采集。其核心優勢包括: 全平臺…

6.1 寬度優先搜索算法(BFS)

寬度優先搜索算法(BFS Breadth first search) 又稱廣度優先搜索,這種搜索是逐層的,搜索完上層,才會搜索下一層,直到找到目標節點。 搜索過程如圖中箭頭方向: 【例如】 八數碼難題:利用空格的移動&#xff…

基于LSTM的文本分類2——文本數據處理

前言 由于計算機無法認識到文字內容,因此在訓練模型時需要將文字映射到計算機能夠識別的編碼內容。 映射的流程如下: 首先將文字內容按照詞表映射到成唯一的數字ID。比如“我愛中國”,將“中”映射為1,將“國”映射到2。再將文…

Redis數據結構之ZSet

目錄 1.概述2.常見操作2.1 ZADD2.2 ZRANGE2.3 ZREVRANGE2.4 ZRANGEBYSCORE2.5 ZSCORE2.6 ZCARD2.6 ZREM2.7 ZINCRBY2.8 ZCOUNT2.9 ZMPOP2.10 ZRANK2.11 ZREVRANK 3.總結 1.概述 ZSet和Set一樣也是String類型元素的集合,且不允許重復的成員,不同的是ZSet…

什么是DHCP服務,在生活中的應用是什么?

提起DHCP,不接觸互聯網的可能會很陌生,其實并沒有這么高深,簡明扼要的說就是可以自動為連接的設備分配IP地址,子網掩碼,網關,dns等網絡參數。使連接步驟簡化,從而提高效率。 主要功能&#xff…