Z całą uwagą, jaką otrzymują te LLM i ChatGPT, pojawia się nowa zasada "Garbage in, garbage out". Podczas korzystania z GPT-4 lub GPT-3.5, lub jakiegokolwiek innego dużego modelu językowego, koncepcja ta ma zastosowanie w dwóch miejscach [Prompt Engineering](https://en.wikipedia.org/wiki/Prompt_engineering#:~:text=Prompt%20engineering%20(also%20known%20as,of%20it%20being%20explicitly%20given.) i Dostrajanie. Powinniśmy również rozważyć, kiedy te modele zostały przeszkolone, aby zweryfikować, jak stare lub nowe są dane, które nam dostarczają.
Większość firm korzysta dziś z korporacyjnych źródeł danych - wewnątrz zapory sieciowej lub na zewnątrz, a nie w domenie publicznej. Jeśli możemy wykorzystać LLM na tych danych, pojawią się nowe możliwości.
W tym artykule omówimy tworzenie chatbota z niestandardową bazą wiedzy w 30 minut, aby sztuczna inteligencja odpowiadała na pytania dotyczące danych.
Wymagania wstępne dla stworzenia bota wiedzy
Musimy zastanowić się, ile danych mamy do stworzenia niestandardowej bazy wiedzy. Na tym blogu stworzymy asystenta przy użyciu dokumentacji PubNub. Istnieje wiele dokumentacji, więc powinniśmy rozważyć skorzystanie z usługi produkcyjnej, takiej jak Vectara, Pineconelub Weaviate do zarządzania naszymi osadzeniami wektorowymi. Możesz użyć LangChain do utworzenia lokalnej wektorowej bazy danych dla mniejszych ilości danych. LangChain obsługuje również mapowanie niestandardowych zagnieżdżeń do modeli LLM poprzez wyszukiwanie semantyczne lub podobieństwa.
W tym blogu zajmiemy się konfiguracją wektorowej bazy danych w Vectara, ponieważ zapewnia ona proste rozwiązanie typu "przeciągnij i upuść" dla wszystkich danych firmy. Najlepszym sposobem interakcji z Vectara jest wykorzystanie PubNub Functionsktóry zapewnia bezserwerowy kontener JavaScript uruchamiany za każdym razem, gdy wystąpi wcześniej zdefiniowane zdarzenie. Będziesz mieć możliwość dostosowania, kiedy funkcja zostanie uruchomiona i uruchomiona, będąc w stanie dostosować sposób działania AI Knowledge Bot.
Vectara wykorzysta Twój zestaw danych do indeksowania danych w wielu osadzeniach. Po wprowadzeniu tekstu lub danych użytkownika Vectara przeprowadzi wyszukiwanie semantyczne danych i podsumuje znalezione wyniki, udzielając odpowiedzi na pytanie przy użyciu niestandardowych danych. Pozwoli to na uzyskanie odpowiednich informacji. Vectara obsługuje wiele typów plików, takich jak TXT, HTML, PDF i pliki Word. Zbierz wszystkie dokumenty, które chcesz przesłać i dodaj je do osobnego folderu.
Jak skonfigurować aplikację Vectara
Konfiguracja Vectara jest następująca:
Zarejestruj się lub zaloguj się do Vectara
Po przejściu do pulpitu nawigacyjnego kliknij przycisk
Utwórz
korpus.Po nadaniu korpusowi nazwy i opisu w nagłówku
Data Ingestion
przeciągnij i upuść pliki, o których chcesz wiedzieć LLM, do sekcjiUpload Files
. Po przesłaniu plików możesz sprawdzić swój identyfikator korpusu w górnej części strony, ponieważ będzie on potrzebny do napisania żądania.Kliknij swój adres e-mail w prawym górnym rogu i zapisz swój
identyfikator
klienta na później.Wybierz
Klucze API
i utwórz klucz API dla swojego korpusu, wybierając go z menu rozwijanego. Zapisz klucz API na później.
Architektura wysokiego poziomu
Architektura będzie wyglądać następująco:
Aplikacja czatu będzie używać PubNub do wysyłania i odbierania wiadomości
Funkcja PubNub będzie nasłuchiwać tych wiadomości na określonym kanale
Sygnał PubNub zostanie uruchomiony, aby poinformować użytkownika, kiedy sztuczna inteligencja myśli i kiedy skończy.
Wiadomość zostanie następnie przekazana do Vectara przy użyciu Vectara Rest API.
Funkcja PubNub przeanalizuje 1 z wielu wyników z odpowiedzi od Vectara.
Odpowiedź zostanie następnie opublikowana na kanale powiązanym z chatbotem.
Konfigurowanie funkcji PubNub
Przejdź do admin dashboard
Wybierz
funkcje
w menu po lewej stronie i kliknij odpowiedni zestaw kluczy, którego chcesz użyć.Wybierz
+ Utwórz moduł
i wprowadź nazwę oraz opis modułu.Wybierz właśnie utworzony moduł i kliknij + Utwórz
funkcję
Nadaj funkcji nazwę, taką jak
Vectara Query
i wybierz opcjęAfter Publish lub Fire
z menu rozwijanego. Ta funkcja zostanie uruchomiona po opublikowaniu wiadomości na odpowiednim kanale, w tym przypadkudocs-pubnub-ai
.Ustaw nazwę kanału na
docs-pubnub-ai
.Kliknij na
Moje sekrety
i utwórz sekret o nazwieVECTARA_API_KEY
iCUSTOMER_ID
.
Oto kod do wysyłania zapytań do bazy danych Vectara z funkcji PubNub
Fragment kodu dla funkcji PubNub jest zdefiniowany w następujący sposób:
const Promise = require('promise');
//
// API Key For OpenAI
// **Add your Vectara API Key and Customer ID to MY SECRETS (Left Panel)**
//
let VECTARA_API_KEY = null;
let CUSTOMER_ID = null;
let channel = "docs-pubnub-ai-response";
function getVectaraKey() {
// Use cached key
if (VECTARA_API_KEY && CUSTOMER_ID) {
return new Promise(resolve => resolve(VECTARA_API_KEY));
}
// Fetch key from vault
return vault.get("VECTARA_API_KEY").then(apikey => {
return vault.get("CUSTOMER_ID").then(customer_id => {
VECTARA_API_KEY = apikey;
CUSTOMER_ID = customer_id;
return new Promise(resolve => resolve(VECTARA_API_KEY));
});
});
}
//
// Import Modules
//
const xhr = require('xhr');
const vault = require('vault');
const pubnub = require('pubnub');
//
// Main
//
export default (request) => {
// Input data for Vectara
let message = request.message.text;
let signalMessage = { message: { type: "typing_on" }, channel: channel };
return pubnub.signal(signalMessage).then((_) => {
return getVectaraKey().then(_ => {
return vectara(message).then(response => {
return pubnub.publish({
channel: channel,
message: {
id: "PubNubAI",
type: "default",
text: response
},
}).then((publishResponse) => {
console.log(publishResponse);
message = { message: { type: "typing_off" }, channel: channel };
return pubnub.signal(message).then((signalOffResponse) => {
console.log(signalOffResponse);
return request.ok();
});
}).catch((err) => {
console.error(err);
});
});
});
});
};
//
// API Call to Vectara asking the AI a question
//
async function vectara(question) {
console.log("SENDING REQUEST TO VECTARA");
const url = "https://api.vectara.io/v1/query";
const body = JSON.stringify({
"query": [
{
"query": question,
"start": 0,
"numResults": 10,
"contextConfig": {
"charsBefore": 0,
"charsAfter": 0,
"sentencesBefore": 2,
"sentencesAfter": 2,
"startTag": "<b>",
"endTag": "</b>"
},
"corpusKey": [
{
"customerId": CUSTOMER_ID,
"corpusId": 1,
"semantics": "DEFAULT",
"dim": [
{
"name": "string",
"weight": 0
}
],
"lexicalInterpolationConfig": {
"lambda": 0.025
}
}
],
"rerankingConfig": {
"rerankerId": 272725717
},
"summary": [
{
"summarizerPromptName": "",
"maxSummarizedResults": 5,
"responseLang": "eng",
"summarizerPromptId": 1,
"debug": false,
"responseChars": 0
}
]
}
]
});
const http_options = {
'method': 'POST',
'timeout': 20000,
'headers': {
'Content-Type': 'application/json',
'customer-id': CUSTOMER_ID,
'x-api-key': VECTARA_API_KEY
},
'body': body
};
xhr.timeout = 100000;
// Send API Request to OpenAI GPT Model
const response = await xhr.fetch(url, http_options).then(res => res.json());
// Parse the response and get the summary
const summary = response.responseSet[0].summary[0].text;
return summary;
}
Podłączanie funkcji PubNub do interfejsu użytkownika
Aby podłączyć funkcję PubNub do interfejsu użytkownika, postępuj zgodnie z kodem zdefiniowanym powyżej, używając jednego z wielu SDK udostępnianych przez PubNub. Publikuj/subskrybuj do kanału pubnub-docs-ai
i poczekać, aż zapytanie Vectara zakończy działanie po użyciu powyższej funkcji PubNub. Podłączanie wskaźnika Typing Indicator do nasłuchiwania sygnałów PubNub na kanale pubnub-docs-ai
pozwoli użytkownikowi zobaczyć, kiedy bot PubNub Knowledge myśli, dodając płynniejsze wrażenia użytkownika końcowego.
Kod do podłączenia funkcji PubNub w React:
const pubnub = new PubNub({
publishKey: process.env.NEXT_PUBLIC_PUBLISH_KEY!,
subscribeKey: process.env.NEXT_PUBLIC_SUBSCRIBE_KEY!,
userId: "You",
});
const publishChannel = "docs-pubnub-ai";
const sendMessage = (message: string) => {
if (message) {
pubnub.publish({
channel: publishChannel, message: {
text: message
}});
}
};
Podsumowanie
Korzystanie z funkcji PubNub wraz z dowolną wektorową bazą danych lub Vector Store to bardzo szybki i gotowy do produkcji sposób na stworzenie własnego AI Knowledge Bot. W ten sposób można wykorzystać nie tylko Vectarę, ale także Pinecone, Weaviate lub dowolną inną produkcyjną wektorową bazę danych. Dzięki PubNub Functions łatwo jest hostować i kontrolować sposób wysyłania wiadomości oraz czas ich wysyłania, aby zwiększyć funkcjonalność wektorowych baz danych.
Zarejestruj się w naszym panelu administratora aby rozpocząć konfigurację zestawu kluczy PubNub. Sprawdź również liczbę samouczków i blogów dla konkretnego przypadku użycia.
Jak PubNub może ci pomóc?
Ten artykuł został pierwotnie opublikowany na PubNub.com
Nasza platforma pomaga programistom tworzyć, dostarczać i zarządzać interaktywnością w czasie rzeczywistym dla aplikacji internetowych, aplikacji mobilnych i urządzeń IoT.
Fundamentem naszej platformy jest największa w branży i najbardziej skalowalna sieć przesyłania wiadomości w czasie rzeczywistym. Dzięki ponad 15 punktom obecności na całym świecie obsługującym 800 milionów aktywnych użytkowników miesięcznie i niezawodności na poziomie 99,999%, nigdy nie będziesz musiał martwić się o przestoje, limity współbieżności lub jakiekolwiek opóźnienia spowodowane skokami ruchu.
Poznaj PubNub
Sprawdź Live Tour, aby zrozumieć podstawowe koncepcje każdej aplikacji opartej na PubNub w mniej niż 5 minut.
Rozpocznij konfigurację
Załóż konto PubNub, aby uzyskać natychmiastowy i bezpłatny dostęp do kluczy PubNub.
Rozpocznij
Dokumenty PubNub pozwolą Ci rozpocząć pracę, niezależnie od przypadku użycia lub zestawu SDK.