日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

作者:donx

GPTs全景解析 GPTs 是什么

GPTs 是 AI target=_blank class=infotextkey>OpenAI 在2023年11月發(fā)布的新版本,具有可定制性和完成特定任務(wù)的強(qiáng)大功能。它提供了一種新的方式來使用ChatGPT,可以讓用戶根據(jù)自己的需求定制化,并與其他用戶共享。

以下是OpenAI 對(duì)它的能力介紹。

You can now create custom versions of ChatGPT that combine instructions, extra knowledge, and any combination of skills. (現(xiàn)在您可以創(chuàng)建定制版的ChatGPT,將指令、額外知識(shí)和任意技能組合起來。)

GPTs 提供了一種更智能、更個(gè)性化的體驗(yàn),無需每次都進(jìn)行教育,使用戶能夠更快地獲得答案。它可以通過組合指令、額外知識(shí)和任意技能,來適應(yīng)各種場景。用戶可以通過OpenAI的平臺(tái)創(chuàng)建自己的GPT,并與其他用戶共享。

但是 GPTs 提供的方式是讓所有人都可以得到定制版的ChatGPT,用戶可以根據(jù)自己的生活,工作,學(xué)習(xí)等不同的場景,制定適合自己的ChatGPT,并且可以和其他人進(jìn)行共享。

任何人都可以通過OpenAI的平臺(tái)搭建自己的GPTs,用戶不需要懂得編程或者技術(shù),只要擁有自己的idea,就可以創(chuàng)建屬于自己的GPTs。

創(chuàng)建GPT的過程簡單且直觀。用戶可以通過對(duì)話形式,為GPT提供指令和額外的知識(shí)庫,然后選擇所需的能力,例如聯(lián)網(wǎng)、繪圖、分析數(shù)據(jù)等。這可以在OpenAI的搭建平臺(tái)上進(jìn)行嘗試。

例如,OpenAI 提供了如下一些GPTs,例如

  • 數(shù)據(jù)分析GPTs: 支持上傳文件,并且執(zhí)行代碼進(jìn)行數(shù)據(jù)分析
  • Game Time GPTs:支持對(duì)桌游或者卡牌游戲進(jìn)行解釋等

深入探討GPTs和AI Assistant

OpenAI 提供了 GPTs 商店(暫時(shí)還沒有第三方的GPTs)方便用戶進(jìn)行 GPTs 的分享和使用。GPTs 的引入方便了用戶可以更大限度地使用OpenAI ChatGPT 的能力。

  • 可以快速地根據(jù)自己的需求定制 ChatGPT
  • OpenAI 相信最好的GPTs,肯定是由社區(qū)創(chuàng)建的,所以它選擇成為一個(gè)平臺(tái),只有最終的基礎(chǔ)的插件或者功能它會(huì)開發(fā),其他的能力均由開發(fā)者研發(fā)。
  • 開發(fā)者可以將將GPT和內(nèi)部數(shù)據(jù)庫等進(jìn)行連接,從而獲取數(shù)據(jù)
  • 企業(yè)版用戶可以創(chuàng)建內(nèi)部的GPTs
構(gòu)建一個(gè)完整的GPTs應(yīng)用

登陸 OpenAI 網(wǎng)站,選擇 Explore,然后再 My GPTs 中選擇 create a GPTs.

深入探討GPTs和AI Assistant

有兩種方式可以進(jìn)行GPTs 的創(chuàng)建:

  • 通過對(duì)話的方式進(jìn)行,選擇 Create
  • 通過配置的方式進(jìn)行,選擇 Configure

只需要將需要的配置進(jìn)行設(shè)置,就能得到一個(gè)想到的GPTs的能力。

例如下面設(shè)置的一個(gè)游戲GPTs,我們通過配置,使得GPT可以進(jìn)行數(shù)據(jù)分析,并且可以使用

  • Web Browsing:網(wǎng)頁瀏覽能力
  • Code Interpreter:代碼編寫以及執(zhí)行能力

下圖是這個(gè)數(shù)據(jù)分析助手的一個(gè)demo情況,用戶可以在兩三分鐘內(nèi)快速實(shí)現(xiàn)一個(gè)AI助手。

深入探討GPTs和AI Assistant

