連接 AI LLM 與即時接地源和資料的轉接器
列出主要增強功能
發布 | 日期 | 主要特點 |
---|---|---|
2.0.5 | 2024 年 4 月 1 日 | 主要更新:除了 OpenAI 和 GoogleAI 之外,還支援 ClaudeAI。 |
2.0.0 | 2024 年 1 月 5 日 | 主要更新:除了 OpenAI 之外,還支援 GoogleAI。 |
1.3.0 | 2023 年 12 月 16 日 | 改進了利用相關數據並產生相關回應的提示。所有方法的回應現在都提供運行時資訊。 |
1.2.9 | 2023 年 11 月 3 日 | (1) 代理配置可以指定(可選)語言鍵。設定此選項後,LLM 始終以指定的語言進行思考和回應(無論輸入語言如何)。注意:在某些情況下,翻譯品質可能不是最佳的,因此強烈建議進行徹底的測試。 (2) 一體化方法的回應包括法學碩士用來產生回應的基礎資料。這應該會提高可靠性。 |
1.2.8 | 2023 年 10 月 26 日 | 結合深入的提示技術來提高回應品質。 |
1.2.2 | 2023 年 10 月 18 日 | 改進了 API 確定的 LLM 提示和邏輯。 |
1.1.1 | 2023 年 10 月 9 日 | 引入了 LLM 提示,融入憲法人工智慧的風格,以確保用戶輸入公平、負責任、尊重和人道。 |
1.1.0 | 2023 年 10 月 8 日 | 引入了為後續問題建立上下文/記憶的能力。 |
1.0.0 | 2023 年 10 月 8 日 | 初次啟動。 |
作為多模式人工智慧模型,法學碩士具有廣泛的適用性,可以用最少的指令產生內容。零樣本或少樣本等提示技術在基於此類法學碩士構建的聊天應用程式的日常用戶中很流行。也就是說,雖然回覆的品質非常好,但我們對它的信任程度有多少?我們如何知道模型沒有即時「化妝」(又稱幻覺)?
因此,透過提供上下文數據並結合適當的提示技術來為法學碩士奠定基礎非常重要。使用帶有基礎資訊的提示作為上下文來幫助 LLM 產生更好的回應是一種廣泛遵循的做法。
其中一種方法是檢索增強生成(RAG),它依賴於儲存和搜尋隨提示一起提供給 LLM 的文字嵌入。然而,RAG 依賴轉換為文字嵌入的靜態資訊並將其儲存在圖形資料庫(也稱為向量資料庫)中,以便可以從中檢索相關資訊並透過基礎進行增強以產生文字/回應。
RAG 模式可能會提出這樣的問題:即時資料是否可以與 LLM 一起使用來產生有效且可靠的回應。簡單的答案是: “當然,是的!” 。但這意味著應用程式開發人員肩負更多的責任。開發人員需要呼叫 API 將回應包裝在提示中,以使 LLM 產生相關回應。但是針對每個問題一遍又一遍地呼叫相同的 API 是否有效? - 很可能不是!如何根據問題動態判斷應該呼叫哪個API、需要傳遞哪些參數?這聽起來也像是法學碩士的能力。
這就是 AI-Dapter(讀作AI 適配器)發揮作用的地方。 AI-Dapter 為開發人員加速了基於 LLM 的應用程式開發流程,使他們能夠只專注於應用程序,同時將後續活動的負擔減輕給 LLM。
從預先定義的 API 儲存庫中識別正確的 API 端點,
從已識別的 API 端點取得即時數據,
使用所選的 LLM 模型產生回應。
透過在應用程式程式碼中插入 AI-Dapter 框架並無縫地將其用作黑盒子來對用戶的問題執行基於 LLM 的回應,極大地改善了開發人員的體驗。請注意,這些使用者問題本身可能接近零樣本提示!
這個黑盒子背後的實際工作包括:
能夠將您選擇的 LLM 模型與您的憑證整合(注意:目前僅支援 OpenAI GPT 模型),
一個整合引擎,利用使用者輸入來執行識別 -
基於 API 的資料來源,
從這些 API 取得即時數據,以及
使用法學碩士以即時數據產生回應。
請透過 GitHub 討論提交回饋或新功能請求。
請透過 GitHub Issues 提交您的問題。
在命令列上執行以下命令來為您的 NodeJS 專案安裝 AI-Dapter。確保您位於專案的根目錄中。
npm 安裝 ai-dapter --save
假設您已經建立了一個 typescript NodeJS 項目,請如下匯入 AIDapter 類別。
從“ai-adapter”導入AIDapter;
為了初始化AI-Dapter,您必須傳遞一些強制和可選參數來完成設定。下面顯示了一個範例,後面是支援的參數的文檔。
const ai = 新 AIDapter({ "app_name": "<<應用程式短名稱>>" “提供者”:“OpenAI”, “型號名稱”:“gpt-3.5-turbo-16k”, “端點”:“https://api.openai.com/v1/chat/completions”, "authentication": {"api_key": "<<您的 OPENAI 金鑰>>","org_id": "<<您的 OPENAI 組織 ID>>" }, "溫度": "<<0.0 到 2.0 之間>>"});
用於初始化設定的支援參數清單。
範圍 | 必填(M) / 可選(O) | 目的 | 可能的值 |
---|---|---|---|
app_name | 中號 | 簡短的應用程式名稱。 | - |
provider | 中號 | LLM模型提供者。注意:目前僅支援 OpenAI 直接提供的模型。 | “開放人工智慧” |
model_name | 氧 | 允許您選擇提供者發布的任何型號。我們建議使用允許大令牌大小的模型,例如gpt-3.5-turbo-16k 或gemini-pro 或claude-3-haiku-20240307 。 | - |
endpoint | 氧 | 提供者為 LLM 模型提供服務的端點。您可能必須參考提供者特定的文件。例如,OpenAI 聊天完成模型由https://api.openai.com/v1/chat/completions 端點提供,GoogleAI 模型由https://generativelanguage.googleapis.com/v1/models/gemini-pro:generateContent 和ClaudeAI模型由https://api.anthropic.com/v1/messages 提供。 | - |
authentication | 中號 | 提供您的提供者指定的身份驗證詳細資訊。例如,由於 OpenAI 需要 API 金鑰和組織 ID,因此這些內容在api_key 和org_id 欄位下提供,如上面的初始化範例所示。 | - |
telemetry | 氧 | 遙測數據收集。預設為 true。 | 真/假 |
AI-Dapter 允許您自訂特定的代理配置,例如新增角色、個性等。 。
代理和配置選項作為單一物件傳遞,如下所示。請參閱下面的相應部分來尋找和調整這些配置值。
讓選項:AIDapterOptions = { "agentConfig": { "role": "個人助理" }, “數據配置”:{“最大記錄”:7 }};
以下是目前支援的代理配置參數。在agentConfig
物件下新增這些欄位。
範圍 | 必填(M) / 可選(O) | 目的 | 可能的值 |
---|---|---|---|
role | 中號 | 幫助指導 LLM 解決使用者問題的方法。例如,在扮演陸軍中士的角色時,LLM 可能會回答有關當前時間的問題,例如“當前時間是美國東部時間上午 08:01”,而喜劇演員總是會講一個關於我的問題的單行笑話可能會回覆類似「你該買手錶了!開個玩笑,現在是東部夏令時間(EDT) 時區2023 年10 月7 日上午8:01」。 | - |
personality | 氧 | 為法學碩士的回答語氣賦予個性。 | - |
language | 氧 | 您希望客服人員回應的語言,無論詢問使用者問題所使用的語言為何。 | - |
expert_at | 氧 | 如果法學碩士應該假設他們是任何特定領域的專家,例如醫療保健或汽車引擎等。 | - |
max_words | 氧 | 控制 LLM 的答覆應在多長或短內。預設小於 200 字。 | 1 到 200 之間的任意數字 |
以下是目前支援的數據配置參數。在dataConfig
物件下新增這些欄位。
範圍 | 必填(M) / 可選(O) | 目的 | 可能的值 |
---|---|---|---|
max_records | 中號 | 控制應儲存從即時 API 呼叫獲得的結果集中的前幾筆記錄。此參數對於控制輸入令牌大小至關重要,因為 API 呼叫的結果用於接地。注意:由於僅保留前 X 行,因此最好提供包含按降序排序的資料的 API 端點。預設=10 | 1 到 10 之間的任意數字 |
additional_context | 氧 | 當預期具有後續功能時,可以提供額外的背景資訊。 (請參閱 6.3. 使用接地即時資料產生 LLM 回應中的範例)。 | 必須是結構如下的陣列: [{ "question": "", "response_summary": "", "entities": { ... } }, { ... }] |
max_contexts | 氧 | 保留最新的 X 上下文。 AI-Dapter 將保留additional_context 數組的最後兩個元素,假設最新的上下文始終附加在該數組的末尾。 | 1 或 2 |
AI-Dapter 提供了以下三種功能,因此也提供了三種存取這些功能的方法。
建議:為了獲得最佳的開發人員體驗,請參閱 6.3。使用接地即時資料產生 LLM 回應
AIDapter.getRealtimeSources(輸入:字串,apiRepository:Types.APIRepository []):Promise<未知>
如果您的目標是根據使用者問題取得相關 API 端點,請使用此方法。
範圍 | 必填(M) / 可選(O) | 目的 | 資料類型 |
---|---|---|---|
input | 中號 | 用戶提問 | 文字 |
apiRepository[] | 中號 | 提供完整的 API 儲存庫,其中包含有關 API 端點(方法、URL、標頭和資料)、API 端點中使用的佔位符以及 LLM 將使用的驗證指令的詳細資訊。 | 請參閱 7. API 儲存庫 |
場地 | 目的 |
---|---|
api_endpoints[] | 所有已識別的 API 端點的陣列。 |
provider | 表示使用的是哪個 LLM 提供者。 |
runtime | 追蹤總體響應時間。請注意,這將取決於 LLM 的 API 回應時間。 |
// 匯入並初始化 AI-Dapterimport AIDapter from "ai-adapter";const ai = new AIDapter({ “提供者”:“GoogleAI”, "authentication": {"api_key": "<<您的 API 金鑰>>" }});// 定義 API 儲存庫,從中識別、更新和傳回適當的 API。這樣的API端點.const apiRepository = [ {"api_info": { "title": "目前時間", "description": "識別給定位置的適當時區區域和位置,並取得該位置的時間。"},"api_endpoint": { "method": "GET", "url": "http://worldtimeapi.org/api/timezone/|area_location|", "headers": {"Content-Type": "application/json" }},"placeholders": [ {"placeholder": "|area_location|","validation_criteria": "area_location 的範例是:美國/紐約或歐洲/倫敦。根據提供的有效位置,確定適當的area_location。","default": "美國/紐約”}] }];// 這是使用者的問題 input = "what time is it in Mumbai?"// 現在呼叫 getRealtimeSources() 方法取得有效的 API 端點sai.getRealtimeSources(input, apiRepository) .then((resp) => {console.log(resp);/* { "api_endpoints": [ { "api": { "method": "GET", "url": "https://worldtimeapi.org /api/timezone/Asia/Kolkata", "headers": { "Content-Type": "application/json" } }, "placeholders": [ { "placeholder": "[area_location]", "dependent": true } ], "status": "OK" } ], "provider": "GoogleAI", "runtime": "2 秒" } */ }).catch((err) => console.log(JSON.stringify(err, null, 4)));
請注意,根據使用者提供的城市Mumbai ,LLM 決定佔位符area_location的適當值並傳回更新的 API 端點。
AIDapter.getDataFromRealtimeSource(輸入:字串,apiRepository:Types.APIRepository [],dataConfig?:Types.DataConfig |未定義):Promise<未知>
如果您的目標是根據使用者問題從相關 API 端點取得數據,請使用此方法。
範圍 | 必填(M) / 可選(O) | 目的 | 資料類型 |
---|---|---|---|
input | 中號 | 用戶提問 | 文字 |
apiRepository[] | 中號 | API 資訊、端點(方法、URL、標頭和資料)和占位符的陣列。 | 請參閱 7. API 儲存庫 |
dataConfig | 氧 | 用於控制從 API 呼叫取得的資料的配置參數。 | 見 5.2。數據配置 |
場地 | 目的 |
---|---|
api_results[] | 所有 API 呼叫的回應數組。 |
provider | 表示使用的是哪個 LLM 提供者。 |
runtime | 追蹤總體響應時間。請注意,這將取決於 LLM 的 API 回應時間。 |
// 匯入並初始化 AI-Dapterimport AIDapter from "ai-adapter";const ai = new AIDapter({ “提供者”:“GoogleAI”, "authentication": {"api_key": "<<您的 API 金鑰>>" }});// 定義 API 儲存庫,從中識別、更新和傳回適當的 API。這樣的API端點.const apiRepository = [ {"api_info": { "title": "目前時間", "description": "識別給定位置的適當時區區域和位置,並取得該位置的時間。"},"api_endpoint": { "method": "GET", "url": "http://worldtimeapi.org/api/timezone/|area_location|", "headers": {"Content-Type": "application/json" }},"placeholders": [ {"placeholder": "|area_location|","validation_criteria": "area_location 的範例是:美國/紐約或歐洲/倫敦。根據提供的有效位置,確定適當的area_location。","default": "美國/紐約”}] }];// 這是使用者的問題input = "what time is it in Mumbai?"// 資料配置let dataConfig = { "max_records": 3 }// 現在呼叫getDataFromRealtimeSource() 方法,從呼叫所有相關的資料中取得資料基於使用者的 API 端點 Questionai.getDataFromRealtimeSource(question, apiRepository, dataConfig) .then((resp) => {console.log(resp);/* { "api_results": [ { "api_sources": "worldtimeapi.org", "data": { "abbreviation": "IST", "client_ip “:“50.126.214.61”,“日期時間”:“2024-01-05T22:48:30.316887+05:30”,“day_of_week”:5,“day_of_year”:5,“dst”:假,“dst_from” : null,“dst_offset”:0,“dst_until”:null,“raw_offset”:19800,“時區”:“亞洲/加爾各答”,“unixtime”:1704475110,“utc_datetime”:“2024-01-0T17: 30.316887 +00:00", "utc_offset": "+05:30", "week_number": 1 } } ], "provider": "GoogleAI", "runtime": "4 秒" } */ }).catch((err) => console.log(JSON.stringify(err, null, 4)));
來自 API 呼叫的響應。此數據可用於 LLM 接地。
AIDapter.getLLMResponseFromRealtimeSources(輸入:字串,apiRepository:Types.APIRepository [],選項?:AIDapterOptions |未定義):Promise<未知>
如果您的目標是根據使用者問題獲得 LLM 答复,請使用此方法。這包括識別相關的 API 端點、呼叫已識別的 API 以及在 LLM 提示中使用該端點來接收來自 LLM 的回應。
建議:使用此方法可以最大限度地加速您的應用程式開發流程。
範圍 | 必填(M) / 可選(O) | 目的 | 資料類型 |
---|---|---|---|
input | 中號 | 用戶提問 | 文字 |
apiRepository[] | 中號 | API 資訊、端點(方法、URL、標頭和資料)和占位符的陣列。 | 請參閱 7. API 儲存庫 |
options | 氧 | 代理和數據配置 | 請參閱 5. 代理程式和資料配置選項 |
場地 | 目的 |
---|---|
ai_response | LLM 產生回應。 |
ai_status | 協助確定回應是否基於成功進行 API 呼叫所需的所有資料元素的可用性。可能的值:OK、FOLLOW-UP 或 INCOMPLETE |
ai_context | 其中包含簡短的回應摘要和實體清單。該字段背後的想法是針對涉及後續對話的用例。當要提交後續問題時,整個物件可以作為dataConfig 選項中的additional_content 傳遞。 |
provider | 表示使用的是哪個 LLM 提供者。 |
runtime | 追蹤總體響應時間。請注意,這將取決於 LLM 的 API 回應時間。 |
// 匯入並初始化 AI-Dapterimport AIDapter from "ai-adapter";const ai = new AIDapter({ “提供者”:“GoogleAI”, "authentication": {"api_key": "<<您的 API 金鑰>>" }});// 定義 API 儲存庫,從中識別、更新和傳回適當的 API。這樣的API端點.const apiRepository = [ {"api_info": { "title": "目前時間", "description": "識別給定位置的適當時區區域和位置,並取得該位置的時間。"},"api_endpoint": { "method": "GET", "url": "http://worldtimeapi.org/api/timezone/|area_location|", "headers": {"Content-Type": "application/json" }},"placeholders": [ {"placeholder": "|area_location|","validation_criteria": "area_location 的範例是:美國/紐約或歐洲/倫敦。根據提供的有效位置,確定適當的area_location。","default": "美國/紐約”}] }];// 這是使用者的問題輸入=“孟買現在幾點?”// AI-Dapter 選項提供組合的代理配置和資料配置選項:AIDapterOptions = { "agentConfig": { "role": "總是對我的問題講一個笑話的喜劇演員" }, "dataConfig": { "max_records": 7 }};// 現在呼叫 getLLMResponseFromRealtimeSources() 方法取得使用者問題的 LLM 回應。選項) .then((resp) => {console.log(resp);/* { "ai_response": "在充滿活力的孟買市,寶萊塢夢想在這裡飛翔,街頭小吃的香氣瀰漫在空氣中,目前是22 點: 2024 年1 月5 日這個美妙的星期五,2024 年1 月5 日是50 點。 所以,無論您是在印度之門喝茶,還是在當地舞蹈俱樂部隨著節奏跳舞,請記住,時間不等人,即使是最偉大的人也不例外。 entities": [], "data" : [ { “縮寫”: “IST”, “client_ip”: “50.126.214.61”, “日期時間”: “2024-01-05T22:50:51.261990+05:30” , “day_of_week”: 5, “day_of_year” :5,“dst”:假,“dst_from”:空,“dst_offset”:0,“dst_until”:空,“raw_offset”:19800,“時區”:“亞洲/加爾各答”,“unixtime”:1704475251,“ utc_datetime": "2024-01-05T17:20:51.261990+00:00", "utc_offset": "+05:30", "week_number" ": [ "worldtimeapi.org" ] } , "provider": "GoogleAI", "runtime": "6 秒" } */ }).catch((err) => console.log(JSON.stringify(err, null, 4)));
請注意,使用者問題首先用於從提供的 API 儲存庫中識別相關 API。此方法還呼叫已識別的 API,收集它們的回應以形成最終的 LLM 提示,並傳回產生的回應。
另請注意,回應在ai_response
欄位中包含 LLM 產生的內容,在ai_context
欄位中包含上下文。整個上下文可以作為dataConfig.additional_context
以及後續問題傳遞。
一個範例展示如何傳遞上下文以啟用後續對話。
// 如上例所示,ai_context 包含以下資訊:// --------------------------------- --- -------------------------------------------------- --- // resp.ai_context: {// "questions": "孟買現在幾點了?孟買現在的日期是幾點?",// "entities": [],// "data": [/ / {// "abbreviation": "IST",// "client_ip": "50.126.214.61",// "datetime": "2024-01-05T22:50:51.261990+05:30",//"day_of_we ": 5,// "day_of_year" ": 5,// "dst": false,// "dst_from": null,// "dst_offset": 0,// "dst_until": null,// "raw_offset" : 19800,// "timezone": "亞洲/加爾各答",// "unixtime": 1704475251,// "utc_datetime": "2024-01-05T17:20:51.261990+00:00", : "+05:30",/ / "week_number": 1// }// ],// "sources": [// "worldtimeapi.org"// ]// }// ------ ----------------------------------------------------------------- --------- ------------// 將上述上下文追加到 dataConfig.additional_context ...if(options.dataConfig[additional_context]){