Guides Pratiques

Guides pratiques pour résoudre des problèmes spécifiques avec gomcptest

Les guides pratiques sont des recettes orientées problème qui vous guident à travers les étapes impliquées dans la résolution de problèmes clés et de cas d’utilisation. Ils sont pragmatiques et orientés vers des objectifs.

Ces guides vous aideront à résoudre des tâches spécifiques et à personnaliser gomcptest pour vos besoins.

1 - How to Create a Custom MCP Tool

Build your own Model Context Protocol (MCP) compatible tools

This guide shows you how to create a new custom tool that’s compatible with the Model Context Protocol (MCP) in gomcptest.

Prerequisites

  • A working installation of gomcptest
  • Go programming knowledge
  • Understanding of the MCP protocol basics

Steps to create a custom tool

1. Create the tool directory structure

mkdir -p tools/YourToolName/cmd

2. Create the README.md file

Create a README.md in the tool directory with documentation:

touch tools/YourToolName/README.md

Include the following sections:

  • Tool description
  • Parameters
  • Usage notes
  • Example

3. Create the main.go file

Create a main.go file in the cmd directory:

touch tools/YourToolName/cmd/main.go

4. Implement the tool functionality

Here’s a template to start with:

package main

import (
	"encoding/json"
	"fmt"
	"log"
	"os"

	"github.com/mark3labs/mcp-go"
)

// Define your tool's parameters structure
type Params struct {
	// Add your parameters here
	// Example:
	InputParam string `json:"input_param"`
}

func main() {
	server := mcp.NewServer()

	// Register your tool function
	server.RegisterFunction("YourToolName", func(params json.RawMessage) (any, error) {
		var p Params
		if err := json.Unmarshal(params, &p); err != nil {
			return nil, fmt.Errorf("failed to parse parameters: %w", err)
		}

		// Implement your tool's logic here
		result := doSomethingWithParams(p)

		return result, nil
	})

	if err := server.Run(os.Stdin, os.Stdout); err != nil {
		log.Fatalf("Server error: %v", err)
	}
}

func doSomethingWithParams(p Params) interface{} {
	// Your tool's core functionality
	// ...
	
	// Return the result
	return map[string]interface{}{
		"result": "Your processed result",
	}
}

5. Add the tool to the Makefile

Open the Makefile in the root directory and add your tool:

YourToolName:
	go build -o bin/YourToolName tools/YourToolName/cmd/main.go

Also add it to the all target.

6. Build your tool

make YourToolName

7. Test your tool

Test the tool directly:

echo '{"name":"YourToolName","params":{"input_param":"test"}}' | ./bin/YourToolName

8. Use with the CLI

Add your tool to the CLI command:

./bin/cliGCP -mcpservers "./GlobTool;./GrepTool;./LS;./View;./YourToolName;./dispatch_agent;./Bash;./Replace"

Tips for effective tool development

  • Focus on a single, well-defined purpose
  • Provide clear error messages
  • Include meaningful response formatting
  • Implement proper parameter validation
  • Handle edge cases gracefully
  • Consider adding unit tests in a _test.go file

2 - How to Configure the OpenAI-Compatible Server

Customize the OpenAI-compatible server for different use cases

This guide shows you how to configure and customize the OpenAI-compatible server in gomcptest for different use cases.

Prerequisites

  • A working installation of gomcptest
  • Basic familiarity with the OpenAI server from the tutorial
  • Understanding of environment variables and configuration

Environment Variables Configuration

Basic Server Configuration

The OpenAI server can be configured using the following environment variables:

# Server port (default: 8080)
export PORT=8080

# Log level: DEBUG, INFO, WARN, ERROR (default: INFO)
export LOG_LEVEL=INFO

# Directory to store images (required)
export IMAGE_DIR=/path/to/image/directory

GCP Configuration

Configure the Google Cloud Platform integration:

# GCP Project ID (required)
export GCP_PROJECT=your-gcp-project-id

# GCP Region (default: us-central1)
export GCP_REGION=us-central1

