Building Node

Install Git

Primero, instala Git y clona el repositorio de Flowise. Puedes seguir los pasos de la guía Get Started.

Structure

Flowise separa cada integración de node bajo la carpeta packages/components/nodes. ¡Vamos a crear una simple Tool!

Create Calculator Tool

Crea una nueva carpeta llamada Calculator bajo la carpeta packages/components/nodes/tools. Luego crea un nuevo archivo llamado Calculator.ts. Dentro del archivo, primero escribiremos la clase base.

import { INode } from '../../../src/Interface'
import { getBaseClasses } from '../../../src/utils'

class Calculator_Tools implements INode {
    label: string
    name: string
    version: number
    description: string
    type: string
    icon: string
    category: string
    author: string
    baseClasses: string[]

    constructor() {
        this.label = 'Calculator'
        this.name = 'calculator'
        this.version = 1.0
        this.type = 'Calculator'
        this.icon = 'calculator.svg'
        this.category = 'Tools'
        this.author = 'Your Name'
        this.description = 'Perform calculations on response'
        this.baseClasses = [this.type, ...getBaseClasses(Calculator)]
    }
}

module.exports = { nodeClass: Calculator_Tools }

Cada node implementará la clase base INode. Desglose de lo que significa cada propiedad:

Property
Description

label

El nombre del node que aparece en la UI

name

El nombre que es usado por el código. Debe estar en camelCase

version

Versión del node

type

Usualmente igual que label. Para definir qué node puede conectarse a este tipo específico en la UI

icon

Icono del node

category

Categoría del node

author

Creador del node

description

Descripción del node

baseClasses

Las clases base del node, ya que un node puede extender de un componente base. Usado para definir qué node puede conectarse a este node en la UI

Define Class

Ahora que la clase del componente está parcialmente terminada, podemos proceder a definir la clase actual Tool, en este caso - Calculator.

Crea un nuevo archivo bajo la misma carpeta Calculator, y nómbralo como core.ts

import { Parser } from "expr-eval"
import { Tool } from "@langchain/core/tools"

export class Calculator extends Tool {
    name = "calculator"
    description = `Useful for getting the result of a math expression. The input to this tool should be a valid mathematical expression that could be executed by a simple calculator.`
 
    async _call(input: string) {
        try {
            return Parser.evaluate(input).toString()
        } catch (error) {
            return "I don't know how to do that."
        }
    }
}

Finishing

Vuelve al archivo Calculator.ts, podemos terminarlo teniendo la función async init. En esta función, inicializaremos la clase Calculator que creamos arriba. Cuando el flujo se está ejecutando, la función init en cada node será llamada, y la función _call será ejecutada cuando el LLM decida llamar a esta tool.

import { INode } from '../../../src/Interface'
import { getBaseClasses } from '../../../src/utils'
import { Calculator } from './core'

class Calculator_Tools implements INode {
    label: string
    name: string
    version: number
    description: string
    type: string
    icon: string
    category: string
    author: string
    baseClasses: string[]

    constructor() {
        this.label = 'Calculator'
        this.name = 'calculator'
        this.version = 1.0
        this.type = 'Calculator'
        this.icon = 'calculator.svg'
        this.category = 'Tools'
        this.author = 'Your Name'
        this.description = 'Perform calculations on response'
        this.baseClasses = [this.type, ...getBaseClasses(Calculator)]
    }
    
 
    async init() {
        return new Calculator()
    }
}

module.exports = { nodeClass: Calculator_Tools }

Build and Run

En el archivo .env dentro de packages/server, crea una nueva variable de entorno:

SHOW_COMMUNITY_NODES=true

¡Ahora podemos usar pnpm build y pnpm start para dar vida al componente!

Last updated