Zur besseren Unterscheidung wird in diesem Papier Dify Wissensspeicher außerhalb der Plattform werden zusammenfassend als "externe Wissensspeicher" bezeichnet.
Funktion Einführung
Die in Dify eingebaute Wissensdatenbankfunktionalität und die Mechanismen zur Textsuche erfüllen möglicherweise nicht die Anforderungen einiger fortgeschrittener Entwickler, die eine präzisere Kontrolle über die Ergebnisse des Textabrufs benötigen.
Einige Teams entscheiden sich für die Selbstforschung RAG Algorithmen zu verwenden und ein Texterkennungssystem eigenständig zu pflegen oder einen von einem Cloud-Anbieter bereitgestellten Wissensdatenbankdienst (z. B. AWS Bedrock) zu nutzen.
Dify, als offene LLM-Anwendungsentwicklungsplattform, möchte Entwicklern mehr Möglichkeiten bieten.
Dify kann über die Funktion "Connect to External Knowledge Bases" mit externen Wissensdatenbanken verbunden werden. Dadurch erhalten KI-Anwendungen Zugang zu mehr Informationsquellen.
Im Einzelnen ergeben sich die folgenden Vorteile:
- Dify kann direkt auf Text zugreifen, der in der Wissensdatenbank des Cloud-Anbieters gehostet wird, so dass die Entwickler den Inhalt nicht in die Wissensdatenbank von Dify kopieren müssen.
- Dify kann direkt auf den algorithmisch verarbeiteten Text in der selbst erstellten Wissensdatenbank zugreifen, und die Entwickler müssen sich nur darauf konzentrieren, den Mechanismus der Informationsbeschaffung zu optimieren, um die Abrufgenauigkeit zu verbessern.
- Im Vergleich zur direkten Nutzung der Wissensdatenbank-Services von Cloud-Anbietern bietet Dify flexiblere Integrationsmöglichkeiten auf der Anwendungsebene, die es Entwicklern leicht machen, verschiedene KI-Anwendungen zu erstellen.
Die folgende Abbildung veranschaulicht das Prinzip der Verbindung mit einer externen Wissensbasis:
Schritte zur Verbindung
1. eine konforme externe Wissensdatenbank-API einzurichten
Lesen Sie die von Dify verfasste Spezifikation der externen Wissensdatenbank-API sorgfältig durch, bevor Sie Ihren API-Dienst einrichten.
2. assoziierte externe Wissensdatenbank-APIs
Bitte beachten Sie, dass Dify derzeit nur das Abrufen von externen Wissensdatenbanken unterstützt, nicht aber deren Änderung. Die Entwickler müssen externe Wissensdatenbanken selbst pflegen.
Gehen Sie zur Seite "Wissensdatenbank", klicken Sie auf "Externe Wissensdatenbank-API" in der oberen rechten Ecke und dann auf "Externe Wissensdatenbank-API hinzufügen".
Folgen Sie den Aufforderungen auf der Seite, um das Formular auszufüllen:
- Name der Wissensdatenbank: Kann angepasst werden, um zwischen verschiedenen externen Wissensdatenbank-APIs zu unterscheiden.
- Adresse der API-Schnittstelle: Die Adresse des Links zur externen Wissensdatenbank, z. B.
api-endpoint/retrieval
. Ausführliche Anweisungen finden Sie in der externen Wissensdatenbank API. - API-Schlüssel: Der Verbindungsschlüssel für die externe Wissensdatenbank, siehe Externe Wissensdatenbank-API für Details.
3. die Verbindung zu externen Wissensdatenbanken
Klicken Sie auf dem Bildschirm "Wissensdatenbank" unter "Wissensdatenbank hinzufügen" auf "Mit externer Wissensdatenbank verbinden", um den Bildschirm zur Konfiguration der Parameter aufzurufen.
Füllen Sie die folgenden Parameter aus:
- Wissensdatenbank Name und Beschreibung
- Externe Wissensdatenbank-API: Wählen Sie die in Schritt 2 verknüpfte externe Wissensdatenbank-API aus. Dify wird den Textinhalt der externen Wissensdatenbank über die API-Verbindung aufrufen.
- Externe Wissensdatenbank ID: Geben Sie die ID der externen Wissensdatenbank an, mit der Sie verknüpft werden sollen. Einzelheiten finden Sie unter Externe Wissensdatenbank-API.
- Passen Sie die Abrufeinstellungen an:
- Top K: Je größer der Wert, desto mehr Textfragmente werden abgerufen. Es wird empfohlen, mit kleineren Werten zu beginnen und diese schrittweise zu erhöhen, bis die optimale Balance gefunden ist.
- Schwellenwert für die Punktzahl: Je höher der Wert, desto relevanter sind die abgerufenen Textsegmente für die Frage, aber die Anzahl nimmt ab. Es wird empfohlen, mit einem höheren Wert zu beginnen und diesen schrittweise zu verringern, um eine ausreichende Menge an relevantem Text zu erhalten.
4. testet Verbindungen und Rückrufe
Nachdem die Verbindung hergestellt wurde, können Sie die problematischen Schlüsselwörter im "Abruftest" simulieren und eine Vorschau der aus der externen Wissensdatenbank abgerufenen Textfragmente anzeigen. Wenn Sie mit den Ergebnissen nicht zufrieden sind, können Sie versuchen, die Abrufparameter zu ändern oder die Sucheinstellungen der externen Wissensdatenbank anzupassen.
5. die Integration in Anwendungen
- Anwendung vom Typ Chatbot/Agent: Wählen Sie im Kontext auf der Seite Arrangement das Bild mit dem
EXTERN
Markiert als externe Wissensdatenbank.
- Anwendung vom Typ Chatflow/Workflow: Fügen Sie den Knoten Knowledge Retrieval hinzu und wählen Sie den Knoten mit dem
EXTERN
Markiert als externe Wissensdatenbank.
6. die Verwaltung der externen Wissensbasis
Auf der Seite Wissensdatenbank wird die Karte Externe Wissensdatenbank in der oberen rechten Ecke der Karte mit folgendem Text versehen EXTERN
Registerkarte. Geben Sie die Wissensbasis ein, die Sie ändern möchten, und klicken Sie auf "Einstellungen", um sie zu ändern:
- Name und Beschreibung der Wissensdatenbank
- Umfang der Sichtbarkeit ("Nur ich", "Alle Teammitglieder" und "Einige Teammitglieder"). Mitglieder ohne Berechtigungen können nicht auf die Wissensdatenbank zugreifen.
- Abrufeinstellungen (Schwellenwerte für Top K und Score)
Hinweis: Es ist nicht möglich, die verknüpfte externe Wissensdatenbank-API und die externe Wissens-ID zu ändern. Wenn Sie sie ändern möchten, verknüpfen Sie bitte eine neue externe Wissensdatenbank-API und stellen Sie sie erneut her.
Verbindungsbeispiel: Wie stelle ich eine Verbindung mit der AWS Bedrock Knowledge Base her?
In diesem Beitrag wird erläutert, wie die Dify-Plattform über eine externe Wissensdatenbank-API mit der AWS Bedrock Knowledge Base verbunden werden kann. Dadurch können KI-Anwendungen innerhalb der Dify-Plattform direkt auf die in der AWS Bedrock Knowledge Base gespeicherten Inhalte zugreifen und den Zugang zu neuen Informationsquellen erweitern.
Vorab-Positionierung
- AWS Bedrock Wissensdatenbank
- Dify SaaS Dienstleistungen / Dify Community Edition
- Grundlagen der Backend-API-Entwicklung
1. registrieren und AWS Bedrock Knowledge Base erstellen
Besuchen Sie AWS Bedrock, um einen Knowledge Base-Service zu erstellen.
2. back-end API-Dienste aufbauen
Die Dify-Plattform kann sich noch nicht direkt mit der AWS Bedrock Knowledge Base verbinden. Das Entwicklungsteam muss sich auf die API-Definition von Dify für die externe Wissensdatenbank-Verbindung beziehen und den Back-End-API-Service manuell erstellen, um die Verbindung mit AWS Bedrock herzustellen. Bitte sehen Sie sich das Architekturdiagramm an:
Sie können sich auf die folgenden 2 Codedateien beziehen, um die Backend-Service-API zu erstellen.
wissen.py
from flask import request
from flask_restful import Ressource, reqparse
from bedrock.knowledge_service import ExternalDatasetService
class BedrockRetrievalApi(Ressource).
# url : /retrieval
def post(self): parser = reqparse
parser = reqparse.RequestParser()
parser.add_argument("abruf_setting", nullable=False, required=True, type=dict, location="json")
parser.add_argument("abfrage", nullable=False, required=True, type=str,)
parser.add_argument("knowledge_id", nullable=False, required=True, type=str)
args = parser.parse_args()
# Autorisierungsprüfung
auth_header = request.headers.get("Autorisierung")
wenn " " nicht in auth_header.
zurückgeben {
"error_code": 1001, "error_msg": 1001, "error_code": 1001, "error_msg": 1001
"error_msg": "Ungültiges Authorization-Header-Format, erwartetes Format 'Bearer '".
}, 403
auth_scheme, auth_token = auth_header.split(None, 1)
auth_scheme = auth_scheme.lower()
if auth_scheme ! = "bearer".
zurückgeben {
"error_code": 1001, "error_msg": 1001
"error_msg": "Ungültiges Format des Autorisierungs-Headers, erwartetes Format 'Bearer '".
}, 403
if auth_token: "Erwartetes 'Bearer '-Format.
# verarbeitet hier Ihre Autorisierungslogik
pass
# Rufen Sie das Wissen auf Abruf Ergebnis = ExternalDatasetService.knowledge_retrieval()
Ergebnis = ExternalDatasetService.knowledge_retrieval(
args["abfrage_einstellung"], args["abfrage"], args["wissen_id"]
)
return result, 200
wissens_dienst.py
importieren boto3
Klasse ExternalDatasetService.
@staticmethod
def knowledge_retrieval(retrieval_setting: dict, query: str, knowledge_id: str):
# get bedrock client
client = boto3.client(
"bedrock-agent-runtime",
aws_secret_access_key="AWS_SECRET_ACCESS_KEY",
aws_access_key_id="AWS_ACCESS_KEY_ID",
# Beispiel: us-east-1
region_name="AWS_REGION_NAME",
)
# holt externes Wissen ab
response = client.retrieve(
knowledgeBaseId=knowledge_id,
retrievalConfiguration={
"vectorSearchConfiguration": {"numberOfResults": abruf_setting.get("top_k"), "overrideSearchType": "HYBRID"}
},
retrievalQuery={"text": query},
)
#-Antwort parsen
results = []
if response.get("ResponseMetadata") und response.get("ResponseMetadata").get("HTTPStatusCode") == 200:: if response.get("ResponseResults"): if response.get("ResponseMetadata").get("HTTPStatusCode") == 200
if response.get("AbfrageErgebnisse")::
abruf_Ergebnisse = response.get("abrufErgebnisse")
for retrieval_result in retrieval_results: # filtert Ergebnisse heraus mit
# filtert Ergebnisse aus, deren Punktzahl unter dem Schwellenwert liegt
if retrieval_result.get("score") < retrieval_setting.get("score_threshold", .0):: # filtert Ergebnisse mit einer Punktzahl kleiner als der Schwelle heraus
weiter
result = {
"metadata": abruf_ergebnis.get("metadata"),
"score": retrieval_result.get("score"),
"title": retrieval_result.get("metadata").get("x-amz-bedrock-kb-source-uri"),
"Inhalt": retrieval_result.get("Inhalt").get("Text"),
}
results.append(result)
return {
"records": results
}
In diesem Prozess können Sie die API-Schnittstellenadresse und den API-Schlüssel für die Authentifizierung und nachfolgende Verbindungen erstellen.
3. eine AWS Bedrock Knowledge Base ID zu erhalten
Melden Sie sich am AWS Bedrock Knowledge Backend an und rufen Sie die ID der erstellten Knowledge Base ab. Dieser Parameter wird in den folgenden Schritten verwendet, um eine Verbindung zur Dify-Plattform herzustellen.
4. verlinkte externe Wissens-API
Gehen Sie zur Dify Plattform "Wissensbasis" Seite, klicken Sie auf die obere rechte Ecke der "Externe Wissensdatenbank-API"Entspannen Sie sich. "Externe Wissensdatenbank-API hinzufügen".
Folgen Sie den Anweisungen auf der Seite und füllen Sie die folgenden Felder der Reihe nach aus:
- Der Name der Wissensdatenbank, der einen individuellen Namen zur Unterscheidung zwischen den verschiedenen externen Wissens-APIs ermöglicht, die mit der Dify-Plattform verbunden sind;
- Die API-Schnittstellenadresse, also die Verbindungsadresse der externen Wissensdatenbank, kann im zweiten Schritt angepasst werden. Beispiel
api-endpoint/retrieval
.; - Der API-Schlüssel, der Verbindungsschlüssel zur externen Wissensdatenbank, kann im zweiten Schritt angepasst werden.
5. die Verbindung zu externen Wissensdatenbanken
Urlaub für "Wissensbasis" Seite, klicken Sie auf die Karte Wissensdatenbank hinzufügen unter dem "Verbindung zu externen Wissensdatenbanken" Springen Sie zur Seite für die Parameterkonfiguration.
Füllen Sie die folgenden Parameter aus:
- Wissensdatenbank Name und Beschreibung
- Externe Wissensdatenbank-APIWählen Sie die in Schritt 4 zugeordnete externe Wissensdatenbank-API
- Externe Wissensdatenbank-IDGeben Sie die in Schritt 3 erhaltene AWS Bedrock Knowledge Base ID ein
- Anpassen der AbrufeinstellungenTop K: Wenn ein Nutzer eine Frage stellt, wird eine externe Wissens-API angefordert, um hochrelevante Inhaltssegmente zu erhalten. Mit diesem Parameter werden Textsegmente gefiltert, die einen hohen Ähnlichkeitsgrad mit der Frage des Benutzers aufweisen. Der Standardwert ist 3. Je höher der Wert, desto mehr relevante Textsegmente werden abgerufen.
Score Threshold: der Ähnlichkeitsschwellenwert für das Filtern von Textfragmenten, nur Textfragmente, die den eingestellten Score überschreiten, werden abgerufen, der Standardwert ist 0,5. Je höher der Wert, desto höher die Ähnlichkeit zwischen dem Text und der Frage, desto geringer die Anzahl der Texte, die abgerufen werden sollen, und desto genauer ist das Ergebnis.
Nach dem Einrichten können Sie eine Verbindung zur externen Wissensdatenbank-API herstellen.
6. das Testen von Verbindungen zu externen Wissensdatenbanken und von Abrufen
Nachdem eine Verbindung zu einer externen Wissensdatenbank hergestellt wurde, kann ein Entwickler "Rückrufaktion". Entwerfen Sie mögliche Problemschlüsselwörter in der Vorschau von Textsegmenten, die aus der AWS Bedrock Knowledge Base abgerufen werden.
Wenn Sie mit den Ergebnissen des Abrufs nicht zufrieden sind, können Sie versuchen, die Abrufparameter zu ändern oder die Sucheinstellungen der AWS Bedrock Knowledge Base selbst anzupassen.
allgemeine Probleme
Was ist, wenn ich einen Fehler beim Verbinden mit der externen Wissensdatenbank-API erhalte?
Nachstehend finden Sie die Fehlercodes und die entsprechenden Lösungen:
Fehlercode | falsch | eine Angelegenheit regeln |
---|---|---|
1001 | Ungültiges Autorisierungs-Header-Format | Überprüfen Sie das Format des Autorisierungs-Headers der Anfrage |
1002 | Anomalien validieren | Prüfen, ob der API-Schlüssel korrekt ist |
2001 | Wissensbasis nicht vorhanden | Überprüfung der externen Wissensbasis |
Externe Wissensdatenbank API-Spezifikation
Anfangs- oder Endpunkt (in Geschichten usw.)
POST /Abruf
Anfragekopf
Diese API wird verwendet, um eine Verbindung zu unabhängig verwalteten Wissensdatenbanken innerhalb eines Teams herzustellen. Weitere Anleitungen dazu finden Sie unter Verbindung zu externen Wissensdatenbanken herstellen.
kann in der Kopfzeile der HTTP-Anfrage gefunden werden Autorisierung
Felder unter Verwendung der API-Schlüssel
um Berechtigungen zu authentifizieren. Die Authentifizierungslogik wird von Ihnen in der Retrieval-API definiert, wie unten dargestellt:
Autorisierung: Überbringer {API_KEY}
Antragsteller
Die Anfrage nimmt Daten im folgenden JSON-Format entgegen:
Kausalität | Pflichtfeld | Typologie | Beschreibungen | Beispielwert |
---|---|---|---|---|
wissens_id | sein | string (Informatik) | Wissensdatenbank Eindeutige ID | AAA-BBB-CCC |
Abfrage | sein | string (Informatik) | Benutzeranfragen | Was ist Dify? |
abrufen_einstellen | sein | Freund | Parameter für die Wissensbeschaffung | siehe unten |
abrufen_einstellen
Das Attribut enthält die folgenden Schlüssel:
Kausalität | Pflichtfeld | Typologie | Beschreibungen | Beispielwert |
---|---|---|---|---|
oben_k | sein | Ganzzahl (math.) | Maximale Anzahl von Suchergebnissen | 5 |
score_threshold | sein | Fließkomma | Grenzwert für die Relevanz der Ergebnisse für die Abfrage, Bereich: 0~1 | 0.5 |
Beispiel für einen Antrag
POST /Abruf HTTP/1.1
Inhalt-Typ: anwendung/json
Authorization: Bearer your-api-key
{
"knowledge_id": "your-knowledge-id",
"retrieval_setting": {
"top_k": 2, "score_threshold": {
"score_threshold": 0.5
}
}
Antwortkörper
Wenn der Vorgang erfolgreich ist, gibt der Dienst eine HTTP 200-Antwort mit den folgenden Daten im JSON-Format zurück:
Kausalität | Pflichtfeld | Typologie | Beschreibungen | Beispielwert |
---|---|---|---|---|
Datensätze | sein | Objektliste | Liste der abgefragten Datensätze aus der Wissensdatenbank | siehe unten |
Datensätze
ist eine Liste von Objekten mit den folgenden Schlüsseln:
Kausalität | Pflichtfeld | Typologie | Beschreibungen | Beispielwert |
---|---|---|---|---|
Inhalt | sein | string (Informatik) | Textbausteine in der Wissensdatenbank | Dify: GenAI-Anwendungsentwicklungsplattform |
Ergebnis | sein | Fließkomma | Korrelationswert zwischen Ergebnissen und Abfrage, Bereich: 0~1 | 0.98 |
Titel | sein | string (Informatik) | Titel des Dokuments | Einführung in Dify |
Metadaten | Verstopft | JSON | Metadatenattribute und ihre Werte für Dokumente in der Datenquelle | Siehe Beispiel |
Beispielhafte Antwort
HTTP/1.1 200
Inhalt-Typ: application/json
{
"records": [
{
"metadata": {
"description": "dify Wissensdokument"
},
"score": 0.98, "title": "knowledge.txt".
"title": "knowledge.txt", "content": "Dies ist ein externes Dokument".
"content": "Dies ist das externe Wissensdokument".
},
{
"metadata": {
"Pfad": "s3://dify/introduce.txt", {
"description": "Einführung in dify".
},
"title": "introduce.txt", "content": "GenAI Apps": "GenAI Apps".
"content": "Innovationsmotor für GenAI-Anwendungen"
}
]
}
falsch
Wenn der Vorgang fehlschlägt, gibt der Dienst die folgende Fehlermeldung (im JSON-Format) zurück:
Kausalität | Pflichtfeld | Typologie | Beschreibungen | Beispielwert |
---|---|---|---|---|
fehler_code | sein | Ganzzahl (math.) | Fehlercode | 1001 |
fehler_msg | sein | string (Informatik) | API-Ausnahme Beschreibung | Ungültiges Format des Autorisierungs-Headers. |
fehler_code
Attribut Typ:
Kodierung | Beschreibungen |
---|---|
1001 | Ungültiges Autorisierungs-Header-Format |
1002 | Autorisierungsfehler |
2001 | Wissensbasis nicht vorhanden |
HTTP Status Code
- AccessDeniedException: Fehlende Zugriffsrechte. (HTTP-Statuscode: 403)
- InternalServerException: Interner Serverfehler. (HTTP-Statuscode: 500)