# Comma-separated list of Gemini models (default: gemini-1.5-pro,gemini-2.0-flash)
export GEMINI_MODELS=gemini-1.5-pro,gemini-2.0-flash

# Comma-separated list of Imagen models (optional)
export IMAGEN_MODELS=imagen-3.0-generate-002

Setting Up a Production Environment

For a production environment, create a proper systemd service file:

sudo nano /etc/systemd/system/gomcptest-openai.service

Add the following content:

[Unit]
Description=gomcptest OpenAI Server
After=network.target

[Service]
User=yourusername
WorkingDirectory=/path/to/gomcptest/host/openaiserver
ExecStart=/path/to/gomcptest/host/openaiserver/openaiserver -mcpservers "/path/to/gomcptest/bin/GlobTool;/path/to/gomcptest/bin/GrepTool;/path/to/gomcptest/bin/LS;/path/to/gomcptest/bin/View;/path/to/gomcptest/bin/Bash;/path/to/gomcptest/bin/Replace"
Environment=PORT=8080
Environment=LOG_LEVEL=INFO
Environment=IMAGE_DIR=/path/to/image/directory
Environment=GCP_PROJECT=your-gcp-project-id
Environment=GCP_REGION=us-central1
Environment=GEMINI_MODELS=gemini-1.5-pro,gemini-2.0-flash
Restart=on-failure

[Install]
WantedBy=multi-user.target

Then enable and start the service:

sudo systemctl enable gomcptest-openai
sudo systemctl start gomcptest-openai

Configuring MCP Tools

Adding Custom Tools

To add custom MCP tools to the server, include them in the -mcpservers parameter when starting the server:

go run . -mcpservers "../bin/GlobTool;../bin/GrepTool;../bin/LS;../bin/View;../bin/YourCustomTool;../bin/Bash;../bin/Replace"

Tool Parameters and Arguments

Some tools require additional parameters. You can specify these after the tool path:

go run . -mcpservers "../bin/GlobTool;../bin/dispatch_agent -glob-path ../bin/GlobTool -grep-path ../bin/GrepTool -ls-path ../bin/LS -view-path ../bin/View"

API Usage Configuration

Enabling CORS

For web applications, you may need to enable CORS. Add a middleware to the main.go file:

package main

import (
    "net/http"
    // other imports
)

// CORS middleware
func corsMiddleware(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        w.Header().Set("Access-Control-Allow-Origin", "*")
        w.Header().Set("Access-Control-Allow-Methods", "GET, POST, OPTIONS")
        w.Header().Set("Access-Control-Allow-Headers", "Content-Type, Authorization")
        
        if r.Method == "OPTIONS" {
            w.WriteHeader(http.StatusOK)
            return
        }
        
        next.ServeHTTP(w, r)
    })
}

func main() {
    // existing code...
    
    http.Handle("/", corsMiddleware(openAIHandler))
    
    // existing code...
}

Setting Rate Limits

Add a simple rate limiting middleware:

package main

import (
    "net/http"
    "sync"
    "time"
    // other imports
)

type RateLimiter struct {
    requests     map[string][]time.Time
    maxRequests  int
    timeWindow   time.Duration
    mu           sync.Mutex
}

func NewRateLimiter(maxRequests int, timeWindow time.Duration) *RateLimiter {
    return &RateLimiter{
        requests:    make(map[string][]time.Time),
        maxRequests: maxRequests,
        timeWindow:  timeWindow,
    }
}

func (rl *RateLimiter) Middleware(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        ip := r.RemoteAddr
        
        rl.mu.Lock()
        
        // Clean up old requests
        now := time.Now()
        if reqs, exists := rl.requests[ip]; exists {
            var validReqs []time.Time
            for _, req := range reqs {
                if now.Sub(req) <= rl.timeWindow {
                    validReqs = append(validReqs, req)
                }
            }
            rl.requests[ip] = validReqs
        }
        
        // Check if rate limit is exceeded
        if len(rl.requests[ip]) >= rl.maxRequests {
            rl.mu.Unlock()
            http.Error(w, "Rate limit exceeded", http.StatusTooManyRequests)
            return
        }
        
        // Add current request
        rl.requests[ip] = append(rl.requests[ip], now)
        rl.mu.Unlock()
        
        next.ServeHTTP(w, r)
    })
}

