首頁 > Java > java教程 > 主體

使用 Java Quarkus Langchain 建立可靠的 AI 代理程式 - 部分 AI 即服務

Susan Sarandon
發布: 2024-10-27 08:53:30
原創
991 人瀏覽過

作者

@herbertbeckman - LinkedIn
@rndtavares - LinkedIn

文章部分內容

  1. 使用 Java Quarkus Langchain4j 生產的可靠 AI 代理 - 第 1 部分 - AI 即服務(本文)

  2. 使用 Java Quarkus Langchain4j 生產的可靠 AI 代理 - 第 2 部分 - 記憶體(即將推出)

  3. 使用 Java Quarkus Langchain4j 生產的可靠 AI 代理 - 第 3 部分 - RAG(即將推出)

  4. 使用 Java Quarkus Langchain4j 生產的可信任 AI 代理程式 - 第 4 部分 - Guardrails(即將推出)

介紹

每當新興技術蓬勃發展時,企業都渴望應用它們,並從商業角度獲得期待已久的成果。這是一場創新的競賽,是爭奪先發優勢的競賽。在這場競爭中,原本焦躁不安的公司往往會因為一連串因素而最終放棄,其中一個主要因素就是系統整體的可靠性。人工智慧 (AI) 目前正在經歷最大的阻力考驗之一,作為軟體開發人員,我們的工作是向公司證明,是的,有意識且正確地使用人工智慧來執行一系列任務和流程是可能的。 。在本文中,我們將分 3 部分展示生產中的可靠 AI 代理必須具備哪些功能和流程,才能讓公司獲得期待已久的結果,並共同實施市場上使用的一些概念。我們也會詳細說明這個解決方案的注意點,並請開發者盡可能多地進行測試並給我們盡可能多的回饋,以便我們共同進一步提高這一理解。

實現的功能

  • 聊天
  • 工具
  • 聊天記錄
  • 檢索增強產生(RAG)
  • 護欄

概念和定義

助理、副駕駛、特工

您可能遇到的第一個問題是代理與其他人工智慧用例有何不同。代理的功能更多地與自動化相關,而其他代理的活動旨在提供幫助和時間優化。下面我將更詳細地介紹每個用例。

助理

助手可以幫助我們並節省我們大量的時間檢查資訊並成為知識交流的良好來源。他們談論關於最多樣化的主題,當我們需要清晰的推理路線來分析論證的前提時,它們會很有用。當然,他們擁有的權力遠不止於此,但我希望您專注於助理的工作:他們與您交談,僅此而已。他只能可以談、總結、細節等。例如:ChatGPT、Claude AI 和 Gemini。

副駕駛

副駕駛比助理稍微強大一些。他們實際上可以做一些事情,更具體的行動,例如即時更改文字和/或建議修改,以及在修改和/或上下文中發生的事件期間提供提示。然而,如前所述,執行此操作取決於上下文,並且並不總是具有提出好的建議所需的所有必要信息,它還取決於您的明確授權,從而形成對用戶的直接依賴。很好的例子有:Github Copilot、Codium 和 Microsoft Copilot。

代理商

代理的主要目標是執行目標明確的任務。它的重點是自動化,也就是說,它們實際上自主地完成具體工作。所有這一切只有透過我們為他們提供的工具才能實現。代理不是法學碩士本身,而是協調該法學碩士的應用。將法學碩士理解為系統的大腦,負責做出決策,並將其作為該大腦主體的成員進行應用。如果我的手搆不到一杯水,那還有什麼意義呢?您的代理人賦予 LLM 以安全、可審核且最重要的是可靠的方式做某事的權力。

採取行動

在本文的第一部分中,我們將在專案中實作 AIService,它只不過是與我們的 AI 提供者的介面層。在這個專案中我們使用OpenAI的LLM,但你可以加入你最喜歡的提供者並基於它調整依賴關係。

現在我們已經明確定義了概念,並且知道我們要在這裡做什麼,讓我們繼續編碼!

創建專案

建立一個 quarkus 項目,在 Quarkus 中選擇依賴管理器和擴充功能 - 開始編碼。

專案依賴

我們將使用maven作為專案的依賴管理器。以下是我們新增的初始依賴項。

馬韋姆

<dependency>
  <groupId>io.quarkus</groupId>
  <artifactId>quarkus-websockets-next</artifactId>
</dependency>

<dependency>
  <groupId>io.quarkiverse.langchain4j</groupId>
  <artifactId>quarkus-langchain4j-core</artifactId>
  <version>0.20.3</version>
</dependency>

<dependency>
  <groupId>io.quarkiverse.langchain4j</groupId>
  <artifactId>quarkus-langchain4j-openai</artifactId>
  <version>0.20.3</version>
</dependency>
登入後複製
登入後複製
登入後複製

專案配置

將下列屬性新增至 src/main/resources/application.properties 檔案:

<dependency>
  <groupId>io.quarkus</groupId>
  <artifactId>quarkus-websockets-next</artifactId>
</dependency>

<dependency>
  <groupId>io.quarkiverse.langchain4j</groupId>
  <artifactId>quarkus-langchain4j-core</artifactId>
  <version>0.20.3</version>
</dependency>

<dependency>
  <groupId>io.quarkiverse.langchain4j</groupId>
  <artifactId>quarkus-langchain4j-openai</artifactId>
  <version>0.20.3</version>