GPTs 的問題與漏洞

  • GPTs 安全性存在一定的問題,網(wǎng)上有針對(duì)GPTs提示詞泄露攻擊,并且可以得到結(jié)果。具體可以查看 OpenAI 的 GPTs 提示詞泄露攻擊與防護(hù)實(shí)戰(zhàn)
  • GPTs 暫無私有化部署,并且在微軟 Azure API 中不支持
  • AI 的數(shù)據(jù)安全問題是無法保證的,目前有傳言認(rèn)為 Sam 的出走是因?yàn)樵诋a(chǎn)品商業(yè)化和AI安全性的選擇導(dǎo)致的(參考)。
Assistants API全景解析

Assistants API 允許用戶在自己的應(yīng)用中通過API實(shí)現(xiàn)類似 GPTs 的 AI 助理,目前支持的能力和GPTs一樣(截止2023年11月12日),允許接入三種不同類型的 tools:

  • 代碼解釋器(Code Interpreter)
  • 知識(shí)庫集成(Retrieval)
  • 函數(shù)調(diào)用(Function calling)

通過構(gòu)建 AI 助手,用戶可以通過指令(instructions)設(shè)置助手的角色和能力。然后,AI 助手將利用其強(qiáng)大的大語言模型能力、各種工具(tools)和知識(shí)庫來回答用戶的問題。

Assistants API實(shí)踐案例

用戶可以通過Assistant playground 進(jìn)行Assistants API 的探索,參考以下教程使用 API 進(jìn)行 AI Assistant 集成。

通常進(jìn)行 Assistants API 集成需要一下四個(gè)步驟:

深入探討GPTs和AI Assistant

  1. 首先創(chuàng)建一個(gè)AI助手 (Assistant)。
    1. 通過自定義指令(custom instructions)進(jìn)行 AI 助手能力定義,實(shí)現(xiàn) AI 助手的形象和能力定位。
    2. 選擇基礎(chǔ)模型,可以選擇 GPT-3.5、GPT-4 等作為基礎(chǔ)模型。
    3. 選擇擴(kuò)展能力 tools 例如 code interpreter, retrieval 以及其他的 function call 工具。
  2. 創(chuàng)建一個(gè)對(duì)話(Thread) 進(jìn)行一個(gè)交流。
  3. 在對(duì)話中傳入消息(Messages),進(jìn)行提問。
  4. 在對(duì)話中進(jìn)行執(zhí)行(Run),AI Assistant 會(huì)自動(dòng)運(yùn)行相關(guān)的tools。

下面的例子會(huì)一步一步進(jìn)行AI Assistant的構(gòu)建。

步驟 1: 創(chuàng)建一個(gè)AI助手

一個(gè) AI assistant 可以通過下面的幾個(gè)參數(shù)進(jìn)行配置:

  • 指令(Instructions): 針對(duì)AI助手和模型,定制他們的表現(xiàn)和響應(yīng)行為。
  • 模型(Model): 提供了各種供選擇的 GPT-3.5 或者 GPT-4 模型,包括自己進(jìn)行精細(xì)調(diào)校的模型。如果希望使用信息檢索工具(Retrieval tool),則需要采用 gpt-3.5-turbo-1106或者 gpt-4-1106-preview模型。
  • 工具(Tools): Assistant API 支持使用OpenAI自行開發(fā)的 Code Interpreter 編碼解釋器以及 Retrieval 召回工具。
  • 函數(shù)(Functions): API 支持用戶使用自定義的函數(shù)作為額外工具使用,類似 Open AI 的 function calling 特性。

在這個(gè)例子中,我們會(huì)創(chuàng)建一個(gè)自己的數(shù)學(xué)導(dǎo)師,使用到 Code Interpreter 能力:

# Upgrade to Python/ target=_blank class=infotextkey>Python SDK v1.2 with pip install --upgrade openai assistant = client.beta.assistants.create( name="Math Tutor", # 助手的名字 instructions="You are a personal math tutor. Write and run code to answer math questions.", #助手能力 tools=[{"type": "code_interpreter"}], #助手的工具 model="gpt-4-1106-preview" #模型選擇 ) 步驟 2: 創(chuàng)建一個(gè)對(duì)話 Thread

