@herbertbeckman - LinkedIn
@rndtavares - LinkedIn
Ejen AI yang boleh dipercayai dalam prod dengan Java Quarkus Langchain4j - Bahagian 1 - AI sebagai Perkhidmatan (artikel ini)
Ejen AI yang boleh dipercayai di Java Quarkus Langchain4j prod - Bahagian 2 - Memori (akan datang)
Ejen AI yang boleh dipercayai dalam produk dengan Java Quarkus Langchain4j - Bahagian 3 - RAG (akan datang)
Ejen AI yang dipercayai dalam produk dengan Java Quarkus Langchain4j - Bahagian 4 - Pengawal (akan datang)
Setiap kali kita mengalami ledakan dalam teknologi baru muncul, syarikat tidak sabar-sabar untuk menerapkannya dan meraih hasil yang ditunggu-tunggu dari sudut perniagaan. Ia adalah perlumbaan untuk inovasi dan perjuangan untuk kelebihan langkah pertama. Di tengah-tengah perlumbaan ini, syarikat, yang sebelum ini bimbang, sering berputus asa kerana beberapa faktor, salah satu yang utama ialah kebolehpercayaan sistem secara umum. Kecerdasan buatan (AI) kini sedang menjalani salah satu ujian rintangan terbesarnya dan tugas kami sebagai pembangun perisian adalah untuk menunjukkan kepada syarikat bahawa, ya, adalah mungkin untuk menjalankan satu siri tugas dan proses dengan penggunaan AI yang sedar dan betul. . Dalam artikel ini, kami akan menunjukkan, dalam 3 bahagian, apakah fungsi dan proses yang perlu ada dalam ejen AI yang boleh dipercayai dalam pengeluaran untuk syarikat memperoleh hasil yang ditunggu-tunggu, serta melaksanakan bersama beberapa konsep yang digunakan dalam pasaran . Kami juga akan memperincikan perkara yang menjadi perhatian penyelesaian ini dan meminta anda, pembangun, menjalankan seberapa banyak ujian dan memberi kami maklum balas sebanyak mungkin supaya, bersama-sama, kami dapat meningkatkan lagi pemahaman ini.
Salah satu soalan pertama yang mungkin anda ada ialah bagaimana ejen berbeza daripada kes penggunaan AI yang lain. Ejen mempunyai fungsi yang lebih dikaitkan dengan automasi, manakala yang lain mempunyai aktiviti mereka yang bertujuan untuk bantuan dan pengoptimuman masa. Di bawah saya perincikan setiap kes penggunaan dengan lebih terperinci.
Pembantu boleh membantu kami dan menjimatkan banyak masa kami menyemak maklumat dan menjadi sumber pertukaran pengetahuan yang baik. Mereka bercakap TENTANG subjek yang paling pelbagai dan boleh berguna apabila kita memerlukan alasan yang jelas untuk menganalisis premis hujah. Sudah tentu, mereka mempunyai lebih banyak kuasa daripada itu, tetapi saya mahu anda memberi tumpuan kepada perkara yang dilakukan oleh pembantu: mereka bercakap dengan anda dan itu sahaja. Dia SAHAJA boleh bercakap tentang, meringkaskan, memperincikan, dsb. Sebagai contoh yang kami ada: ChatGPT, Claude AI dan Gemini.
Copilot lebih berkuasa sedikit daripada pembantu. Mereka sebenarnya boleh melakukan sesuatu, tindakan yang lebih konkrit seperti menukar teks dan/atau mencadangkan pengubahsuaian dalam masa nyata, serta memberi petua semasa pengubahsuaian dan/atau peristiwa berlaku dalam konteks. Walau bagaimanapun, seperti yang dinyatakan sebelum ini, ia bergantung pada konteks untuk melakukan ini dan ia tidak selalu mempunyai semua maklumat yang diperlukan untuk membuat cadangan yang baik, ia juga bergantung pada kebenaran nyata anda, mewujudkan pergantungan langsung kepada pengguna. Contoh yang baik ialah: Github Copilot, Codium dan Microsoft Copilot.
Objektif utama ejen adalah untuk menjalankan tugas dengan objektif yang jelas. Fokusnya adalah pada automasi, iaitu, mereka sebenarnya melakukan kerja konkrit secara autonomi. Semua ini hanya boleh dilakukan melalui alat yang kami sediakan untuk mereka. Ejen bukanlah LLM itu sendiri, sebaliknya aplikasinya yang menyelaraskan LLM ini. Fahami LLM sebagai otak sistem, yang membuat keputusan, dan aplikasinya sebagai ahli badan otak itu. Apa gunanya berfikir tentang mendapatkan segelas air jika saya tidak dapat mencapainya dengan tangan saya? Ejen anda memberi LLM kuasa untuk melakukan sesuatu dengan cara yang selamat, boleh diaudit dan, yang paling penting, boleh dipercayai.
Dalam bahagian pertama artikel ini, kami akan melaksanakan AIService dalam projek, yang tidak lebih daripada lapisan antara muka dengan pembekal AI kami. Dalam projek ini kami menggunakan LLM OpenAI, tetapi anda boleh menambah pembekal kegemaran anda dan melaraskan kebergantungan berdasarkannya.
Sekarang kami mempunyai konsep yang ditakrifkan dengan baik dan kami tahu apa yang akan kami lakukan di sini, mari beralih kepada pengekodan!
Buat projek quarkus, pilih pengurus pergantungan dan sambungan anda dalam Quarkus - Mulakan pengekodan.
Kami akan menggunakan maven sebagai pengurus pergantungan projek. Di bawah ialah kebergantungan awal yang kami tambahkan.
<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>
Tambah sifat berikut pada fail 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>
Ganti YOUR_OPENAPI_KEY_HERE dengan kunci (apiKey) yang anda daftarkan pada Platform OpenAI.
PETUA: buat pembolehubah persekitaran dalam IDE anda dan kemudian ubah suai sifat quarkus.langchain4j.openai.api-key kepada:
quarkus.tls.trust-all=true quarkus.langchain4j.timeout=60s quarkus.langchain4j.openai.api-key=YOUR_OPENAI_API_KEY_HERE
Mula-mula kami perlu mencipta AIService kami, yang akan menjadi kelas yang bertanggungjawab untuk memberikan "personaliti" kepada ejen kami. Untuk melakukan ini, dalam direktori src/main/java/
quarkus.langchain4j.openai.api-key=${OPEN_API_KEY:NAO_ENCONTREI_A_VAR}
Seperti yang anda lihat daripada SystemPrompt (@SystemMessage), kami mencipta ejen khusus dalam bola sepak.
Sekarang kami telah mencipta ejen kami, kami perlu mencipta kelas yang akan mengendalikan sembang kami dengannya. Untuk melakukan ini, dalam direktori src/main/java/
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); }
Kini anda boleh bercakap dengan ejen anda, yang kini masih menjadi pembantu, melalui quarkus dev ui. Berikut ialah beberapa cetakan untuk membimbing anda:
Sekarang mari kita beralih kepada butiran yang membuat semua perbezaan antara ejen dan pembantu. Kami akan memberi ejen kami kemungkinan untuk menjalankan tugas dan/atau proses, menambah alat (panggilan fungsi). Sebelum kami mengekod ini, kami mempunyai grafik ringkas yang menunjukkan cara memanggil alat berfungsi secara makro.
Sumber: surface.ai
Sekarang kami tahu cara panggilan alat berfungsi, kami perlu mencipta kelas dengan alatan kami, anda juga boleh membuat beberapa kelas berbeza untuk setiap alat. Dalam contoh ini kami akan mencipta "ToolBox", iaitu, kotak alat, mengumpulkan alat yang boleh digunakan oleh ejen kami. Ini kodnya:
<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>
Tidak lama selepas itu, kami menambahkan anotasi kepada ejen kami yang memaklumkan alat yang tersedia untuk digunakan, melalui anotasi @ToolBox(AgentTools.class). Ia kelihatan seperti ini:
quarkus.tls.trust-all=true quarkus.langchain4j.timeout=60s quarkus.langchain4j.openai.api-key=YOUR_OPENAI_API_KEY_HERE
Sekarang anda boleh tanya ejen anda pukul berapa, tarikh hari ini, minta dia tambah dua nombor dan kira punca kuasa dua. Ini ialah alat yang kami gunakan di sini untuk menggambarkan, tetapi anda boleh menggantikannya dengan panggilan HTTP, fungsi pencincangan, pertanyaan SQL, dsb. Kemungkinan di sini adalah banyak.
Berikut ialah tangkapan skrin salah satu ujian yang dijalankan selepas menambah alatan:
Seperti yang anda lihat, untuk setiap panggilan alat kami akan mempunyai log, menunjukkan bahawa LLM sebenarnya memanggil kod yang kami benarkan untuk dilaksanakan.
Ini menyimpulkan permulaan penciptaan dalam Ejen kami. Kami tidak lama lagi akan menambah ingatan kepada Ejen kami dalam bahagian 2, RAG (Retrieval-Augmented Generation) dalam bahagian 3 dan Guardrails dalam bahagian 4 artikel ini. Saya harap anda menikmatinya dan jumpa anda tidak lama lagi.
Tetapi kini anda boleh mengikuti dan melihat SEMUA kod artikel dalam repositori GitHub ini.
Atas ialah kandungan terperinci Ejen AI yang boleh dipercayai dalam prod dengan Java Quarkus Langchain - Bahagian AI sebagai Perkhidmatan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!