</dependency>
登入後複製
登入後複製
登入後複製

將 YOUR_OPENAPI_KEY_HERE 替換為您在 OpenAI Platform 上註冊的金鑰 (apiKey)。

提示:在 IDE 中建立一個環境變量,然後將屬性 quarkus.langchain4j.openai.api-key 修改為:

quarkus.tls.trust-all=true
quarkus.langchain4j.timeout=60s
quarkus.langchain4j.openai.api-key=YOUR_OPENAI_API_KEY_HERE
登入後複製
登入後複製

建立我們的 AIService

首先,我們需要建立 AIService,它將是負責為我們的代理賦予「個性」的類別。為此,我們將在 src/main/java/ 目錄中建立名為 Agent 的類,程式碼如下:

quarkus.langchain4j.openai.api-key=${OPEN_API_KEY:NAO_ENCONTREI_A_VAR}
登入後複製

正如您從我們的 SystemPrompt (@SystemMessage) 中看到的,我們創建了一個專門從事足球的代理。

創建我們的聊天

現在我們已經建立了代理,我們需要建立一個類別來處理與它的聊天。為此,我們將在 src/main/java/ 目錄中使用以下程式碼建立名為 AgentWSEndpoint 的類別:

package <seupacote>;

import dev.langchain4j.service.SystemMessage;
import dev.langchain4j.service.UserMessage;
import io.quarkiverse.langchain4j.RegisterAiService;
import jakarta.enterprise.context.ApplicationScoped;

@ApplicationScoped
@RegisterAiService
public interface Agent {

    @SystemMessage("""
            Você é um agente especializado em futebol brasileiro, seu nome é FutAgentBR
            Você sabe responder sobre os principais títulos dos principais times brasileiros e da seleção brasileira
            Sua resposta precisa ser educada, você pode deve responder em Português brasileiro e de forma relevante a pergunta feita

            Quando você não souber a resposta, responda que você não sabe responder nesse momento mas saberá em futuras versões.
            """)
    String chat(@UserMessage String message);
}
登入後複製

現在您可以透過 quarkus dev ui 與您的代理商(目前仍是助理)交談。以下是一些可以指導您的印刷品:

Agente de IA confiável em prod com Java   Quarkus   Langchain- Parte  AI as Service

Agente de IA confiável em prod com Java   Quarkus   Langchain- Parte  AI as Service

Agente de IA confiável em prod com Java   Quarkus   Langchain- Parte  AI as Service

Agente de IA confiável em prod com Java   Quarkus   Langchain- Parte  AI as Service

新增我們的工具(函數呼叫)

現在讓我們繼續討論座席和助理之間的區別細節。我們將為我們的代理提供執行任務和/或流程、新增工具(函數呼叫)的可能性。在我們編寫程式碼之前,我們有一個簡短的圖形演示如何以宏觀方式呼叫工具。

Agente de IA confiável em prod com Java   Quarkus   Langchain- Parte  AI as Service
來源:surface.ai

現在我們知道工具呼叫是如何運作的,我們需要使用我們的工具建立類,您也可以為每個工具建立多個不同的類別。在這個例子中,我們將建立一個“ToolBox”,也就是一個工具箱,將我們的代理程式可以使用的工具分組。程式碼如下:

<dependency>
  <groupId>io.quarkus</groupId>
  <artifactId>quarkus-websockets-next</artifactId>
</dependency>

<dependency>
  <groupId>io.quarkiverse.langchain4j</groupId>
  <artifactId>quarkus-langchain4j-core</artifactId>
  <version>0.20.3</version>
</dependency>

<dependency>
  <groupId>io.quarkiverse.langchain4j</groupId>
  <artifactId>quarkus-langchain4j-openai</artifactId>
  <version>0.20.3</version>
</dependency>
登入後複製
登入後複製
登入後複製

不久之後,我們為代理程式添加了一個註釋,透過 @ToolBox(AgentTools.class) 註釋通知它可以使用哪些工具。看起來像這樣:

quarkus.tls.trust-all=true
quarkus.langchain4j.timeout=60s
quarkus.langchain4j.openai.api-key=YOUR_OPENAI_API_KEY_HERE
登入後複製
登入後複製

現在您可以詢問您的代理現在幾點了,今天是幾號,請他將兩個數字相加併計算平方根。這些是我們在這裡用來說明的工具,但您可以將其替換為 HTTP 呼叫、雜湊函數、SQL 查詢等。這裡的可能性很多。

透過 Quarkus DEV UI 進行測試

這是新增工具後進行的一項測試的螢幕截圖:

Agente de IA confiável em prod com Java   Quarkus   Langchain- Parte  AI as Service

Agente de IA confiável em prod com Java   Quarkus   Langchain- Parte  AI as Service

如您所見,對於每個工具調用,我們都會有一個日誌,顯示 LLM 實際上調用了我們授權其執行的程式碼。

後續步驟

我們的代理創建的開始就結束了。我們很快就會在本文的第 2 部分中為 Agent 添加內存,在第 3 部分中為 RAG(檢索增強生成)添加內存,在第 4 部分中為 Guardrails 添加內存。我希望你喜歡它並很快見到你。

但是您現在可以跟隨並查看此 GitHub 儲存庫中的所有文章的程式碼。

以上是使用 Java Quarkus Langchain 建立可靠的 AI 代理程式 - 部分 AI 即服務的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!