一個(gè) Thread 就代表了一個(gè)對(duì)話。OpenAI 建議每個(gè)用戶在開始對(duì)話的時(shí)候都創(chuàng)建一個(gè) Thread,把所有用戶相關(guān)的內(nèi)容和文件都通過在 Thread 創(chuàng)建Message完成。

可以將 Thread 理解為與 AI 助手創(chuàng)建的一個(gè)對(duì)話窗口,所有的對(duì)話行為都在這個(gè)Thread 中進(jìn)行。

thread = client.beta.threads.create

Threads 本身并無大小限制,因此你可以在單個(gè) Thread 對(duì)話中發(fā)送任意數(shù)量的消息(Messages)。API 會(huì)自動(dòng)對(duì)請(qǐng)求的消息進(jìn)行適當(dāng)?shù)奶幚恚源_保請(qǐng)求滿足模型的最大窗口長度限制,如通過截?cái)嗟确绞竭M(jìn)行調(diào)整。

步驟3: 在對(duì)話(Thread) 中傳入 消息(Message)

一個(gè)消息可以包含用戶的文本輸入,還有可能包含用戶上傳的文件。盡管目前還不支持圖片,但OpenAI將在不久的將來添加這一功能。

message = client.beta.threads.messages.create( thread_id=thread.id, #需要傳入的Thread ID role="user", content="I need to solve the equation `3x + 11 = 14`. Can you help me?" )

如果現(xiàn)在你展示在對(duì)話Thread 中的所有消息,你會(huì)看到這條消息被加入到了對(duì)話中:

{ "object": "list", "data": [ { "created_at": 1696995451, "id": "msg_4rb1Skx3XgQZEe4PHVRFQhr0", "object": "thread.message", "thread_id": "thread_34p0sfdas0823smfv", "role": "user", "content": [{ "type": "text", "text": { "value": "I need to solve the equation `3x + 11 = 14`. Can you help me?", "annotations": [] } }], ... 步驟 4: 執(zhí)行AI助手

為了得到AI 助手的結(jié)果,你需要?jiǎng)?chuàng)建一個(gè) Run對(duì)象,這使得AI 助手可以獲取對(duì)話的消息,并決定是使用工具(tools)回答用戶的問題,還是僅僅依賴模型自身的能力進(jìn)行問題解答。

當(dāng) AI 得到答案,會(huì)在對(duì)話(Thread)的消息列表中加入角色(*role="assistant"*)的一個(gè)回復(fù)。

run = client.beta.threads.runs.create( thread_id=thread.id, assistant_id=assistant.id, instructions="Please address the user as Jane Doe. The user has a premium account." ) 步驟5: 展示AI 助手的回復(fù)

當(dāng)我們需要獲取AI回復(fù)的時(shí)候,可以對(duì) Run對(duì)象進(jìn)行不斷的查詢,獲取當(dāng)前執(zhí)行的狀態(tài)。

run = client.beta.threads.runs.retrieve( thread_id=thread.id, run_id=run.id )

當(dāng)狀態(tài)碼 == completed時(shí),代表AI已經(jīng)完成回復(fù),并且可以在Thread 中看到AI的回答。

messages = client.beta.threads.messages.list( thread_id=thread.id )

最后我們就可以把內(nèi)容展示給用戶,下面是一個(gè)例子。AI給出了兩個(gè)回答(role== assistant)

深入探討GPTs和AI Assistant

可以通過運(yùn)行步驟 Run Steps,獲取執(zhí)行的中間狀態(tài),從而提供給用戶中間結(jié)果以及使用的tools等信息。

步驟*: Playground 今天調(diào)試和測試

開發(fā)者可以在 Playground 中進(jìn)行調(diào)試和測試,具體如下,其具體的能力和GPTs比較相似,只是可以看到更多的debug信息。也是可視化的具體界面。

深入探討GPTs和AI Assistant

Assistants API工作機(jī)制剖析

Assistant API 的目標(biāo)是幫助開發(fā)者更高效地開發(fā)出功能強(qiáng)大的AI助手,這些助手可以有效地利用OpenAI提供的多項(xiàng)能力以及用戶自身構(gòu)建的工具。

  1. AI 助手可以調(diào)用 OpenAI 的模型,并通過特定的指令來定義助手的行為特性和能力。
  2. AI 助手可以同時(shí)調(diào)用多個(gè)工具tools,這些工具可以是 OpenAI 自己開發(fā)的工具,例如 like Code interpreter 和 Knowledge retrieval 也可以是用戶自己通過 Function calling自己實(shí)現(xiàn)的工具。這樣,AI助手就能拓寬其解決問題的能力范圍。
  3. AI 助手可以訪問持久化的對(duì)話,新引入的對(duì)話Thread功能簡化了AI應(yīng)用的對(duì)話管理工作。用戶只需要?jiǎng)?chuàng)建一次對(duì)話(Thread),就可以在后續(xù)快速地訪問并與其進(jìn)行對(duì)話,并輕松獲取答案,這樣就無需再關(guān)心模型對(duì)對(duì)話窗口的限制。
  4. AI 助手可以訪問多種類型的文件。 AI助手可以在初始化創(chuàng)建時(shí)訪問文件,或是在對(duì)話初始化的時(shí)候獲取文件。它也可以在使用工具時(shí)創(chuàng)建新的文件,然后在之后的調(diào)用中引用這些文件。
AI Assistant的重要對(duì)象概念

深入探討GPTs和AI Assistant

從我們上述的講解內(nèi)容中,我們可以很清楚,AI助手API的調(diào)用主要由 Assistant、Thread、Message、Run 和 Run Step 這五個(gè)對(duì)象組成

對(duì)象(OBJECT)含義助手對(duì)象(Assistant)調(diào)用 OpenAI 模型的任務(wù)型 AI,該AI 具備訪問 tools 的能力對(duì)話(Thread)用戶和AI之間的對(duì)話。Thread 對(duì)話存儲(chǔ)消息,并且自動(dòng)處理文本長度超出限制的問題消息(Message)消息由用戶或者AI產(chǎn)生,可以包含文本,圖片(暫時(shí)不支持),或者文件。消息在一個(gè)Thread對(duì)話中以有序列表形式存儲(chǔ)執(zhí)行(Run)通過AI助手對(duì)某個(gè)對(duì)話進(jìn)行顯式執(zhí)行。AI助手根據(jù)自身的配置信息和Thread中的消息內(nèi)容,調(diào)用不同的工具(tools),從而得出回復(fù)。執(zhí)行得到的結(jié)果會(huì)被存儲(chǔ)在Thread的消息中,作為AI的回復(fù)執(zhí)行步驟(Run Step)執(zhí)行(Run)的中間過程詳細(xì)記錄。包括AI使用了哪些tool,或者產(chǎn)生了哪些消息。這個(gè)對(duì)象可以幫助開發(fā)者理解AI如何得出最終的結(jié)果

創(chuàng)建一個(gè)AI Assistant 對(duì)象

創(chuàng)建一個(gè)AI 助手對(duì)象非常簡單,只需要指定使用的語言 model,然后通過instruction 指令規(guī)定AI 助手的性格以及能力(或者是目標(biāo))。

  • name: AI 助手的名字
  • instructions: 該參數(shù)指定了AI的性格以及目標(biāo)或者能力,這個(gè)很重要,會(huì)影響AI助手的輸出可靠性。
  • tools:list,可以傳入最多128個(gè)tools,可以使用 OpenAI 自己的 Code Interpreter 和 retrieval 工具,或者是自己構(gòu)建的第三方 functioncalling.
  • file_ids: list,文件的ID,這里傳入的文件ID 可以將文件傳給Code Interpreter 和 retrieval使用。文件需要通過File的上傳接口 進(jìn)行上傳,并且需要將接口的purpose設(shè)置成 assistants. 一個(gè)AI 助手可以使用最多20個(gè)文件。每個(gè)文件最多512M。

文件上傳:

file = client.files.create( file=open("speech.py", "rb"), purpose='assistants' )

AI助手創(chuàng)建:

assistant = client.beta.assistants.create( name="Data visualizer", instructions="You are great at creating beautiful data visualizations. You analyze data present in .csv files, understand trends, and come up with data visualizations relevant to those trends. You also share a brief text summary of the trends observed.", model="gpt-4-1106-preview", tools=[{"type": "code_interpreter"}], file_ids=[file.id] ) 管理對(duì)話和消息

