Διόρθωση του σφάλματος ToolCallingAgentOutputParser του Langchain.js με το Ollama LLM και ένα προσαρμοσμένο εργαλείο

Temp mail SuperHeros
Διόρθωση του σφάλματος ToolCallingAgentOutputParser του Langchain.js με το Ollama LLM και ένα προσαρμοσμένο εργαλείο
Διόρθωση του σφάλματος ToolCallingAgentOutputParser του Langchain.js με το Ollama LLM και ένα προσαρμοσμένο εργαλείο

Κατανόηση και διόρθωση σφαλμάτων ToolCallingAgentOutputParser στο Langchain.js

Όταν εργάζεστε με το Langchain.js v2, οι προγραμματιστές συχνά στοχεύουν να δημιουργήσουν αποτελεσματικούς πράκτορες χρησιμοποιώντας προσαρμοσμένα εργαλεία και μοντέλα γλώσσας όπως η Ollama. Ωστόσο, η ενσωμάτωση αυτών των στοιχείων μπορεί μερικές φορές να οδηγήσει σε σφάλματα που είναι δύσκολο να εντοπιστούν.

Ένα τέτοιο σφάλμα είναι το "parseResult on ToolCallingAgentOutputParser λειτουργεί μόνο στην έξοδο ChatGeneration", το οποίο μπορεί να προκύψει κατά την κατασκευή ενός προσαρμοσμένου εργαλείου εντός του πλαισίου παράγοντα. Η κατανόηση της βασικής αιτίας αυτού του ζητήματος είναι ζωτικής σημασίας για να διασφαλιστεί ότι ο παράγοντας και το εργαλείο λειτουργούν σωστά.

Αυτό το άρθρο διερευνά μια απλή υλοποίηση ενός προσαρμοσμένου εργαλείου που προσθέτει 2 σε μια είσοδο αριθμού, χρησιμοποιώντας το createToolCallingAgent της Langchain και το μοντέλο Ollama. Αναλύοντας το σφάλμα και το πλαίσιο του, μπορούμε να κατανοήσουμε καλύτερα τον τρόπο αντιμετώπισης του.

Οι ακόλουθες ενότητες θα σας καθοδηγήσουν στον κώδικα, θα εξηγήσουν το σφάλμα και θα παρέχουν λύσεις για την αντιμετώπιση αυτού του προβλήματος. Είτε είστε νέοι στο Langchain.js είτε έμπειροι, αυτός ο οδηγός θα σας βοηθήσει να ξεπεράσετε αποτελεσματικά αυτό το ζήτημα.

Εντολή Παράδειγμα χρήσης
tool() Αυτή η συνάρτηση από το Langchain.js ορίζει ένα προσαρμοσμένο εργαλείο που εκτελεί μια λειτουργία. Σε αυτό το άρθρο, χρησιμοποιείται για τη δημιουργία ενός εργαλείου που προσθέτει το 2 σε έναν αριθμό εισόδου, τυλίγοντας τη λογική σε μια εύκολα καλούμενη δομή.
z.object() Ένα μέρος της βιβλιοθήκης Zod, που χρησιμοποιείται για την επικύρωση σχήματος στο Langchain. Αυτό διασφαλίζει ότι η είσοδος στο προσαρμοσμένο εργαλείο είναι ένας αριθμός, παρέχοντας ισχυρή επικύρωση εισόδου για την αποφυγή σφαλμάτων κατά την εκτέλεση.
createToolCallingAgent() Αυτή η εντολή δημιουργεί έναν πράκτορα που μπορεί να καλέσει τα καθορισμένα εργαλεία ως απάντηση σε ερωτήματα χρήστη. Είναι το κλειδί για την ενσωμάτωση εργαλείων με μοντέλα γλώσσας όπως το Ollama, καθιστώντας δυνατή την επίκληση εργαλείων κατά τη διάρκεια της συνομιλίας.
ChatPromptTemplate.fromMessages() Χρησιμοποιείται για τη δημιουργία ενός προτύπου προτροπής συνομιλίας με σύμβολα κράτησης θέσης. Αυτό το πρότυπο οργανώνει διαφορετικούς τύπους μηνυμάτων (σύστημα, άνθρωπο, σύμβολα κράτησης θέσης) για χρήση από τον πράκτορα, βελτιώνοντας τη ροή συνομιλίας του.
MessagesPlaceholder Λειτουργεί ως σύμβολο κράτησης θέσης στο πρότυπο προτροπής για δυναμικό περιεχόμενο, όπως το ιστορικό συνομιλιών ή το scratchpad του πράκτορα. Αυτό επιτρέπει στο περιβάλλον συνομιλίας να εισαχθεί δυναμικά κατά την εκτέλεση.
AgentExecutor() Αυτή η κλάση διαχειρίζεται την εκτέλεση πρακτόρων και εργαλείων. Στο παράδειγμα, βοηθά στην εκτέλεση του ερωτήματος μέσω του πράκτορα και στη συλλογή του αποτελέσματος από την έξοδο του εργαλείου.
await agentExecutor.invoke() Χρησιμοποιείται για την εκτέλεση του ερωτήματος μέσω του πράκτορα και την αναμονή για το αποτέλεσμα ασύγχρονα. Αυτό είναι ζωτικής σημασίας για την αλληλεπίδραση με γλωσσικά μοντέλα και εργαλεία, καθώς διασφαλίζει ότι ο κώδικας περιμένει να ολοκληρωθεί η λειτουργία πριν προχωρήσει.
try-catch Αυτή η δομή διαχείρισης σφαλμάτων χρησιμοποιείται μέσα στο προσαρμοσμένο εργαλείο για τη σύλληψη μη έγκυρων τύπων εισόδου. Εντοπίζοντας εξαιρέσεις, διασφαλίζει ότι το σύστημα επιστρέφει χρήσιμα μηνύματα σφάλματος χωρίς να διακοπεί η ροή εκτέλεσης.
expect() Από τη βιβλιοθήκη ισχυρισμών Chai, η expect() χρησιμοποιείται στη δοκιμή μονάδας για να επαληθεύσει την έξοδο του προσαρμοσμένου εργαλείου. Είναι σημαντικό για να ελέγξετε εάν το εργαλείο λειτουργεί όπως αναμένεται.

