(二)大模型技術圖譜之AI Agent智能體

大語言模型技術,主要從大模型微調、AI Agent智能體、RAG檢索增強生成、提示詞工程、多模態這5個方面進行細化。

AI Agent智能體

AI Agent(人工智能代理或智能體)是一種能夠感知環境、接收信息、進行決策并執行動作的智能系統。它能夠在不確定和動態變化的環境中自主運行,實現特定目標或任務。AI Agent的核心組件包括感知器、知識庫、決策器和執行器。這些組件共同工作,使AI Agent能夠通過感知、決策和行動來與環境進行交互。

2.1.?LangChain

LangChain 是一個用于開發由語言模型驅動的應用程序的框架。它旨在簡化構建由大型語言模型(LLMs)支持的應用程序的過程,提供了一系列工具、組件和接口,以幫助開發者更容易地創建和管理與語言模型的交互,將多個組件鏈接在一起,并集成額外的資源,如API和數據庫。

LangChain 通過提供這些核心概念和工具,使得開發者能夠構建適應性強、高效且能夠處理復雜用例的高級語言模型應用程序。它支持從簡單的聊天機器人到復雜的文檔問答系統等各種應用場景。LangChain 的目標是提供一個模塊化、可擴展的框架,使得開發者可以輕松地構建、測試、部署和維護他們的應用程序。

2.1.1.?LLM

大型語言模型(LLM)是當前人工智能領域的一個熱點,通過深度學習技術訓練,能夠理解和生成文本,執行語言相關的各種任務。LLM的發展正在推動多個行業的變革,包括但不限于客戶服務、內容創作、教育、醫療和法律等。

LLM的關鍵特性包括其能夠處理和生成自然語言文本的能力,這使得它們在自動問答、文本摘要、機器翻譯等領域表現出色。此外,LLM還能夠通過API集成,使得開發者可以輕松地將這些模型集成到各種應用程序中。

LLM的應用場景非常廣泛,例如在醫療領域,LLM可以幫助分析病例和研究藥物;在教育領域,LLM可以輔助語言學習和知識理解;在金融領域,LLM可以用于風險評估和市場分析等。

然而,LLM也面臨著一些挑戰,包括隱私保護、數據安全、法律法規合規性問題以及跨語言與跨文化的適應性等。為了克服這些挑戰,研究者們正在探索模型壓縮與優化技術、多模態模型與LLM的結合、小樣本學習與元學習在LLM的應用以及提高模型的可解釋性與透明度。

2.1.2.ChatModel

ChatModel是LangChain中用于處理自然語言對話的核心組件,它與大型語言模型(LLM)相似,但專門針對聊天對話進行了優化。ChatModel使用格式化的聊天消息作為輸入和輸出,這使得它在處理對話時更加靈活和強大。

在LangChain中,ChatModel與LLM的主要區別在于:

(1)訓練數據:ChatModel通?;诹奶鞂υ挃祿M行訓練,而LLM則基于更廣泛的大規模文本數據進行訓練。

(2)模型結構:ChatModel可能采用GRU、LSTM或Transformer等結構,而LLM則采用更大型和復雜的Transformer結構。

(3)應用場景:ChatModel適用于聊天機器人、對話系統等場景,而LLM可以應用于自然語言生成、文本分類、機器翻譯等多個場景。

ChatModel的輸入輸出格式是消息(Messages),包括系統消息(SystemMessage)、人類消息(HumanMessage)、AI消息(AIMessage)等類型。這些消息類型允許ChatModel更好地理解和處理對話中的角色和上下文。

使用ChatModel時,可以通過編程方式構建消息序列,然后調用ChatModel生成響應。ChatModel還支持流式傳輸(streaming)、異步調用(async)、批量處理(batching)等高級功能。

2.1.3.?Vector Stores

向量數據庫是一種專門設計用于存儲和檢索高維向量數據的數據庫系統,在處理非結構化數據(如圖像、視頻、音頻和文本)方面具有顯著優勢。這些數據通常通過深度學習模型轉換成高維向量,以便進行高效的相似性搜索。

向量數據庫的核心功能包括高效的向量存儲、索引構建和相似性搜索。它們使用特定的索引結構(如HNSW、FAISS和倒排索引)和優化算法來提高檢索效率。這些技術使得向量數據庫能夠快速找到與查詢向量最相似的向量,這在推薦系統、圖像識別和自然語言處理等領域非常重要。

在選擇向量數據庫時,應考慮多個因素,包括但不限于:

(1)技術實現:不同的向量數據庫可能采用不同的索引和搜索算法,如HNSW、FAISS、LSH等。

(2)性能:數據庫的性能,包括查詢速度和數據處理能力,是關鍵考量因素。

