Le plug-in geo-ip détermine la localisation géographique des utilisateurs à partir de leurs adresses IP et transmet ces données aux plug-ins suivants via des attributs ou des en-têtes de requête.
Attributs d'exécution
Étape d'exécution du plug-in : Authorization. Priorité d'exécution du plug-in : 440.
Champs
|
Champ |
Type de données |
Obligatoire |
Valeur par défaut |
Description |
|
ip_protocol |
string |
Non |
ipv4 |
Protocole IP à utiliser. Valeurs autorisées : ipv4 et ipv6. Si vous spécifiez ipv4, le système collecte et transmet uniquement les informations géographiques des utilisateurs IPv4 aux plug-ins suivants. Les requêtes des utilisateurs IPv6 contournent le plug-in. La prise en charge d'ipv6 est en cours de développement. Une fois activée, si vous spécifiez ipv6, le système collecte et transmet uniquement les informations géographiques des utilisateurs IPv6. Les requêtes des utilisateurs IPv4 contournent alors le plug-in. |
|
ip_source_type |
string |
Non |
origin-source |
Type de source. Valeurs autorisées : |
|
ip_header_name |
string |
Non |
x-forwarded-for |
En-tête depuis lequel extraire l'adresse IP. Ce champ s'applique lorsque |
Exemples de configuration
ip_protocol: ipv4
ip_source_type: header
ip_header_name: X-Real-Ip
Générer geoCidr.txt
Le fichier ip.merge.txt, situé dans le répertoire generateCidr, contient tous les blocs CIDR mondiaux issus du projet ip2region sur GitHub. Le script ipRange2Cidr.go convertit les plages IP en blocs CIDR. Les blocs CIDR convertis et les informations géographiques associées sont stockés dans le fichier /data/geoCidr.txt. Au démarrage de Higress, le plug-in geo-ip lit ce fichier et l'analyse pour construire une structure de données arborescente (radix tree) en mémoire. Cette approche permet une recherche rapide des informations géographiques liées aux adresses IP des utilisateurs. Exécutez la commande suivante pour lancer ipRange2Cidr.go :
go run generateCidr/ipRange2Cidr.go
Utilisation des propriétés
Le plug-in geo-ip utilise proxywasm.SetProperty() pour définir le pays, la ville, la province et le FAI (isp) comme propriétés de la requête. Les plug-ins suivants peuvent alors appeler proxywasm.GetProperty() pour récupérer les informations géographiques liées aux adresses IP des utilisateurs.
Intégrer la localisation géographique des utilisateurs en combinant le plug-in AI prompt decorator et le plug-in geo-ip
Pour ajouter la localisation géographique des utilisateurs au début ou à la fin des requêtes LLM, activez à la fois le plug-in geo-ip et le plug-in AI prompt decorator. Assurez-vous que le plug-in geo-ip possède une priorité supérieure à celle du plug-in AI prompt decorator au sein de la même étape de traitement. Le plug-in geo-ip calcule la localisation géographique de l'utilisateur sur la base de son adresse IP et transmet cette information aux plug-ins suivants via un attribut de requête. Par exemple, dans la phase par défaut, la priorité du plug-in geo-ip est de 1000, tandis que celle du plug-in ai-prompt-decorator est de 500.
Exemple de configuration du plug-in geo-ip :
ipProtocal: "ipv4"
Exemple de configuration du plug-in ai-prompt-decorator :
prepend:
- role: system
content: "The current geographic location of the user is: country:${geo-country}, province:${geo-province}, city:${geo-city}"
append:
- role: user
content: "Each time you answer a question, try to ask a rhetorical question."
Utilisez les configurations précédentes pour initier une requête :
curl http://localhost/test \
-H "content-type: application/json" \
-H "x-forwarded-for: 87.254.207.100,4.5.6.7" \
-d '{
"model": "gpt-3.5-turbo",
"messages": [
{
"role": "user",
"content": "What is the weather like today?"
}
]
}'
Exemple de requête traitée :
curl http://localhost/test \
-H "content-type: application/json" \
-H "x-forwarded-for: 87.254.207.100,4.5.6.7" \
-d '{
"model": "gpt-3.5-turbo",
"messages": [
{
"role": "system",
content: "The current geographic location of the user is: country: China, province: Beijing, city: Beijing"
},
{
"role": "user",
"content": "What is the weather like today?"
},
{
"role": "user",
content: "Each time you answer a question, try to ask a rhetorical question."
}
]
}'