將 LangChain4j 與 Micronaut 結合使用
1. 概述
LangChain4j是一個基於LangChain的Java庫。我們在 Java 應用程式中使用它來與法學碩士整合。
Micronaut 是一個基於 JVM 的現代框架,旨在建立輕量級、模組化和快速的應用程式。我們使用它來創建微服務、無伺服器應用程式和雲端原生解決方案,並且啟動時間和記憶體使用量最少。其強大的依賴注入和AOT(提前)編譯確保了高性能和可擴展性。在 Micronaut 中,我們與 LangChain4j 進行了出色的集成,使我們能夠在單一應用程式中充分利用這兩個框架的優勢。
在本教程中,我們將學習如何使用 LangChain4j 和 Micronaut 建立人工智慧驅動的應用程式。我們將探索創建強大的工具來自動化我們的任務是多麼簡單。
2. 搬遷顧問申請
我們將建立一個整合 LangChain4j 的 Micronaut 應用程式。在此應用程式中,我們將創建一個簡單的聊天機器人來提供有關潛在搬遷國家/地區的建議。聊天機器人將依賴一些提供的連結來獲取其資訊。
該應用程式僅回答有關其所知道的國家/地區的問題。
2.1.依賴關係
讓我們從新增依賴項開始。首先,我們加入langchain4j-open-ai
依賴項:
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-open-ai</artifactId>
<version>0.36.2</version>
</dependency>
然後,我們新增 Micronaut 相關的依賴項:
<dependency>
<groupId>io.micronaut.langchain4j</groupId>
<artifactId>micronaut-langchain4j-core</artifactId>
<version>0.0.1</version>
</dependency>
<dependency>
<groupId>io.micronaut.langchain4j</groupId>
<artifactId>micronaut-langchain4j-openai</artifactId>
<version>0.0.1</version>
</dependency>
2.2.配置
由於我們將使用 OpenAI 的 LLM,因此我們將OpenAI API 金鑰新增到我們的應用程式 YAML 檔案中:
langchain4j:
open-ai:
api-key: ${OPENAI_API_KEY}
2.3.搬遷顧問
現在,讓我們建立聊天機器人介面:
public interface RelocationAdvisor {
@SystemMessage("""
You are a relocation advisor. Answer using official tone.
Provide the numbers you will get from the resources.
From the best of your knowledge answer the question below regarding possible relocation.
Please get information only from the following sources:
- https://www.numbeo.com/cost-of-living/country_result.jsp?country=Spain
- https://www.numbeo.com/cost-of-living/country_result.jsp?country=Romania
And their subpages. Then, answer. If you don't have the information - answer exact text 'I don't have
information about {Country}'
""")
String chat(@UserMessage String question);
}
在RelocationAdvisor
類別中,我們定義chat()
方法,該方法處理使用者訊息並以字串形式傳回模型回應。我們使用@SystemMessage
註解來指定聊天機器人的基本行為。在這種情況下,我們希望聊天機器人充當搬遷顧問,並僅依賴兩個特定連結來獲取有關國家/地區的資訊。
2.4.搬遷顧問工廠
現在,讓我們建立RelocationAdvisorFactory
:
@Factory
public class RelocationAdvisorFactory {
@Value("${langchain4j.open-ai.api-key}")
private String apiKey;
@Singleton
public RelocationAdvisor advisor() {
ChatLanguageModel model = OpenAiChatModel.builder()
.apiKey(apiKey)
.modelName(OpenAiChatModelName.GPT_4_O_MINI)
.build();
return AiServices.create(RelocationAdvisor.class, model);
}
}
使用這個工廠,我們將RelocationAdvisor
作為 bean 產生。我們使用OpenAiChatModel
建構器建立模型實例,然後利用AiServices
基於介面和模型實例建立聊天機器人的實例。
2.5.使用現有來源測試案例
讓我們測試一下我們的顧問,看看它提供了有關它所知道的國家/地區的哪些資訊:
@MicronautTest(rebuildContext = true)
public class RelocationAdvisorLiveTest {
Logger logger = LoggerFactory.getLogger(RelocationAdvisorLiveTest.class);
@Inject
RelocationAdvisor assistant;
@Test
void givenAdvisor_whenSendChatMessage_thenExpectedResponseShouldContainInformationAboutRomania() {
String response = assistant.chat("Tell me about Romania");
logger.info(response);
Assertions.assertTrue(response.contains("Romania"));
}
@Test
void givenAdvisor_whenSendChatMessage_thenExpectedResponseShouldContainInformationAboutSpain() {
String response = assistant.chat("Tell me about Spain");
logger.info(response);
Assertions.assertTrue(response.contains("Spain"));
}
}
我們在測試中註入了RelocationAdvisor
的一個實例,並詢問了幾個國家的情況。如預期的那樣,回應中包含了國家/地區的名稱。
此外,我們也記錄了模型的響應。它看起來是這樣的:
15:43:47.334 [main] INFO cbmlRelocationAdvisorLiveTest - Spain has a cost of living index of 58.54, which is relatively moderate compared to other countries.
The average rent for a single-bedroom apartment in the city center is approximately €906.52, while outside the city center, it is around €662.68...
2.6。來源中缺少資訊的測試案例
現在,讓我們向我們的顧問詢問一個沒有相關資訊的國家:
@Test
void givenAdvisor_whenSendChatMessage_thenExpectedResponseShouldNotContainInformationAboutNorway() {
String response = assistant.chat("Tell me about Norway");
logger.info(response);
Assertions.assertTrue(response.contains("I don't have information about Norway"));
}
在這種情況下,我們的聊天機器人會回覆一條預定義訊息,指出它不知道這個國家。
三、結論
在本文中,我們回顧如何將 LangChain4j 與 Micronaut 整合。正如我們所發現的,實現 LLM 支援的功能並將其整合到 Micronaut 應用程式中非常簡單。此外,我們可以很好地控制我們的人工智慧服務,使我們能夠透過額外的行為來增強它們並創建更複雜的解決方案。
與往常一樣,程式碼可以在 GitHub 上取得。