(3)可擴展性:數據庫是否支持水平擴展以處理大規模數據集。

(4)易用性:數據庫的API和SDK是否易于開發者使用。

(5)社區和支持:一個活躍的社區和良好的技術支持可以加速問題解決和學習過程。

目前市場上有多種向量數據庫產品,包括開源和商業解決方案。例如,Milvus是一個開源的向量數據庫,支持高維向量的存儲和索引,以及提供RESTful API和Python SDK。騰訊云向量數據庫Tencent Cloud VectorDB是一個AI原生的向量數據庫,提供全生命周期AI化服務。

2.1.4.?Retrievers

檢索系統(Retrievers)在人工智能和信息檢索領域扮演著至關重要的角色。它們的主要功能是從大量數據中檢索出與用戶查詢最相關的信息。檢索系統可以應用于多種場景,包括但不限于搜索引擎、推薦系統、企業知識管理等。

檢索系統通常包括以下幾個關鍵步驟:

(1)索引構建:在這個階段,系統會創建文檔的索引,這使得后續的搜索過程更加高效。索引通常包含了文檔的元數據、關鍵詞以及其他可以快速檢索的信息。

(2)查詢處理:用戶提交查詢后,系統會對查詢進行解析,提取出關鍵詞,并將其與索引中的信息進行匹配。

(3)相關性評分:系統會根據文檔與查詢的匹配程度給文檔打分,這個分數通常反映了文檔的相關性。

(4)文檔排序:根據相關性評分,系統會將文檔進行排序,并將最相關的文檔呈現給用戶。

檢索技術的發展經歷了從簡單的關鍵詞匹配到復雜的語義理解的轉變。現代檢索系統越來越多地采用機器學習和自然語言處理技術,以提高檢索的準確性和效率。例如,通過使用深度學習模型,檢索系統可以更好地理解用戶的查詢意圖,并從大量數據中找到最相關的信息。

在實際應用中,檢索系統可能面臨一些挑戰,如處理大規模數據集時的可擴展性問題、動態更新數據集的內容以保持信息的時效性等。為了克服這些挑戰,研究人員正在探索新的算法和技術,如分布式檢索系統、增量索引和實時更新策略等。

2.1.5.?Text Embeddings

文本嵌入(Text Embeddings)是一種將文本數據轉換為數值向量的技術,這些向量能夠捕捉文本的語義信息和上下文關系。在自然語言處理(NLP)中,文本嵌入使得計算機能夠更好地理解和處理人類語言,廣泛應用于文本分類、聚類、自動摘要、機器翻譯、問答系統、情感分析和推薦系統等任務。

文本嵌入的工作原理通常涉及將詞、句子或文檔轉換為數值向量。例如,詞嵌入技術(如Word2Vec、GloVe或BERT)可以將具有相似意義的詞映射到向量空間中的相近位置。句子和文檔嵌入則通過進一步處理,如平均詞向量、使用遞歸神經網絡(RNN)、卷積神經網絡(CNN)或Transformer模型(如BERT),來生成能夠代表整個句子或文檔的向量。

在實際應用中,文本嵌入可以通過API調用獲取,如使用OpenAI的embeddings API,將文本轉換為向量。這些向量可以用于計算文本之間的相似度,通常采用余弦相似度作為衡量標準。文本嵌入技術的選擇應考慮任務需求、計算資源和成本等因素。

2.1.6.Chains

在LangChain框架中,"Chains"(鏈)是一種將不同的組件組合起來以解決特定任務的方式。這些組件可以是語言模型(LLMs)、提示模板(Prompt Templates)、索引(Indexes)等。Chains可以被看作是執行特定任務的工作流程,它們通過串聯這些組件來實現更復雜的功能。

LangChain中的鏈(Chains)主要分為兩大類:

(1)LCEL Chains:使用LangChain表達式語言(LCEL)構建的鏈,這是一種聲明式的方法,可以輕松地將鏈組合在一起。

(2)Legacy Chains:通過繼承自遺留Chain類構建的鏈,這些鏈獨立于LCEL而存在。

Chains的使用可以極大地簡化復雜應用程序的實現,并使之更加模塊化,這反過來又使調試、維護和改進應用程序變得更加容易。例如,LLMChain是最基本的鏈,它結合了語言模型推理功能,并添加了PromptTemplate和Output Parser等功能,將模型輸入輸出整合在一個鏈中操作。

2.1.7.?Memory

在LangChain框架中,"Memory"(記憶)是一個關鍵組件,它允許系統在對話或交互過程中保持狀態,從而使得語言模型能夠記住之前的交互并據此提供更加連貫和相關的回應。這對于構建聊天機器人和其他需要上下文理解的應用程序至關重要。

LangChain提供了多種記憶類型,包括但不限于:

(1)ConversationBufferMemory:這是一種簡單的記憶形式,它將聊天消息存儲在緩沖區中,并可以將這些消息作為字符串或消息列表傳遞給提示模板。

(2)ConversationSummaryMemory:這種記憶類型可以創建關于對話的摘要,有助于從對話中概括信息。

(3)ConversationEntityMemory:實體記憶會記住對話中有關特定實體的給定事實,并隨著時間的推移建立有關該實體的知識。

(4)ConversationKGMemory:這種記憶使用知識圖譜來重新創建記憶,即會記住對話中有關的三元組,然后在生成回答時把這些三元組當初先驗知識。

(5)ConversationTokenBufferMemory:這種記憶會在內存中保留最近的對話內容,并使用token長度而不是對話數量來決定何時刷新對話。

(6)VectorStoreRetrieverMemory:將記憶存儲在VectorDB中,并在每次調用時查詢最重要的K個文檔。

LangChain的記憶模塊還提供了一些輔助工具,用于管理和操作以前的聊天消息,這些工具被設計成模塊化的,可以單獨使用或輕松整合到鏈式模型中。例如,ChatMessageHistory類是一個核心實用類,它提供了保存人類消息、AI消息然后獲取它們全部的方便方法。

在實際應用中,可以通過編程方式將記憶模塊集成到LangChain的鏈中。例如,可以在LLMChain中使用ConversationBufferMemory,通過load_memory_variables方法讀取記憶變量,并在生成新響應之前,使用save_context方法將當前運行的輸入和輸出寫入記憶,以便在將來的運行中引用。

2.1.8.?Agents

在LangChain框架中,"Agents"(代理)是用于增強大型語言模型(LLMs)功能的關鍵組件。代理可以被視為LLMs的工具,它們允許LLM執行計算、搜索信息、執行代碼等任務,這些都是傳統LLMs難以處理的領域。代理通過使用工具(Tools)來擴展LLM的能力,這些工具可以是計算器、搜索引擎、數據庫查詢工具等。

代理的類型包括但不限于以下幾種:

(1)Zero Shot ReAct:這種代理在沒有先前交互記憶的情況下執行任務,它根據工具的描述來決定使用哪個工具。

(2)Self-Ask With Search:這種代理結合了LLM和搜索引擎,可以根據需要執行搜索和提問步驟,以獲得最終答案。

(3)React-Docstore:這種代理使用文檔存儲(如Wikipedia)來搜索和查找信息。

要使用代理,需要初始化一個LLM,創建一個或多個工具,然后初始化代理本身。例如,可以使用LangChain提供的LLMMathChain來創建一個計算器工具,然后使用這個工具來初始化一個代理。代理可以通過調用invoke方法來執行任務,它將根據輸入決定采取哪些行動。

代理的實現涉及到幾個關鍵概念,包括代理(Agents)、代理執行器(AgentExecutor)、工具(Tools)和工具包(Toolkits)。代理執行器負責重復調用代理并執行工具,而代理則是決策的核心,它決定需要執行哪些工具以及執行的順序。

LangChain還提供了LangGraph和LangSmith等工具來支持代理的開發和調試。LangGraph允許開發者控制自定義代理和多代理工作流程,而LangSmith則提供了調試代理時所需的可觀測性。

2.1.9.?Callbacks