func main() {
    // existing code...
    
    rateLimiter := NewRateLimiter(10, time.Minute) // 10 requests per minute
    http.Handle("/", rateLimiter.Middleware(corsMiddleware(openAIHandler)))
    
    // existing code...
}

Performance Tuning

Adjusting Memory Usage

For high-load scenarios, adjust Go’s garbage collector:

export GOGC=100  # Default is 100, lower values lead to more frequent GC

Increasing Concurrency

If handling many concurrent requests, adjust the server’s concurrency limits:

package main

import (
    "net/http"
    // other imports
)

func main() {
    // existing code...
    
    server := &http.Server{
        Addr:         ":" + strconv.Itoa(cfg.Port),
        Handler:      openAIHandler,
        ReadTimeout:  30 * time.Second,
        WriteTimeout: 120 * time.Second,
        IdleTimeout:  120 * time.Second,
        MaxHeaderBytes: 1 << 20,
    }
    
    err = server.ListenAndServe()
    
    // existing code...
}

Troubleshooting Common Issues

Debugging Connection Problems

If you’re experiencing connection issues, set the log level to DEBUG:

export LOG_LEVEL=DEBUG

Common Error Messages

  • Failed to create MCP client: Ensure the tool path is correct and the tool is executable
  • Failed to load GCP config: Check your GCP environment variables
  • Error in LLM request: Verify your GCP credentials and project access

Checking Tool Registration

To verify tools are registered correctly, look for log messages like:

INFO server0 Registering command=../bin/GlobTool
INFO server1 Registering command=../bin/GrepTool

3 - Comment Configurer l'Interface en Ligne de Commande cliGCP

Personnaliser l’outil cliGCP avec des variables d’environnement et des options de ligne de commande

Ce guide vous montre comment configurer et personnaliser l’interface en ligne de commande cliGCP pour divers cas d’utilisation.

Prérequis

  • Une installation fonctionnelle de gomcptest
  • Une familiarité de base avec l’outil cliGCP à partir du tutoriel
  • Compréhension des variables d’environnement et de la configuration

Arguments de Ligne de Commande

L’outil cliGCP accepte les arguments de ligne de commande suivants :

# Spécifier les serveurs MCP à utiliser (requis)
-mcpservers "outil1;outil2;outil3"

# Exemple avec des arguments d'outil
./cliGCP -mcpservers "./GlobTool;./GrepTool;./dispatch_agent -glob-path ./GlobTool -grep-path ./GrepTool -ls-path ./LS -view-path ./View;./Bash"

Configuration des Variables d’Environnement

Configuration GCP

Configurez l’intégration avec Google Cloud Platform avec ces variables d’environnement :

# ID du projet GCP (requis)
export GCP_PROJECT=votre-id-de-projet-gcp

# Région GCP (par défaut : us-central1)
export GCP_REGION=us-central1

# Liste de modèles Gemini séparés par des virgules (requis)
export GEMINI_MODELS=gemini-1.5-pro,gemini-2.0-flash

# Répertoire pour stocker les images (requis pour la génération d'images)
export IMAGE_DIR=/chemin/vers/repertoire/images

Configuration Avancée

Vous pouvez personnaliser le comportement de l’outil cliGCP avec ces variables d’environnement supplémentaires :

# Définir une instruction système personnalisée pour le modèle
export SYSTEM_INSTRUCTION="Vous êtes un assistant utile spécialisé dans la programmation Go."

# Ajuster la température du modèle (0.0-1.0, la valeur par défaut est 0.2)
# Les valeurs plus basses rendent la sortie plus déterministe, les valeurs plus élevées plus créatives
export MODEL_TEMPERATURE=0.3

# Définir une limite maximale de tokens pour les réponses
export MAX_OUTPUT_TOKENS=2048

Création d’Alias Shell

Pour simplifier l’utilisation, créez des alias shell dans votre .bashrc ou .zshrc :

