OpoTests/AIPattern.md

89 lines
3.0 KiB
Markdown

# Patrón IA
Los Tests no son más que archivos JSON con la siguiente estructura:
```json
[{
"origin" : "Quién lo hizo",
"sources" : ["Links para el origen de los datos/Tests."],
"title" : "Título del Test.",
"queries" : [{
"question" : "Pregunta arealizar.",
"rights" : ["Respuestas correctas simples.", ["Respuestas correctas porcentuadas.", 0.5]],
"wrongs" : ["Respuestas incorrectas simples.", ["Respuestas incorrectas porcentuadas.", 0.5]]
}]
}]
```
* **origin**: String. Nombre de la entidad o fuente de la información.
* **sources**: Array de Strings. Fuentes de la que parte la información.
* **title**: String. Título del tema a tratar.
* **Queries**: Array de diccionario. Conjunto de posibles preguntas.
* **question**: String. Texto de la pregunta.
* **rights** y **wrongs**: Array de Strings (Respuesta directa) y/o Array bidimensional con:
0. String. Respuesta.
1. Float. Probabilidad de prebalecer como seleccionada.
Todos los campos ahnde existir siempre y el tipado va acorde a lo expuesto.
Los Array indican que pueden tener uno o más elementos, a excepción de "sources", que puede estar vacío.
Las respuestas porcentuadas indican cuál es la probabilidad de que una vez elegida por el programa, ésta se quede como respuesta y no se seleccione otra. Esto vale para equivaler conjuntos de respuestas dinámicas y estáticas. El valor que lo acompaña es la probabilidad de que permanezcan siendo 1 el 100% y 0 el 0%.
Lo interesante es que halla cuántas más posibles respuestas mejor. No hay un número mínimo ni máximo.
Las respuestas pueden tener factores dinámicos para que una sea más flexibles y dé más resultados. No puede haber anidamientos de éstos. Éstos se basan en claves las cuales son los siguientes.
## rand
Indica un conjunto de elementos de los cuales se eligirá uno aleatoriamente.
```txt
[[rand,opcion1|opcion2|opcion3|opcionN]]
```
```json
{
"wrongs" : ["Esto es [[rand,esto|eso|aquello]]."]
}
```
En el ejemplo puede dar como resultado que es "esto", o "eso" o "aquello".
## range
Indica uno o más rangos o valores fijos numéricos enteros de donde se sacarán valores aleatorios.
```txt
[[rand,desde1-hasta1|desde2-hasta2|desde3-hasta3|desdeN-hastaN]]
```
```txt
[[rand,valor1|valor2|valor3|valorN]]
```
```txt
[[rand,desde1-hasta1|desde2-hasta2|valor3|desdeN-hastaN]]
```
```json
{
"wrongs" : ["Esto es [[range,0-10|15-20|23|31-60]]."]
}
```
En el ejemplo puede coger cualquier valor comprendido entre 0 y 10, 15 y 20, el valor 23, y entre 31 y 60.
## serie
Es como el rango pero con memoria, y la siguiente serie del mismo texto procesado ha de ser igual o más grande.
```json
{
"wrongs" : ["Esto está entre [[serie,0-25]] y [[serie,10-50]]."]
}
```
En el ejemplo, el primer valor puede coger cualquier valor comprendido entre el 0 y el 25; y el segundo puede ser entre 10 si el primero es menor que 10 o desde el primero en caso contrario, hasta el 50.
Sólo se contabiliza una serie por pregunta/respuesta.