LangChain中的回調(Callbacks)是一種強大的機制,允許開發者在應用程序的各個階段進行干預和監控。這在日志記錄、監控、流媒體處理等任務中非常有用?;卣{可以通過實現BaseCallbackHandler接口來定義,這個接口提供了多個方法,對應于不同的事件,如模型開始運行、鏈開始執行等。通過重寫這些方法,開發者可以在特定事件發生時執行自定義的邏輯。

在LangChain中,你可以在構造函數中定義回調,這樣它將用于該對象上進行的所有調用,并且僅適用于該對象本身。例如,如果你將處理程序傳遞給LLMChain構造函數,則不會被連接到該鏈上的模型使用。此外,你也可以在發出請求的call()、run()、apply()方法中定義回調,這樣它將僅用于該特定請求及其包含的所有子請求。

LangChain提供了一些內置的處理程序,如StdOutCallbackHandler,它將所有事件記錄到標準輸出。此外,你還可以通過繼承BaseCallbackHandler來創建自定義的處理程序,并將其設置在對象上。例如,你可以實現一個自定義處理程序來實現流式處理,或者使用AsyncCallbackHandler來處理異步回調。

在實際使用中,你可以將回調處理器添加到各種LangChain的組件中,如鏈(Chains)、模型(Models)、工具(Tools)、代理(Agents)等。這樣,當這些組件執行時,它們會觸發相應的回調事件,你的處理程序可以響應這些事件來執行特定的邏輯。

2.2.?Semantic Kernel

Semantic Kernel(語義核心)是一個輕量級的開源開發工具包,它允許開發者將傳統的編程語言與最新的大型語言模型(LLM)相結合。通過Semantic Kernel,可以在C#、Python或Java代碼庫中輕松構建AI代理并集成AI模型。它作為一個高效的中間件,使得企業級解決方案能夠快速交付。

2.2.1.?Connectors

在LangFlow中,"Connectors"(連接器)是指可以在LangFlow平臺內創建的組件,它們允許用戶通過Python代碼擴展平臺的功能。這些連接器被設計為獨立的單元,可以跨不同的工作流程重用。它們可以輕松地在語言模型管道中連接,為用戶提供在用戶與AI消息之間的包含內容的自由度和靈活性。

LangFlow的連接器可以通過平臺內的界面創建,允許用戶通過編寫Python代碼來構建自定義的連接器。這些連接器可以包含輸入字段,例如文本輸入、數字輸入、密碼輸入以及下拉菜單等,以便于用戶與連接器進行交互。用戶可以定義連接器的顯示名稱、描述、輸入字段和輸出,以及如何處理這些輸入并產生相應的輸出。

例如,一個自定義連接器可以被設計來處理特定的業務邏輯,如數據驗證、API調用或其他任何可以通過編程實現的功能。開發者可以利用LangFlow提供的API和SDK來創建這些連接器,并將它們集成到LangFlow的工作流中。

在實際應用中,連接器可以用于實現各種功能,比如從外部API獲取數據、執行特定的數據處理任務,或者與其他系統集成以擴展應用程序的能力。通過使用LangFlow的連接器,開發者可以構建更加強大和靈活的AI應用程序,滿足特定的業務需求。

2.2.2.?Plugins

Semantic Kernel(SK)中的"Plugins"(插件)是用于擴展SK功能的關鍵組件。它們可以封裝現有的API,使其能夠被AI調用,從而增強AI的能力。插件允許開發者將自定義的功能和邏輯集成到SK中,使其能夠執行原本無法完成的操作。

插件在SK中的作用可以分為兩大類:

(1)Semantic Functions(語義函數):這些是通過提示詞(Prompts)構建的插件,它們利用LLM的能力來執行特定的任務。

(2)Native Functions(本地函數):這些是直接在.NET環境中運行的插件,能夠執行非LLM的代碼,如數據庫操作、文件系統操作等。

SK的插件體系允許開發者通過插件來擴展Kernel的功能,例如,ConversationSummaryPlugin 插件可以對聊天記錄進行摘要總結,有效減少token的使用量,并提高聊天上下文的處理效率。此外,還有如 FileIOPlugin、HttpPlugin、MathPlugin、TextPlugin、TimePlugin 和 WaitPlugin 等系統內置插件,它們提供了處理文件、HTTP請求、數學計算、字符串操作、時間和日期處理以及等待操作的功能。

開發者可以通過編寫帶有KernelFunction 特性的類和方法來創建自定義插件,并將它們導入到SK中。例如,LightsPlugin 插件可以用于控制和管理燈光狀態。通過這些插件,SK能夠與各種外部服務和數據源進行交互,從而構建出更加智能和強大的應用程序。

SK的插件架構不僅增加了應用程序的功能,同時也極大地提高了其適應性。通過定制 PromptPlugin 和 NativePlugin,開發者可以靈活地根據業務需求制作出專屬的插件,從而在SK框架下構建出更加專業和高效的應用程序。

2.2.3.?Planners

Semantic Kernel 中的 "Planners"(規劃器)是一個強大的功能,它允許開發者創建一個詳盡的計劃來自動接收用戶的請求并實現這些請求。規劃器可以利用 AI 技術結合內核中注冊的插件,將它們重新組合成一系列完成目標的步驟。例如,如果你有任務插件和日歷事件插件,規劃器可以將它們結合起來創建工作流程,如在你去商店時提醒你買牛奶,或者提醒你第二天給媽媽打電話,而無需你顯式編寫這些場景的代碼。

規劃器的工作原理是使用大型語言模型(LLM)提示來生成計劃。你可以通過瀏覽到 Semantic Kernel 倉庫中的 HandlebarsPlanner 提示文件來查看提示內容。提示的最后幾行對理解規劃器的工作至關重要,它們定義了當前 Prompt 目標、可用的幫助函數、以及如何使用這些幫助函數來完成任務。

Semantic Kernel 提供了幾種規劃器,包括 Handlebars Planner 和 Function Calling Stepwise Planner。Handlebars Planner 使用 Handlebars 語法來生成計劃,允許模型利用原生特性,如循環和條件,而無需額外的提示。Function Calling Stepwise Planner 則是一種基于神經符號架構的規劃器,它通過逐步執行計劃來實現復雜目標。

要使用規劃器,你需要初始化一個規劃器實例,指定任務目標,然后創建并執行一個計劃。例如,使用Handlebars Planner 時,你可以創建一個 planner 實例,指定目標,然后調用 CreatePlanAsync 方法來創建一個計劃。創建成功后,你可以直接執行這個計劃。

規劃器在Semantic Kernel 中的使用可以極大地簡化 AI 應用程序的開發過程,使得開發者可以專注于構建解決用戶需求所需的插件,而不必關心底層的 AI 邏輯和任務調度。通過規劃器,Semantic Kernel 能夠自動地將用戶的請求轉換為可執行的計劃,從而實現更加智能和自動化的應用程序。

2.2.4.Semantic Functions

在Semantic Kernel中,"Semantic Functions"(語義函數)是一種通過自然語言提示詞(prompts)構建的函數,它們允許開發者以自然語言的形式定義函數,從而使得大型語言模型(LLMs)能夠執行特定的任務。這些函數可以被看作是一種自然語言編程的方式,通過精心設計的提示詞來指導LLMs生成預期的輸出。

語義函數通常由以下幾部分組成:

(1)提示詞(Prompt):這是構成語義函數的核心,通過特定的提示詞來引導LLMs理解和執行任務。

(2)配置(Configuration):通過配置文件(如config.json)來設置執行語義函數時的參數,例如最大令牌數、溫度、置頂概率等。

(3)函數名(Function Name):為語義函數指定一個名稱,以便在代碼中調用。

在Semantic Kernel中,可以通過文件夾來組織和管理語義函數。每個函數都包含一個skprompt.txt文件,里面存放著對應的提示詞,還可以包含一個可選的config.json文件用于配置。開發者可以在代碼中通過導入插件的方式將這些語義函數集成到Semantic Kernel中,然后像調用普通函數一樣使用它們。

此外,Semantic Kernel還支持創建自定義的語義函數管理方式,例如將提示詞存儲在文檔數據庫、對象存儲服務或使用Git、FTP等方式。開發者只需將提示詞和配置從遠程方式獲取到本地,然后通過Semantic Kernel的接口創建出語義函數即可。

語義函數的參數配置可以通過PromptTemplateConfig類來實現,這個類允許開發者設置不同的模型參數配置,如最大令牌數、溫度等,以控制LLMs的生成行為。

Semantic Kernel還提供了強大的模板語法,允許在提示詞中定義參數變量,并在調用時傳遞這些參數。這使得語義函數更加靈活和強大,可以適應各種不同的應用場景。

總的來說,Semantic Kernel中的語義函數為開發者提供了一種全新的編程范式,通過自然語言提示詞來定義和執行函數,極大地擴展了應用程序的功能和智能性。通過精心設計的提示詞和靈活的配置,語義函數可以與LLMs緊密協作,實現高效、智能的任務處理。

2.2.5.?Native Functions

在Semantic Kernel中,"Native Functions"(原生函數)是指那些用傳統編程語言編寫的函數,它們可以直接在應用程序中執行,而不需要通過大型語言模型(LLM)進行解釋或執行。這些函數可以執行各種任務,如訪問數據庫、執行文件操作、進行數學計算等,它們為Semantic Kernel提供了與現實世界交互的能力。

原生函數可以通過以下方式在Semantic Kernel中定義和使用:

(1)定義原生函數:使用[KernelFunction]特性標記方法,使其成為Semantic Kernel可識別的原生函數。這些函數可以同步或異步執行,并可以具有輸入參數和返回值。

(2)注冊原生函數:將原生函數注冊到Semantic Kernel中,使其可以被其他組件,如規劃器(Planner)或語義函數(Semantic Function)調用。

(3)調用原生函數:在Semantic Kernel的流程中,可以通過Kernel對象調用這些原生函數,就像調用普通的編程語言函數一樣。

原生函數的例子包括:

(1)文件操作:讀取、寫入文件系統。

(2)數據庫訪問:執行SQL查詢,獲取或存儲數據。

(3)數學計算:執行復雜的數學運算。

(4)API調用:與外部服務進行交互,如天氣API、新聞API等。

Semantic Kernel的原生函數為開發者提供了靈活性,允許他們將傳統的編程邏輯與LLM的強大能力結合起來,創建出功能豐富、響應迅速的應用程序。通過原生函數,Semantic Kernel能夠執行具體的操作,這些操作超出了LLM的文本生成和處理能力。

2.2.6.Pipelines

在Semantic Kernel中,"Pipelines"(管道)是指將多個函數鏈接在一起形成一系列的處理步驟,這些步驟可以順序執行以完成復雜的任務。Semantic Kernel通過管道可以將語義函數(Semantic Functions)和原生函數(Native Functions)結合起來,實現自動化的工作流。

Semantic Kernel的管道功能允許開發者定義一系列的操作,其中每個操作可以是一個獨立的函數。這些函數可以是Semantic Kernel中的語義函數,也可以是原生函數,它們可以被編排成一系列的步驟來處理數據和執行任務。例如,一個管道可能首先使用一個語義函數來解析用戶請求,然后調用一個原生函數來執行數據庫查詢,最后再使用另一個語義函數來生成響應。

管道的創建和使用過程通常涉及以下幾個步驟:

(1)定義函數:創建單個的語義函數和原生函數,每個函數執行一個具體的任務。

(2)編排管道:將這些函數按照特定的順序鏈接起來,形成一個處理流程。

(3)執行管道:在Semantic Kernel中運行管道,執行每個步驟,并傳遞數據從一個步驟到下一個步驟。

Semantic Kernel的管道功能使得開發者能夠構建復雜的應用程序,這些應用程序可以自動化地執行多步驟的任務,同時保持代碼的清晰和模塊化。通過使用管道,開發者可以更容易地管理和擴展應用程序的功能。

在實際應用中,Semantic Kernel的管道可以用于各種場景,比如自動化的數據處理流程、智能助理的對話管理、或者將不同的AI服務和API集成到一個統一的工作流中。通過Semantic Kernel的管道,開發者可以構建出更加強大和靈活的AI驅動應用程序。

2.2.7.?ChatCompletion

Semantic Kernel中的"ChatCompletion"(聊天完成)功能允許開發者創建能夠模擬來回對話的AI代理。這種功能不僅適用于構建聊天機器人,還可以用于創建能夠完成業務流程、生成代碼等任務的自主代理。聊天完成是OpenAI、Google、Mistral、Facebook等提供的主要模型類型,也是你在Semantic Kernel項目中會添加的最常見的AI服務之一。

要在Semantic Kernel中添加聊天完成服務,你需要考慮以下幾個因素:

(1)模型支持的模態(例如文本、圖像、音頻等)。

(2)是否支持函數調用。

(3)它接收和生成令牌的速度。

(4)每個令牌的成本。

對于支持函數調用的模型,你可以使用模型調用現有代碼。大多數來自OpenAI、Google、Mistral和Amazon的最新模型都支持函數調用。但是,小型語言模型的支持仍然有限。

添加聊天完成服務到Semantic Kernel中,你可以使用以下代碼示例,這些示例展示了如何直接添加到內核、使用依賴注入或創建服務的獨立實例。這些方法適用于不同的AI服務提供商,包括Azure OpenAI、OpenAI、Mistral、Google和Hugging Face等。

一旦你將聊天完成服務添加到內核中,你可以使用GetRequiredService或getService方法檢索服務,并開始與AI代理創建對話。你可以使用聊天歷史對象來維護聊天會話中的消息記錄,并優化函數調用。

Semantic Kernel還提供了關于如何使用聊天完成服務的進一步學習資源,包括如何使用聊天歷史對象、優化聊天完成中的函數調用等。

2.2.8.?TexGeneration

文本生成(Text Generation)是自然語言處理(NLP)領域的一個重要任務,它涉及到使用算法和語言模型來生成看起來像是人類書寫的文本。這個過程包括從輸入數據生成連貫、有意義的文本,這些文本在結構和語境上與人類溝通相似。文本生成技術在內容創作、客戶服務、編程輔助和語言翻譯等多個領域都有廣泛的應用。

文本生成的工作原理是通過訓練人工智能模型,如循環神經網絡(RNN)、長短期記憶網絡(LSTM)或Transformer模型,來學習文本數據中的模式、語法和上下文信息。這些模型能夠基于給定的提示或條件生成新的文本。例如,給定一個句子或關鍵詞,模型可以預測接下來最可能的單詞或短語,并繼續生成文本,直到達到所需的長度或滿足特定條件。

在實際應用中,文本生成可以用于自動創作文章、博客帖子、產品描述等,提高內容創作的效率。此外,文本生成技術還可以用于開發聊天機器人和虛擬助手,提供個性化的對話體驗。在語言翻譯領域,文本生成模型也可以幫助提高翻譯的準確性和實時性。

然而,文本生成技術也存在一些限制,包括可能缺乏對上下文的深入理解,過度依賴訓練數據的質量和多樣性,以及在處理罕見或未見過的場景時可能產生不準確或無意義的輸出。此外,文本生成還涉及到一些倫理問題,比如可能被用于散布錯誤信息或偏見放大。

為了提高文本生成的多樣性,研究人員探索了多種方法,包括多任務學習、基于知識圖譜的文本生成、基于記憶網絡的文本生成,以及結合分布采樣進行文本生成等。這些方法旨在使生成的文本更加豐富和準確。

在實現文本生成時,可以選擇不同的模型和數據集,使用不同的訓練策略和調優技術。例如,可以使用Hugging Face的Transformers庫中的文本生成管道進行推理,或者使用專門為文本生成優化的工具和框架,如Text Generation Inference (TGI)。

總之,文本生成是一個不斷發展的領域,它通過結合最新的人工智能技術和創新方法,為各種應用提供了強大的語言生成能力。隨著技術的不斷進步,文本生成的應用范圍和效果將持續擴大和改進。

2.2.9.TextEmbeddings

文本嵌入(Text Embeddings)是自然語言處理(NLP)中的一項關鍵技術,它將文本轉換為數值向量,使得計算機能夠理解和處理語言的語義。這些向量可以捕捉文本之間的語義相似性,因此它們在文本搜索、推薦系統、情感分析和機器翻譯等領域有著廣泛的應用。

文本嵌入的常見方法包括Word2Vec、GloVe和BERT等。Word2Vec通過預測上下文來學習詞向量,而GloVe則利用全局統計信息來構建詞向量。BERT模型則能夠生成上下文敏感的詞嵌入,適用于各種NLP任務。

在實際應用中,文本嵌入可以用于計算文本相似性、情感分析和命名實體識別等任務。例如,通過計算兩個文本向量之間的余弦相似度,可以衡量它們之間的語義相似性。此外,文本嵌入技術還可以幫助改進搜索引擎的搜索結果,使其更加相關和準確。

隨著技術的發展,文本嵌入模型也在不斷進步。例如,OpenAI的text-embedding-ada-002模型和最新的text-embedding-3-small與text-embedding-3-large模型,它們在文本搜索和聚類任務中表現出色,并且支持多語言,具有較低的成本和高效的性能。

此外,還有一些前沿的文本嵌入模型,如m3e和bge,它們通過在大規模數據集上進行訓練,學習到了更加豐富的語義信息,能夠處理復雜的NLP任務。

總之,文本嵌入技術是連接人類語言和機器理解的橋梁,它的發展和應用將為NLP領域帶來更多的可能性和創新。

2.2.10.?Core plugins

Semantic Kernel 的核心插件(Core plugins)是一組預定義的功能,它們為Semantic Kernel提供了增強的.NET智能化應用功能。這些插件可以被用來擴展Semantic Kernel的功能,使開發者能夠構建更加豐富和強大的應用程序。

一些重要的系統內置核心插件包括:

(1) ConversationSummaryPlugin:這個插件能夠對聊天記錄進行摘要總結,有效減少token的使用量,并提高聊天上下文的處理效率。它通過使用TextChunker來分割文本,并生成對話的摘要。

(2)FileIOPlugin:提供了對文件的基本操作功能,使得應用可以輕松地完成對文件的讀寫任務。

(3)HttpPlugin:提供了基礎的HTTP功能,包括Post、Get、Put、Delete和SendRequest等方法,使得執行HTTP請求變得非常直接和便捷。

(4)MathPlugin:擴展了基本的數學操作,如加法和減法。

(5)TextPlugin:提供了多項文本處理功能,包括去除空白字符、大小寫轉換、獲取字符串長度和字符串拼接等。

(6)TimePlugin:提供了獲取當前日期和時間的功能,對于處理相對時間概念非常有用。

(7)WaitPlugin:提供了一個基本的SecondsAsync功能,允許代碼執行在指定的秒數后繼續。

Semantic Kernel不僅提供了豐富的預定義插件,還允許開發者根據自己的需求創建自定義的插件。自定義插件主要分為兩類:PromptPlugin和NativePlugin。PromptPlugin是基于對話提示構建的插件,而NativePlugin則是直接在.NET環境中運行的插件,能夠執行非大模型的.NET代碼。

通過這些核心插件和自定義插件,Semantic Kernel為.NET應用提供了強大的擴展性和靈活性,使得開發者能夠構建出更加專業和高效的應用程序。

2.2.11.?Memory

Semantic Kernel 的內存(Memory)功能是其核心組件之一,允許開發者在 AI 對話中引用私有的知識庫。內存功能通過將文本轉換為數值向量(embeddings)來實現,這些向量反映了文本的語義和關系。內存可以存儲和管理這些向量,以便在需要時檢索和使用。

在使用內存時,開發者首先需要注冊一個embedding 模型,如 Azure OpenAI 的 text-embedding-3-small,并添加一個內存存儲(MemoryStore),例如 VolatileMemoryStore,用于存儲信息。開發者可以將文本信息保存到內存中,這些信息會被轉換為向量并存儲起來。在需要時,可以通過搜索相關的向量來檢索信息,這在構建問答系統或需要上下文管理的應用中非常有用。

Semantic Kernel 還提供了一些內置的插件,如 ConversationSummaryPlugin,它可以對聊天記錄進行摘要總結,有效減少 token 的使用量,并提高聊天上下文的處理效率。此外,還有 FileIOPlugin、HttpPlugin、MathPlugin、TextPlugin 和 TimePlugin 等,這些插件為 Semantic Kernel 提供了額外的功能。

內存的持久化也是Semantic Kernel 考慮的一部分。雖然 VolatileMemoryStore 是易丟失的,但開發者可以選擇使用其他更持久的存儲解決方案,如 SQLite、Qdrant 或 CosmosDB,這些都可以作為內存存儲的實現。

總的來說,Semantic Kernel 的內存功能為構建具有上下文感知能力的 AI 應用程序提供了強大的支持,使得語言模型能夠更好地理解和響應用戶的需求。通過內存管理,Semantic Kernel 能夠將 AI 的能力與應用程序的數據和邏輯緊密結合,創造出更加智能和高效的用戶體驗。

2.2.12.?Semantic Kemel Tools

Semantic Kernel Tools 是一個 Visual Studio Code 擴展,它為開發者提供了一個集成在 VS Code 環境中的用戶友好界面,用于創建、測試和調試語義技能,并將它們整合到現有項目中。這個擴展顯著降低了對人工智能技術不太熟悉的開發人員的入門門檻,提供了易于訪問和直觀的開發環境,使各種技能水平的開發人員都可以利用 Semantic Kernel 在其項目中發揮作用。

Semantic Kernel Tools 的主要特點包括:

(1)支持在任意項目中開發Semantic Function,即便是一個空文件夾也可以進行。

(2)通過點擊側邊欄的SK 圖標,可以打開 Semantic Kernel Tools,開始創建和管理 Semantic Functions。

(3)支持設置接口配置,包括選擇對應的接口提供方(如OpenAI 或 Azure OpenAI),并配置 endpoint、model、api key 等。

(4)提供調試功能,可以通過點擊運行按鈕進行執行,執行結果會輸出在OUTPUT 中,并且也會存放在項目根目錄下的?./semantic-kernel/results?文件夾內。

Semantic Kernel Tools 代表了人工智能技術發展中的重要一步,通過提供用戶友好且易于訪問的開發環境,賦予開發人員創造下一代基于 AI 動力應用程序和服務的權力。

2.2.13.?MetaGPT

MetaGPT是一個多智能體合作框架,它通過模擬真實的工作流程和標準化操作程序(SOPs),使得大型語言模型(LLMs)能夠協作完成復雜的任務。這個框架的核心在于將人類專家的工作流程和領域知識編碼為智能體的行為模式,使得智能體能夠像人類團隊一樣協同工作。

在MetaGPT框架中,每個智能體都被賦予一個特定的角色,如產品經理、架構師、項目經理、工程師等,每個角色都有其特定的職責和任務。這些智能體通過標準化的流程和通信機制來協作,共同解決問題。例如,產品經理可能會負責撰寫產品需求文檔(PRD),而工程師則根據這些需求來編寫代碼。

MetaGPT的設計分為兩個層次:基礎組件層和協作層?;A組件層包括環境、記憶、角色、行動和工具,為智能體提供了必要的基礎設施。協作層則負責協調智能體之間的合作,通過知識共享和封裝工作流程來實現復雜任務的分解和解決。

MetaGPT的能力不僅限于軟件開發,它還可以應用于其他需要多智能體協作的場景,如健康管理、法律咨詢等。通過MetaGPT,可以構建出能夠自動執行復雜任務的智能系統,這些系統能夠模擬人類的協作行為,提高工作效率和質量。

MetaGPT的實現涉及到了多個關鍵技術,包括自然語言處理、機器學習、知識表示和推理等。通過這些技術,MetaGPT能夠理解和生成自然語言,進行復雜的分析和決策,以及與其他智能體進行有效的通信和協作。

總的來說,MetaGPT是一個創新的多智能體框架,它通過模擬人類的工作流程和專業知識,使得大型語言模型能夠協作解決復雜的任務。這個框架為AI領域的發展提供了新的可能性,為構建更加智能和高效的AI系統提供了強大的工具和方法。


【一個小目標】83/365,關注行業關注趨勢,多看多想多反思,做一個講故事的人,講一個好故事

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,663評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,125評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,506評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,614評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,402評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,934評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,021評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,168評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,690評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,596評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,784評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,288評論 5 357
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,027評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,404評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,662評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,398評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,743評論 2 370

推薦閱讀更多精彩內容