對(duì)話(Thread)和消息(Messages)代表了AI 助手和用戶的聊天。一個(gè)對(duì)話中消息的個(gè)數(shù)是沒有限制的,一旦消息的內(nèi)容超過了模型可以處理的最長的窗口長度,Thread會(huì)自動(dòng)舍棄最舊的消息,包含盡可能多的消息內(nèi)容。(注意,該策略O(shè)penAI可能會(huì)更新)

Thread 和 Messages 的創(chuàng)建如下:

thread = client.beta.threads.create( messages=[ { "role": "user", "content": "Create 3 data visualizations based on the trends in this file.", "file_ids": [file.id] } ] )

messages 可以有如下兩種角色(role):

  • user: 用戶消息
  • assistant: AI 助手的回復(fù) messages消息可以包含文本,圖片,以及文件。但是目前的API暫時(shí)不支持圖片消息,相信很快就能支持

消息注解Message annotationsAI 助手返回的消息可能會(huì)包含 Message annotations,存儲(chǔ)在content 的對(duì)象中。注解(Annotations)提供了如何解析消息的信息;

目前支持兩種不同的注解:

  1. file_citation: 該注解是 retrieval工具提供的,它定了了參考的內(nèi)容的來源。
  2. file_path:該注解是 code_interpreter工具提供,指定了參考文件的地址目錄。

當(dāng)返回的內(nèi)容有注解的時(shí)候,我們需要進(jìn)行解析,將其轉(zhuǎn)化成用戶可以理解的文本,例如下面的代碼可以將參考文本以及下載鏈接進(jìn)行解析,方便用戶理解回復(fù)。

# Retrieve the message object import openai as client message = client.beta.threads.messages.retrieve( thread_id="...", message_id="..." ) # Extract the message content message_content = message.content[0].text annotations = message_content.annotations citations = [] # Iterate over the annotations and add footnotes for index, annotation in enumerate(annotations): # Replace the text with a footnote message_content.value = message_content.value.replace(annotation.text, f' [{index}]') # Gather citations based on annotation attributes if (file_citation := getattr(annotation, 'file_citation', None)): cited_file = client.files.retrieve(file_citation.file_id) citations.Append(f'[{index}] {file_citation.quote} from {cited_file.filename}') elif (file_path := getattr(annotation, 'file_path', None)): cited_file = client.files.retrieve(file_path.file_id) citations.append(f'[{index}] Click to download {cited_file.filename}') # Note: File download functionality not implemented above for brevity # Add footnotes to the end of the message before displaying to user message_content.value += 'n' + 'n'.join(citations) 執(zhí)行(Run)和執(zhí)行步驟(Run Steps)

當(dāng)我們需要AI Assistant 對(duì)用戶問題進(jìn)行回復(fù),,需要?jiǎng)?chuàng)建一個(gè)Run對(duì)象,該對(duì)象包含了兩個(gè)參數(shù):

  • thread_id: 之前創(chuàng)建的Thread的id
  • assistant_id: 該AI Assistant 的id
run = client.beta.threads.runs.create( thread_id=thread.id, assistant_id=assistant.id )

通常情況下,我們?cè)趧?chuàng)建 Assistant 對(duì)象的時(shí)候,已經(jīng)指定了model和tools,但是我們?nèi)钥梢栽趧?chuàng)建執(zhí)行對(duì)象(Run)的時(shí)候,進(jìn)行重新指定。

run = client.beta.threads.runs.create( thread_id=thread.id, assistant_id=assistant.id, model="gpt-4-1106-preview", instructions="additional instructions", tools=[{"type": "code_interpreter"}, {"type": "retrieval"}] )

注意:file_ids不可以在執(zhí)行中進(jìn)行修改,需要使用修改Assistant的API進(jìn)行修改

執(zhí)行的生命周期(Run lifecycle)

Run對(duì)象有不同的狀態(tài)

深入探討GPTs和AI Assistant

深入探討GPTs和AI Assistant

獲取進(jìn)度 Polling for updates

為了可以及時(shí)獲取執(zhí)行的進(jìn)度,可以設(shè)置定時(shí)獲取 retrieve the Run 執(zhí)行狀態(tài)。你可以獲取每次 Run 的執(zhí)行狀態(tài),從而決定下一步該做什么。 目前還不支持 streaming 的輸出(2023-11-12日)

