Ollama LLM 및 사용자 정의 도구를 사용하여 Langchain.js의 ToolCallingAgentOutputParser 오류 수정

Temp mail SuperHeros
Ollama LLM 및 사용자 정의 도구를 사용하여 Langchain.js의 ToolCallingAgentOutputParser 오류 수정
Ollama LLM 및 사용자 정의 도구를 사용하여 Langchain.js의 ToolCallingAgentOutputParser 오류 수정

Langchain.js의 ToolCallingAgentOutputParser 오류 이해 및 수정

Langchain.js v2로 작업할 때 개발자는 Ollama와 같은 사용자 정의 도구 및 언어 모델을 사용하여 효율적인 에이전트를 만드는 것을 목표로 하는 경우가 많습니다. 그러나 이러한 구성 요소를 통합하면 디버깅하기 어려운 오류가 발생할 수 있습니다.

그러한 오류 중 하나는 에이전트 프레임워크 내에서 사용자 정의 도구를 구축할 때 발생할 수 있는 "ToolCallingAgentOutputParser의 parseResult가 ChatGeneration 출력에서만 작동합니다"입니다. 에이전트와 도구가 올바르게 작동하려면 이 문제의 근본 원인을 이해하는 것이 중요합니다.

이 기사에서는 Langchain의 createToolCallingAgent 및 Ollama 모델을 사용하여 숫자 입력에 2를 추가하는 사용자 정의 도구의 간단한 구현을 살펴봅니다. 오류와 그 맥락을 분석함으로써 문제 해결 방법을 더 잘 파악할 수 있습니다.

다음 섹션에서는 코드를 안내하고, 오류를 설명하고, 이 문제를 해결하기 위한 솔루션을 제공합니다. Langchain.js를 처음 사용하든 경험이 많든 이 가이드는 이 문제를 효율적으로 극복하는 데 도움이 될 것입니다.

명령 사용예
tool() Langchain.js의 이 함수는 작업을 수행하는 사용자 정의 도구를 정의합니다. 이 기사에서는 쉽게 호출할 수 있는 구조로 논리를 래핑하여 입력 숫자에 2를 추가하는 도구를 만드는 데 사용됩니다.
z.object() Langchain의 스키마 유효성 검사에 사용되는 Zod 라이브러리의 일부입니다. 이를 통해 사용자 정의 도구에 대한 입력이 숫자인지 확인하고 실행 중 오류를 방지하기 위한 강력한 입력 유효성 검사를 제공합니다.
createToolCallingAgent() 이 명령은 사용자 쿼리에 응답하여 정의된 도구를 호출할 수 있는 에이전트를 생성합니다. Ollama와 같은 언어 모델과 도구를 통합하여 대화 중에 도구를 호출할 수 있도록 하는 것이 핵심입니다.
ChatPromptTemplate.fromMessages() 자리 표시자가 있는 채팅 프롬프트 템플릿을 생성하는 데 사용됩니다. 이 템플릿은 상담원이 사용할 다양한 유형의 메시지(시스템, 사람, 자리 표시자)를 구성하여 대화 흐름을 개선합니다.
MessagesPlaceholder 채팅 기록이나 상담원 스크래치 패드와 같은 동적 콘텐츠에 대한 프롬프트 템플릿에서 자리 표시자 역할을 합니다. 이를 통해 실행 중에 대화 컨텍스트를 동적으로 주입할 수 있습니다.
AgentExecutor() 이 클래스는 에이전트 및 도구의 실행을 관리합니다. 이 예에서는 에이전트를 통해 쿼리를 실행하고 도구 출력에서 ​​결과를 수집하는 데 도움이 됩니다.
await agentExecutor.invoke() 에이전트를 통해 쿼리를 실행하고 결과를 비동기적으로 기다리는 데 사용됩니다. 이는 코드가 작업이 완료될 때까지 기다린 후 계속 진행하므로 언어 ​​모델 및 도구와 상호 작용하는 데 중요합니다.
try-catch 이 오류 처리 구조는 잘못된 입력 유형을 포착하기 위해 사용자 정의 도구 내에서 사용됩니다. 예외를 포착함으로써 시스템이 실행 흐름을 중단하지 않고 유용한 오류 메시지를 반환하도록 보장합니다.
expect() Chai 어설션 라이브러리에서는 사용자 정의 도구의 출력을 확인하기 위해 단위 테스트에서 Expect()가 사용됩니다. 도구가 예상대로 작동하는지 테스트하는 데 필수적입니다.

