Maison >développement back-end >Golang >Écrire des outils pour les LLM avec go - mcp-golang

Écrire des outils pour les LLM avec go - mcp-golang

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-23 20:48:11192parcourir

Write tools for LLMs with go - mcp-golang

Nous venons d'ouvrir mcp-golang !

Il y a quelques semaines, Anthropic a publié Model Context Protocol - un protocole permettant aux LLM d'utiliser des outils et d'interagir avec le monde.

Les SDK de base écrits par Anthropic étaient pour Typescript et Python, donc si vous vouliez utiliser go, vous n'aviez pas de chance.

Avec mcp-golang, vous pouvez désormais écrire des serveurs d'outils en seulement quelques lignes de code.

Le serveur ci-dessous permet à un LLM de comprendre la météo de n'importe quel endroit.

package main

import (
    "fmt"
    mcp_golang "github.com/metoro-io/mcp-golang"
    "github.com/metoro-io/mcp-golang/transport/stdio"
    "io"
    "net/http"
)

type WeatherArguments struct {
    Longitude float64 `json:"longitude" jsonschema:"required,description=The longitude of the location to get the weather for"`
    Latitude  float64 `json:"latitude" jsonschema:"required,description=The latitude of the location to get the weather for"`
}

// This is explained in the docs at https://mcpgolang.com/tools
func main() {
    done := make(chan struct{})
    server := mcp_golang.NewServer(stdio.NewStdioServerTransport())
    err := server.RegisterTool("get_weather", "Get the weather forecast for temperature, wind speed and relative humidity", func(arguments WeatherArguments) (*mcp_golang.ToolResponse, error) {
        url := fmt.Sprintf("https://api.open-meteo.com/v1/forecast?latitude=%f&longitude=%f&current=temperature_2m,wind_speed_10m&hourly=temperature_2m,relative_humidity_2m,wind_speed_10m", arguments.Latitude, arguments.Longitude)
        resp, err := http.Get(url)
        if err != nil {
            return nil, err
        }
        defer resp.Body.Close()
        output, err := io.ReadAll(resp.Body)
        if err != nil {
            return nil, err
        }
        return mcp_golang.NewToolReponse(mcp_golang.NewTextContent(string(output))), nil
    })
    err = server.Serve()
    if err != nil {
        panic(err)
    }
    <-done
}

Découvrez une démo sur https://youtu.be/kffLqCgvvdE !

Bon codage !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn