Memahami dan Membetulkan Ralat AlatCallingAgentOutputParser dalam Langchain.js
Apabila bekerja dengan Langchain.js v2, pembangun sering menyasarkan untuk mencipta ejen yang cekap menggunakan alat tersuai dan model bahasa seperti Ollama. Walau bagaimanapun, penyepaduan komponen ini kadangkala boleh membawa kepada ralat yang sukar untuk dinyahpepijat.
Satu ralat sedemikian ialah "parseResult on ToolCallingAgentOutputParser hanya berfungsi pada output ChatGeneration," yang boleh berlaku apabila membina alat tersuai dalam rangka kerja ejen. Memahami punca masalah ini adalah penting untuk memastikan ejen dan alat berfungsi dengan betul.
Artikel ini meneroka pelaksanaan mudah alat tersuai yang menambahkan 2 pada input nombor, menggunakan createToolCallingAgent Langchain dan model Ollama. Dengan menganalisis ralat dan konteksnya, kita boleh memahami dengan lebih baik cara menyelesaikan masalah tersebut.
Bahagian berikut akan membimbing anda melalui kod, menerangkan ralat dan menyediakan penyelesaian untuk menangani masalah ini. Sama ada anda baru menggunakan Langchain.js atau berpengalaman, panduan ini akan membantu anda mengatasi isu ini dengan cekap.
Perintah | Contoh Penggunaan |
---|---|
tool() | Fungsi daripada Langchain.js ini mentakrifkan alat tersuai yang menjalankan operasi. Dalam artikel ini, ia digunakan untuk mencipta alat yang menambah 2 pada nombor input, membungkus logik dalam struktur yang boleh dipanggil dengan mudah. |
z.object() | Sebahagian daripada pustaka Zod, digunakan untuk pengesahan skema dalam Langchain. Ini memastikan bahawa input kepada alat tersuai ialah nombor, memberikan pengesahan input yang kukuh untuk mengelakkan ralat semasa pelaksanaan. |
createToolCallingAgent() | Perintah ini mencipta ejen yang boleh memanggil alat yang ditentukan sebagai tindak balas kepada pertanyaan pengguna. Ini adalah kunci untuk menyepadukan alatan dengan model bahasa seperti Ollama, yang membolehkan anda menggunakan alatan semasa perbualan. |
ChatPromptTemplate.fromMessages() | Digunakan untuk menjana templat gesaan sembang dengan ruang letak. Templat ini menyusun pelbagai jenis mesej (sistem, manusia, ruang letak) untuk digunakan oleh ejen, meningkatkan aliran perbualannya. |
MessagesPlaceholder | Bertindak sebagai pemegang tempat dalam templat gesaan untuk kandungan dinamik, seperti sejarah sembang atau pad calar ejen. Ini membolehkan konteks perbualan disuntik secara dinamik semasa pelaksanaan. |
AgentExecutor() | Kelas ini menguruskan pelaksanaan ejen dan alatan. Dalam contoh, ia membantu dalam menjalankan pertanyaan melalui ejen dan mengumpul hasil daripada output alat. |
await agentExecutor.invoke() | Digunakan untuk menjalankan pertanyaan melalui ejen dan menunggu keputusan secara tidak segerak. Ini penting untuk berinteraksi dengan model dan alatan bahasa, kerana ia memastikan kod menunggu operasi selesai sebelum meneruskan. |
try-catch | Struktur pengendalian ralat ini digunakan dalam alat tersuai untuk menangkap jenis input yang tidak sah. Dengan menangkap pengecualian, ia memastikan bahawa sistem mengembalikan mesej ralat yang berguna tanpa melanggar aliran pelaksanaan. |
expect() | Daripada pustaka penegasan Chai, expect() digunakan dalam ujian unit untuk mengesahkan output alat tersuai. Ia penting untuk menguji sama ada alat berfungsi seperti yang diharapkan. |
Memahami Alat Tersuai dan Pengendalian Ralat Ejen dalam Langchain.js
Dalam contoh yang diberikan, kami sedang bekerjasama dengan Langchain.js v2 untuk mencipta alat tersuai yang berintegrasi dengan Ollama model bahasa. Tujuan utama alat ini adalah untuk melaksanakan operasi matematik yang mudah: menambah 2 pada nilai input. Alat ini dibina menggunakan Langchain alat fungsi, yang mentakrifkan fungsi boleh guna semula yang boleh digunakan oleh ejen. Untuk memastikan alat berfungsi dengan betul, skema input disahkan dengan pustaka Zod, menjamin bahawa input adalah nombor yang sah. Ini memastikan pengendalian ralat yang betul dan menghalang alat daripada gagal disebabkan oleh input yang tidak sah.
Alat tersuai kemudiannya dimasukkan ke dalam ejen menggunakan createToolCallingAgent fungsi. Perintah ini membolehkan ejen memanggil alat apabila diperlukan, dan ejen dikuasakan oleh model Ollama, yang dikonfigurasikan dengan parameter khusus seperti suhu untuk mengawal kreativiti respons. Untuk memudahkan interaksi lancar antara ejen dan alat, templat gesaan sembang digunakan. Templat ini mengatur perbualan dengan mentakrifkan jenis mesej yang berbeza, seperti mesej sistem, input manusia dan ruang letak. Pemegang tempat, seperti MessagesPlaceholder, benarkan perbualan menjadi dinamik, dengan elemen seperti sejarah sembang disertakan.
Salah satu isu utama yang ditangani dalam contoh ini ialah pengendalian ralat di sekitar penghuraian output ejen Langchain. Mesej ralat "parseResult on ToolCallingAgentOutputParser hanya berfungsi pada output ChatGeneration" berpunca daripada ketidakpadanan antara jenis output yang dijangkakan oleh penghurai dan output sebenar yang dihasilkan. Untuk mengendalikan ralat ini, alat tersuai dibalut dengan logik yang mantap, memastikan semua input dan output mematuhi format yang diharapkan. Ini diuruskan lagi oleh AgenPelaksana kelas, yang menyelaraskan pelaksanaan ejen dan alatan, memastikan bahawa pertanyaan dan output alat disegerakkan dengan betul.
Akhirnya, skrip melaksanakan pelaksanaan tak segerak menggunakan tunggu, membenarkan sistem mengendalikan operasi tanpa menyekat proses lain. Ejen menunggu alat untuk mengembalikan keputusannya sebelum meneruskan, memastikan bahawa respons adalah tepat dan tepat pada masanya. Selain itu, ujian unit disertakan untuk mengesahkan kefungsian alat, memastikan ia secara konsisten menghasilkan output yang betul. Ujian ini bukan sahaja mengesahkan operasi matematik alat tetapi juga menyemak sejauh mana ia mengendalikan input tidak sah, meningkatkan kebolehpercayaan keseluruhan penyelesaian. Reka bentuk modular dan tahan ralat ini menjadikan skrip boleh diguna semula dan berkesan untuk pelbagai aplikasi dalam Langchain.js.
Membetulkan Ralat Langchain.js dengan Pendekatan Modular
Penyelesaian 1: JavaScript dengan pendekatan modular dan pengendalian ralat menggunakan Langchain.js dan Ollama LLM
import { tool } from "@langchain/core/tools";
import { z } from "zod";
import { Ollama } from "@langchain/ollama";
import { ChatPromptTemplate } from "@langchain/core/prompts";
import { createToolCallingAgent } from "langchain/agents";
import { AgentExecutor } from "langchain/agents";
// Initialize LLM with Ollama
const llm = new Ollama({
model: "llama3",
temperature: 0.7,
});
// Custom tool to add 2 to the input number
const magicTool = tool(
async (input) => {
return input + 2;
},
{
name: "magic_function",
description: "Applies a magic function to an input",
schema: z.object({ input: z.number() }),
};
);
const tools = [magicTool];
// Setup ChatPromptTemplate with placeholders
const prompt = ChatPromptTemplate.fromMessages([
["system", "You are a helpful assistant called iHelp"],
["placeholder", "{chat_history}"],
["human", "{input}"],
["placeholder", "{agent_scratchpad}"],
]);
// Agent configuration
const agent = createToolCallingAgent({ llm, tools, prompt });
// Execute agent query
const agentExecutor = new AgentExecutor({ agent, tools });
const query = "What is the value of magic_function(3)?";
await agentExecutor.invoke({ input: query });
Pengendalian Ralat Dipertingkatkan untuk Ejen Langchain.js
Penyelesaian 2: Ralat pengendalian dengan ujian unit untuk mengesahkan output alat tersuai dalam Langchain.js
import { tool } from "@langchain/core/tools";
import { z } from "zod";
import { Ollama } from "@langchain/ollama";
import { createToolCallingAgent } from "langchain/agents";
import { AgentExecutor } from "langchain/agents";
// Initialize LLM with Ollama
const llm = new Ollama({ model: "llama3", temperature: 0.7 });
// Custom tool with added error handling
const magicTool = tool(
async (input) => {
try {
if (typeof input !== "number") throw new Error("Invalid input type!");
return input + 2;
} catch (err) {
return err.message;
}
},
{
name: "magic_function",
description: "Adds 2 to input and handles errors",
schema: z.object({ input: z.number() }),
}
);
const tools = [magicTool];
// Agent and execution
const agent = createToolCallingAgent({ llm, tools });
const agentExecutor = new AgentExecutor({ agent, tools });
const query = "magic_function('abc')"; // Test with invalid input
await agentExecutor.invoke({ input: query });
// Unit test example
import { expect } from "chai";
it("should return 5 when input is 3", async () => {
const result = await magicTool(3);
expect(result).to.equal(5);
});
Meneroka Peranan Ejen dalam Langchain.js dan Ollama LLM Integrasi
Apabila bekerja dengan Langchain.js, menyepadukan ejen dengan alat dan model bahasa seperti Ollama adalah aspek kritikal dalam membina aplikasi dinamik. Ejen membenarkan anda menyambungkan alat tersuai, yang melaksanakan tugas tertentu, kepada model bahasa, yang mengendalikan lebih banyak tugas perbualan atau generatif. Dengan menggunakan ejen, pembangun boleh mengautomasikan aliran kerja di mana model bukan sahaja menjana respons tetapi juga menggunakan alat untuk melaksanakan pengiraan atau pemprosesan data.
Komponen utama dalam integrasi ini ialah createToolCallingAgent fungsi. Fungsi ini membolehkan ejen mencetuskan alatan tertentu apabila perlu, memastikan tugasan diselesaikan dengan tepat dan cekap. Walaupun tumpuan utama selalunya adalah untuk mencipta alat itu sendiri, memahami cara mengurus aliran kerja ejen dan mengelakkan ralat penghuraian adalah sama penting. Ralat seperti "parseResult on ToolCallingAgentOutputParser hanya berfungsi pada output ChatGeneration" biasanya berlaku apabila output ejen tidak serasi dengan sistem penghuraian, menyerlahkan keperluan untuk penjajaran yang betul antara output ejen dan format yang dijangkakan.
Penggunaan templat segera, seperti ChatPromptTemplate, memperkayakan lagi interaksi dengan membenarkan mesej dinamik dan ruang letak konteks. Ini membolehkan ejen melaraskan responsnya berdasarkan sejarah sembang atau pad conteng ejen. Mengoptimumkan templat segera dan memastikan output ejen dihuraikan dengan betul boleh menghalang banyak ralat biasa, menjadikan aplikasi Langchain.js anda lebih dipercayai dan cekap.
Soalan Lazim Mengenai Langchain.js, Ejen dan Alat
- Apakah ejen dalam Langchain.js?
- Ejen ialah komponen yang berinteraksi dengan alat dan model bahasa untuk melaksanakan tugas tertentu berdasarkan pertanyaan pengguna. Ia menggunakan createToolCallingAgent berfungsi untuk mencetuskan alatan.
- Bagaimanakah anda menyelesaikan ralat "parseResult on ToolCallingAgentOutputParser"?
- Ralat ini berlaku apabila output ejen tidak serasi dengan parser. Pastikan output sepadan dengan apa yang diharapkan oleh penghurai dan gunakan a ChatGeneration format output.
- Apakah tujuan AgentExecutor?
- The AgentExecutor menguruskan pelaksanaan ejen dan alatannya, membolehkan anda menjalankan aliran kerja yang kompleks dalam aplikasi Langchain.js.
- Bagaimana ChatPromptTemplate kerja?
- ChatPromptTemplate mengatur mesej sembang dalam format berstruktur, membenarkan kandungan dinamik seperti sejarah sembang dan pad awal ejen dimasukkan ke dalam aliran perbualan.
- kenapa Zod digunakan dalam alat?
- Zod digunakan untuk pengesahan input, memastikan bahawa input kepada alat tersuai adalah daripada jenis yang betul (cth., nombor), yang mengurangkan kemungkinan ralat.
Pemikiran Akhir tentang Pengendalian Ralat dalam Langchain.js
Menyelesaikan ralat "parseResult on ToolCallingAgentOutputParser hanya berfungsi pada output ChatGeneration" memerlukan penjajaran yang teliti antara output ejen anda dan jangkaan penghuraiannya. Dengan pendekatan yang betul, kesilapan ini dapat dielakkan.
Dengan menggunakan alat yang sesuai seperti Zod untuk pengesahan dan memastikan ejen, seperti yang dibina dengan Ollama, mengendalikan input dan output dengan betul, anda boleh mencipta penyelesaian yang mantap dalam Langchain.js tanpa menghadapi masalah penghuraian.
Sumber dan Rujukan untuk Penyelesaian Ralat Langchain.js
- Menghuraikan dokumentasi Langchain rasmi, yang memberikan pandangan tentang penciptaan alat dan konfigurasi ejen. Dokumentasi Langchain Di dalam.
- Lebih lanjut menerangkan penggunaan Zod untuk pengesahan input dan penggunaannya dalam Langchain.js. Dokumentasi Zod Di dalam.
- Menerangkan model bahasa Ollama dan pelaksanaannya dalam ejen tersuai. Ollama LLM Di dalam.