Ollama LLM ve Özel Araç ile Langchain.js'nin ToolCallingAgentOutputParser Hatasını Düzeltme

Ollama LLM ve Özel Araç ile Langchain.js'nin ToolCallingAgentOutputParser Hatasını Düzeltme
Langchain

Langchain.js'deki ToolCallingAgentOutputParser Hatalarını Anlama ve Düzeltme

Geliştiriciler, Langchain.js v2 ile çalışırken genellikle Ollama gibi özel araçları ve dil modellerini kullanarak verimli aracılar oluşturmayı hedefler. Ancak bu bileşenlerin entegre edilmesi bazen hata ayıklaması zor hatalara yol açabilir.

Bu tür hatalardan biri, aracı çerçevesinde özel bir araç oluştururken ortaya çıkabilen "ToolCallingAgentOutputParser'daki parseResult yalnızca ChatGeneration çıkışında çalışır" hatasıdır. Bu sorunun temel nedenini anlamak, aracının ve aracın doğru şekilde çalışmasını sağlamak için çok önemlidir.

Bu makale, Langchain'in createToolCallingAgent ve Ollama modelini kullanarak bir sayı girişine 2 ekleyen özel bir aracın basit uygulamasını araştırıyor. Hatayı ve içeriğini analiz ederek sorunu nasıl gidereceğimizi daha iyi kavrayabiliriz.

Aşağıdaki bölümler kod boyunca size yol gösterecek, hatayı açıklayacak ve bu sorunu çözmeye yönelik çözümler sunacaktır. İster Langchain.js'de yeni olun ister deneyimli olun, bu kılavuz bu sorunu verimli bir şekilde aşmanıza yardımcı olacaktır.

Emretmek Kullanım Örneği
tool() Langchain.js'deki bu işlev, bir işlemi gerçekleştiren özel bir aracı tanımlar. Bu makalede, giriş numarasına 2 ekleyen ve mantığı kolayca çağrılabilir bir yapıya saran bir araç oluşturmak için kullanıldı.
z.object() Langchain'de şema doğrulama için kullanılan Zod kütüphanesinin bir parçası. Bu, özel araca yapılan girişin bir sayı olmasını sağlar ve yürütme sırasında hataları önlemek için güçlü giriş doğrulaması sağlar.
createToolCallingAgent() Bu komut, kullanıcı sorgularına yanıt olarak tanımlanan araçları çağırabilecek bir aracı oluşturur. Araçların Ollama gibi dil modelleriyle entegre edilmesi, konuşma sırasında araçların çağrılmasını mümkün kılmanın anahtarıdır.
ChatPromptTemplate.fromMessages() Yer tutuculara sahip bir sohbet istemi şablonu oluşturmak için kullanılır. Bu şablon, aracının kullanması için farklı mesaj türlerini (sistem, insan, yer tutucular) düzenleyerek konuşma akışını iyileştirir.
MessagesPlaceholder Sohbet geçmişi veya temsilci karalama defteri gibi dinamik içerik için bilgi istemi şablonunda yer tutucu görevi görür. Bu, yürütme sırasında konuşma içeriğinin dinamik olarak eklenmesine olanak tanır.
AgentExecutor() Bu sınıf, aracıların ve araçların yürütülmesini yönetir. Örnekte, sorgunun aracı aracılığıyla çalıştırılmasına ve aracın çıktısından sonucun toplanmasına yardımcı olur.
await agentExecutor.invoke() Sorguyu aracı aracılığıyla çalıştırmak ve sonucu eşzamansız olarak beklemek için kullanılır. Bu, dil modelleri ve araçlarıyla etkileşim için çok önemlidir, çünkü kodun devam etmeden önce işlemin tamamlanmasını beklemesini sağlar.
try-catch Bu hata işleme yapısı, özel araç içinde geçersiz giriş türlerini yakalamak için kullanılır. İstisnaları yakalayarak sistemin yürütme akışını bozmadan faydalı hata mesajları göndermesini sağlar.
expect() Chai iddia kitaplığından, özel aracın çıktısını doğrulamak için birim testinde wait() kullanılır. Aracın beklendiği gibi performans gösterip göstermediğini test etmek için bu önemlidir.

