Version en un clic de grands modèles adaptés à Gensokyo et Onebotv11
Accès simple au robot pour débutant : connectez simplement le robot à 6 plates-formes principales, dont QQ
Intermédiaire - tutoriel d'amarrage d'une API : gestion visuelle d'une API grand modèle
Exemple de configuration d'API de modèle intermédiaire-grand - grand modèle domestique
Exemple de configuration d'API de modèle intermédiaire-grand - Chapitre international
Prêt à l'emploi - déploiement rapide sur Telegram
Commencez : déployez rapidement sur Discord
Prêt à l'emploi - déploiement rapide dans Kook
Simple-SillyTavern-Hunyuan
Pouf poire Simple-SillyTavern
Prend en charge tous les frameworks standard Onebotv11. Prend en charge http-api et reverse ws, prend en charge le streaming, plusieurs fichiers de configuration (plusieurs mots d'invite).
Taille ultra petite, contexte de maintenance SQLite intégré, prend en charge le proxy,
L'amarrage en un clic au framework Gensokyo nécessite uniquement la configuration de l'adresse http inverse pour recevoir des informations et de l'adresse http de transfert pour appeler l'API d'envoi.
Maintenez automatiquement le contexte basé sur la base de données SQLite. En mode conversation, utilisez la commande reset pour réinitialiser.
Le système, la carte de rôle et la longueur du contexte peuvent être définis,
Dans le même temps, l'API de saveur originale openai avec contexte automatique est fournie au monde extérieur (3 paramètres classiques, identifiant, identifiant parent, message)
Il peut être exécuté en tant qu'API et peut également être connecté à la plate-forme ouverte du robot QQ Channel Robot QQ en un seul clic.
Peut convertir le type sse de gpt, incrémenter ou envoyer uniquement un nouveau sse
La sécurité de la mémoire SSE dans un environnement simultané prend en charge le maintien d'une transmission SSE bidirectionnelle simultanée pour plusieurs utilisateurs.
Tencent Hunyuan
Tencent Yuanqi
Baidu Wenxin
Ali Tongyi
Spectre de sagesse Tsinghua
Byte Volcano (pouf)
OpenAI
groQ
Coureur Rwkv
Une API
Convertissez les API de ces plates-formes en une structure d'API unifiée, fournissez du contexte et prenez en charge le retour SSE
En définissant le jeton de la plate-forme correspondante dans yml et en définissant AllApi=true, les appels de commutation peuvent être effectués en même temps.
Plateforme ouverte Gensokyo framework-QQ
Gensokyo Framework-Discord
Gensokyo Framework-Kook
Gensokyo framework-Compte d'abonnement WeChatcompte public
Gensokyo Framework-Télégramme
Toutes les implémentations Onebotv11
Plusieurs mesures de sécurité complètes pour assurer autant que possible la sécurité des développeurs et des applications LLM.
Plusieurs cycles d'assurance qualité simulée peuvent être définis pour renforcer les mots d'invite de rôle, réinitialiser les réponses, les réponses de mots sécurisés et les mesures de sécurité de premier niveau peuvent être personnalisées.
Prend en charge plusieurs interconnexions gsk-llm pour former des applications ai-agent, telles qu'un llm triant les mots d'invite pour un autre llm, l'audit des mots d'invite et des mesures de sécurité secondaires
La liste de mots vectoriels sécurisés, la liste de mots d'interception sensible basée sur la similarité vectorielle, est effectuée avant le remplacement du texte, la troisième mesure de sécurité
La règle de remplacement de texte IN-Out ultra-efficace mise en œuvre par l'algorithme AhoCorasick peut remplacer un grand nombre de n mots-clés par leurs nouveaux mots-clés correspondants. Le quatrième niveau de mesures de sécurité.
Les résultats peuvent à nouveau être transmis via Baidu-Tencent, interface de révision de texte, cinquième couche de mesures de sécurité
Le journal est entièrement enregistré et le paramètre de ligne de commande -test peut exécuter rapidement le script d'auto-test de sécurité à partir de test.txt.
La ligne de commande -mlog effectuera le formatage du contrôle qualité sur tous les journaux actuellement stockés, les examinera quotidiennement, extraira de nouvelles règles de sécurité à partir de scénarios réels et augmentera continuellement la sécurité. Le sixième niveau de mesures de sécurité.
Le filtrage linguistique permet à LLM d'accepter uniquement la langue spécifiée, de convertir automatiquement le chinois traditionnel en chinois simplifié, d'appliquer des règles de sécurité et de défendre dans ses propres domaines d'expertise le septième niveau de mesures de sécurité.
Limite de longueur des mots d'invite, contrôle la sécurité de la manière la plus originale, empêche les utilisateurs malveillants de construire de longs mots d'invite, le huitième niveau de mesures de sécurité
Grâce à ces méthodes, créez un robot conversationnel llm aussi sûr que possible.
Remplacement double couche du texte IN-OUT, vous pouvez réaliser vous-même le remplacement dynamique et la modification des mots d'invite internes, ce qui est plus sûr et plus puissant.
Basée sur la structure de table de données vectorielles conçue par SQLite, la mise en cache peut être utilisée pour économiser de l'argent et personnaliser le taux de réussite et la précision du cache.
Une application de scénarios spécialisée optimisée pour les scénarios à haute efficacité, hautes performances et à QPS élevé. Elle ne comporte aucune fonction ni instruction redondante et est entièrement conçue autour des humains numériques.
Exécutez le programme exécutable gensokyo-llm en utilisant la ligne de commande
Configurez config.yml pour démarrer, puis écoutez le port port pour fournir l'API /conversation
Prend en charge le développement de middleware. Entre la couche de framework gensokyo et la requête http de gensokyo-llm, un middleware peut être développé pour implémenter l'expansion vectorielle, l'expansion de la base de données et la modification dynamique des problèmes des utilisateurs.
Prise en charge de la connexion ws inversée et prise en charge de la connexion simultanée à plusieurs http-api onebotv11
Ce document fournit des instructions sur la méthode d'appel de l'interface API et le format du fichier de configuration pour aider les utilisateurs à l'utiliser et à le configurer correctement.
conversation
et gensokyo
de ce système prennent en charge la spécification de configurations spécifiques via le paramètre de requête ?prompt=xxx
.
Le paramètre prompt
permet à l'utilisateur de spécifier le fichier de configuration YAML situé dans le dossier prompts
du fichier exécutable (exe). Utilisez ce paramètre pour ajuster dynamiquement le comportement de l'API et renvoyer le contenu.
Le dossier d'invites doit avoir un clavier.yml par défaut pour générer des bulles. Ses mots d'invite système doivent suivre les règles d'invite du générateur de bulles JSON.
Les fichiers de configuration doivent suivre le format YAML suivant. Un exemple de fichier de configuration est fourni ici et montre comment définir le contenu du dialogue pour différents rôles :
Prompt :
- role : " system "
content : " Welcome to the system. How can I assist you today? "
- role : " user "
content : " I need help with my account. "
- role : " assistant "
content : " I can help you with that. What seems to be the problem? "
- role : " user "
content : " aaaaaaaaaa! "
- role : " assistant "
content : " ooooooooo? "
settings :
# 以下是通用配置项 和config.yml相同
useSse : true
port : 46233
/gensokyo
Le système prend en charge des paramètres prompt
et des paramètres api
supplémentaires lors des requêtes adressées au point de terminaison /gensokyo
. Les paramètres api
permettent de spécifier des points de terminaison complets tels que /conversation_ernie
. Pour activer cette fonctionnalité, vous devez activer l'option allapi
dans la configuration.
Exemple de demande :
GET /gensokyo?prompt=example&api=conversation_ernie
Liste des points de terminaison pris en charge : (Configuration requise : allApi : true)
http . HandleFunc ( "/conversation_gpt" , app . ChatHandlerChatgpt )
http . HandleFunc ( "/conversation_hunyuan" , app . ChatHandlerHunyuan )
http . HandleFunc ( "/conversation_ernie" , app . ChatHandlerErnie )
http . HandleFunc ( "/conversation_rwkv" , app . ChatHandlerRwkv )
http . HandleFunc ( "/conversation_tyqw" , app . ChatHandlerTyqw )
http . HandleFunc ( "/conversation_glm" , app . ChatHandlerGlm )
/conversation
Semblable à /gensokyo
, le point de terminaison /conversation
prend en charge des paramètres prompt
supplémentaires.
Exemple de demande :
GET /conversation?prompt=example
prompt
des paramètres Le paramètre prompt
fourni fera référence au fichier YAML correspondant dans le dossier /prompts
du répertoire exécutable (par exemple, xxxx.yml
, où xxxx
est la valeur du paramètre prompt
).
En écrivant un grand nombre de fichiers YML avec des invites, vous pouvez changer de carte de personnage. Avec le même personnage, vous pouvez changer de scénario et de scènes différentes.
Pour le format de configuration du fichier YAML, veuillez vous référer à la section Format du fichier de configuration YAML . Les éléments de configuration répertoriés ci-dessous prennent en charge le remplacement dynamique dans les requêtes :
Chaque paramètre implémente la couverture de configuration
S'il y a des omissions et que la couverture de configuration doit être prise en charge, veuillez soumettre un problème.
Toutes les valeurs booléennes doivent être spécifiées dans le yml couvert par le fichier de configuration, sinon elles seront considérées comme fausses.
Le remplacement de la configuration dynamique est une fonctionnalité que j'ai conçue moi-même. Grâce à cette fonctionnalité, vous pouvez obtenir une récursion entre les fichiers de configuration. Par exemple, vous pouvez passer prompt=a dans votre middleware, spécifier que Lotus s'appelle dans a.yml et spécifier le suivant. paramètre d'invite dans l'adresse lotus comme b, b spécifie c, c spécifie d, et ainsi de suite.
Ce projet implémente un flux de contrôle de mots rapides et une méthode de construction de contexte contrôlable. Sur la base des multiples fichiers de configuration implémentés dans ce projet, des sauts et des commutateurs conditionnels entre les fichiers de configuration peuvent être réalisés.
Il permet aux utilisateurs de circuler parmi plusieurs ensembles de mots d'invite selon certaines conditions, dans l'ordre et éventuellement, et réalise des jeux d'amour textuels, des jeux d'aventure, des scénarios multibranches non continus et d'autres travaux en continu.
- [x] promptMarks :
- BranchName : "去逛街路上"
Keywords : ["坐车", "走路", "触发"]
- BranchName : "在家准备"
Keywords : ["等一下", "慢慢", "准备"]
- [x] enhancedQA : true
- [x] promptChoicesQ :
- Round : 1
ReplaceText : "回家吧"
Keywords : ["我累了", "不想去了"]
- Round : 2
ReplaceText : "我们打车去"
Keywords : ["快点去", "想去", "早点"]
- Round : 3
ReplaceText : "我们走着去"
Keywords : ["不着急", "等下"]
- Round : 1
ReplaceText : "放松一下"
Keywords : [] # 相当于 enhancedChoices = false
- [x] promptChoicesA : 同上。
- [x] promptCoverQ : 只有Q没有A,格式同上,Choices是附加,cover是覆盖。
- [x] promptCoverA : # 同上
- [x] switchOnQ :
- round : 1
switch : ["故事退出分支", "下一个分支"]
keywords : ["不想", "累了", "想", "不累"]
- [x] switchOnA :
- round : 1
switch : ["晚上分支"]
keywords : ["时间不早了"]
- [x] exitOnQ :
- round : 1
keywords : ["退出", "忘了吧", "重置", "无聊"]
- [x] exitOnA :
- round : 1
keywords : ["退出", "我是一个AI", "我是一个人工", "我是一个基于"]
- [x] envType : 0 # 0=不使用场景描述, 1=在本轮llm回复前发送场景描述, 2=在本轮llm回复后发送场景描述, 场景描述支持[image:xxx][pic:xxx][图片:xxx][背景:xxx]标签, xxx为相对或绝对路径, 需在exe运行目录下
- [x] envPics : [] # 现阶段ai速度太慢,人工指定,数组代表多个,每个数组成员以1: 2: 开始代表对应第几轮.
- [x] envContents : [] # 如果要跳过某个轮次,直接指定文字是2: 图片也是2: 代表本轮文图是空的.
- [x] promptChanceQ :
- probability : 50
text : "让我们休息一下"
- probability : 30
text : "继续前进"
- probability : 70
text : "停下来看看周围"
- probability : 10
text : "尝试一些新东西"
Les paramètres ci-dessus se trouvent tous dans la section des paramètres du fichier multi-configuration. Vous pouvez déterminer la longueur des mots d'invite pour chaque scène et la longueur de chaque inviteMarksLength de scène pour contrôler la granularité du tracé.
Méthode de déclenchement du mode histoire 1, contrôle du middleware, appelant le port /gensokyo par lui-même et attachant différents paramètres d'invite, et coupant manuellement
Définissez l'adresse API http du framework du robot ob11 dans gsk-llm. L'application du plug-in ob11 n'est pas responsable de l'envoi des messages. Elle effectue uniquement des jugements conditionnels basés sur le contenu du message. En tant que middleware de contrôle, elle donne aux développeurs la liberté de le faire. contrôler les conditions eux-mêmes.
La deuxième méthode de déclenchement du mode histoire consiste à changer automatiquement de branche en fonction de mots-clés en configurant switchOnQ et switchOnA dans le fichier de configuration par défaut config.yml.
Combiné avec la capacité du fichier de configuration dans les paramètres d'invite à faire avancer l'histoire, un scénario d'IA de base axé sur les mots d'invite peut être réalisé. De plus, il est également nécessaire de concevoir un -keyboard.yml correspondant pour chaque prompt.yml. générer des bulles.
Les mots-clés de promptMarks sont [], ce qui signifie que vous appuyez sur promptMarksLength pour changer de fichier de mots d'invite. promptMarksLength représente la longueur du contexte conservée par ce fichier de mots d'invite.
Lorsque promptMarksLength est inférieur à 0, les branches suivantes seront lues à partir de promptMarks et commutées de manière aléatoire. Lorsque promptMarkType=1,
1=Déclenché en fonction de conditions, également déclenché lorsque promptMarksLength est atteint.
Pour plus de détails sur la configuration, voir process control-promptmarks.md
Cette branche sera déclenchée lorsque l'utilisateur et le modèle prononceront la marque (vous devez écrire vous-même le mot d'invite afin que llm puisse le prononcer selon les conditions.)
Vous pouvez utiliser les mots d'invite du système et l'assurance qualité du fragment d'histoire actuel pour guider l'IA afin qu'elle produise les mots de commutation convenus avec vous, réalisant ainsi la conception de plusieurs mots déclencheurs pour chaque branche cible, permettant au grand modèle de décider du développement. direction de l’histoire à elle seule.
Lorsque EnhancedQA est faux, le QA prédéfini dans le fichier de configuration sera ajouté en haut du QA utilisateur, existant dans la mémoire de llm (sans affecter la direction globale du dialogue), formant un faible impact
Lorsque le QA amélioré est vrai, j'ai essayé de déplacer la position du QA prédéfini dans le fichier de configuration de haut en bas vers le début de la conversation en cours de l'utilisateur, mais l'effet n'était pas idéal,
Actuellement, il sera mélangé et intégré à l'assurance qualité historique de l'utilisateur actuel pour guider la saisie de l'utilisateur dans une certaine mesure, influençant ainsi la direction du processus d'histoire.
Le paramètre « Configuration Control Flow » est introduit, qui est une méthode moins flexible que ai-agent, mais qui offre une contrôlabilité de tracé plus élevée, une vitesse de génération inférieure et un coût inférieur.
promptChoicesQ et promptChoicesA Documentation : Contrôle de processus-promptchoicesQ Contrôle de processus-promptCoverQ Contrôle de processus-promptChanceQ
switchOnQ signifie changer de branche actuelle lorsque le texte correspondant est trouvé dans Q. Il en va de même pour switchOnA et sa méthode de configuration est la même que celle de promptChoices.
Mise en marche du contrôle de processusQA
exitOnQ signifie que la branche actuelle sera quittée lorsque le mot-clé spécifié sera détecté. Contrôle de processus-exitonQA
promptMarks, switchOnQ et switchOnA sont fonctionnellement identiques. Ils sautent tous vers des branches en fonction de mots-clés. promptMarks est exécuté en premier, quels que soient les tours ou le contrôle qualité, switchOnQ et switchOnA sont plus spécifiques, distinguant les questions et réponses, les tours et les détails d'implémentation. Saut.
S'il y a des branches fixes qui n'ont pas besoin d'être commutées, veuillez définir le promptMarksLength du yml sur 99999.
inviteMarksLength: 99999
Ceci permet d'éviter de basculer par erreur vers une branche inexistante, provoquant des erreurs de session.
Le flux de contrôle de configuration est simple et intuitif. La logique de dialogue est gérée via le fichier de configuration. Le personnel non technique, tel que les rédacteurs de tracés, peut directement apprendre les règles du fichier de configuration et modifier le fichier de configuration. mettre à jour la logique de dialogue sans connaissances en programmation.
Certitude élevée de l'intrigue : à données d'entrée et de configuration identiques, la direction de l'intrigue est généralement cohérente, ce qui est très important pour garantir la cohérence et la prévisibilité de l'intrigue de dialogue.
Le coût est faible et le contexte est intelligemment combiné et remplacé au lieu d'être traité par plusieurs IA en même temps. Cela consomme presque la même quantité de jetons qu'une conversation normale, ce qui permet d'économiser de l'argent.
C'est rapide, génère des résultats comme le contrôle qualité des dialogues normaux et écrit des intrigues comme des scripts de jeu.
Histoire d'IA à faible coût et solutions innovantes adaptées aux développeurs individuels et aux petites équipes de développement. Faible coût, vitesse élevée et contrôlabilité élevée. L'effet s'améliorera directement avec l'amélioration du modèle et de l'effet de mot rapide.
Pour les scénarios de discussion de tracé de dialogue, si le tracé est relativement fixe, le chemin de dialogue est prédéfini et la fréquence de mise à jour n'est pas élevée, il est plus approprié d'utiliser le flux de contrôle de configuration, car il offre un degré élevé de contrôlabilité et une simplicité d'utilisation. -comprendre la méthode de gestion.
Si le système de dialogue nécessite un degré élevé d'interactivité et de personnalisation, ou si les changements d'intrigue sont complexes et doivent être ajustés dynamiquement en fonction des commentaires et du comportement spécifiques de l'utilisateur, il peut alors être plus approprié d'utiliser une solution d'agent basée sur l'IA, qui nécessite des investissements techniques et des coûts de maintenance plus élevés.
Cette section décrit des informations spécifiques sur les points de terminaison pour communiquer avec l'API.
propriété | Détails |
---|---|
URL | http://localhost:46230/conversation |
méthode | POST |
Le corps de la requête que le client doit envoyer au serveur doit être au format JSON. Le tableau suivant détaille le type de données et la description de chaque champ.
Nom du champ | taper | décrire |
---|---|---|
message | Chaîne | Le contenu du message envoyé par l'utilisateur |
conversationId | Chaîne | Identifiant unique de la session de conversation en cours |
parentMessageId | Chaîne | L'identifiant du message précédent associé à ce message |
L'objet JSON suivant montre la structure du corps de la requête lors de l'envoi d'une requête à ce point de terminaison d'API :
{
"message" : "我第一句话说的什么" ,
"conversationId" : " 07710821-ad06-408c-ba60-1a69bf3ca92a " ,
"parentMessageId" : " 73b144d2-a41f-4aeb-b3bb-8624f0e54ba6 "
}
Cet exemple montre comment construire un corps de requête contenant le contenu du message, un identifiant unique pour la session de conversation en cours et un identifiant pour le message précédent. Ce format garantit que les données demandées non seulement respectent les règles de traitement du serveur, mais facilite également le maintien de la continuité du contexte de conversation.
Une réponse réussie renverra le code d'état 200
et un objet JSON avec les champs suivants :
Nom du champ | taper | décrire |
---|---|---|
response | Chaîne | Le contenu du message de réponse de l'interface |
conversationId | Chaîne | Identifiant unique de la conversation en cours |
messageId | Chaîne | Identifiant unique du message en cours |
details | Objet | Inclure des détails d'utilisation supplémentaires |
usage | Objet (en details ) | Détails d'utilisation tels que le nombre de jetons |
{
"response" : "回答内容" ,
"conversationId" : " c9b8746d-aa8c-44b3-804a-bb5ad27f5b84 " ,
"messageId" : " 36cc9422-da58-47ec-a25e-e8b8eceb47f5 " ,
"details" : {
"usage" : {
"prompt_tokens" : 88 ,
"completion_tokens" : 2
}
}
}
Peut fonctionner sur différentes architectures (Android natif n'est pas encore pris en charge, sqlitev3 nécessite cgo). Étant donné que la compilation cgo est compliquée, sur une plate-forme arm ou sur d'autres architectures, vous pouvez essayer de la compiler localement sous l'architecture système correspondante.
La méthode API appelle le canal QQ pour un accès direct
Paramètres de demande d'auditeur
Lorsque la demande doit être envoyée à un autre GSK LLM en tant qu'auditeur, le format JSON à renvoyer est le suivant :
{ "result" : %s }
%s
représente ici un espace réservé qui sera remplacé par une valeur à virgule flottante spécifique.
Résultats de la demande de génération de bulles
Lorsque vous demandez à un autre GSK LLM de générer des bulles, le format JSON qui doit être renvoyé est le suivant :
[ " " , " " , " " ]
Cela signifie que le résultat de la génération de bulles est un tableau contenant trois chaînes. Ce format permet de spécifier trois bulles différentes lors du retour des résultats, ou inférieures ou égales à 3.
Il n'est plus nécessaire d'ouvrir plusieurs gsk-llm pour implémenter des fonctions de type agent. Sur la base de la nouvelle couverture multi-configuration, des paramètres d'invite et des fonctionnalités lotus, vous pouvez demander à implémenter vous-même des fonctionnalités complexes telles que la génération de bulles et l'avancement de l'histoire.
GetAIPromptkeyboardPath peut être sa propre adresse ou peut avoir des paramètres d'invite.
Lorsque vous utilisez un middleware pour spécifier les paramètres d'invite, la configuration se trouve dans le dossier des invites et son format est xxx-keyboard.yml. Si le middleware n'est pas utilisé, veuillez spécifier les paramètres d'invite dans le chemin et placez le xxx.yml correspondant dans les invites. dossier. )
Définissez l'adresse /conversation du travail conjoint gsk-llm des mots d'invite du système. Il est convenu que les mots d'invite du système doivent renvoyer un tableau de texte json (3).
Ce projet fait référence aux idées des projets bien connus suivants et implémente un format de configuration simplifié du flux de contrôle de texte AI.
Rasa
Ficelle
Auteur d'encre