Mise en œuvre d'une base de connaissances locale/API basée sur DeepSeek-R1 et accès au BOT WeChat
Dans l'article précédent, "LaDéploiement local DeepSeek-R1 et WeChat Bot Access TutorielsDans "DeepSeek-R1", nous avons déployé DeepSeek-R1 localement et accédé à un bot WeChat pour discuter avec nous, mais aujourd'hui, j'aimerais partager avec vous une façon plus intéressante de jouer avec lui : comment nourrir notre assistant IA avec des choses sèches, afin qu'il puisse se transformer en un consultant professionnel qui sait vraiment ce qu'il fait !
Ensuite, je vous accompagnerai tout au long du processus de construction de la base de connaissances, y compris la configuration de l'environnement, le déploiement de la base de connaissances, le téléchargement des informations, ainsi que certains détails des conseils de réglage. Enfin, nous intégrerons cette IA "pleine de connaissances" dans le robot WeChat, afin de créer un assistant intelligent qui vous comprend vraiment et qui comprend l'industrie !

Tout d'abord, regardons le résultat, c'est le résultat après que j'ai téléchargé une demande d'information "Human Injury Disability Classification" (classification des blessures humaines et des handicaps) :

Déploiement de DeepSeek-R1
DeepSeek Il existe deux modes de déploiement : le déploiement local et l'accès à des API tierces.
Avantages et inconvénients des deux :
- déploiement local
Avantages : données entièrement confidentielles, faible coût à long terme, temps de réponse rapide
❌ Inconvénients : mange de l'arithmétique locale, nécessite des machines mieux configurées - Appel API
✅ Avantages : accès rapide, sans entretien, évolutivité résiliente
❌ Inconvénients : les données doivent être transmises à un tiers, les coûts à long terme ne sont pas contrôlables.
Local DeepSeek
Tout d'abord, vous devez vous assurer que vous avez installé ollama et l'ollama fonctionne correctement.
DeepSeekAPI
J'avais l'intention d'écrire ce billet uniquement sur l'approche du déploiement local .....
Cependant, la version web de DeepSeek étant en grève ces derniers temps, j'ai été contraint d'essayer la version locale. ChatBox Je ne m'attendais pas à faire l'expérience d'une version complète de R1, et c'était un vrai plaisir ! Je pense que cette solution sent également bon, donc j'écrirai à la manière de l'API.
Je vous propose ici deux plateformes auxquelles vous pouvez accéder selon votre choix.
Tout d'abord, nous devons obtenir la clé API, puis nous devons remplir la configuration de la base de connaissances avec la clé API.
arche volcanique
site officiel
https://console.volcengine.com/ark
prix
Entrée : ¥2/M Jetons
Sortie : 8¥/M Jetons
entréeAPIKey管理
CréerAPIkey

Nouvelle clé secrète, copie de la clé API

Flux à base de silicium
Flux à base de silicium site officiel
https://cloud.siliconflow.cn/account/ak
prix
Entrée : 4¥/M Jetons
Sortie : ¥16/M jetons
Allez sur le côté gauche de l'écranAPI秘钥
Cliquez sur新建秘钥
clé secrète de post-copie

dépôt
Installation de la base de connaissances
Ensuite, nous devons accéder à la base de connaissances.AnythingLLM
Le projet.
AnythingLLM est un cadre d'application Open Source Large Language Model (LLM) conçu pour aider les utilisateurs à construire et à déployer facilement des applications intelligentes de questions-réponses, d'analyse de documents et d'autres applications basées sur des données privées.
Allez sur le site web de AnythingLLM et téléchargez le programme d'installation.
https://anythingllm.com/

Lancer l'installeur, entre temps il téléchargera les dépendances supplémentaires nécessaires (GPU, support NPG)

Si le téléchargement échoue, ou si vous fermez la fenêtre de téléchargement et sautez cette étape, AnythingLLM s'installera quand même avec succès.
Ne vous inquiétez pas pour l'instant, vous pouvez effectuer l'installation manuellement.
Le lien web comporte unlib
Zip.
Extrayez l'archive zip et placez le dossier extrait dans le répertoire你的安装目录AnythingLLMresourcesollama
A l'intérieur du catalogue.