# Ajouter à ~/.bashrc ou ~/.zshrc
alias gpt='cd /chemin/vers/gomcptest/bin && ./cliGCP -mcpservers "./GlobTool;./GrepTool;./LS;./View;./Bash;./Replace"'

# Créer des alias spécialisés pour différentes tâches
alias assistant-code='cd /chemin/vers/gomcptest/bin && GCP_PROJECT=votre-projet GEMINI_MODELS=gemini-2.0-flash ./cliGCP -mcpservers "./GlobTool;./GrepTool;./LS;./View;./Bash;./Replace"'

alias scanner-securite='cd /chemin/vers/gomcptest/bin && SYSTEM_INSTRUCTION="Vous êtes un expert en sécurité concentré sur la recherche de vulnérabilités dans le code" ./cliGCP -mcpservers "./GlobTool;./GrepTool;./LS;./View;./Bash"'

Personnalisation de l’Instruction Système

Pour modifier l’instruction système par défaut, éditez le fichier agent.go :

// Dans host/cliGCP/cmd/agent.go
genaimodels[model].SystemInstruction = &genai.Content{
    Role: "user",
    Parts: []genai.Part{
        genai.Text("Vous êtes un agent utile avec accès à des outils. " +
            "Votre travail est d'aider l'utilisateur en effectuant des tâches à l'aide de ces outils. " +
            "Vous ne devez pas inventer d'informations. " +
            "Si vous ne savez pas quelque chose, dites-le et expliquez ce que vous auriez besoin de savoir pour aider. " +
            "Si aucune indication, utilisez le répertoire de travail actuel qui est " + cwd),
    },
}

Création de Configurations Spécifiques aux Tâches

Pour différents cas d’utilisation, vous pouvez créer des scripts de configuration spécialisés :

Assistant de Revue de Code

Créez un fichier appelé reviseur-code.sh :

#!/bin/bash

export GCP_PROJECT=votre-id-de-projet-gcp
export GCP_REGION=us-central1
export GEMINI_MODELS=gemini-2.0-flash
export IMAGE_DIR=/tmp/images
export SYSTEM_INSTRUCTION="Vous êtes un expert en revue de code. Analysez le code pour détecter les bugs, les problèmes de sécurité et les domaines à améliorer. Concentrez-vous sur la fourniture de commentaires constructifs et d'explications détaillées."

cd /chemin/vers/gomcptest/bin
./cliGCP -mcpservers "./GlobTool;./GrepTool;./LS;./View;./Bash"

Rendez-le exécutable :

chmod +x reviseur-code.sh

Générateur de Documentation

Créez un fichier appelé generateur-doc.sh :

#!/bin/bash

export GCP_PROJECT=votre-id-de-projet-gcp
export GCP_REGION=us-central1
export GEMINI_MODELS=gemini-2.0-flash
export IMAGE_DIR=/tmp/images
export SYSTEM_INSTRUCTION="Vous êtes un spécialiste de la documentation. Votre tâche est d'aider à créer une documentation claire et complète pour le code. Analysez la structure du code et créez une documentation appropriée en suivant les meilleures pratiques."

cd /chemin/vers/gomcptest/bin
./cliGCP -mcpservers "./GlobTool;./GrepTool;./LS;./View;./Bash;./Replace"

Configurations Avancées d’Outils

Configuration de dispatch_agent

Lorsque vous utilisez l’outil dispatch_agent, vous pouvez configurer son comportement avec des arguments supplémentaires :

./cliGCP -mcpservers "./GlobTool;./GrepTool;./LS;./View;./dispatch_agent -glob-path ./GlobTool -grep-path ./GrepTool -ls-path ./LS -view-path ./View -timeout 30s;./Bash;./Replace"

Création de Combinaisons d’Outils

Vous pouvez créer des combinaisons d’outils spécialisées pour différentes tâches :

# Ensemble d'outils pour le développement web
./cliGCP -mcpservers "./GlobTool -include '*.{html,css,js}';./GrepTool;./LS;./View;./Bash;./Replace"

