ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° WhatsApp GPT Bot Go#
Π‘ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ WhatsApp-Π±ΠΎΡΠ° Ρ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠ΅ΠΉ OpenAI GPT, ΠΏΠΎΡΡΡΠΎΠ΅Π½Π½Π°Ρ Π½Π° Π±Π°Π·Π΅ GREEN-API.
API#
ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΊ REST API Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ ΠΏΠΎ ΡΡΡΠ»ΠΊΠ΅. ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΡΡΡΠΊΠΎΠΉ ΠΊ REST API, ΠΏΠΎΡΡΠΎΠΌΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΏΠΎ ΡΡΡΠ»ΠΊΠ΅ Π²ΡΡΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΠ° ΠΈ ΠΊ ΡΠ°ΠΌΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅.
ΠΠ²ΡΠΎΡΠΈΠ·Π°ΡΠΈΡ#
Π§ΡΠΎΠ±Ρ ΠΎΡΠΏΡΠ°Π²ΠΈΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ GREEN-API, Π°ΠΊΠΊΠ°ΡΠ½Ρ WhatsApp Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΡΠ΅Π»Π΅ΡΠΎΠ½Π° Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ Π² Π°Π²ΡΠΎΡΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ. ΠΠ»Ρ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ ΠΈΠ½ΡΡΠ°Π½ΡΠ° ΠΏΠ΅ΡΠ΅ΠΉΠ΄ΠΈΡΠ΅ Π² Π»ΠΈΡΠ½ΡΠΉ ΠΊΠ°Π±ΠΈΠ½Π΅Ρ ΠΈ ΡΠΊΠ°Π½ΠΈΡΡΠΉΡΠ΅ QR-ΠΊΠΎΠ΄ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ WhatsApp.
ΠΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ#
- ΠΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Ρ ΠΌΠΎΠ΄Π΅Π»ΡΠΌΠΈ OpenAI GPT Π΄Π»Ρ ΠΈΠ½ΡΠ΅Π»Π»Π΅ΠΊΡΡΠ°Π»ΡΠ½ΡΡ ΠΎΡΠ²Π΅ΡΠΎΠ²
- ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ GPT (GPT-3.5, GPT-4, GPT-4o, o1)
- ΠΡΠ»ΡΡΠΈΠΌΠΎΠ΄Π°Π»ΡΠ½ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ
- Π’ΡΠ°Π½ΡΠΊΡΠΈΠΏΡΠΈΡ Π³ΠΎΠ»ΠΎΡΠΎΠ²ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ
- ΠΠΎΠΌΠΏΠ»Π΅ΠΊΡΠ½Π°Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΠΈΠΏΠΎΠ² ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ WhatsApp
- ΠΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΠΎΠ³ΠΎ ΠΠ (middleware) Π΄Π»Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΈ ΠΎΡΠ²Π΅ΡΠΎΠ²
- ΠΡΡΡΠΎΠ΅Π½Π½ΠΎΠ΅ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈΡΡΠΎΡΠΈΠ΅ΠΉ Π΄ΠΈΠ°Π»ΠΎΠ³Π°
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ°#
go get github.com/green-api/whatsapp-chatgpt-go
ΠΡΠΎ ΡΠ°ΠΊΠΆΠ΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ:
github.com/green-api/whatsapp-chatbot-golang
github.com/sashabaranov/go-openai
ΠΡΡΡΡΡΠΉ ΡΡΠ°ΡΡ#
package main
import (
"log"
"os"
"os/signal"
"syscall"
"github.com/green-api/whatsapp-chatgpt-go"
)
func main() {
// ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π±ΠΎΡΠ°
bot := whatsapp_chatgpt_go.NewWhatsappGptBot(whatsapp_chatgpt_go.GPTBotConfig{
IDInstance: "your-instance-id",
APITokenInstance: "your-token",
OpenAIApiKey: "your-openai-api-key",
Model: whatsapp_chatgpt_go.ModelGPT4o,
SystemMessage: "Π’Ρ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ Π°ΡΡΠΈΡΡΠ΅Π½Ρ.",
})
// ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΈΠ³Π½Π°Π»ΠΎΠ² Π΄Π»Ρ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠ³ΠΎ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ
sigChan := make(chan os.Signal, 1)
signal.Notify(sigChan, syscall.SIGINT, syscall.SIGTERM)
// ΠΠ°ΠΏΡΡΠΊ Π±ΠΎΡΠ° Π² Π³ΠΎΡΡΡΠΈΠ½Π΅
go func() {
log.Println("ΠΠ°ΠΏΡΡΠΊ WhatsApp GPT Π±ΠΎΡΠ°...")
bot.StartReceivingNotifications()
}()
// ΠΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ ΡΠΈΠ³Π½Π°Π»Π° Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ
<-sigChan
// ΠΠ°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ°Π±ΠΎΡΡ
log.Println("ΠΠ°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ°Π±ΠΎΡΡ Π±ΠΎΡΠ°...")
bot.StopReceivingNotifications()
log.Println("ΠΠΎΡ ΠΎΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½.")
}
ΠΠ°ΡΠΈΠ°Π½ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ#
ΠΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Π΄Π²Π° ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ Π²Π°ΡΠΈΠ°Π½ΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ Π²Π°ΡΠΈΡ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎΡΡΠ΅ΠΉ:
1. Π‘Π°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΡΠΉ Π±ΠΎΡ#
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π·Π°ΠΏΡΡΡΠΈΡΡ Π±ΠΎΡΠ° ΠΊΠ°ΠΊ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΡΠΉ ΡΠ΅ΡΠ²ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΡΠΎΡΠ»ΡΡΠΈΠ²Π°Π΅Ρ ΠΈ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ WhatsApp:
bot := whatsapp_chatgpt_go.NewWhatsappGptBot(whatsapp_chatgpt_go.GPTBotConfig{
IDInstance: "your-instance-id",
APITokenInstance: "your-token",
OpenAIApiKey: "your-openai-api-key",
Model: whatsapp_chatgpt_go.ModelGPT4o,
SystemMessage: "ΠΡ - ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ Π°ΡΡΠΈΡΡΠ΅Π½Ρ.",
})
// ΠΠ°ΡΠ°ΡΡ ΠΏΡΠΎΡΠ»ΡΡΠΈΠ²Π°Π½ΠΈΠ΅ Π²Π΅Π±Ρ
ΡΠΊΠΎΠ² ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ
bot.StartReceivingNotifications()
2. ΠΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ#
ΠΠ»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΠΎ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π±ΠΎΡΠ° ΠΊΠ°ΠΊ ΡΡΠΈΠ»ΠΈΡΡ Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Π² Π²Π°ΡΠ΅ΠΌ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ:
gptBot := whatsapp_chatgpt_go.NewWhatsappGptBot(whatsapp_chatgpt_go.GPTBotConfig{
IDInstance: "your-instance-id",
APITokenInstance: "your-token",
OpenAIApiKey: "your-openai-api-key",
Model: whatsapp_chatgpt_go.ModelGPT4o,
SystemMessage: "ΠΡ - ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ Π°ΡΡΠΈΡΡΠ΅Π½Ρ.",
})
// ΠΠ΅ Π½ΡΠΆΠ½ΠΎ Π²ΡΠ·ΡΠ²Π°ΡΡ StartReceivingNotifications - ΠΏΡΠΎΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ProcessMessage ΠΊΠΎΠ³Π΄Π° Π½ΡΠΆΠ½ΠΎ
response, updatedSessionData, err := gptBot.ProcessMessage(
ctx,
notification, // Π£Π²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ ΠΈΠ· Π²Π°ΡΠ΅Π³ΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° Π²Π΅Π±Ρ
ΡΠΊΠΎΠ²
sessionData // ΠΠ°ΡΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΡΠ΅ΡΡΠΈΠΈ
)
if err != nil {
// ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΎΡΠΈΠ±ΠΊΠΈ
}
// ΠΠ±ΡΠ°Π±ΠΎΡΠ°ΠΉΡΠ΅ ΠΎΡΠ²Π΅Ρ ΡΠ²ΠΎΠΈΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ
// Π‘ΠΎΡ
ΡΠ°Π½ΠΈΡΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΡΠ΅ΡΡΠΈΠΈ Π² ΡΠ²ΠΎΠ΅ΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΉ
ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ#
ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π±ΠΎΡΠ°#
ΠΠΎΠ»Π½ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π΄Π»Ρ WhatsappGptBot:
type GPTBotConfig struct {
// API-ΠΊΠ»ΡΡ OpenAI
OpenAIApiKey string
// ΠΠΎΠ΄Π΅Π»Ρ Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ (ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ: gpt-4o)
Model OpenAIModel
// ΠΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Π΄Π»Ρ Ρ
ΡΠ°Π½Π΅Π½ΠΈΡ Π² ΠΈΡΡΠΎΡΠΈΠΈ (ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ: 10)
MaxHistoryLength int
// Π‘ΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ Π±ΠΎΡΠ°
SystemMessage string
// Π’Π΅ΠΌΠΏΠ΅ΡΠ°ΡΡΡΠ° Π΄Π»Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΠΎΡΠ²Π΅ΡΠΎΠ² (ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ: 0.5)
Temperature float32
// Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅ Π΄Π»Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΏΡΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌ
ErrorMessage string
// ID ΠΈΠ½ΡΡΠ°Π½ΡΠ° GREEN-API
IDInstance string
// API ΡΠΎΠΊΠ΅Π½ ΠΈΠ½ΡΡΠ°Π½ΡΠ° GREEN-API
APITokenInstance string
// Π‘Π»Π΅Π΄ΡΠ΅Ρ Π»ΠΈ ΠΎΡΠΈΡΠ°ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ Π²Π΅Π±Ρ
ΡΠΊΠΎΠ² ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅
ClearWebhookQueueOnStart bool
}
WhatsappGptBot#
ΠΡΠ½ΠΎΠ²Π½Π°Ρ ΡΡΡΡΠΊΡΡΡΠ° Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π²Π°ΡΠΈΠΌ WhatsApp-Π±ΠΎΡΠΎΠΌ Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ OpenAI:
bot := whatsapp_chatgpt_go.NewWhatsappGptBot(whatsapp_chatgpt_go.GPTBotConfig{
// ΠΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ
IDInstance: "your-instance-id",
APITokenInstance: "your-token",
OpenAIApiKey: "your-openai-api-key",
// ΠΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠ΅ GPT-ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ
Model: whatsapp_chatgpt_go.ModelGPT4o,
MaxHistoryLength: 15,
SystemMessage: "ΠΡ - ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ Π°ΡΡΠΈΡΡΠ΅Π½Ρ, ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΡΡΠΈΠΉΡΡ Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ΅ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ².",
Temperature: 0.7,
ErrorMessage: "ΠΠ·Π²ΠΈΠ½ΠΈΡΠ΅, Ρ Π½Π΅ ΡΠΌΠΎΠ³ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ Π²Π°Ρ Π·Π°ΠΏΡΠΎΡ. ΠΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, ΠΏΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅ ΡΠ½ΠΎΠ²Π°.",
// ΠΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ
ClearWebhookQueueOnStart: true,
})
ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ#
ΠΠΎΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΡΠΈΠΏΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ WhatsApp ΠΈ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅Ρ ΠΈΡ Π² ΡΠΎΡΠΌΠ°Ρ, ΠΏΠΎΠ½ΡΡΠ½ΡΠΉ ΠΌΠΎΠ΄Π΅Π»ΡΠΌ OpenAI.
ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΠ΅ ΡΠΈΠΏΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ#
- Π’Π΅ΠΊΡΡ
- ΠΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ
- ΠΡΠ΄ΠΈΠΎ
- ΠΠΈΠ΄Π΅ΠΎ
- ΠΠΎΠΊΡΠΌΠ΅Π½ΡΡ
- ΠΠΏΡΠΎΡΡ
- ΠΠ΅ΠΎΠ»ΠΎΠΊΠ°ΡΠΈΡ
- ΠΠΎΠ½ΡΠ°ΠΊΡΡ
Π Π΅Π΅ΡΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ#
ΠΠΎΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΠ΅Π΅ΡΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΠΈΠΏΠΎΠ² ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ:
// Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ
type CustomMessageHandler struct{}
func (h *CustomMessageHandler) CanHandle(notification *whatsapp_chatbot_golang.Notification) bool {
// ΠΠΎΠ³ΠΈΠΊΠ° Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ, ΠΌΠΎΠΆΠ΅Ρ Π»ΠΈ ΡΡΠΎΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅
return true
}
func (h *CustomMessageHandler) ProcessMessage(
notification *whatsapp_chatbot_golang.Notification,
client *openai.Client,
model whatsapp_chatgpt_go.OpenAIModel,
) (interface{}, error) {
// ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ
return "ΠΠ±ΡΠ°Π±ΠΎΡΠ°Π½Π½ΡΠΉ ΠΊΠΎΠ½ΡΠ΅Π½Ρ", nil
}
// Π Π΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°
bot.RegisterMessageHandler(&CustomMessageHandler{})
Π‘ΠΈΡΡΠ΅ΠΌΠ° ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΠΎΠ³ΠΎ ΠΠ (Middleware)#
Π‘ΠΈΡΡΠ΅ΠΌΠ° ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΠΎΠ³ΠΎ ΠΠ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΏΠ΅ΡΠ΅Π΄ ΠΎΡΠΏΡΠ°Π²ΠΊΠΎΠΉ Π² GPT ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ ΠΎΡΠ²Π΅ΡΠΎΠ² ΠΏΠ΅ΡΠ΅Π΄ ΠΎΡΠΏΡΠ°Π²ΠΊΠΎΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ.
ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΠΎΠ³ΠΎ ΠΠ Π΄Π»Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ#
// ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΏΠ΅ΡΠ΅Π΄ ΠΎΡΠΏΡΠ°Π²ΠΊΠΎΠΉ Π² GPT
bot.AddMessageMiddleware(func(
notification *whatsapp_chatbot_golang.Notification,
messageContent interface{},
messages []openai.ChatCompletionMessage,
sessionData *whatsapp_chatgpt_go.GPTSessionData,
) (interface{}, []openai.ChatCompletionMessage, error) {
// ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ
sender, _ := notification.Sender()
log.Printf("ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΡ %s: %v", sender, messageContent)
return messageContent, messages, nil
})
ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΠΎΠ³ΠΎ ΠΠ Π΄Π»Ρ ΠΎΡΠ²Π΅ΡΠΎΠ²#
// ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΎΡΠ²Π΅ΡΠΎΠ² GPT ΠΏΠ΅ΡΠ΅Π΄ ΠΎΡΠΏΡΠ°Π²ΠΊΠΎΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ
bot.AddResponseMiddleware(func(
response string,
messages []openai.ChatCompletionMessage,
sessionData *whatsapp_chatgpt_go.GPTSessionData,
) (string, []openai.ChatCompletionMessage, error) {
// Π€ΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΎΡΠ²Π΅ΡΠ°
formattedResponse := response + "\n\n_Π Π°Π±ΠΎΡΠ°Π΅Ρ Π½Π° GREEN-API_"
return formattedResponse, messages, nil
})
ΠΠ°Π½Π½ΡΠ΅ ΡΠ΅ΡΡΠΈΠΈ#
GPT-Π±ΠΎΡ ΡΠ°ΡΡΠΈΡΡΠ΅Ρ Π±Π°Π·ΠΎΠ²ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΡΠ΅ΡΡΠΈΠΈ:
type GPTSessionData struct {
// Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Π² ΡΠ°Π·Π³ΠΎΠ²ΠΎΡΠ΅
Messages []openai.ChatCompletionMessage `json:"messages"`
// ΠΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΠΌΠ΅ΡΠΊΠ° ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ
LastActivity int64 `json:"lastActivity"`
// ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ Π΄Π°Π½Π½ΡΠ΅
UserData map[string]interface{} `json:"userData,omitempty"`
// ΠΠΎΠ½ΡΠ΅ΠΊΡΡ Π΄Π»Ρ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΡΠ°Π·Π³ΠΎΠ²ΠΎΡΠ°
Context map[string]interface{} `json:"context,omitempty"`
}
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΡΠΈ Π΄Π°Π½Π½ΡΠ΅ Π² Π²Π°ΡΠ΅ΠΌ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΠΎΠΌ ΠΠ ΠΈΠ»ΠΈ ΡΠ΅ΡΠ΅Π· Π΄ΠΎΡΡΡΠΏΠ½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ.
ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ OpenAI#
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ OpenAI:
ΠΠΎΠ΄Π΅Π»ΠΈ GPT-4#
- ModelGPT4 ("gpt-4")
- ModelGPT4Turbo ("gpt-4-turbo")
- ModelGPT4TurboPreview ("gpt-4-turbo-preview")
- ModelGPT41106Preview ("gpt-4-1106-preview")
- ModelGPT40125Preview ("gpt-4-0125-preview")
- ModelGPT432k ("gpt-4-32k")
ΠΠΎΠ΄Π΅Π»ΠΈ GPT-4o#
- ModelGPT4o ("gpt-4o") - ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ
- ModelGPT4oMini ("gpt-4o-mini")
ΠΠΎΠ΄Π΅Π»ΠΈ GPT-3.5#
- ModelGPT35Turbo ("gpt-3.5-turbo")
- ModelGPT35Turbo16k ("gpt-3.5-turbo-16k")
- ModelGPT35Turbo1106 ("gpt-3.5-turbo-1106")
- ModelGPT35Turbo0125 ("gpt-3.5-turbo-0125")
ΠΠΎΠ΄Π΅Π»ΠΈ o1#
- ModelO1 ("o1")
- ModelO1Mini ("o1-mini")
- ModelO1Preview ("o1-preview")
ΠΠΎΠ΄Π΅Π»ΠΈ Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ#
Π‘Π»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΌΠΎΠ³ΡΡ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ:
- ModelGPT4o ("gpt-4o")
- ModelGPT4oMini ("gpt-4o-mini")
- ModelGPT4Turbo ("gpt-4-turbo")
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Π»ΠΈ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ:
if whatsapp_chatgpt_go.SupportsImages(bot.GetModel()) {
// ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠ°Π±ΠΎΡΠ΅Π³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ° Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ
}
ΠΠΎΠ»Π½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ Π±ΠΎΡΠ° Ρ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΡΠΌ ΠΠ#
package main
import (
"fmt"
"log"
"os"
"os/signal"
"syscall"
"github.com/green-api/whatsapp-chatbot-golang"
"github.com/green-api/whatsapp-chatgpt-go"
"github.com/joho/godotenv"
"github.com/sashabaranov/go-openai"
)
func truncateString(s string, length int) string {
if len(s) > length {
return s[:length] + "..."
}
return s
}
func main() {
err := godotenv.Load()
if err != nil {
log.Println("ΠΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅: ΠΡΠΈΠ±ΠΊΠ° Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΡΠ°ΠΉΠ»Π° .env:", err)
}
idInstance := os.Getenv("GREEN_API_ID_INSTANCE")
apiTokenInstance := os.Getenv("GREEN_API_TOKEN_INSTANCE")
openaiToken := os.Getenv("OPENAI_API_KEY")
if idInstance == "" || apiTokenInstance == "" || openaiToken == "" {
log.Fatalf("ΠΡΡΡΡΡΡΠ²ΡΡΡ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ: GREEN_API_ID_INSTANCE, GREEN_API_TOKEN_INSTANCE, OPENAI_API_KEY")
}
config := whatsapp_chatgpt_go.GPTBotConfig{
IDInstance: idInstance,
APITokenInstance: apiTokenInstance,
OpenAIApiKey: openaiToken,
Model: whatsapp_chatgpt_go.ModelGPT4o,
MaxHistoryLength: 10,
SystemMessage: "Π’Ρ Π°ΡΡΠΈΡΡΠ΅Π½Ρ, ΠΎΡΠ²Π΅ΡΠ°ΡΡΠΈΠΉ ΡΠ΅ΡΠ΅Π· WhatsApp.",
Temperature: 0.7,
ErrorMessage: "ΠΠ·Π²ΠΈΠ½ΠΈΡΠ΅, Ρ ΡΡΠΎΠ»ΠΊΠ½ΡΠ»ΡΡ Ρ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ ΠΏΡΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ΅ Π²Π°ΡΠ΅Π³ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ.",
ClearWebhookQueueOnStart: true,
}
bot := whatsapp_chatgpt_go.NewWhatsappGptBot(config)
// ΠΡΠΈΠΌΠ΅Ρ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΠΎΠ³ΠΎ ΠΠ: ΠΠΎΠ³ΠΈΡΡΠ΅Ρ Π΄Π΅ΡΠ°Π»ΠΈ ΠΎ Π²Ρ
ΠΎΠ΄ΡΡΠΈΡ
ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡΡ
.
bot.AddMessageMiddleware(func(notification *whatsapp_chatbot_golang.Notification,
messageContent interface{},
messages []openai.ChatCompletionMessage,
sessionData *whatsapp_chatgpt_go.GPTSessionData) (interface{}, []openai.ChatCompletionMessage, error) {
sender, _ := notification.Sender()
var contentLog string
if parts, ok := messageContent.([]openai.ChatMessagePart); ok {
contentLog = "Π§Π°ΡΡΠΈ ΠΌΡΠ»ΡΡΠΈΠΊΠΎΠ½ΡΠ΅Π½ΡΠ°: ["
for i, p := range parts {
if i > 0 {
contentLog += ", "
}
contentLog += fmt.Sprintf("{Π’ΠΈΠΏ: %s, ", p.Type)
if p.Type == openai.ChatMessagePartTypeText {
contentLog += fmt.Sprintf("Π’Π΅ΠΊΡΡ: '%s'", p.Text)
} else if p.Type == openai.ChatMessagePartTypeImageURL && p.ImageURL != nil {
urlStr := p.ImageURL.URL
if len(urlStr) > 50 {
urlStr = urlStr[:47] + "..."
}
contentLog += fmt.Sprintf("URL ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ: %s", urlStr)
} else {
contentLog += "ΠΡΡΠ³ΠΈΠ΅ Π΄Π°Π½Π½ΡΠ΅"
}
contentLog += "}"
}
contentLog += "]"
} else {
contentLog = fmt.Sprintf("Π’Π΅ΠΊΡΡΠΎΠ²ΡΠΉ ΠΊΠΎΠ½ΡΠ΅Π½Ρ: '%s'", truncateString(fmt.Sprintf("%v", messageContent), 100))
}
log.Printf("--> MID: ΠΠΎΠ»ΡΡΠ΅Π½ΠΎ ΠΎΡ %s: %s", sender, contentLog)
log.Printf("--> MID: ΠΡΡΠΎΡΠΈΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ %d ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΏΠ΅ΡΠ΅Π΄ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ.", len(messages))
return messageContent, messages, nil
})
// ΠΡΠΈΠΌΠ΅Ρ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΠΎΠ³ΠΎ ΠΠ: ΠΠΎΠ³ΠΈΡΡΠ΅Ρ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΡΠΉ ΠΎΡΠ²Π΅Ρ.
bot.AddResponseMiddleware(func(response string,
messages []openai.ChatCompletionMessage,
sessionData *whatsapp_chatgpt_go.GPTSessionData) (string, []openai.ChatCompletionMessage, error) {
log.Printf("<-- MID: ΠΡΠΏΡΠ°Π²ΠΊΠ° ΠΎΡΠ²Π΅ΡΠ°: %s", truncateString(response, 100))
log.Printf("<-- MID: ΠΡΡΠΎΡΠΈΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ %d ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΏΠΎΡΠ»Π΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ ΠΎΡΠ²Π΅ΡΠ° Π°ΡΡΠΈΡΡΠ΅Π½ΡΠ°.", len(messages))
return response, messages, nil
})
sigChan := make(chan os.Signal, 1)
signal.Notify(sigChan, syscall.SIGINT, syscall.SIGTERM)
go func() {
log.Println("ΠΠ°ΠΏΡΡΠΊ WhatsApp GPT Π±ΠΎΡΠ°...")
bot.StartReceivingNotifications()
log.Println("Π¦ΠΈΠΊΠ» ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ ΠΎΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½.")
}()
<-sigChan
log.Println("ΠΠ°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ°Π±ΠΎΡΡ Π±ΠΎΡΠ°...")
bot.StopReceivingNotifications()
log.Println("ΠΠΎΡ ΠΎΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½.")
}
ΠΠΎΡΡΡΠΏΠ½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ#
WhatsappGptBot#
NewWhatsappGptBot(config GPTBotConfig) *WhatsappGptBot
- Π‘ΠΎΠ·Π΄Π°Π΅Ρ Π½ΠΎΠ²ΡΠΉ WhatsApp-Π±ΠΎΡ Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ GPTStartReceivingNotifications()
- ΠΠ°ΡΠΈΠ½Π°Π΅Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ webhook-ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉStopReceivingNotifications()
- ΠΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΡΠ»ΡΡΠ°ΡΠ΅Π»Ρ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉProcessMessage(ctx context.Context, notification *whatsapp_chatbot_golang.Notification, sessionData *GPTSessionData) (string, *GPTSessionData, error)
- ΠΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π±Π΅Π· ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π²Π½ΡΡΡΠ΅Π½Π½Π΅Π³ΠΎ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅ΡΠ° ΡΠΎΡΡΠΎΡΠ½ΠΈΠΉ Π±ΠΎΡΠ°AddMessageMiddleware(middleware ProcessMessageMiddleware)
- Π Π΅Π³ΠΈΡΡΡΠΈΡΡΠ΅Ρ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΠΎΠ΅ ΠΠ Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π²Ρ ΠΎΠ΄ΡΡΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉAddResponseMiddleware(middleware ProcessResponseMiddleware)
- Π Π΅Π³ΠΈΡΡΡΠΈΡΡΠ΅Ρ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΠΎΠ΅ ΠΠ Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΎΡΠ²Π΅ΡΠΎΠ² GPTRegisterMessageHandler(handler MessageHandler)
- ΠΠΎΠ±Π°Π²Π»ΡΠ΅Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉGetOpenAI() *openai.Client
- ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° OpenAIGetModel() OpenAIModel
- ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π½Π°ΡΡΡΠΎΠ΅Π½Π½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ OpenAIGetSystemMessage() string
- ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π½Π°ΡΡΡΠΎΠ΅Π½Π½ΠΎΠ΅ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅SupportsImages() bool
- ΠΡΠΎΠ²Π΅ΡΡΠ΅Ρ, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Π»ΠΈ ΡΠ΅ΠΊΡΡΠ°Ρ Π½Π°ΡΡΡΠΎΠ΅Π½Π½Π°Ρ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉMethods()
- ΠΠΎΡΡΡΠΏ ΠΊ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌ Π±Π°Π·ΠΎΠ²ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π΄Π»Ρ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΈ Ρ.Π΄.
ΠΠΈΡΠ΅Π½Π·ΠΈΡ#
ΠΠΈΡΠ΅Π½Π·ΠΈΡΠΎΠ²Π°Π½ΠΎ Π½Π° ΡΡΠ»ΠΎΠ²ΠΈΡΡ MIT.