Configuration de la base de connaissances
Une fois l'installation terminée, entrez dans l'interface d'AnythingLLM, où vous devez sélectionner un grand modèle par défaut.
configuration locale
Si vous utilisez un déploiement local de DeepSeek, faites défiler vers le bas pour trouver le fichierOllama
Il suffit de choisir.

Configuration de l'API
Si vous utilisez une API tierce, cette étape ne doit pas être sélectionnée.ollama
Trouvez-le ici.Generic OpenAI
Générique OpenAI :
Se connecter à n'importe quel service compatible avec le format d'interface OpenAI par le biais d'une configuration personnalisée.

Il y a 5 paramètres à remplir ici

Utiliser l'API de flux à base de silicone :
BaseURL
adresse de la demande
https://api.siliconflow.cn/v1
APIkey
Clé secrète de l'API, indiquez celle que vous venez de recevoir.
ChatModelName
Nom du modèle
Pro/deepseek-ai/DeepSeek-R1
Token context window
(fenêtre contextuelle)
4096
Max Tokens
(Nombre maximum de jetons)
4096 ou 8192 selon votre situation.
Utiliser l'API de l'Arche du Volcan :
BaseURL
adresse de la demande
https://ark.cn-beijing.volces.com/api/v3
APIkey
Clé secrète de l'API, indiquez celle que vous venez de recevoir.
ChatModelName
Nom du modèle
Le nom du modèle de l'Arche du Volcan doit être complété par l'ID du point d'accès. Nous devons aller sur la plateforme pour créer le point d'accès.
Commencez par activer DeepSeekR1 !

Venir à Online Reasoning - Créer des points d'accès

Confirmer l'accès

Cet identifiant est l'identifiant du point d'accès, il suffit de le renseigner.

Token context window
(fenêtre contextuelle)
4096
Max Tokens
(Nombre maximum de jetons)
4096 ou 8192 selon votre situation.
Une fois les réglages ci-dessus terminés, n'oubliez pas d'appuyer surSaveChanage
Économiser.

Création d'un espace de travail
L'étape suivante de cette interface de confidentialité consiste à vous indiquer comment sauvegarder les données, comment utiliser ces instructions, de toute façon, ce sont tous des ensembles de mots, qui permettent de passer directement à l'étape suivante.

Cette étape est l'écran de bienvenue, rien de spécial, passez-la !

Créez un nom pour l'espace de travail. Il est recommandé d'utiliser l'anglais, car ce nom sera utile si vous souhaitez utiliser l'API pour l'appeler ultérieurement.

Entrez maintenant AnythingLLM
L'interface principale du jeu est maintenant en place. Elle vous apprendra à jouer à l'aide d'un exemple de dialogue.

Cliquez sur l'espace de travail que nous venons de nommer à gauche pour accéder à un nouvel écran de dialogue.

Voici un dialogue simple qui permet de vérifier si l'appel au modèle a réussi.

Configuration de l'espace de travail
Cliquez sur le bouton Configuration à droite de l'espace de travail pour accéder à l'interface de configuration.

Aller dans les paramètres du chat, où nous pouvons ajuster le modèle en détail.

C'est ici que vous réglez le grand modèle actuellement utilisé. Par défaut, c'est le modèle défini par le système qui est utilisé, lequel a été défini précédemmentollama

D'autres grands modèles locaux ou services API sont également disponibles.

Le mode est divisé en chat et en requête, la requête signifie uniquement l'utilisation de la fonction de contexte de requête (vous devez avoir vos propres documents téléchargés), le chat signifie l'utilisation de la fonction de chat + la requête.

Nombre de contextes

Vous pouvez l'interpréter comme un mot indicateur de personnalité, qui peut être modifié en chinois ou laissé par défaut.

Informations sur l'alimentation
Ensuite, vous devez alimenter la base de connaissances, en cliquant sur l'espace de travail à côté de上传按钮

Accès à l'interface de gestion de la base de connaissances

Prend en charge le téléchargement par lots, prend en charge Excel, world, txt et d'autres formats de fichiers. Ici, j'ai téléchargé un《人体损伤致残程度分级》.pdf
.

Sélectionnez le fichier et cliquez surMove to WorkSpace
Cette étape permet d'ajouter des fichiers de la zone temporaire à l'espace de travail.

Vous pouvez voir les fichiers téléchargés transférés à droite, cliquez ici sur le boutonSace and Embed
Effectuer un sauvetage.