Langchain.js의 사용자 정의 도구 및 에이전트 오류 처리 이해

제공된 예에서 우리는 Langchain.js v2를 사용하여 다음과 통합되는 사용자 정의 도구를 만들고 있습니다. 올라마 언어 모델. 이 도구의 주요 목적은 입력 값에 2를 더하는 간단한 수학 연산을 수행하는 것입니다. 이 도구는 Langchain을 사용하여 구축되었습니다. 도구 에이전트가 호출할 수 있는 재사용 가능한 함수를 정의하는 함수입니다. 도구가 올바르게 작동하는지 확인하기 위해 입력 스키마는 Zod 라이브러리로 검증되어 입력이 유효한 숫자인지 보장합니다. 이렇게 하면 적절한 오류 처리가 보장되고 잘못된 입력으로 인해 도구가 실패하는 것을 방지할 수 있습니다.

그런 다음 사용자 정의 도구는 다음을 사용하여 에이전트에 통합됩니다. createToolCallingAgent 기능. 이 명령을 사용하면 에이전트는 필요할 때 도구를 호출할 수 있으며, 에이전트는 반응의 창의성을 제어하기 위해 온도와 같은 특정 매개변수로 구성된 Ollama 모델에 의해 구동됩니다. 에이전트와 도구 간의 원활한 상호 작용을 촉진하기 위해 채팅 프롬프트 템플릿이 사용됩니다. 이 템플릿은 시스템 메시지, 사람의 입력, 자리 표시자와 같은 다양한 유형의 메시지를 정의하여 대화를 구성합니다. 다음과 같은 자리 표시자는 메시지 자리 표시자, 채팅 기록과 같은 요소를 포함하여 대화를 동적으로 만들 수 있습니다.

이 예에서 다루는 주요 문제 중 하나는 Langchain 에이전트의 출력 구문 분석과 관련된 오류 처리입니다. "ToolCallingAgentOutputParser의 parseResult는 ChatGeneration 출력에서만 작동합니다"라는 오류 메시지는 파서에서 예상하는 출력 유형과 생성된 실제 출력 간의 불일치로 인해 발생합니다. 이 오류를 처리하기 위해 사용자 정의 도구는 강력한 논리로 래핑되어 모든 입력 및 출력이 예상 형식을 준수하는지 확인합니다. 이는 다음에 의해 추가로 관리됩니다. AgentExecutor 에이전트와 도구의 실행을 조정하여 쿼리와 도구 출력이 적절하게 동기화되도록 하는 클래스입니다.

마지막으로 스크립트는 다음을 사용하여 비동기 실행을 구현합니다. 기다리다, 시스템이 다른 프로세스를 차단하지 않고 작업을 처리할 수 있도록 합니다. 에이전트는 계속 진행하기 전에 도구가 결과를 반환할 때까지 기다려 응답이 정확하고 시기적절하도록 합니다. 또한 도구의 기능을 검증하기 위한 단위 테스트가 포함되어 있어 도구가 일관되게 올바른 출력을 생성하는지 확인합니다. 이러한 테스트는 도구의 수학적 연산을 확인할 뿐만 아니라 잘못된 입력을 얼마나 잘 처리하는지 확인하여 솔루션의 전반적인 안정성을 향상시킵니다. 이 모듈식 및 오류 방지 설계는 스크립트를 Langchain.js 내의 다양한 애플리케이션에 재사용 가능하고 효과적으로 만듭니다.

모듈식 접근 방식으로 Langchain.js 오류 수정

솔루션 1: Langchain.js 및 Ollama LLM을 사용하여 모듈식 접근 방식과 오류 처리 기능을 갖춘 JavaScript

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 에이전트에 대한 향상된 오류 처리

해결 방법 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 및 Ollama LLM 통합에서 에이전트의 역할 탐색

Langchain.js로 작업할 때 통합 자치령 대표 Ollama와 같은 도구 및 언어 모델을 사용하는 것은 동적 애플리케이션을 구축하는 데 있어 중요한 측면입니다. 에이전트를 사용하면 특정 작업을 수행하는 사용자 정의 도구를 더 많은 대화 또는 생성 작업을 처리하는 언어 모델에 연결할 수 있습니다. 개발자는 에이전트를 사용하여 모델이 응답을 생성할 뿐만 아니라 계산이나 데이터 처리를 수행하는 도구를 호출하는 워크플로를 자동화할 수 있습니다.