對(duì)話鎖 Thread locks當(dāng)執(zhí)行對(duì)象 Run處于進(jìn)行中 in_progress的狀態(tài)的時(shí)候,對(duì)話Thread 對(duì)象會(huì)被鎖上,這意味著:

  • 新消息不能加到對(duì)話中
  • 新的執(zhí)行Run 不能被創(chuàng)建

執(zhí)行步驟 Run steps

當(dāng)執(zhí)行進(jìn)入 in_progress后,會(huì)有下面四種可能的狀態(tài),分別是

  1. 完成
  2. 失敗
  3. 取消
  4. 超時(shí)

深入探討GPTs和AI Assistant

執(zhí)行步驟Run steps可能耗時(shí)比較長,為了能了解執(zhí)行的細(xì)節(jié),我們可以通過 step_details這個(gè)字段進(jìn)行觀察,包含了兩種類型的內(nèi)容:

  1. message_creation: 展示了產(chǎn)生了什么消息
  2. tool_calls: 展示了使用了什么tool
限制

目前是beta 版本,將會(huì)持續(xù)解決后續(xù)這些如下問題

  • 支持流式輸出
  • 支持通知的功能,可以在無需輪詢的情況下共享對(duì)象狀態(tài)更新
  • 支持 DALL·E 作為工具
  • 支持用戶上傳圖片
Tools Code Interpreter

Code Interpreter(代碼解釋器) 允許 Assistant API 去創(chuàng)建并且執(zhí)行代碼。這個(gè)代碼解釋器能力,支持多種文件處理,以及代碼執(zhí)行。

代碼解釋器能夠通過代碼運(yùn)行,完成多種困難的任務(wù),并且能解決很多GPT地薄弱能力,例如數(shù)學(xué)能力等。Code Interpreter 支持如果發(fā)現(xiàn)自己的代碼執(zhí)行失敗了,會(huì)通過多輪重試,直到執(zhí)行成功。

開啟Code Interpreter

如果需要開啟 Code Interpreter 能力,只需要在tools參數(shù)中加入 Code Interpreter, 如 tools=[{"type": "code_interpreter"}]即可。

import openai as client assistant = client.beta.assistants.create( instructions="You are a personal math tutor. When asked a math question, write and run code to answer the question.", model="gpt-4-1106-preview", tools=[{"type": "code_interpreter"}] )

模型之后會(huì)選擇是否使用 Code Interpreter 去運(yùn)行用戶的請(qǐng)求。

在 Code Interpreter 中傳入文件

Code Interpreter 可以解析多種不同類型的文件,所以當(dāng)你需要處理大量的數(shù)據(jù)時(shí),AI Assistant 允許你傳入自己的文件進(jìn)行分析。

注意:上傳的文件需要設(shè)置 purpose='assistants'

# Upload a file with an "assistants" purpose import openai as client file = client.files.create( file=open("speech.py", "rb"), purpose='assistants' ) # Create an assistant using the file ID assistant = client.beta.assistants.create( instructions="You are a personal math tutor. When asked a math question, write and run code to answer the question.", model="gpt-4-1106-preview", tools=[{"type": "code_interpreter"}], file_ids=[file.id] )

如果需要指定 對(duì)話級(jí)別的文件訪問(即改文件只在這個(gè)對(duì)話中可以被訪問),則可以使用如下的代碼:

thread = client.beta.threads.create( messages=[ { "role": "user", "content": "I need to solve the equation `3x + 11 = 14`. Can you help me?", "file_ids": [file.id] } ] )

文件最大可以支持512 MB,z支持的格式包含 .csv, .pdf, .json 和其他格式

知識(shí)庫獲取 Knowledge Retrieval

知識(shí)庫獲取是克服 ChatGPT 知識(shí)儲(chǔ)備時(shí)效性問題,以及數(shù)據(jù)私有化的有效手段,例如利用知識(shí)庫獲取能力,可以把業(yè)務(wù)數(shù)據(jù)知識(shí)庫集成到GPT中。

開發(fā)者可以將文件(知識(shí)庫)上傳到AI 助手中,Open AI 會(huì)自動(dòng)化對(duì)文檔進(jìn)行分塊,加索引(index)以及embedding存儲(chǔ)和實(shí)現(xiàn)向量化檢索。

所以不需要用戶自己進(jìn)行這一系列操作就可以完成知識(shí)庫檢索的能力。