Conseils ci-dessousWorkSpace updated successfully
Indique que la sauvegarde a été effectuée avec succès.

Ici, vous devez cliquer surPin to workspace
Ce bouton.
Épingler à l'espace de travail: :
Si, lorsque vous utilisez AnythingLLM, vous constatez que vous n'obtenez pas de réponses satisfaisantes par défaut, vous pouvez améliorer la qualité de vos réponses en épinglant des documents. Il s'agit d'un moyen rapide d'améliorer la précision et la pertinence de vos réponses.
En termes simples, l'épinglage de documents consiste à "alimenter" le modèle linguistique avec le contenu d'un document afin qu'il puisse s'y référer lorsqu'il répond à une question et fournir une meilleure réponse.

Nous retournons ensuite à la page Conversations, créons une nouvelle conversation, posons une question et vérifions que la base de connaissances a été ajoutée avec succès.


résolution des erreurs
Vous pouvez voir que DeepSeek a répondu à la question en conjonction avec les informations téléchargées, mais il y a des erreurs dans la réponse.
Par exemple, la première question :
Demandez :
Quel est le grade pour deux côtes cassées ?
Réponse :
Sur la base des informations contextuelles fournies, les normes de classification de l'invalidité pour les lésions corporelles pour les fractures de côtes sont les suivantes :
Blessure grave de grade 2 : Fracture de plus de quatre côtes ou de plus de deux côtes avec mouvement paradoxal ;
Blessures légères du premier degré : fractures de la première à la troisième côte.
Dans le cas d'une fracture de deux côtes, si elle n'est pas accompagnée d'une activité paradoxale ou d'autres conditions graves (par exemple, plus de quatre), elle est classée comme une blessure mineure du premier degré. Ainsi, deux côtes fracturées sont classées :
blessures légères (premier degré)
Cependant, dans le fichier téléchargé, deux côtes cassées sont classées comme une blessure mineure au deuxième degré. Il s'agit d'une erreur assez grave pour une demande de conseil juridique.

Il n'y a pas lieu de se précipiter lorsqu'il s'agit de ce type d'incapacité à répondre à des questions, essayons d'en trouver la cause.
J'ai examiné de plus près le fichier PDF téléchargé et j'ai constaté qu'il contenait de nombreux tableaux, des mises en forme spéciales et un grand nombre de contenus inutilisés. Ces "impuretés" affectent la capacité de l'intelligence artificielle à comprendre ce que nous voulons vraiment qu'elle apprenne.

J'ai donc réorganisé le contenu essentiel dans un document Word concis, supprimé le contenu inutilisable, puis réintroduit le tout dans l'IA.
Un extrait du contenu du document collationné :
5.6.4轻伤二级
b)肋骨骨折2处以上。
c) 胸骨骨折;锁骨骨折;肩胛骨骨折。
d)胸锁关节脱位;肩锁关节脱位。
e) 胸部损伤,致皮下气肿1周不能自行吸收。
f) 胸腔积血;胸腔积气。
g)胸壁穿透创。
h)胸部挤压出现窒息征象。
5.6.5轻微伤
a)肋骨骨折;肋软骨骨折。
5.7 腹部损伤
5.7. 1重伤一级
a)肝功能损害(重度)。
b)胃肠道损伤致消化吸收功能严重障碍,依赖肠外营养。
c) 肾功能不全(尿毒症期)。
J'ai réessayé la question et, cette fois, la réponse était beaucoup plus précise !

Il s'agit là de la solution la plus simple. Si vous souhaitez que l'IA réponde de manière plus précise, vous pouvez également essayer d'ajuster le format du document, d'optimiser la méthode de recherche, d'ajuster les paramètres de l'IA, etc. Nous reviendrons plus tard sur ces techniques avancées.
Accès à WeChat BOT
Obtenir la clé secrète de AnythingLLM
spectacle (un billet)AnythingLLM
Dans l'interface, allez dans Paramètres - Clé secrète de l'API - Générer une nouvelle clé secrète de l'API.