Κατανόηση του χειρισμού σφαλμάτων προσαρμοσμένου εργαλείου και πράκτορα στο Langchain.js

Στο παρεχόμενο παράδειγμα, εργαζόμαστε με το Langchain.js v2 για να δημιουργήσουμε ένα προσαρμοσμένο εργαλείο που ενσωματώνεται με το Ολάμα γλωσσικό μοντέλο. Ο κύριος σκοπός του εργαλείου είναι να εκτελέσει μια απλή μαθηματική πράξη: να προσθέσει 2 στην τιμή εισόδου. Το εργαλείο είναι κατασκευασμένο με χρήση του Langchain εργαλείο συνάρτηση, η οποία ορίζει επαναχρησιμοποιήσιμες λειτουργίες που μπορούν να κληθούν από έναν πράκτορα. Για να διασφαλιστεί ότι το εργαλείο λειτουργεί σωστά, το σχήμα εισόδου επικυρώνεται με τη βιβλιοθήκη Zod, διασφαλίζοντας ότι η είσοδος είναι έγκυρος αριθμός. Αυτό διασφαλίζει τον σωστό χειρισμό σφαλμάτων και αποτρέπει την αποτυχία του εργαλείου λόγω μη έγκυρων εισόδων.

Στη συνέχεια, το προσαρμοσμένο εργαλείο ενσωματώνεται σε έναν πράκτορα χρησιμοποιώντας το createToolCallingAgent λειτουργία. Αυτή η εντολή επιτρέπει στον πράκτορα να καλεί το εργαλείο όταν χρειάζεται και ο πράκτορας τροφοδοτείται από το μοντέλο Ollama, το οποίο έχει ρυθμιστεί με συγκεκριμένες παραμέτρους όπως η θερμοκρασία για τον έλεγχο της δημιουργικότητας των αποκρίσεων. Για να διευκολυνθεί η ομαλή αλληλεπίδραση μεταξύ του πράκτορα και του εργαλείου, χρησιμοποιείται ένα πρότυπο προτροπής συνομιλίας. Αυτό το πρότυπο οργανώνει τη συνομιλία ορίζοντας διαφορετικούς τύπους μηνυμάτων, όπως μηνύματα συστήματος, ανθρώπινη εισαγωγή και σύμβολα κράτησης θέσης. Τα placeholders, όπως π.χ MessagesPlaceholder, επιτρέψτε στη συνομιλία να είναι δυναμική, με στοιχεία όπως το ιστορικό συνομιλίας να περιλαμβάνονται.