Langchain.js'de Özel Araç ve Aracı Hata İşlemesini Anlamak

Verilen örnekte, Langchain.js v2 ile entegre olan özel bir araç oluşturmak için çalışıyoruz. dil modeli. Aracın temel amacı basit bir matematik işlemi gerçekleştirmektir: giriş değerine 2 eklemek. Araç, Langchain kullanılarak oluşturulmuştur Bir aracı tarafından çağrılabilen yeniden kullanılabilir işlevleri tanımlayan işlev. Aracın doğru çalıştığından emin olmak için giriş şeması Zod kütüphanesi ile doğrulanır ve girişin geçerli bir sayı olduğu garanti edilir. Bu, doğru hata yönetimini sağlar ve geçersiz girişler nedeniyle aracın arızalanmasını önler.

Özel araç daha sonra aşağıdaki aracı kullanarak bir aracıya dahil edilir: işlev. Bu komut, aracının gerektiğinde aracı çağırmasına olanak tanır ve aracı, yanıtların yaratıcılığını kontrol etmek için sıcaklık gibi belirli parametrelerle yapılandırılan Ollama modeli tarafından desteklenir. Temsilci ile araç arasında sorunsuz etkileşimi kolaylaştırmak için bir sohbet istemi şablonu kullanılır. Bu şablon, sistem mesajları, insan girişi ve yer tutucular gibi farklı mesaj türlerini tanımlayarak konuşmayı düzenler. Yer tutucular, örneğin , sohbet geçmişi gibi öğelerin dahil edilmesiyle görüşmenin dinamik olmasına izin verin.

Bu örnekte ele alınan temel sorunlardan biri, Langchain aracısının çıktı ayrıştırmasındaki hata yönetimidir. "ToolCallingAgentOutputParser'daki parseResult yalnızca ChatGeneration çıkışında çalışır" hata mesajı, ayrıştırıcı tarafından beklenen çıktı türü ile oluşturulan gerçek çıktı arasındaki uyumsuzluktan kaynaklanmaktadır. Bu hatayı gidermek için özel araç sağlam bir mantığa sarılarak tüm giriş ve çıkışların beklenen formatlara uygun olmasını sağlar. Bu ayrıca şu kişi tarafından yönetilmektedir: Aracının ve araçların yürütülmesini koordine eden, sorgu ve araç çıktısının düzgün şekilde senkronize edildiğinden emin olan sınıf.

Son olarak, komut dosyaları kullanılarak eşzamansız yürütme uygulanır. , sistemin diğer işlemleri engellemeden işlemleri gerçekleştirmesine olanak tanır. Aracı, devam etmeden önce aracın sonucunu döndürmesini bekler ve yanıtın hem doğru hem de zamanında olduğundan emin olur. Ek olarak, aracın işlevselliğini doğrulamak ve tutarlı bir şekilde doğru çıktıyı üretmesini sağlamak için birim testleri dahil edilmiştir. Bu testler yalnızca aracın matematiksel işleyişini doğrulamakla kalmıyor, aynı zamanda geçersiz girişi ne kadar iyi ele aldığını da kontrol ederek çözümün genel güvenilirliğini artırıyor. Bu modüler ve hataya dayanıklı tasarım, komut dosyalarının Langchain.js içindeki çeşitli uygulamalar için yeniden kullanılabilir ve etkili olmasını sağlar.

Langchain.js Hatasını Modüler Yaklaşımla Düzeltme

Çözüm 1: Modüler yaklaşımlı JavaScript ve Langchain.js ve Ollama LLM kullanarak hata yönetimi

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 Aracısı için Gelişmiş Hata İşleme

Çözüm 2: Langchain.js'de özel aracın çıktısını doğrulamak için birim testleriyle hata işleme

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 ve Ollama LLM Entegrasyonunda Aracıların Rolünü Keşfetmek

Langchain.js ile çalışırken entegrasyon Ollama gibi araçlar ve dil modelleri ile dinamik uygulamalar oluşturmanın kritik bir yönüdür. Aracı, belirli görevleri gerçekleştiren özel bir aracı, daha fazla konuşmaya dayalı veya üretken görevleri yerine getiren bir dil modeline bağlamanıza olanak tanır. Geliştiriciler aracıları kullanarak, bir modelin yalnızca yanıtlar üretmekle kalmayıp aynı zamanda hesaplamaları veya veri işlemeyi gerçekleştirmek için araçları çağırdığı iş akışlarını otomatikleştirebilirler.

Bu entegrasyonun temel bileşeni, işlev. Bu işlev, aracının gerektiğinde belirli araçları tetiklemesine olanak tanıyarak görevlerin doğru ve verimli bir şekilde tamamlanmasını sağlar. Ana odak noktası genellikle aracın kendisini oluşturmak olsa da, aracının iş akışının nasıl yönetileceğini ve ayrıştırma hatalarından nasıl kaçınılacağını anlamak da aynı derecede önemlidir. "ToolCallingAgentOutputParser'daki parseResult yalnızca ChatGeneration çıkışında çalışır" gibi hatalar genellikle aracının çıktısı ayrıştırma sistemiyle uyumlu olmadığında ortaya çıkar ve aracının çıktısı ile beklenen format arasında uygun hizalama ihtiyacını vurgular.

Bilgi istemi şablonlarının kullanımı, örneğin , dinamik mesajlara ve bağlam yer tutucularına izin vererek etkileşimi daha da zenginleştirir. Bu, temsilcinin yanıtlarını sohbet geçmişine veya temsilcinin karalama defterine göre ayarlamasına olanak tanır. Bilgi istemi şablonlarını optimize etmek ve aracı çıktılarının doğru şekilde ayrıştırılmasını sağlamak, birçok yaygın hatayı önleyerek Langchain.js uygulamalarınızı daha güvenilir ve verimli hale getirebilir.

  1. Langchain.js'de aracı nedir?
  2. Aracı, bir kullanıcı sorgusuna dayalı olarak belirli görevleri gerçekleştirmek için araçlarla ve dil modelleriyle etkileşime giren bir bileşendir. Şunu kullanır: araçları tetikleme işlevi.
  3. "ToolCallingAgentOutputParser'da parseResult" hatasını nasıl çözersiniz?
  4. Bu hata, aracının çıktısı ayrıştırıcıyla uyumsuz olduğunda ortaya çıkar. Çıktının ayrıştırıcının beklediğiyle eşleştiğinden emin olun ve çıktı formatı.
  5. Amacı nedir? ?
  6. aracının ve araçlarının yürütülmesini yöneterek Langchain.js uygulamalarında karmaşık iş akışlarını çalıştırmanıza olanak tanır.
  7. Nasıl iş?
  8. sohbet mesajlarını yapılandırılmış bir formatta düzenleyerek sohbet geçmişi ve temsilci karalama defteri gibi dinamik içeriğin konuşma akışına eklenmesine olanak tanır.
  9. Neden araçta kullanıldı mı?
  10. giriş doğrulaması için kullanılır ve özel araca yapılan girişin doğru türde (örneğin bir sayı) olmasını sağlar, bu da hata olasılığını azaltır.

"ToolCallingAgentOutputParser'da parseResult yalnızca ChatGeneration çıktısında çalışır" hatasını çözmek, aracınızın çıktısı ile ayrıştırma beklentileri arasında dikkatli bir uyum sağlamayı gerektirir. Doğru yaklaşımla bu hatanın önüne geçilebilir.

Doğrulama için Zod gibi uygun araçları kullanarak ve Ollama ile oluşturulmuş aracılar gibi aracıların giriş ve çıkışları doğru şekilde işlemesini sağlayarak, Langchain.js'de ayrıştırma sorunlarıyla karşılaşmadan sağlam çözümler oluşturabilirsiniz.

  1. Araç oluşturma ve aracı yapılandırmalarına ilişkin bilgiler sağlayan resmi Langchain belgelerini detaylandırır. Langchain Belgeleri İçeri.
  2. Ayrıca giriş doğrulama için Zod'un kullanımını ve Langchain.js'deki uygulamasını açıklamaktadır. Zod Belgeleri İçeri.
  3. Ollama dil modelini ve bunun özel aracılar içindeki uygulamasını açıklar. Ollama Yüksek Lisans İçeri.