【promptulate專欄】ChatGPT框架——兩行代碼構建一個強大的論文總結助手

来源:https://www.cnblogs.com/zeeland/archive/2023/06/26/17506570.html
-Advertisement-
Play Games

> 本文節選自筆者博客:[https://www.blog.zeeland.cn/archives/019hasaa](https://www.blog.zeeland.cn/archives/019hasaa) # 前言 如果你經常閱讀論文,那麼你肯定會遇到以下幾個問題: - 論文晦澀難懂看不明白 ...


本文節選自筆者博客:https://www.blog.zeeland.cn/archives/019hasaa

前言

如果你經常閱讀論文,那麼你肯定會遇到以下幾個問題:

  • 論文晦澀難懂看不明白怎麼辦?
  • 有很多論文需要看,沒有那麼多精力怎麼辦?
  • 如何快速總結記錄論文的一些關鍵點為我所用?

關於上面的幾個問題,本文將會基於當前Python新興的大語言模型開發框架promptulate來演示使用如何用兩行代碼快速構建上手構建一個屬於自己的論文總結工具。

Promptulate

一個強大的大語言模型自動化與應用開發框架,支持智能決策、消息持久化、外部工具調用、角色預設等功能,開箱即用。 通過promptulate,你可以輕鬆構建起屬於自己的LLM應用程式。

作為一個強大的大語言模型應用開發框架,其主要有以下特性:

  • 大語言模型支持:支持不同類型的大語言模型的擴展介面
  • 對話終端:提供簡易對話終端,直接體驗與大語言模型的對話
  • 角色預設:提供預設角色,以不同的角度調用GPT
  • 長對話模式:支持長對話聊天,支持多種方式的對話持久化
  • 外部工具:集成外部工具能力,可以進行網路搜索、執行Python代碼等強大的功能
  • KEY池:提供API key池,徹底解決key限速的問題
  • 智能代理人:集成ReAct,self-ask等高級Agent,結合外部工具賦能LLM
  • 中文優化:針對中文語境進行特別優化,更適合中文場景
  • 數據導出:支持markdowm等格式的對話導出
  • 對話總結:提供API式的對話總結、翻譯、標題生成
  • 高級抽象,支持插件擴展、存儲擴展、大語言模型擴展

在架構上,promptulate主要由以下幾部分組成:

  • Agent 更高級的執行器,負責複雜任務的調度和分發
  • framework 框架層,實現不同類型的prompt框架,包括最基礎的Conversation模型,還有self-askReAct等模型。
  • llm 大語言模型,負責生成回答,可以支持不同類型的大語言模型
  • memory 負責對話的存儲,支持不同的存儲方式及其擴展,如文件存儲、資料庫存儲等
  • tools 提供外部工具擴展調用,如搜索引擎、計算器等
  • preset roles 提供預設角色,進行定製化對話
  • provider 為framework和agent提供tools和其他細粒度能力的集成

Promptulate快速上手

安裝最新版

打開終端,輸入下麵命令下載promptulate最新版,-U表示更新到最新版,如果你已經下載promptulate舊版本,那麼執行此命令會更新到最新版。promptulate當前正處於快速發展階段,因此你可能需要經常更新最新版以享用最新的成果。

pip install -U promptulate  

基本使用

下列文檔全部使用OPENAI GPT3.5進行測試

KEY配置

在使用promptulate之前,你需要先導入你的OPENAI_API_KEY

import os

os.environ['OPENAI_API_KEY'] = "your-key"

在你第一次使用的時候,需要使用os.environ["OPENAI_API_KEY"] 導入"OPENAI_API_KEY" 的環境變數,但是在第一運行之後promptulate會進行緩存,即後面再運行就不需要再導入key了。如果你的key過期了,可以嘗試重新按照上面的方法導入key,或者你也可以把cache文件給刪除掉,Windows的cache在當前目錄下,linux的cache/tmp下。

LLM

詳細文檔請跳轉LLM

promptulate的架構設計可以輕鬆相容不同的大語言模型擴展,在promptulate中,llm負責最基本的內容生成部分,因此為最基礎的組件。

下麵的示例展示瞭如何使用OpenAI進行交互。

from promptulate.llms import OpenAI

llm = OpenAI()
answer = llm("請解釋一下引力波的放射與廣義相對論的必然關係")
print(answer)

輸出結果如下:

廣義相對論是一種描述引力如何影響時空的物理學理論,它指出當物質和能量聚集在一起時,它們彎曲了周圍的時空,引起了引力。質量和能量更大的物體會導致更大
的時空彎曲,這就是為什麼地球會圍繞太陽旋轉。根據廣義相對論,當物質或能量在空間中運動時,它們會產生引力波,就像在水面上產生漣漪一樣。引力波是一種類
似電磁波的波動,但它們是由物質和能量的彎曲引起的,而電磁波是由電荷的振動引起的。引力波是極微弱的,但是當強烈的引力場存在(例如在引力天體碰撞或超新
星爆炸等事件中),它們可以被探測到。事實上,2015年,激光干涉引力波天文臺利用引力波探測器直接探測到了引力波,併為廣義相對論提供了強有力的證據。因
此,引力波的放射與廣義相對論必然關係緊密。通過引力波,我們可以更加深入地瞭解時空的性質,併進一步驗證這個理論。

Key池

promptulate為OpenAI進行特別優化,構建了Key池,如果你使用的是GPT3.5 5美元的賬號,一定會遇到限速的問題,這個時候,如果你有一堆Key,就可以很好的解決這個問題。promptulate的LRU KEY輪詢機制巧妙的解決了限速的問題,你可以使用LLM隨意地進行提問(前提是你有夠多的key)。此外,如果你既有GPT4GPT3.5
的KEY,KEY池也可以不同模型的KEY調度,你可以按照下麵的方式將key導入到你的key池中。

from promptulate.llms import OpenAI
from promptulate.utils import export_openai_key_pool

keys = [
    {"model": "gpt-3.5-turbo", "key": "xxxxx"},
    {"model": "gpt-3.5-turbo", "key": "xxxxx"},
    {"model": "gpt-3.5-turbo", "key": "xxxxx"},
    {"model": "gpt-4", "key": "xxxxx"},
]

export_openai_key_pool(keys)

llm = OpenAI()
for i in range(10):
    llm("你好")

上面的示例中,當你使用了export_openai_key_pool(keys)之後,cache會進行緩存,因此在下一次執行的時候,你就無需再導入key或key pool就可以使用OpenAI進行推理了。

需要註意的是,cache會初始化key pool中的數據,因此如果你的一些key失效了,可以嘗試重新執行該命令進行初始化操作,或者你可以使用如下刪除key_pool中的指定key。

from promptulate.utils.openai_key_pool import OpenAIKey, OpenAIKeyPool

key_pool: OpenAIKeyPool = OpenAIKeyPool()
key_pool.delete("your key")

使用下麵的方式可以進行查詢當前key_pool中的所有key。

from promptulate.utils.openai_key_pool import OpenAIKey, OpenAIKeyPool

key_pool: OpenAIKeyPool = OpenAIKeyPool()
keys = key_pool.all()
for key in keys:
    print(key)

輸入如下所示:

{'__name__': 'OpenAIKey', '__unique_id__': '62f56487-d528-4f5c-84bb-9c2a3df7354e', 'model': 'gpt-3.5-turbo', 'key': 'key1'}
{'__name__': 'OpenAIKey', '__unique_id__': 'ac3abd29-c62e-458d-b3cc-3f825594910f', 'model': 'gpt-3.5-turbo', 'key': 'key2'}
{'__name__': 'OpenAIKey', '__unique_id__': 'c90ab3c2-e6c0-4a16-a2f9-a298d6290218', 'model': 'gpt-3.5-turbo', 'key': 'key3'}
{'__name__': 'OpenAIKey', '__unique_id__': 'c13b1965-5034-4463-9409-2ad90ba1d260', 'model': 'gpt-3.5-turbo', 'key': 'key4'}

使用Promptulate構建論文總結工具

下麵展示如何使用promptulate構建屬於自己的論文總結工具。

上面章節說到過,promptulate具有tools模塊,tools模塊為LLM提供了調用外部工具擴展的能力,可以說tools是走向智能化的第一步,通過tools來為LLM構建一套感知反饋系統,可以為LLM應用開發提供更多的可能性。

當前promptulate支持以下幾種工具:

  • DuckDuckGo Search: DDG搜索引擎
  • Arxiv: Arxiv論文檢索工具
  • Semantic Scholar: Semantic Scholar論文檢索工具,可以檢索論文、查詢論文參考文獻、查詢引用該論文的文獻
  • Python REPL: 可以執行python腳本
  • FileManager: 可以進行文件讀寫
  • ...

promptulate中,為了構建更加智能的Agent,一些提供給Agent的Tool也是有大語言模型調用許可權的,它們一般有一些簡單的能力處理功能。如果你有需要,你可以直接使用這些帶有LLM的Tool,本文將會介紹的PaperSummaryTool就是一個帶有大語言模型的Tool。

接下來我們使用PaperSummaryTool來演示一下給Tool賦能LLM之後的表現,下麵的示例展示了使用PaperSummaryTool搜索論文attention is all you need

from promptulate.tools.paper.tools import PaperSummaryTool
from promptulate.utils.logger import get_logger, enable_log

enable_log()


def main():
    tool = PaperSummaryTool()
    result = tool.run("attention is all you need")
    # you can also input an arxiv id as follows
    # result = tool.run("2303.09014")
    print(result)


if __name__ == "__main__":
    main()

輸出結果如下

標題:註意力就是你所需要的

摘要:目前主流的序列轉換模型基於複雜的迴圈或捲積神經網路,採用編碼器-解碼器結構。表現最好的模型還通過註意力機制連接編碼器和解碼器。我們提出了一種新的簡單網路架構——Transformer,僅基於註意力機制,完全摒棄了迴圈和捲積。在兩個機器翻譯任務上的實驗表明,這些模型在質量上優於其他模型,同時更易於並行化,訓練時間顯著縮短。我們的模型在WMT 2014年英德翻譯任務上實現了28.4 BLEU的成績,超過了現有最佳結果,包括集成模型,提高了2個BLEU。在WMT 2014年英法翻譯任務中,我們的模型在8個GPU上訓練3.5天後,實現了新的單模型最優BLEU得分41.8,訓練成本僅為文獻中最佳模型的一小部分。我們證明Transformer在其他任務上具有很好的泛化能力,成功地將其應用於英語成分句法分析,無論是大規模還是有限的訓練數據。

關鍵詞:Transformer, attention mechanism, machine translation, BLEU score, parallelizable, training time, generalization.

關鍵見解:
- 傳統的序列轉換模型基於複雜的迴圈或捲積神經網路,而最好的模型通過註意力機制連接編碼器和解碼器。
- 本文提出了一種新的簡單網路架構——Transformer,僅基於註意力機制,完全摒棄了迴圈和捲積。在機器翻譯任務上,這種模型在質量上表現更好,同時更易於並行化,訓練時間顯著縮短。
- 本文的模型在WMT 2014英德翻譯任務上取得了28.4 BLEU的成績,在WMT 2014英法翻譯任務上取得了41.8 BLEU的成績,成為了單模型下的最佳結果。

經驗教訓:
- 註意力機制是一種有效的連接編碼器和解碼器的方式,可以提高序列轉換模型的性能。
- 簡單的網路架構也可以取得很好的效果,不一定需要複雜的迴圈或捲積結構。
- Transformer模型具有很好的泛化能力,可以成功應用於其他任務,如英語成分句法分析。

相關建議:
- 進一步探究Transformer網路結構的優化方法,提高其在不同任務上的表現。
- 嘗試將Transformer應用於其他自然語言處理任務,如文本分類、命名實體識別等。
- 研究如何在Transformer中引入外部知識,如知識圖譜等,以提高其對語義的理解和表達能力。
- 探索如何將Transformer應用於多語言翻譯任務,以實現更加高效和準確的跨語言翻譯。
- 研究如何在Transformer中引入對抗訓練等方法,以提高其對抗攻擊的魯棒性。

相關論文:

[1] [Convolutional Sequence to Sequence Learning](https://www.semanticscholar.org/paper/43428880d75b3a14257c3ee9bda054e61eb869c0)

[2] [Massive Exploration of Neural Machine Translation Architectures](https://www.semanticscholar.org/paper/4550a4c714920ef57d19878e31c9ebae37b049b2)

[3] [A Structured Self-attentive Sentence Embedding](https://www.semanticscholar.org/paper/204a4a70428f3938d2c538a4d74c7ae0416306d8)

[4] [Factorization tricks for LSTM networks](https://www.semanticscholar.org/paper/79baf48bd560060549998d7b61751286de062e2a)

[5] [Structured Attention Networks](https://www.semanticscholar.org/paper/13d9323a8716131911bfda048a40e2cde1a76a46)

[6] [Outrageously Large Neural Networks: The Sparsely-Gated Mixture-of-Experts Layer](https://www.semanticscholar.org/paper/510e26733aaff585d65701b9f1be7ca9d5afc586)

[7] [Neural Machine Translation in Linear Time](https://www.semanticscholar.org/paper/98445f4172659ec5e891e031d8202c102135c644)

[8] [Can Active Memory Replace Attention?](https://www.semanticscholar.org/paper/735d547fc75e0772d2a78c46a1cc5fad7da1474c)

[9] [Xception: Deep Learning with Depthwise Separable Convolutions](https://www.semanticscholar.org/paper/5b6ec746d309b165f9f9def873a2375b6fb40f3d)

[10] [Google's Neural Machine Translation System: Bridging the Gap between Human and Machine Translation](https://www.semanticscholar.org/paper/dbde7dfa6cae81df8ac19ef500c42db96c3d1edd)


輸出結果已經被排版成markdown格式的數據,因此很適合被渲染出來顯示。

此外,上面的例子中,含有多步的LLM推理(四次推理過程)和多次API調用(從Arxiv和Semantic Scholar中獲取論文、引用等相關數據),但是prompulate的事件匯流排並行機制大大化簡了推理總時間,平均推理時間保持在十幾秒(具體事件取決於網路環境)。

因為採用並行機制,因此在使用有LLM能力的Tool或者Agent時會在同一時間內快速地多次調用API,如果你的key有限速問題,推薦你使用key-pool來解決key限速的問題(如果你是5美元的key)。

總結

本文主要介紹瞭如何使用大語言模型開發框架promptulate構建一個論文總結助手,通過promptulate,我們還可以構建很多有意思的應用程式,如讓GPT調用搜索引擎,文件檢索等,後續的文章會陸續更新。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • # 前言 本文主要講述**適配器模式**,文中使用通俗易懂的案例,使你更好的學習本章知識點並理解原理,做到有道無術。 # 一.什麼是適配器模式 適配器模式是23種設計模式中**結構型模式**的一種,將一個類的介面轉換成客戶希望的另外一個介面。適配器模式使得原本由於介面不相容而不能一起工作的那些類可以 ...
  • 時間過的很快,3 年的疫情就這麼過去了,留下的卻是緊張的社會氛圍。 目前已經在電腦行業 7 年了,記得那是 2015 年,當時我也才 15 歲,正在讀初二。那會特別喜歡別人的網站,比如卡盟,還有代掛等等別人的那些網站,然後我入坑了。我那會百度怎麼做一個網站,然後搜出來需要學習 html,那時候,我 ...
  • ## SSL 簡介 SSL(Secure Socket Layer,安全套接字層)是一種保證網路上的兩個節點進行安全通信的協議。IETF(Interet Engineering Task Force)國際組織對 SSL 作了標準化,制定了 RFC2246 規範,並將其稱為傳輸層安全(Transpor ...
  • 博客推行版本更新,成果積累制度,已經寫過的博客還會再次更新,不斷地琢磨,高質量高數量都是要追求的,工匠精神是學習必不可少的精神。因此,大家有何建議歡迎在評論區踴躍發言,你們的支持是我最大的動力,你們敢投,我就敢肝 ...
  • ### 序 前面介紹了k8s組件和對象的一些基本概念,瞭解了k8s具體是做什麼的以及架構,那麼接下來我們開始介紹怎麼去安裝k8s,這裡我們以windows為例,其他平臺可以參考Kubernetes官方文檔,其實安裝方式都是類似的。 ### 先決條件 要在系統中安裝 Kubernetes,以下是一些需 ...
  • 某日二師兄參加XXX科技公司的C++工程師開發崗位第26面: > 面試官:`deque`用過嗎? > > 二師兄:說實話,很少用,基本沒用過。 > > 面試官:為什麼? > > 二師兄:因為使用它的場景很少,大部分需要性能、且需要自動擴容的時候使用`vector`,需要隨機插入和刪除的時候可以使用` ...
  • ## java獲取cpu核心數目 >```java >int processors = Runtime.getRuntime().availableProcessors(); >``` ...
  • > 本文首發於公眾號:Hunter後端 > 原文鏈接:[celery筆記八之資料庫操作定時任務](https://mp.weixin.qq.com/s/iM0VxVMagmRNeG2VIc01pg) 前面我們介紹定時任務是在 celery.py 中的 `app.conf.beat_schedule` ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...