開啟知識(shí)庫檢索

Assistant 如果需要開啟知識(shí)庫增強(qiáng),只需要在初始化中的 tools加入 tools=[{"type": "retrieval"}]參數(shù)。

assistant = client.beta.assistants.create( instructions="You are a customer support chatbot. Use your knowledge base to best respond to customer queries.", model="gpt-4-1106-preview", tools=[{"type": "retrieval"}] ) 工作原理

模型會(huì)自動(dòng)地根據(jù)你的輸入進(jìn)行內(nèi)容的選擇,主要的召回邏輯如下:

  1. 短文檔直接傳入GPT
  2. 對(duì)于長文檔進(jìn)行向量化召回
Function Calling

跟 ChatGPT 的 Completion API 一樣,Assistant API 也支持 function calling。 Function Calling 允許你將函數(shù)的描述告訴AI 助手,包含了函數(shù)的定義以及參數(shù)等,然后 AI 助手會(huì)智能調(diào)用。

但是 Assistant API 不會(huì)直接調(diào)用函數(shù),而是將函數(shù)的參數(shù)和函數(shù)返回,等待你提交函數(shù)調(diào)用結(jié)果,才會(huì)進(jìn)行下一步的執(zhí)行。

定義函數(shù)

首先需要按照如下的樣例遞交函數(shù)定義