# Ensemble d'outils pour le développement Go
./cliGCP -mcpservers "./GlobTool -include '*.go';./GrepTool;./LS;./View;./Bash;./Replace"

Résolution des Problèmes Courants

Problèmes de Connexion au Modèle

Si vous rencontrez des difficultés pour vous connecter au modèle Gemini :

  1. Vérifiez vos identifiants GCP :
gcloud auth application-default print-access-token
  1. Vérifiez que l’API Vertex AI est activée :
gcloud services list --enabled | grep aiplatform
  1. Vérifiez que votre projet a accès aux modèles que vous demandez

Échecs d’Exécution d’Outils

Si les outils échouent à s’exécuter :

  1. Assurez-vous que les chemins des outils sont corrects
  2. Vérifiez que les outils sont exécutables
  3. Vérifiez les problèmes de permission dans les répertoires auxquels vous accédez

Optimisation des Performances

Pour de meilleures performances :

  1. Utilisez des modèles d’outils plus spécifiques pour réduire la portée de la recherche
  2. Envisagez de créer des agents spécialisés pour différentes tâches
  3. Définissez une température plus basse pour des réponses plus déterministes

4 - Comment Utiliser le Serveur OpenAI avec big-AGI

Configurer le serveur compatible OpenAI de gomcptest comme backend pour big-AGI

Ce guide vous montre comment configurer le serveur compatible OpenAI de gomcptest pour fonctionner avec big-AGI, un client web open-source populaire pour les assistants IA.

Prérequis

  • Une installation fonctionnelle de gomcptest
  • Le serveur compatible OpenAI en cours d’exécution (voir le tutoriel du serveur OpenAI)
  • Node.js (version 18.17.0 ou plus récente)
  • Git

Pourquoi Utiliser big-AGI avec gomcptest ?

big-AGI fournit une interface web soignée et riche en fonctionnalités pour interagir avec des modèles d’IA. En le connectant au serveur compatible OpenAI de gomcptest, vous obtenez :

  • Une interface web professionnelle pour vos interactions avec l’IA
  • Support pour les outils/appels de fonction
  • Gestion de l’historique des conversations
  • Gestion des personas
  • Capacités de génération d’images
  • Support pour plusieurs utilisateurs

Configuration de big-AGI

  1. Cloner le dépôt big-AGI :

    git clone https://github.com/enricoros/big-agi.git
    cd big-agi
    
  2. Installer les dépendances :

    npm install
    
  3. Créer un fichier .env.local pour la configuration :

    cp .env.example .env.local
    
  4. Éditer le fichier .env.local pour configurer la connexion à votre serveur gomcptest :

    # Configuration big-AGI
    
    # URL de votre serveur compatible OpenAI gomcptest
    OPENAI_API_HOST=http://localhost:8080
    
    # Il peut s'agir de n'importe quelle chaîne car le serveur gomcptest n'utilise pas de clés API
    OPENAI_API_KEY=gomcptest-local-server
    
    # Définissez cette valeur sur true pour activer le fournisseur personnalisé
    OPENAI_API_ENABLE_CUSTOM_PROVIDER=true
    
  5. Démarrer big-AGI :

    npm run dev
    
  6. Ouvrez votre navigateur et accédez à http://localhost:3000 pour accéder à l’interface big-AGI.

Configuration de big-AGI pour Utiliser Vos Modèles

Le serveur compatible OpenAI de gomcptest expose les modèles Google Cloud via une API compatible OpenAI. Dans big-AGI, vous devrez configurer les modèles :

  1. Ouvrez big-AGI dans votre navigateur
  2. Cliquez sur l’icône Paramètres (engrenage) en haut à droite
  3. Allez dans l’onglet Modèles
  4. Sous “Modèles OpenAI” :
    • Cliquez sur “Ajouter des modèles”
    • Ajoutez vos modèles par ID (par exemple, gemini-1.5-pro, gemini-2.0-flash)
    • Définissez la longueur de contexte de manière appropriée (8K-32K selon le modèle)
    • Définissez la capacité d’appel de fonction sur true pour les modèles qui la prennent en charge