이 통합의 핵심 구성요소는 createToolCallingAgent 기능. 이 기능을 사용하면 에이전트가 필요할 때 특정 도구를 트리거하여 작업이 정확하고 효율적으로 완료되도록 할 수 있습니다. 주로 도구 자체를 만드는 데 중점을 두는 경우가 많지만 에이전트의 워크플로를 관리하고 구문 분석 오류를 방지하는 방법을 이해하는 것도 마찬가지로 중요합니다. "ToolCallingAgentOutputParser의 parseResult는 ChatGeneration 출력에서만 작동합니다."와 같은 오류는 일반적으로 에이전트의 출력이 구문 분석 시스템과 호환되지 않을 때 발생하며, 이는 에이전트의 출력과 예상 형식 간의 적절한 정렬의 필요성을 강조합니다.

다음과 같은 프롬프트 템플릿을 사용합니다. 채팅 프롬프트 템플릿, 동적 메시지 및 컨텍스트 자리 표시자를 허용하여 상호 작용을 더욱 풍부하게 합니다. 이를 통해 상담원은 채팅 기록이나 상담원의 스크래치 패드를 기반으로 응답을 조정할 수 있습니다. 프롬프트 템플릿을 최적화하고 에이전트의 출력이 올바르게 구문 분석되도록 하면 많은 일반적인 오류를 방지하여 Langchain.js 애플리케이션을 더욱 안정적이고 효율적으로 만들 수 있습니다.

Langchain.js, 에이전트 및 도구에 대해 자주 묻는 질문

  1. Langchain.js의 에이전트란 ​​무엇입니까?
  2. 에이전트는 도구 및 언어 모델과 상호 작용하여 사용자 쿼리를 기반으로 특정 작업을 수행하는 구성 요소입니다. 그것은 createToolCallingAgent 도구를 트리거하는 기능입니다.
  3. "ToolCallingAgentOutputParser의 parseResult" 오류를 어떻게 해결합니까?
  4. 이 오류는 에이전트의 출력이 구문 분석기와 호환되지 않을 때 발생합니다. 출력이 파서가 예상하는 것과 일치하는지 확인하고 ChatGeneration 출력 형식.
  5. 의 목적은 무엇입니까? AgentExecutor?
  6. 그만큼 AgentExecutor 에이전트와 해당 도구의 실행을 관리하므로 Langchain.js 애플리케이션에서 복잡한 워크플로를 실행할 수 있습니다.
  7. 어떻게 ChatPromptTemplate 일하다?
  8. ChatPromptTemplate 채팅 메시지를 구조화된 형식으로 구성하여 채팅 기록, 상담원 스크래치패드 등의 동적 콘텐츠를 대화 흐름에 삽입할 수 있습니다.
  9. 왜? Zod 도구에 사용됩니까?
  10. Zod 입력 검증에 사용되어 사용자 정의 도구에 대한 입력이 올바른 유형(예: 숫자)인지 확인하여 오류 가능성을 줄입니다.

Langchain.js의 오류 처리에 대한 최종 생각

"ToolCallingAgentOutputParser의 parseResult는 ChatGeneration 출력에서만 작동합니다." 오류를 해결하려면 에이전트 출력과 구문 분석 기대치 간의 신중한 정렬이 필요합니다. 올바른 접근 방식을 사용하면 이 오류를 피할 수 있습니다.

검증을 위해 Zod와 같은 적절한 도구를 사용하고 Ollama로 구축된 에이전트와 같은 에이전트가 입력 및 출력을 올바르게 처리하는지 확인함으로써 구문 분석 문제가 발생하지 않고 Langchain.js에서 강력한 솔루션을 만들 수 있습니다.

Langchain.js 오류 해결을 위한 소스 및 참조
  1. 도구 생성 및 에이전트 구성에 대한 통찰력을 제공하는 공식 Langchain 문서에 대해 자세히 설명합니다. 랭체인 문서 내부에.
  2. 입력 검증을 위한 Zod의 사용과 Langchain.js에서의 적용에 대해 더 자세히 설명합니다. 조드 문서 내부에.
  3. Ollama 언어 모델과 사용자 정의 에이전트 내 구현에 대해 설명합니다. 올라마 LLM 내부에.