Utilisation du pack d'intégration
J'ai misAnythingLLM
à l'interfaceNGCBOT
et en faire un ensemble intégré.
Décompressez le lien web dans le fichierNGCBOT_LLM.zip
Zip, double-clic启动器.exe
Prêt à fonctionner.
Il y a trois choses à faire avant de l'utiliser !
Il y a trois choses à faire avant de l'utiliser !
Il y a trois choses à faire avant de l'utiliser !
Tout d'abord, assurez-vous qu'il n'y a pas de chinois dans le répertoire de votre paquet d'intégration, il y aura une erreur s'il y a du chinois !
démonstration correcte
F:AIAIpackageNGCBot
fausse démonstration
F:微信BOTAIpackageNGCBot
Ensuite, installez la version spécifiée de WeChat.
Il y a une version microsoft dans le lien web
WeChatSetup-3.9.10.27.exe
Installer cette version, l'ordinateur ayant à l'origine microsoft n'a pas besoin d'être supprimé, il est possible d'annuler directement l'installation.
Troisièmement, modifiez le fichier de configuration de NGCBOT.
requièrent une compréhension approfondie deConfigConfig.yaml
Le fichier de configuration peut être modifié.
Trois modifications ont été apportées au fichier de configuration
1) Modifier la configuration du super administrateur.
Remplissez ici l'ID du micro-signal que vous avez mis en place, n'oubliez pas de toujours le changer ! Sinon, tout m'est envoyé à ....
Comment puis-je obtenir cet identifiant ? Utilisez le microsignal que vous souhaitez configurer en tant qu'administrateur, envoyez un message au bot, et vous verrez alors l'identifiant de la personne qui a envoyé le message dans la console.

2) Modifier la configuration de la priorité ai.
Voici l'ordre dans lequel les interfaces IA sont exécutées, un nombre plus petit devant signifie la priorité. Le paramètre par défaut est la priorité AnythingLLM.

3. la configuration de AnythingLLM.
Ici, vous devez modifier l'élémentworkspace
,AnythingLLMkey
Ces deux valeurs conviennent parfaitement.
workspace
Remplissez le nom de l'espace de travail que vous avez créé AnythingLLM, c'est le nom en minuscules.
AnythingLLMkey
Remplissez la clé secrète que vous obtenez dans AnythingLLM. Pas la clé secrète de Silicon Flow ni celle de Volcano Ark !
N'oubliez pas de laisser le porteur devant.

