Zum Hauptinhalt springen
Version: 2.0.0

Editieren einer Applikation

Über die Übersichtsseite der Applikationen können einige Einstellungen editiert werden. Nutzen Sie dafür den Bleistiftknopf. Folgende Einstellungen sind editierbar: Example banner

  1. Anzeigename
  2. Beschreibung
  3. Begrüßungstext
  4. Anzahl Dokumente pro Abruf (Nur Chat / Microworker Modus)
  5. Completion Modell

Konfiguration einer Applikation

Example banner

Zur Einrichtung einer Applikation klicken Sie in der Übersicht zentral auf den Namen einer Applikation. Dadurch gelangen Sie zur Übersicht. Hier können einzelne Benutzer oder Benutzergruppen Zugriff über den Benutzerzugriffs-Tab erhalten. Einzelne Benutzer können explizit zu Administratoren für den Benutzerzugriff berechtigt werden. Außerdem kann hier das Feedback eingesehen werden.

In der Hauptübersicht der Applikation sehen Sie den Tab Konfiguration. In diesem Fenster stehen Ihnen verschiedene Parameter zur Konfiguration gezeigt. Im Beispielbild ist eine Applikation vom Modus Chat gezeigt. Auf die Unterschiede zu einer Applikation mit Modus Microworker wird danach eingegangen.

Zu einer Applikation können Sie beliebig viele Knowledge Stores hinzufügen. Beim Hinzufügen über den Hinzufügen Knopf kann aus dem Dropdown ein Knowledge Store ausgewählt werden. Außerdem können Metadaten für die Quellenangabe ausgewählt werden.

Für eine Applikation mit dem Modus Microworker stehen außerdem folgende Felder zur Verfügung:

  1. Zielsetzung: Formulieren Sie präzise die Zielsetzung ihres Microworkers. Dieser nutzt verknüpfte Funktionen, Knowledge Stores und Validierungen, um eine Benutzeranfrage beantworten zu können.

  2. Function Calls: Sie können erstellte Funktionen zum Microworker hinzufügen als weitere Werkzeuge. Dafür müssen im System entsprechende Funktionen hinterlegt werden.

  3. Validierungen: Nutzen Sie die Möglichkeit, Validierungen durch verknüpfte Knowledge Stores durchzuführen. Dies verbessert den Microworker und schützt vor schädlichem bzw. ungewolltem Verhalten. Erstellen Sie hierfür einen Knowledge Store mit dem Typ Validierung.

Erweiterte Einstellungen

An jedem Knowledge Store einer Applikation können erweiterte Einstellungen vorgenommen werden.

warning

Achtung: Die Einstellungen können die Funktionalität stark beeinflussen. Bitte nur verwenden, wenn Sie sich sicher über die Auswirkungen sind.

  1. System Prompt Template
  2. User Prompt Template
  3. Custom Retrieval Queries Dieses Feature muss spezifisch für ihre Organisation freigeschaltet werden. Bitte wenden Sie sich an den Support, falls Sie Zugriff auf diese Komponente benötigen. Im JavaScript Editor kann nun spezifisch die Query für das Abfragen der Vektor- und Dokumentendatenbank modifiziert werden, um beispielsweise besondere Dokumente mehr in den Vordergrund zu heben oder beispielsweise Dokumente mit einem jüngeren Datum besonders hervorzuheben. Intern bezieht sich dies auf Elasticsearch oder Opensearch.

Custom Retrieval Queries

Im folgenden finden Sie zwei Beispiele für Elasticsearch und Opensearch. Welche Distribution in ihrer Umgebund verfügbar ist, können sie aktuell bei uns erfragen.

Um die Queries selbst anpassen zu können, verweisen wir an dieser Stelle an die jeweilige Dokumentation des Anbieters. Sollten etwaige Javaklassen in JavaScript nicht zur Verfügung stehen, kann dies in künftigen Releases angepasst werden.

Dokumentation für Elasticsearch:

//JavaScript zur Modifizierung einer ElasticSearch Query
function modifiedVSRequest(searchRequest) {
var RescoreQuery = Java.type('co.elastic.clients.elasticsearch.core.search.RescoreQuery');
var SearchRequest = Java.type('co.elastic.clients.elasticsearch.core.SearchRequest');
var JsonData = Java.type('co.elastic.clients.json.JsonData');
var rescoreQuery = RescoreQuery.of(b => b.query(
b2 => b2.bool(
b3 => b3
.should(
b4 => b4.range(
b5 => b5.field("metadata_date")
.gte(JsonData.of("now-6M"))
.boost(1.5)
)
)
.should(
b4 => b4.range(
b5 => b5.field("metadata_date")
.gte(JsonData.of("now-12M"))
.boost(1.4)
)
)
.should(
b4 => b4.range(
b5 => b5.field("metadata_date")
.gte(JsonData.of("now-24M"))
.boost(1.3)
)
)
.should(
b4 => b4.range(
b5 => b5.field("metadata_date")
.gte(JsonData.of("now-6y"))
.boost(1.1)
)
)
.should(
b4 => b4.range(
b5 => b5.field("metadata_date")
.gte(JsonData.of("now-10y"))
.boost(1.)
)
)
)
)
.queryWeight(1.)
.rescoreQueryWeight(1.7));
var params = {
"query_value": JsonData.of(output.getFloatDenseVectorList()),
"field": JsonData.of("content_vector")
}
return SearchRequest.of(
b => b.index(searchRequest.index())
.query(b3 => b3.scriptScore(
b4 => b4.query(
b2 => b2.matchAll(
b6 => b6
)
).script(script => script.inline(
b5 => b5.source("cosineSimilarity(params.query_value, params.field) + 1.0 + _score")
.params(
params
)
)
)
)
)
.rescore(b2 => b2.query(rescoreQuery)));
}
function modifiedDSRequest(searchRequest) {
var RescoreQuery = Java.type('co.elastic.clients.elasticsearch.core.search.RescoreQuery');
var SearchRequest = Java.type('co.elastic.clients.elasticsearch.core.SearchRequest');
var JsonData = Java.type('co.elastic.clients.json.JsonData');

var rescoreQuery = RescoreQuery.of(b => b.query(
b2 => b2.bool(
b3 => b3
.should(
b4 => b4.range(
b5 => b5.field("metadata_date")
.gte(JsonData.of("now-6M"))
.boost(1.5)
)
)
.should(
b4 => b4.range(
b5 => b5.field("metadata_date")
.gte(JsonData.of("now-12M"))
.boost(1.4)
)
)
.should(
b4 => b4.range(
b5 => b5.field("metadata_date")
.gte(JsonData.of("now-24M"))
.boost(1.3)
)
)
.should(
b4 => b4.range(
b5 => b5.field("metadata_date")
.gte(JsonData.of("now-6y"))
.boost(1.1)
)
)
.should(
b4 => b4.range(
b5 => b5.field("metadata_date")
.gte(JsonData.of("now-10y"))
.boost(1.)
)
)
)
)
.queryWeight(1.)
.rescoreQueryWeight(1.7));
SearchRequest.of(
b => b.index(searchRequest.index())
.query(
b2 => b2.bool(
b3 => b3
.should(
b4 => b4.match(
b5 => b5.field("field_content")
.query(exchange.getUserInput().toString())
.fuzziness("AUTO")
)
)

.should(
b4 => b4.match(
b5 => b5.field("field_content")
.query(exchange.getUserInput().toString())
.boost(0.5)
)
)
)
)
.rescore(b0 => b0.query(rescoreQuery))

)

}
function getModifiedSearchRequest() {
if (typeof vsElasticSearchRequest !== 'undefined') {
return modifiedVSRequest(vsElasticSearchRequest);
}
if (typeof dsElasticSearchRequest !== 'undefined') {
return modifiedDSRequest(dsElasticSearchRequest);
}
}

getModifiedSearchRequest();

Dokumentation für Opensearch:

//JavaScript zur Modifizierung einer OpenSearch Query
function modifiedVSRequest(searchRequest) {
var QueryBuilders = Java.type('org.opensearch.index.query.QueryBuilders');
var QueryRescorerBuilder = Java.type('org.opensearch.search.rescore.QueryRescorerBuilder');
var Script = Java.type('org.opensearch.script.Script');
var params = {
"field": "content_vector",
"query_value": output.getFloatDenseVectorList()
};
var scriptScoreQuery = QueryBuilders.scriptScoreQuery(
QueryBuilders.matchAllQuery(),
new Script["(ScriptType,String,String,Map)"](
Script.DEFAULT_SCRIPT_TYPE,
Script.DEFAULT_SCRIPT_LANG,
"cosineSimilarity(params.query_value, doc[params.field]) + 1.0 + _score",
params
)
);
var minusSixMonth = QueryBuilders.rangeQuery("metadata_date")
.gte("now-6M")
.boost(1.5);
var minusTwelveMonth = QueryBuilders.rangeQuery("metadata_date")
.gte("now-12M")
.boost(1.4);
var minusTwentyFourMonth = QueryBuilders.rangeQuery("metadata_date")
.gte("now-24M")
.boost(1.3);
var minusSixYears = QueryBuilders.rangeQuery("metadata_date")
.gte("now-6y")
.boost(1.1);
var minutsTenYears = QueryBuilders.rangeQuery("metadata_date")
.gte("now-10y")
.boost(1);
var rescorerQueryBuilder = new QueryRescorerBuilder(
QueryBuilders.boolQuery()
.should(minusSixMonth)
.should(minusTwelveMonth)
.should(minusTwentyFourMonth)
.should(minusSixYears)
.should(minutsTenYears)
);
rescorerQueryBuilder.setQueryWeight(1);
rescorerQueryBuilder.windowSize(100);
rescorerQueryBuilder.setRescoreQueryWeight(1.7);
searchRequest.source().addRescorer(rescorerQueryBuilder);
searchRequest.source().query(scriptScoreQuery)
.size(+exchange.getAnnotations().get('document_retrieval_count'));
searchRequest;
}
function modifiedDSRequest(searchRequest) {
var QueryBuilders = Java.type('org.opensearch.index.query.QueryBuilders');
var QueryRescorerBuilder = Java.type('org.opensearch.search.rescore.QueryRescorerBuilder');

var minusSixMonth = QueryBuilders.rangeQuery("metadata_date")
.gte("now-6M")
.boost(1.5);
var minusTwelveMonth = QueryBuilders.rangeQuery("metadata_date")
.gte("now-12M")
.boost(1.4);
var minusTwentyFourMonth = QueryBuilders.rangeQuery("metadata_date")
.gte("now-24M")
.boost(1.3);
var minusSixYears = QueryBuilders.rangeQuery("metadata_date")
.gte("now-6y")
.boost(1.1);
var minutsTenYears = QueryBuilders.rangeQuery("metadata_date")
.gte("now-10y")
.boost(1);
var rescorerQueryBuilder = new QueryRescorerBuilder(
QueryBuilders.boolQuery()
.should(minusSixMonth)
.should(minusTwelveMonth)
.should(minusTwentyFourMonth)
.should(minusSixYears)
.should(minutsTenYears)
);
rescorerQueryBuilder.setQueryWeight(1);
rescorerQueryBuilder.windowSize(100);
rescorerQueryBuilder.setRescoreQueryWeight(1.7);

searchRequest.source().addRescorer(rescorerQueryBuilder);
searchRequest.source().query(QueryBuilders.matchAllQuery())
.size(+exchange.exchange.getAnnotations().get('document_retrieval_count'))
return searchRequest;

}
function getModifiedSearchRequest() {
if (typeof vsOpenSearchRequest !== 'undefined') {
return modifiedVSRequest(vsOpenSearchRequest);
}
if (typeof dsOpenSearchRequest !== 'undefined') {
return modifiedDSRequest(dsOpenSearchRequest);
}
}

getModifiedSearchRequest();