Ένα από τα βασικά ζητήματα που αντιμετωπίζονται σε αυτό το παράδειγμα είναι ο χειρισμός σφαλμάτων γύρω από την ανάλυση εξόδου του πράκτορα Langchain. Το μήνυμα σφάλματος "parseResult on ToolCallingAgentOutputParser λειτουργεί μόνο στην έξοδο ChatGeneration" προέρχεται από μια αναντιστοιχία μεταξύ του τύπου εξόδου που αναμένεται από τον αναλυτή και της πραγματικής εξόδου που δημιουργείται. Για να χειριστεί αυτό το σφάλμα, το προσαρμοσμένο εργαλείο είναι τυλιγμένο σε ισχυρή λογική, διασφαλίζοντας ότι όλες οι είσοδοι και οι έξοδοι συμμορφώνονται με τις αναμενόμενες μορφές. Αυτό διαχειρίζεται περαιτέρω η AgentExecutor κλάση, η οποία συντονίζει την εκτέλεση του πράκτορα και των εργαλείων, διασφαλίζοντας ότι το ερώτημα και η έξοδος του εργαλείου είναι σωστά συγχρονισμένα.

Τέλος, τα σενάρια υλοποιούν ασύγχρονη εκτέλεση χρησιμοποιώντας περιμένω, επιτρέποντας στο σύστημα να χειρίζεται λειτουργίες χωρίς να εμποδίζει άλλες διεργασίες. Ο πράκτορας περιμένει το εργαλείο να επιστρέψει το αποτέλεσμά του πριν προχωρήσει, διασφαλίζοντας ότι η απάντηση είναι ακριβής και έγκαιρη. Επιπλέον, περιλαμβάνονται δοκιμές μονάδας για την επικύρωση της λειτουργικότητας του εργαλείου, διασφαλίζοντας ότι παράγει με συνέπεια τη σωστή έξοδο. Αυτές οι δοκιμές όχι μόνο επιβεβαιώνουν τη μαθηματική λειτουργία του εργαλείου, αλλά ελέγχουν επίσης πόσο καλά χειρίζεται μη έγκυρα δεδομένα, βελτιώνοντας τη συνολική αξιοπιστία της λύσης. Αυτή η αρθρωτή και ανθεκτική στα σφάλματα σχεδίαση καθιστά τα σενάρια επαναχρησιμοποιήσιμα και αποτελεσματικά για διάφορες εφαρμογές στο Langchain.js.

Διόρθωση του σφάλματος Langchain.js με αρθρωτή προσέγγιση

Λύση 1: JavaScript με αρθρωτή προσέγγιση και χειρισμό σφαλμάτων χρησιμοποιώντας Langchain.js και Olama 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 });

Βελτιωμένος χειρισμός σφαλμάτων για Langchain.js Agent

Λύση 2: Χειρισμός σφαλμάτων με δοκιμές μονάδων για την επικύρωση της εξόδου του προσαρμοσμένου εργαλείου στο 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);
});

Διερεύνηση του ρόλου των πρακτόρων στο Langchain.js και το Olama LLM Integration

Όταν εργάζεστε με το Langchain.js, ενσωματώνετε πράκτορες με εργαλεία και μοντέλα γλώσσας όπως το Ollama είναι μια κρίσιμη πτυχή της δημιουργίας δυναμικών εφαρμογών. Ένας πράκτορας σάς επιτρέπει να συνδέσετε ένα προσαρμοσμένο εργαλείο, το οποίο εκτελεί συγκεκριμένες εργασίες, σε ένα μοντέλο γλώσσας, το οποίο χειρίζεται περισσότερες εργασίες συνομιλίας ή δημιουργίας. Χρησιμοποιώντας πράκτορες, οι προγραμματιστές μπορούν να αυτοματοποιήσουν τις ροές εργασίας όπου ένα μοντέλο όχι μόνο δημιουργεί απαντήσεις, αλλά επικαλείται και εργαλεία για την εκτέλεση υπολογισμών ή επεξεργασίας δεδομένων.

Το βασικό συστατικό σε αυτήν την ενοποίηση είναι το createToolCallingAgent λειτουργία. Αυτή η λειτουργία επιτρέπει στον πράκτορα να ενεργοποιεί συγκεκριμένα εργαλεία όταν είναι απαραίτητο, διασφαλίζοντας ότι οι εργασίες ολοκληρώνονται με ακρίβεια και αποτελεσματικότητα. Ενώ η κύρια εστίαση είναι συχνά στη δημιουργία του ίδιου του εργαλείου, η κατανόηση του τρόπου διαχείρισης της ροής εργασιών του πράκτορα και αποφυγής σφαλμάτων ανάλυσης είναι εξίσου σημαντική. Σφάλματα όπως "parseResult on ToolCallingAgentOutputParser λειτουργεί μόνο στην έξοδο ChatGeneration" συνήθως συμβαίνουν όταν η έξοδος του πράκτορα δεν είναι συμβατή με το σύστημα ανάλυσης, υπογραμμίζοντας την ανάγκη για σωστή ευθυγράμμιση μεταξύ της εξόδου του πράκτορα και της αναμενόμενης μορφής.