Activation de l’Appel de Fonction avec des Outils

Pour utiliser les outils MCP via l’interface d’appel de fonction de big-AGI :

  1. Dans big-AGI, cliquez sur l’icône Paramètres
  2. Allez dans l’onglet Avancé
  3. Activez “Appel de fonction” dans la section “Fonctionnalités expérimentales”
  4. Dans une nouvelle conversation, cliquez sur l’onglet “Fonctions” (icône de plugin) dans l’interface de chat
  5. Les outils disponibles de votre serveur gomcptest devraient être listés

Configuration CORS pour big-AGI

Si vous exécutez big-AGI sur un domaine ou un port différent de celui de votre serveur gomcptest, vous devrez activer CORS côté serveur. Modifiez la configuration du serveur OpenAI :

  1. Créez ou modifiez un middleware CORS pour le serveur OpenAI :

    // Middleware CORS avec autorisation d'origine spécifique
    func corsMiddleware(next http.Handler) http.Handler {
        return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
            // Autoriser les requêtes provenant de l'origine big-AGI
            w.Header().Set("Access-Control-Allow-Origin", "http://localhost:3000")
            w.Header().Set("Access-Control-Allow-Methods", "GET, POST, OPTIONS")
            w.Header().Set("Access-Control-Allow-Headers", "Content-Type, Authorization")
    
            if r.Method == "OPTIONS" {
                w.WriteHeader(http.StatusOK)
                return
            }
    
            next.ServeHTTP(w, r)
        })
    }
    
  2. Appliquez ce middleware à vos routes de serveur

Résolution des Problèmes Courants

Modèle Non Trouvé

Si big-AGI signale que les modèles ne peuvent pas être trouvés :

  1. Vérifiez que votre serveur gomcptest est en cours d’exécution et accessible
  2. Vérifiez les journaux du serveur pour vous assurer que les modèles sont correctement enregistrés
  3. Assurez-vous que les ID de modèle dans big-AGI correspondent exactement à ceux fournis par votre serveur gomcptest

L’Appel de Fonction Ne Fonctionne Pas

Si les outils ne fonctionnent pas correctement :

  1. Assurez-vous que les outils sont correctement enregistrés dans votre serveur gomcptest
  2. Vérifiez que l’appel de fonction est activé dans les paramètres de big-AGI
  3. Vérifiez que le modèle que vous utilisez prend en charge l’appel de fonction

Problèmes de Connexion

Si big-AGI ne peut pas se connecter à votre serveur :

  1. Vérifiez la valeur OPENAI_API_HOST dans votre fichier .env.local
  2. Recherchez des problèmes CORS dans la console de développement de votre navigateur
  3. Assurez-vous que votre serveur est en cours d’exécution et accessible depuis le navigateur

Déploiement en Production

Pour une utilisation en production, considérez :

  1. Sécurisation de votre API :

    • Ajoutez une authentification appropriée à votre serveur OpenAI gomcptest
    • Mettez à jour la OPENAI_API_KEY dans big-AGI en conséquence
  2. Déploiement de big-AGI :

  3. Mise en place de HTTPS :

    • Pour la production, big-AGI et votre serveur gomcptest devraient utiliser HTTPS
    • Envisagez d’utiliser un proxy inverse comme Nginx avec des certificats Let’s Encrypt

Exemple : Interface de Chat Basique

Une fois que tout est configuré, vous pouvez utiliser l’interface de big-AGI pour interagir avec vos modèles d’IA :

  1. Commencez une nouvelle conversation
  2. Sélectionnez votre modèle dans le menu déroulant des modèles (par exemple, gemini-1.5-pro)
  3. Activez l’appel de fonction si vous souhaitez utiliser des outils
  4. Commencez à discuter avec votre assistant IA, propulsé par gomcptest

L’interface big-AGI offre une expérience beaucoup plus riche qu’une interface en ligne de commande, avec des fonctionnalités comme l’historique des conversations, le rendu markdown, la mise en évidence du code, et plus encore.