用Python和Flask程式碼來整合OpenAI

Find AI Tools
No difficulty
No complicated process
Find ai tools

用Python和Flask程式碼來整合OpenAI

目錄

介紹

在本視頻中,我們將介紹如何通過使用名為Lang chain的Python程式庫與Open AI模型進行交互。Lang chain是一個可以讓我們更輕鬆地與Open AI模型進行交互的工具。以下是Lang chain提供的一些模組,其中對我們最有興趣的是Prompt模組。我們將通過撰寫一些程式碼來演示一種常被稱為prompt工程的技術,你將會看到這並不是一個很複雜的技術,實際上更像是一種藝術。我們將撰寫的具體功能是一個互動式世界地圖,該地圖會在地圖上標記與任意查詢相關的信息。你可以問任何問題,我們將使用的模型將會在地圖上將相應的位置標記出來。例如,非洲最熱的城市在哪裡?巴西最好的海鮮在哪裡?Expedia和Travelocity可以聯繫我們,如果你希望將這個功能整合到你的應用程序中。這個視頻很重要,因為它能揭示一些在這個2023年人工智能狂熱期間發佈的人工智能應用程序的迷人之處。它通過簡單的prompt工程技術的應用,幫助我們理解了一部分人工智能應用。

首先,我必須說明您需要在OpenAI上創建一個帳戶並獲取一個API金鑰,以便對您的模型請求進行身份驗證。API金鑰是OpenAI跟蹤每個人使用其模型的方式,並限制每個人的使用量的工具。有一些方法可以在自己的計算機上運行模型,而不是通過付費的方式連接到Internet上的模型,但我們將在另一個視頻中討論這個主題。所以我們的起點就是下面這個示例,你可以看到這是一個使用Flask框架的服務器,只有一個端點,一開始還沒有什麼功能。

在項目文件夾中,沒有什麼需要一開始就注意的,但你可以看到我使用Poetry進行包管理,你也可以看到這個dot EMV文件,這是我存儲OpenAI API金鑰的地方。

本視頻的目的只是給您提供關於如何實現這個功能的基本概述,您可以根據自己的需求使用。那麼現在我將運行flask服務器,在終端中向端點發送curl請求,我們將在開發期間進行測試。

好的,當我發送curl請求時,你將在左邊面板中看到日誌。

你可以看到我們在頂部導入了一些Lang chain模組,並在Flask端點的控制器中實例化了一個llm(large language model)對象。這個對象允許我們調整或配置large language model,例如我們可以傳遞一個溫度參數,該參數可以是介於0到1之間的任意值,越接近0表示回應越不隨機,意味著如果我們連續發送請求,我們應該會得到完全相同的回應。如果溫度接近於1,則回應將更加隨機。在這裡,我們可以選擇使用哪個模型,例如GPT 3.5 turbo,這是大家最熟悉的模型。這是我們如何使用程式碼發送請求給模型的。

那麼,讓我們再次運行flask服務器,並發送一個curl請求,這應該會觸發模型的一個請求。

這是模型的回應,作為一個AI語言模型,我可以告訴你,答案是四。

在下一個代碼更新中,你可以看到我們對輸入進行了一些驗證,確保接收到的是一個帶有"prompt"鍵和要發送到llm的提示的"application/json"內容類型。讓我們來測試一下:

我有一些示例的curl請求在這裡,讓我們發送第一個:

第一個請求是"what is three plus three",它應該返回六,對吧?而它的確回答了六。

那我們再發送第二個請求,該請求是"what is the color of an orange",應該回答橘色,對吧?而它的確回答了橘色。

好的,現在我們要進入一些prompt工程技術了。你可以看到,當你把它拆分開來時,prompt工程實際上只是一種字符串模板化的技術。你可以看到,我們現在在prompt前面添加了這樣的文字:"please respond as Donald Trump would to the following query",事實上就是這樣,與你的字符串模板創造力有關。所以讓我們來測試一下:

現在,這個prompt是"what is the color of an orange",就像之前一樣,記住它之前說的是"the color of an orange is orange",這是之前的回答。但是現在,我們已經變更了模板,現在它顯示為"look, nobody knows oranges better than me, believe me, I know oranges, and let me tell you, the color of an orange is orange"。

好的,我將文本最小化一些以便放下所有的代碼,但是在這一步中,我們還沒有做太多的事情,我們只是增加了一個叫做PromptTemplate的附加類別。這是一種用於執行字符串模板化的工具,prompt工程到最後,終究是一種字符串模板化。所以這個類別允許我們多次重複使用多個提示,這樣,它就更容易發送對於未來請求的回應。所以當你發送或設計一個提示時,也可以包含一些它應該如何回答一些問題的示例,他們稱之為ShotPromptTemplate工程。所有這些都非常簡單,其實只是一堆行話。讓我們來測試一下:

我們運行flask服務器,然後發送一個空的提示,這並不重要,我們在測試這一步時只是看一下PromptTemplate類別為我們做了什麼,你可以看到它會將這個提示兩次格式化,與兩個示例查詢以及它們對應的回答一起。這個類別只是生成字符串。

好的,為了放下所有的代碼,我將文本縮小了一點,在這一步,我們真的沒有做什麼,只是增加了一個叫length-based example selector的附加幫助類。這個類將限制我們在最終提示中包含的示例數量,以便不超過endpoint open AI所設定的任何閾值。所以在文檔中,你會看到openai對每分鐘發送的請求數量和每分鐘發送的令牌數量有限制。所以tokens,就我了解來說,相當於單詞,所以tokens count就是單詞數量,簡而言之,length-base example selector允許你限制包含在最終提示中的token或單詞數量。

好的,現在一切都開始湊合在一起了,你可以看到,我們現在又增加了一個叫做FewShotPromptTemplate的類,這將所有東西綁在一起,並構建我們將要發送給我們使用的模型的最終提示。所以如果我們測試一下,你就會明白我的意思。

讓我們使用這個示例curl:

你可以看到,這是最終的提示文本,每個查詢都需要回答,請回答以Donald Trump的身份,"what is the greatest country in the world",是美國當然。

讓我們再發送一個請求看看:

這是回應,沒有問題,是美國。

好的,現在我們將這段代碼與Flask的端點綁定起來,這樣我們就可以在我們發出請求的地方接收到回應。

那麼,我們開始flask服務器,並測試它:

http://localhost:5000/predict

我們應該會在之前發出請求的終端中收到一個回應。

好的,我們已經成功將這段程式碼與Flask的端點綁定起來,現在我們可以在發送請求後在同一個終端中接收到回應。

這就完成了。現在,我將把prompt從一個Donald Trump AI應用程序變成一個互動式世界地圖應用程序所需的prompt,這就是我設計的prompt:

"can you return an array of objects as a JSON-formatted STRING that are geographically Relevant to an arbitrary query? Here are the requirements: each object in the array should contain three keys: lon and lat, which are the longitude and Latitude, and blurb, which is a one- to three-sentence answer to the query along with information about the environmental concerns of the city or region in which the coordinates exist. The array should be max length three items, and the overall length of the answer should be maximum 500 characters."

好的,讓我們運行flask服務器並測試這個prompt:

我們先運行服務器,然後發送這個curl請求,我們應該在發送請求的終端中收到一個回應。

好的,它正確地回答了遠古中最偉大的國家是美利堅合眾國,我們有最好的人民、最好的經濟和最優秀的軍隊,沒有人能夠與我們相比。

基本上,這樣就完成了。現在我將從一個使用Donald Trump AI的應用程序的prompt調整為互動式世界地圖應用程序所需的prompt,這是由我來設計的prompt:

"請根據任意查詢,以JSON格式的字串返回地理上相關的物件陣列。以下是要求: 陣列中的每個物件應該包含三個鍵: 經度(lon),緯度(lat),與查詢相關的一個至三個句子的描述(blurb),還包括該座標所在城市或區域的環境問題的信息。陣列的長度應該是最多三個項目,整個回應的長度應該是最多500個字元。"

好的,讓我們運行flask服務器並測試一下:

我們先運行服務器,然後發送這個curl請求,我們應該會在發送請求的終端中收到一個回應。

好的,這看起來也是沒問題的,它回答了我們的查詢,並給出了一個包含三個熱門城市的陣列。

總結一下,我們在本視頻中學到了如何使用Lang chain程式庫與Open AI模型互動,並且我們通過prompt工程技術創建了一個互動式世界地圖應用程序。這個應用程序可以根據任意查詢在地圖上標記相關的位置。我們還瞭解到prompt工程是一種非常簡單的技術,它只是一種字符串模板化的技術。我們通過適當的prompt工程,可以更好地控制模型的回應。我希望這個視頻對您有所幫助,並激發您自己創建與Open AI模型互動的應用程序的想法。

FAQs

Q: Can I use Lang chain with other AI models?

A: Lang chain is specifically designed to work with Open AI models. However, you can modify the code to work with other models as well, as long as they have compatible APIs.

Q: How can I control the randomness of the model's responses?

A: The temperature parameter in the Lang chain library allows you to control the randomness of the responses. A value closer to 0 will result in less random responses, while a value closer to 1 will result in more random responses.

Q: Can I run the models on my own machine instead of using Open AI's API?

A: Yes, there are ways to run the models on your own machine instead of using the API. However, this topic is beyond the scope of this video.

Most people like

Are you spending too much time looking for ai tools?
App rating
4.9
AI Tools
100k+
Trusted Users
5000+
WHY YOU SHOULD CHOOSE TOOLIFY

TOOLIFY is the best ai tool source.