Η χρήση προτύπων προτροπής, όπως π.χ ChatPromptTemplate, εμπλουτίζει περαιτέρω την αλληλεπίδραση επιτρέποντας δυναμικά μηνύματα και σύμβολα θέσης περιβάλλοντος. Αυτό επιτρέπει στον πράκτορα να προσαρμόζει τις απαντήσεις του με βάση το ιστορικό συνομιλιών ή το scratchpad του πράκτορα. Η βελτιστοποίηση των προτύπων προτροπής και η διασφάλιση της σωστής ανάλυσης των εξόδων του πράκτορα μπορεί να αποτρέψει πολλά κοινά σφάλματα, καθιστώντας τις εφαρμογές Langchain.js πιο αξιόπιστες και αποτελεσματικές.

Συχνές ερωτήσεις σχετικά με το Langchain.js, τους πράκτορες και τα εργαλεία

  1. Τι είναι ένας πράκτορας στο Langchain.js;
  2. Ένας πράκτορας είναι ένα στοιχείο που αλληλεπιδρά με εργαλεία και μοντέλα γλώσσας για την εκτέλεση συγκεκριμένων εργασιών με βάση ένα ερώτημα χρήστη. Χρησιμοποιεί το createToolCallingAgent λειτουργία ενεργοποίησης εργαλείων.
  3. Πώς επιλύετε το σφάλμα "parseResult on ToolCallingAgentOutputParser";
  4. Αυτό το σφάλμα παρουσιάζεται όταν η έξοδος του πράκτορα δεν είναι συμβατή με τον αναλυτή. Βεβαιωθείτε ότι το αποτέλεσμα ταιριάζει με αυτό που αναμένει ο αναλυτής και χρησιμοποιήστε α ChatGeneration μορφή εξόδου.
  5. Ποιος είναι ο σκοπός του AgentExecutor?
  6. Ο AgentExecutor διαχειρίζεται την εκτέλεση του πράκτορα και των εργαλείων του, επιτρέποντάς σας να εκτελείτε πολύπλοκες ροές εργασίας σε εφαρμογές Langchain.js.
  7. Πώς κάνει ChatPromptTemplate εργασία;
  8. ChatPromptTemplate οργανώνει μηνύματα συνομιλίας σε δομημένη μορφή, επιτρέποντας την εισαγωγή δυναμικού περιεχομένου, όπως το ιστορικό συνομιλιών και το scratchpad του πράκτορα στη ροή συνομιλιών.
  9. Γιατί είναι Zod χρησιμοποιείται στο εργαλείο;
  10. Zod χρησιμοποιείται για την επικύρωση εισόδου, διασφαλίζοντας ότι η είσοδος στο προσαρμοσμένο εργαλείο είναι του σωστού τύπου (π.χ. αριθμός), γεγονός που μειώνει τις πιθανότητες σφαλμάτων.

Τελικές σκέψεις σχετικά με τον χειρισμό σφαλμάτων στο Langchain.js

Η επίλυση του σφάλματος "parseResult on ToolCallingAgentOutputParser λειτουργεί μόνο στην έξοδο ChatGeneration" απαιτεί προσεκτική ευθυγράμμιση μεταξύ της εξόδου του πράκτορά σας και των προσδοκιών ανάλυσης του. Με τη σωστή προσέγγιση, αυτό το σφάλμα μπορεί να αποφευχθεί.

Χρησιμοποιώντας κατάλληλα εργαλεία όπως το Zod για επικύρωση και διασφαλίζοντας ότι οι πράκτορες, όπως αυτοί που έχουν δημιουργηθεί με το Ollama, χειρίζονται σωστά τις εισόδους και τις εξόδους, μπορείτε να δημιουργήσετε ισχυρές λύσεις στο Langchain.js χωρίς να αντιμετωπίζετε προβλήματα ανάλυσης.

Πηγές και αναφορές για Επίλυση σφαλμάτων Langchain.js
  1. Επεξεργάζεται την επίσημη τεκμηρίωση του Langchain, η οποία παρέχει πληροφορίες για τη δημιουργία εργαλείων και τις διαμορφώσεις πρακτόρων. Τεκμηρίωση Langchain Μέσα.
  2. Εξηγεί περαιτέρω τη χρήση του Zod για επικύρωση εισόδου και την εφαρμογή του στο Langchain.js. Τεκμηρίωση Zod Μέσα.
  3. Περιγράφει το μοντέλο γλώσσας Ollama και την εφαρμογή του σε προσαρμοσμένους πράκτορες. Olama LLM Μέσα.