Après avoir suivi les étapes ci-dessus pour apporter des modifications, double-cliquez sur l'icône启动器.exe
Vous pourrez alors vous amuser !
L'acquisition du pack d'intégration se trouve à la fin de l'article.
Félicitations ! Tous ceux qui verront ceci sont 👍🏻👍🏻
Si vous souhaitez simplement commencer à jouer avec des robots de base de connaissances rapidement, voyez ici.
Voici ce qui est écrit pour les petits qui veulent approfondir le sujet
- Comment appeler l'interface AnythingLLM
- Comment étendre les fonctionnalités du NGCBOT
Lisez la suite si vous êtes intéressé
développement et expansion
appel d'interface
Cette étape convient à ceux qui veulent développer leur recherche de développement, si vous êtes un débutant et que vous voulez jouer le pack d'intégration directement, veuillez sauter cette étape.
OK, soyons un peu plus avancés. Entrées du navigateur[http://localhost:3001/api/docs/](http://localhost:3001/api/docs/)
Accédez à la page API.
Ici, étant donné que la documentation officielle originale de l'API n'est pas accessible sur le web, elle a été remplacée par un accès local à la documentation de l'API.
Après avoir accédé à la page de description de l'API, vous pouvez voir qu'il existe plusieurs interfaces. L'API prend en charge le débogage directement sur cette page.
Avant de commencer l'accès, nous devons autoriser la clé secrète, en cliquant sur le boutonAuthorize
.

Collez la clé AnythingLLMAPI dans l'écran ouvert, l'autorisation est réussie !

Ensuite, descendez et trouvez/v1/workspace/{slug}/chat
Cette API

Description des paramètres
paramètres | instructions | note |
---|---|---|
limace | espace de travail | Rejeter les caractères chinois, majuscules et autres caractères spéciaux, uniquement les minuscules. |
message | Message | Le message que vous souhaitez envoyer |
mode | paradigme | Le schéma est divisé en deux parties : le chat et la requête. La requête consiste à utiliser uniquement la fonction de contexte de requête (vous devez avoir téléchargé vos propres documents), le chat consiste à utiliser la fonction de chat. |
Exemple de demande (corps de la demande)
curl --location 'http://localhost:3001/api/v1/workspace/newwork/chat'
--header 'Authorization: Bearer 7X26VBD-0824RMG-MD0VV2X-PC02ZJ4'
--header 'Content-Type: application/json'
--data '{
"message": "两根肋骨骨折是什么等级?",
"mode": "chat"
}'
Réponses
{
"id": "488ff13e-0206-4014-bf50-ea2d8e78c1c3",
"type": "textResponse",
"close": true,
"error": null,
"chatId": 17,
"textResponse": "<think>n好的,我现在需要解决用户的问题:“两根肋骨骨折是什么等级?” 用户之前已经询问过这个问题,并且我给出了一个回答,但现在他再次提问,可能希望得到更详细或不同的解释。nn首先,回顾一下上下文。在提供的Context 0中,5.6.4轻伤二级部分提到了b)肋骨骨折2处以上属于轻伤二级。因此,两根肋骨骨折符合这一标准,应定级为轻伤二级。nn用户可能是一名法律工作者、家属或受伤者本人,想要了解骨折的严重程度以便处理工伤赔偿或其他相关事宜。他们可能对分级标准不太熟悉,所以才会多次询问。nn在思考过程中,我需要确认是否还有其他相关的评定标准会影响结果。例如,是否有特殊情况如骨折的位置、是否伴随内脏损伤等,这些因素可能会改变评定等级。但根据提供的Context,没有提到这些情况,因此只能基于给出的信息进行判断。nn此外,用户可能希望知道如何申请工伤认定或后续的赔偿流程,但由于信息有限,我无法提供具体步骤,但可以建议他们联系劳动保障部门或医疗机构获取专业指导。nn总结来说,两根肋骨骨折属于轻伤二级,这是根据提供的标准得出的结论。用户可能需要进一步的法律或医疗咨询来处理相关事宜。n</think>nn根据您提供的上下文信息:nn在 **5.6.4 轻伤二级** 中提到:n- **b) 肋骨骨折2处以上**。nn因此,**两根肋骨骨折属于轻伤二级**。",
"sources": [
{
"text": "5.2.4轻伤二级nna)面部单个创口或者瘢痕长度4.5cm 以上;多个创口或者瘢痕长度累计6.0cm 以上。nnb)面颊穿透创,皮肤创口或者瘢痕长度1.0cm以上。nnc)口唇全层裂创,皮肤创口或者瘢痕长度1.0cm 以上。nnd) 面部块状瘢痕,单块面积3.0cm²以上或多块面积累计5.0cm²以上。nne) 面部片状细小瘢痕或者色素异常,面积累计8.0cm²以上。f)眶壁骨折(单纯眶内壁骨折除外)。nng)眼睑缺损。nnh) 一侧眼睑轻度外翻。nni) 一侧上眼睑下垂覆盖瞳孔。nnj) 一侧眼睑闭合不全。nnk)一侧泪器损伤伴溢泪。nn1)耳廓创口或者瘢痕长度累计6.0cm以上。nnm)耳廓离断、缺损或者挛缩畸形累计相当于一侧耳廓面积15%以上。n)鼻尖或者一侧鼻翼缺损。nno) 鼻骨粉碎性骨折;双侧鼻骨骨折;鼻骨骨折合并上颌骨额突骨折;鼻骨骨折合并鼻中隔骨折;双侧上颌骨额突骨折。nnp) 舌缺损。nnq) 牙齿脱落或者牙折2枚以上。nnr) 腮腺、颌下腺或者舌下腺实质性损伤。nns) 损伤致张口困难I 度 。nnt)颌骨骨折(牙槽突骨折及一侧上颌骨额突骨折除外)。u)颧骨骨折。nn5.2.5轻微伤nnnnnnnnnna)面部软组织创。nnb)面部损伤留有瘢痕或者色素改变。nnc) 面部皮肤擦伤,面积2.0cm²以上;面部软组织挫伤;面部划伤4.0cm以上。nnd)眶内壁骨折。nne)眼部挫伤;眼部外伤后影响外观。nnf) 耳廓创。nng) 鼻骨骨折;鼻出血。h)上颌骨额突骨折。nni) 口腔粘膜破损;舌损伤。nnj) 牙齿脱落或者缺损;牙槽突骨折;牙齿松动2枚以上或者Ⅲ度松动1枚以上。nn5.3 听器听力损伤nn5.3. 1重伤一级nna) 双耳听力障碍(≥91dB HL)。nn5.3.2重伤二级nna) 一耳听力障碍(≥91dB HL)。nnb) 一耳听力障碍(≥81dB HL),另一耳听力障碍(≥41dB HL)。nnc) 一耳听力障碍(≥81dB HL),伴同侧前庭平衡功能障碍。nnd) 双耳听力障碍(≥61dB HL)。nne) 双侧前庭平衡功能丧失,睁眼行走困难,不能并足站立。nn5.3.3轻伤一级nna)双耳听力障碍(≥41dB HL)。nnb)双耳外耳道闭锁。nn5.3.4轻伤二级nna) 外伤性鼓膜穿孔6周不能自行愈合。b...continued on in source document...",
"id": "210f98f0-d656-4c0f-b3d5-d617f6398eca",
"url": "file://C:\Users\XX\AppData\Roaming\anythingllm-desktop\storage\hotdir\新建 DOCX 文档.docx",
"title": "新建 DOCX 文档.docx",
"docAuthor": "no author found",
"description": "No description found.",
"docSource": "pdf file uploaded by the user.",
"chunkSource": "localfile://C:\Users\XX\Desktop\新建 DOCX 文档.docx",
"published": "2025/2/7 13:00:52",
"wordCount": 126,
"token_count_estimate": 3870
}
],
"metrics": {
"prompt_tokens": 431,
"completion_tokens": 326,
"total_tokens": 757,
"outputTps": 63.178294573643406,
"duration": 5.16
}
}
De cette manière, nous avons terminé le test de l'appel à l'interface AnythingLLM. En fonction de cette interface, vous pouvez mettre en œuvre votre propre logique commerciale. Ci-dessous, nous combinons le BOT WeChat pour mettre en œuvre le robot de la base de connaissances.
Modifications du CGN
Les projets de la NGCBOT doivent êtreApiServerAiServerAiDialogue.py
Ajout d'un appel au scriptAnythingLLM
La logique de la
Ici, je vais juste mettre le code.
def getAnythingLLM(self, content, messages): """ 本地 AnythingLLM 模型 :param content: 对话内容 :param messages: 消息列表 :return: """ op(f'[*]: 正在调用本地AnythingLLM对话接口... ...') messages.append({"role": "user", "content": f'{content}'}) data = { "model": self.anythingLLMConfig.get('anythingllmModel'), "message": content } headers = { "Content-Type": "application/json", "Authorization": self.anythingLLMConfig.get('anythingllmKey') } try: resp = requests.post( url=self.anythingLLMConfig.get('anythingllmApi').format(workspace=self.anythingLLMConfig.get('workspace')), headers=headers, json=data, timeout=300 ) resp.encoding = 'utf-8' json_data = resp.json() assistant_content = json_data['textResponse'] if "</think>" in assistant_content: assistant_content = assistant_content.split("</think>")[1].strip() messages.append({"role": "assistant", "content": f"{assistant_content}"}) if len(messages) == 21: del messages[1] del messages[2] return assistant_content, messages except Exception as e: op(f'[-]: 本地AnythingLLM对话接口出现错误, 错误信息: {e}') return None, [{"role": "system", "content": f'{self.systemAiRole}'}]
Ajouter leanythingLLMConfig
self.anythingLLMConfig = { 'anythingllmApi': configData['apiServer']['aiConfig']['AnythingLLM']['AnythingllmApi'], 'anythingllmKey': configData['apiServer']['aiConfig']['AnythingLLM']['AnythingllmKey'], 'anythingllmModel': configData['apiServer']['aiConfig']['AnythingLLM']['AnythingllmModel'], 'workspace': configData['apiServer']['aiConfig']['AnythingLLM']['workspace'] }
Acquisition d'un pack d'intégration
Tootsie Labs - Édition Windowns
Quark :
https://pan.quark.cn/s/8d1293227cf9
Baidu.
https://pan.baidu.com/s/1wx8LmbY2XBaJAAJvmGK06g?pwd=8d5m
© déclaration de droits d'auteur
Article copyright Cercle de partage de l'IA Tous, prière de ne pas reproduire sans autorisation.
Articles connexes
Pas de commentaires...