{ "type": "function", # 類型一定是function "function": { "name": "getCurrentWeather", # 函數(shù)名 "deion": "Get the weather in location", #函數(shù)的描述 "parameters": { # 函數(shù)的參數(shù) "type": "object", "properties": { "location": {"type": "string", "deion": "The city and state e.g. San Francisco, CA"}, "unit": {"type": "string", "enum": ["c", "f"]} }, "required": ["location"] } } }

然后將函數(shù)的參入 Assistant API的tools 參數(shù)中。例如下面的例子,定義了一個(gè)天氣機(jī)器人,可以獲取天氣信息。 包含了兩個(gè)函數(shù):

  • getCurrentWeather:獲取城市的天氣
  • getNickname: 獲取城市別名
assistant = client.beta.assistants.create( instructions="You are a weather bot. Use the provided functions to answer questions.", model="gpt-4-1106-preview", tools=[{ "type": "function", "function": { "name": "getCurrentWeather", "deion": "Get the weather in location", "parameters": { "type": "object", "properties": { "location": {"type": "string", "deion": "The city and state e.g. San Francisco, CA"}, "unit": {"type": "string", "enum": ["c", "f"]} }, "required": ["location"] } } }, { "type": "function", "function": { "name": "getNickname", "deion": "Get the nickname of a city", "parameters": { "type": "object", "properties": { "location": {"type": "string", "deion": "The city and state e.g. San Francisco, CA"}, }, "required": ["location"] } } }] ) 獲取調(diào)用的函數(shù)

當(dāng) 初始化一個(gè)執(zhí)行(Run) 的時(shí)候,如果調(diào)用了一個(gè)function,則會(huì)進(jìn)入到 pending的狀態(tài)。需要你進(jìn)行提交函數(shù)的結(jié)果。

模型支持并發(fā)調(diào)用,參考 parallel function calling

如下的返回結(jié)果,可以看到 required_action是需要提交的函數(shù)調(diào)用的函數(shù)名和參數(shù)。這里面可以 獲取 call id , 用于提交使用函數(shù)結(jié)果使用。

{ "id": "run_3HV7rrQsagiqZmYynKwEdcxS", "object": "thread.run", "assistant_id": "asst_rEEOF3OGMan2ChvEALwTQakP", "thread_id": "thread_dXgWKGf8Cb7md8p0wKiMDGKc", "status": "requires_action", "required_action": { "type": "submit_tool_outputs", "submit_tool_outputs": { "tool_calls": [ { "id": "call_Vt5AqcWr8QsRTNGv4cDIpsmA", # 返回的call id,用于提交使用 "type": "function", "function": { "name": "getCurrentWeather", "arguments": "{"location":"San Francisco"}" } }, { "id": "call_45y0df8230430n34f8saa", "type": "function", "function": { "name": "getNickname", "arguments": "{"location":"Los Angeles"}" } } ] } }, ... 提交函數(shù)結(jié)果

需要對(duì)于每個(gè)函數(shù)都進(jìn)行 提交函數(shù)輸出 ,對(duì)于每個(gè)輸出的結(jié)果需要提交給哪個(gè)函數(shù),則是對(duì)應(yīng)了函數(shù)調(diào)用返回的 required_action中的 tool_call_id。

具體的代碼如下。

run = client.beta.threads.runs.submit_tool_outputs( thread_id=thread.id, # 對(duì)話id run_id=run.id, # 執(zhí)行id tool_outputs=[ { "tool_call_id": call_ids[0], # call id "output": "22C", }, { "tool_call_id": call_ids[1], "output": "LA", }, ] ) LangChain 集成 Assistant API

截止2023-11-15日,LangChain 集成API 還只是一個(gè)實(shí)驗(yàn)版本 langchain-experimental,未有正式版本。所以需要使用的讀者,可以使用如下版本:

!pip install -U -q "langchain==0.0.331rc2" langchain-experimental "openai>=1.1" import os os.environ["OPENAI_API_KEY"] = 'YOUR OPENAI KEY' # !pip install -U -q "langchain==0.0.331rc2" langchain-experimental "openai>=1.1" from langchain_experimental.openai_assistant import OpenAIAssistantRunnable import openai as client file = client.files.create( file=open("TEST.csv", "rb"), purpose='assistants' ) interpreter_assistant = OpenAIAssistantRunnable.create_assistant( name="data analysis assistant", instructions="You are a profession data analysis. When asked a question, write and run Python code to answer the question.", tools=[{"type": "code_interpreter"}], file_ids=[file.id], model="gpt-4" ) output = interpreter_assistant.invoke( {"content": "最近2周活躍表現(xiàn)最突出的是哪一天?", "file_ids": [file.id] }) output

深入探討GPTs和AI Assistant

其他更多的內(nèi)容可以參考:langchain cookbook

使用curl調(diào)用 Assistant API

具體可以參考如下的 Jupyter Notebook

Capabilities 和 Actions

我們?cè)趧?chuàng)建 GPTs 的時(shí)候,可以給GPTs 提供多種不同的能力

  1. Knowledge:知識(shí)庫
  2. Capabilities(內(nèi)置能力):包含了 OpenAI 提供的基礎(chǔ)能力,主要包含了,這些能力都是最重要最基礎(chǔ)的,所以O(shè)penAI選擇自己做。
    1. Web Browsing(網(wǎng)絡(luò)瀏覽能力)
    2. DALLE Image Generation(圖片生成能力)
    3. Code Interpreter(代碼能力)
  3. Actions:動(dòng)作,指的是GPTs的其他能力,類似于額外的能力插件,OpenAI不可能幫用戶把所有的業(yè)務(wù)需求的能力都提供了額,所以它提供了一個(gè)接口,方便用戶可以使用規(guī)定的接口協(xié)議,給GPT提供額外的能力。目前Actions 采用的是OpenAPI的接口協(xié)議,方便GPT調(diào)用外部的API。具體的使用可以參考下面教程。
GPTs與Assistant API的比較與差異

雖然 GPTs 和 Assistant API 都是為了創(chuàng)建自定義的 AI 助手創(chuàng)建的,到那時(shí)兩者的方法和使用的場景不同。reference

GPTs 有著簡單易用的前端交互,可以很快速地方便小白用戶快速搭建 AI 助手,可以快速地驗(yàn)證方案和效果,并且可以很快速的在 GPTs 的商店中進(jìn)行分享。

然而, Assistant API 需要通過API的方式進(jìn)行操作,雖然可以使用 Assistant API 的 Assistant playground 進(jìn)行配置使用,但是其主要的目的還是為開發(fā)者提供一個(gè)API 方式,方便開發(fā)者可以在在自己的應(yīng)用中,快速集成這些能力。

參考資料

  1. YouTube:OpenAI Assistants API 極簡入門(附LangChain集成)
  2. OpenAI Assistants API with LangChain
  3. langchain cookbook
  4. Assistant playground
  5. introducing GPTs
  6. OpenAI Assistants API
  7. Difference of GPT’s and Assistants
  8. OpenAI Announces GPTs & Assistants. What is the difference?

分享到:
標(biāo)簽:GPTs
用戶無頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績?cè)u(píng)定