Open ldittmar81 opened 1 year ago
Also... alle Fragen wurden von ChatGPT selbst beantwortet :-D - ich finde das Ding echt Klasse - dann habe ich noch gefragt: Wofür könnte man ChatGPT in der Hausautomatisierung nutzen? Und sie antwortete:
ChatGPT kann in verschiedenen Szenarien für die Hausautomatisierung nützlich sein. Hier sind einige Beispiele:
Sprachassistent: Integrieren Sie ChatGPT, um einen sprachgesteuerten Assistenten für Ihr Smart Home-System zu erstellen. Benutzer können Fragen stellen oder Befehle geben, und ChatGPT kann die entsprechenden Antworten oder Aktionen generieren.
Automatisierte Benachrichtigungen: ChatGPT kann verwendet werden, um benutzerdefinierte, kontextbezogene Benachrichtigungen basierend auf Ereignissen im Smart Home zu erstellen. Zum Beispiel kann es Warnmeldungen generieren, wenn Sensoren ungewöhnliche Aktivitäten oder Umgebungsbedingungen melden.
Intelligente Szenarien: ChatGPT kann dazu verwendet werden, intelligente Szenarien oder Routinen zu erstellen, die auf den Gewohnheiten und Präferenzen der Benutzer basieren. Durch das Analysieren von Benutzeranfragen und -aktionen kann es Vorschläge für Automatisierungsszenarien machen, die den Komfort und die Effizienz im Haushalt erhöhen.
Fehlerbehebung und Support: ChatGPT kann bei der Fehlerbehebung und dem Support für Smart Home-Geräte helfen, indem es Benutzern Lösungen oder Vorschläge zur Behebung von Problemen bietet.
Automatisierte Kommunikation: ChatGPT kann als Schnittstelle für die Kommunikation zwischen verschiedenen Smart Home-Geräten und -diensten dienen, um eine nahtlose Integration und Koordination von Aktionen zu ermöglichen.
Lernfähige Automatisierung: ChatGPT kann dazu verwendet werden, Benutzerpräferenzen und -verhalten im Laufe der Zeit zu lernen und darauf basierend automatische Anpassungen an Systemeinstellungen oder Gerätesteuerungen vorzunehmen.
Unterhaltung und Bildung: ChatGPT kann auch für Unterhaltungs- und Bildungszwecke genutzt werden, wie zum Beispiel das Beantworten von Quizfragen, das Erzählen von Geschichten oder das Bereitstellen von interessanten Fakten zu verschiedenen Themen.
Beachten Sie jedoch, dass die Nutzung von ChatGPT in einer Hausautomatisierungsumgebung den Datenschutz und die Datensicherheit berücksichtigen sollte, um die Privatsphäre der Benutzer und die Sicherheit ihrer Daten zu gewährleisten.
Auf die Frage wie ich sie in ioBroker einbinden könnte:
Als KI-Textmodell kann ich Ihnen beim Entwerfen eines Adapters für ioBroker helfen, der meine API integriert. Allerdings kann ich nicht direkt den Code für Sie schreiben. Hier ist eine grobe Anleitung, wie Sie mit der Integration beginnen können:
Erstellen Sie zunächst ein neues Adapter-Projekt für ioBroker, indem Sie das ioBroker-Entwicklungswerkzeug create-adapter
verwenden. Weitere Informationen finden Sie in der offiziellen Dokumentation: https://github.com/ioBroker/create-adapter
Installieren Sie die benötigten Abhängigkeiten für die OpenAI-API, zum Beispiel, wenn Sie Node.js verwenden, könnten Sie das offizielle Paket openai
verwenden:
npm install openai
const openai = require('openai');
openai.apiKey = 'YOUR_API_KEY';
async function generateResponse(prompt) {
try {
const result = await openai.Completion.create({
engine: 'text-davinci-002',
prompt: prompt,
max_tokens: 50,
n: 1,
stop: null,
temperature: 0.5,
});
const response = result.choices[0].text.trim();
return response;
} catch (error) {
console.error('Error generating response:', error);
return null;
}
}
Integrieren Sie die Funktion in Ihren ioBroker-Adapter, um auf Benutzereingaben zu reagieren oder geplante Aufgaben auszuführen. Zum Beispiel könnten Sie den Adapter so konfigurieren, dass er auf Ereignisse in Ihrem ioBroker-System reagiert und die API aufruft, um darauf basierend Antworten zu generieren.
Testen Sie Ihren Adapter und stellen Sie sicher, dass er wie erwartet funktioniert. Achten Sie darauf, Fehlerbehandlungs- und Sicherheitsmaßnahmen zu implementieren, um den ordnungsgemäßen Betrieb des Adapters zu gewährleisten.
Denken Sie daran, dass dies nur eine grundlegende Anleitung ist und Sie möglicherweise zusätzliche Anpassungen vornehmen müssen, um die API vollständig in Ihren ioBroker-Adapter zu integrieren.
Hier ein Beispiel der Möglichkeiten
chatGPT ist genial. Ich lass mir von ihr meine ganzen Werbetexte schreiben. Besser hat es die Agentur auch nicht gemacht.
Ich habe mal mit wenig Aufwand ein Script geschrieben, das das was man Alexa gesagt hat in einen Datenpunkt schreibt. Der wiederum wird an ChatGPT gegeben und die Antwort über den Alexa2 Adapter ausgegeben und von Alexa gesprochen. So kann man über die Echo-Dots mit ChatGPT reden. Jetzt müsste man ChatGPT noch mit allen Datenpunkten des IObroker trainieren können und dann würde die KI endlich mal die Rolläden im Sommer runter machen wenn es wirklich notwendig ist ;-) Gruss Ralf
Ich habe mal mit wenig Aufwand ein Script geschrieben, das das was man Alexa gesagt hat in einen Datenpunkt schreibt. Der wiederum wird an ChatGPT gegeben und die Antwort über den Alexa2 Adapter ausgegeben und von Alexa gesprochen. So kann man über die Echo-Dots mit ChatGPT reden. Jetzt müsste man ChatGPT noch mit allen Datenpunkten des IObroker trainieren können und dann würde die KI endlich mal die Rolläden im Sommer runter machen wenn es wirklich notwendig ist ;-) Gruss Ralf
Poste den doch mal - wäre doch sicher ein Anfang!;-)
Kann ich machen. Bin aber jetzt grad auf dem Weg nach Kroatien. Wenn ich aus dem Urlaub zurück komme kann ich die relevanten stellen posten. Der gesamte code ist glaub ich zu spezifisch...
Cool danke.
So. Hier bin ich wieder. Urlaub vorbei Was ich im Grunde machen ist einen Trigger auf den Datenpunkt alexa2.0.History.json zu prorammieren, damit ich alles mitbekomme was denn da so mit Alexa gemacht wird.
on('alexa2.0.History.json'/*json*/, function (json) {
log("Alexa-Script: Alexa hat was gemacht: Value" +json.state.val);
// Parameter json ist ein String; Umwandeln in ein JSON-Objekt
var jsonObj = JSON.parse(json.state.val);
log("Alexa-Script: Success/Summary: " +jsonObj.status+"/"+jsonObj.summary);
log("Alexa-Script: Answer ist:"+jsonObj.answerText);
//Alexa-Aufruf aus jsonObj.summary in Array umwandeln
var commandArray = jsonObj.summary.split(" ");
// Entfernen des WakeWord, falls vorhanden
var wakeWord = commandArray[0];
// Name des Alexa-Geräts, das den Befehl empfangen hat
var deviceName = jsonObj.name.toLowerCase();
//commandArray muss mindesten ein Befehlswort enthalten
if (commandArray.length >= 1) {
if (wakeWords.indexOf(wakeWord) >= 0) {
commandArray.shift();
}
log("Alexa-Script: Echo-Device " + deviceName + ": " + commandArray);
log("Alexa-Script: Echo-Device " + commandArray[0]);
//Verteiler nach dem ersten Befehlswort
switch (commandArray[0]) {
case "stopp":
break;
case "stop":
break;
case "<irgendwas auf das man reagieren möchte>":
tue_was(deviceName, commandArray);
break;
case ...
case ...
default:
if (jsonObj.summary != '') {
if (
jsonObj.answerText="" ||
jsonObj.answerText.includes("unterstützt das nicht") ||
jsonObj.answerText.includes("Das weiß ich leider nicht") ||
jsonObj.answerText.includes("Hilfe und Feedback") ||
jsonObj.answerText.includes("Darauf habe ich leider keine Antwort") ||
jsonObj.answerText.includes("Ich bin mir leider nicht sicher.")
) {
setState("0_userdata.0.Manuelle_Datenpunkte.OpenAI.OpenAIQuestion", jsonObj.summary);
} else {
log("Alexa-Script: Alexa hat schon selber geantwortet");
}
}
}
}
log("Alexa-Script:END");
});
Hier kann man dann die gesprochenen Texte (also das was rlevant ist) aus dem JSON rauslesen. Wenn da aber nichts sinnvolles von Amazon kommt ("Das weiß ich leider nicht" oder so) dann gebe ich den Fragestring an ChatGPT weiter indem ich einen Datenpunkt mit der Frage update:
Den Datenpunkt mit der Frage an OpenAi trigger ich so
const ACCESS_TOKEN = "euerAccessToken";
const MODEL_ID = "text-davinci-002";
//const MODEL_ID = "gpt-3.5-turbo";
const QUESTION_DP_ID = "0_userdata.0.Manuelle_Datenpunkte.OpenAI.OpenAIQuestion";
const ANSWER_DP_ID = "0_userdata.0.Manuelle_Datenpunkte.OpenAI.OpenAIAnswer";
const idOpenAi = "openAi";
var volume = "30";
const https = require('https');
on({id: QUESTION_DP_ID, change: "ne"}, function (obj) {
// Get the current value of the question datapoint
const question = getState(QUESTION_DP_ID).val;
console.log(`Question: ${question}`);
// Set the value of the answer datapoint to "no answer available"
setState(ANSWER_DP_ID, "no answer available");
// Create the HTTP POST options
const options = {
host: 'api.openai.com',
path: '/v1/completions',
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${ACCESS_TOKEN}`
}
};
// Create the HTTP POST request
const req = https.request(options, (res) => {
console.log(`Status: ${res.statusCode}`);
console.log(`Headers: ${JSON.stringify(res.headers)}`);
res.setEncoding('utf8');
let responseData = '';
res.on('data', (chunk) => {
responseData += chunk;
});
res.on('end', () => {
console.log(`Answer: ${responseData}`);
const responseJson = JSON.parse(responseData);
if (responseJson.hasOwnProperty('choices')) {
const answer = responseJson.choices[0].text;
// Set the value of the answer datapoint to the first answer
setState(ANSWER_DP_ID, answer);
// Text über Alexa ausgeben
Ausgabe(idAlexa, answer);
}
});
});
req.on('error', (e) => {
console.error(`Problem with request: ${e.message}`);
});
// Send the HTTP POST request
req.write(JSON.stringify({
"model": MODEL_ID,
"prompt": question,
"max_tokens": 128
}));
req.end();
});
Die Funktion zum Ausgabe der Sprache hab hier hier nicht, weil die ziemlich kompliziert ist beim mir. Im Grund müßt ihr abe rnur den Datenpunkt "alexa2.0.Echo-Devices.
Super probiere ich bei Zeiten mal aus
Adernapf
So. Hier bin ich wieder. Urlaub vorbei Was ich im Grunde machen ist einen Trigger auf den Datenpunkt alexa2.0.History.json zu prorammieren, damit ich alles mitbekomme was denn da so mit Alexa gemacht wird.
on('alexa2.0.History.json'/*json*/, function (json) { log("Alexa-Script: Alexa hat was gemacht: Value" +json.state.val); // Parameter json ist ein String; Umwandeln in ein JSON-Objekt var jsonObj = JSON.parse(json.state.val); log("Alexa-Script: Success/Summary: " +jsonObj.status+"/"+jsonObj.summary); log("Alexa-Script: Answer ist:"+jsonObj.answerText); //Alexa-Aufruf aus jsonObj.summary in Array umwandeln var commandArray = jsonObj.summary.split(" "); // Entfernen des WakeWord, falls vorhanden var wakeWord = commandArray[0]; // Name des Alexa-Geräts, das den Befehl empfangen hat var deviceName = jsonObj.name.toLowerCase(); //commandArray muss mindesten ein Befehlswort enthalten if (commandArray.length >= 1) { if (wakeWords.indexOf(wakeWord) >= 0) { commandArray.shift(); } log("Alexa-Script: Echo-Device " + deviceName + ": " + commandArray); log("Alexa-Script: Echo-Device " + commandArray[0]); //Verteiler nach dem ersten Befehlswort switch (commandArray[0]) { case "stopp": break; case "stop": break; case "<irgendwas auf das man reagieren möchte>": tue_was(deviceName, commandArray); break; case ... case ... default: if (jsonObj.summary != '') { if ( jsonObj.answerText="" || jsonObj.answerText.includes("unterstützt das nicht") || jsonObj.answerText.includes("Das weiß ich leider nicht") || jsonObj.answerText.includes("Hilfe und Feedback") || jsonObj.answerText.includes("Darauf habe ich leider keine Antwort") || jsonObj.answerText.includes("Ich bin mir leider nicht sicher.") ) { setState("0_userdata.0.Manuelle_Datenpunkte.OpenAI.OpenAIQuestion", jsonObj.summary); } else { log("Alexa-Script: Alexa hat schon selber geantwortet"); } } } } log("Alexa-Script:END"); });
Hier kann man dann die gesprochenen Texte (also das was rlevant ist) aus dem JSON rauslesen. Wenn da aber nichts sinnvolles von Amazon kommt ("Das weiß ich leider nicht" oder so) dann gebe ich den Fragestring an ChatGPT weiter indem ich einen Datenpunkt mit der Frage update:
Den Datenpunkt mit der Frage an OpenAi trigger ich so
const ACCESS_TOKEN = "euerAccessToken"; const MODEL_ID = "text-davinci-002"; //const MODEL_ID = "gpt-3.5-turbo"; const QUESTION_DP_ID = "0_userdata.0.Manuelle_Datenpunkte.OpenAI.OpenAIQuestion"; const ANSWER_DP_ID = "0_userdata.0.Manuelle_Datenpunkte.OpenAI.OpenAIAnswer"; const idOpenAi = "openAi"; var volume = "30"; const https = require('https'); on({id: QUESTION_DP_ID, change: "ne"}, function (obj) { // Get the current value of the question datapoint const question = getState(QUESTION_DP_ID).val; console.log(`Question: ${question}`); // Set the value of the answer datapoint to "no answer available" setState(ANSWER_DP_ID, "no answer available"); // Create the HTTP POST options const options = { host: 'api.openai.com', path: '/v1/completions', method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${ACCESS_TOKEN}` } }; // Create the HTTP POST request const req = https.request(options, (res) => { console.log(`Status: ${res.statusCode}`); console.log(`Headers: ${JSON.stringify(res.headers)}`); res.setEncoding('utf8'); let responseData = ''; res.on('data', (chunk) => { responseData += chunk; }); res.on('end', () => { console.log(`Answer: ${responseData}`); const responseJson = JSON.parse(responseData); if (responseJson.hasOwnProperty('choices')) { const answer = responseJson.choices[0].text; // Set the value of the answer datapoint to the first answer setState(ANSWER_DP_ID, answer); // Text über Alexa ausgeben Ausgabe(idAlexa, answer); } }); }); req.on('error', (e) => { console.error(`Problem with request: ${e.message}`); }); // Send the HTTP POST request req.write(JSON.stringify({ "model": MODEL_ID, "prompt": question, "max_tokens": 128 })); req.end(); });
Die Funktion zum Ausgabe der Sprache hab hier hier nicht, weil die ziemlich kompliziert ist beim mir. Im Grund müßt ihr abe rnur den Datenpunkt "alexa2.0.Echo-Devices..Commands.speak" beschreiben
läuft! Spitze danke! hab noch ausgelesen welches Alexa dev angesprochen wurde und den speak command an das entsprechende gerät ausgegeben.
Super Idee. Das könnte ich auch noch erweitern Freut mich dass es geht. Gruss Ralf
Super Idee. Das könnte ich auch noch erweitern Freut mich dass es geht. Gruss Ralf
Wie hast du das Problem gelöst dass die Antworten so lang sind dass Alexa sie dann nicht ausgibt? Die Anfrage auf 30 Wörter begrenzt? Oder Nachricht aufgeteilt?
Wie hast du das Problem gelöst dass die Antworten so lang sind dass Alexa sie dann nicht ausgibt? Die Anfrage auf 30 Wörter begrenzt? Oder Nachricht aufgeteilt?
Moin! Falls es noch interessiert: Wenn du statt dem speak-Datenpunkt den ssml-Datenpunkt nimmst (mit \<speak> davor und \</speak> dahinter), funktionieren auch etwas längere Texte.
Was mich verwirrt ist die Qualität der Ausgabe, z.T. meiner Ansicht nach komplett irre und nicht so, wie ich es aus dem ChatGPT per Browser kenne. Z.B. "Formuliere eine Ansage zu den folgenden Temperaturen: Außen 28°, Küche 25°, Garage 22°" ergibt eine gute, ordentlich formulierte Ansage (abgesehen davon, dass sie bei mir mit Punkt und Leerzeile beginnt). Dann versuchte ich es mit "Außentemperatur 28°" (ahnend, dass das Ergebnis nicht toll sein wird und eher aus einer Rückfrage besteht), und es kam ein langer Text, in dem Firmennamen, Rohrdurchmesser, T-Shirt-Größen und -Beschreibungen und technische Daten eines Fire TV vorkamen. Jedenfalls nichts, was irgendwie sinnreich zu gebrauchen wäre. Wo liegt das (mein) Problem?
Hallo! Wie lang geht denn die Aussage dann? Äh ja bei mir kam nur Müll in der Abfrage raus, ich hab es mir komplett neu gemacht und nun gehts gut 🤣
ich hab jetzt nicht die Worte gezählt, aber sie hat schon eine Minute geredet… SSML ist eh interessant, weil man dort auch Geschwindigkeit, Tonlage usw. beeinflussen kann. Was meinst du mit „komplett neu gemacht“ genau?
Ich hab mir nen eigenen chatgpt Skript gemacht und da kommt jetzt kein Unsinn mehr raus
oh… magst du das hier teilen? Ich hatte die Vermutung, dass eine Einstellung (was mit „DaVinci“…) anders vielleicht besser sein könnte.
ich habe einen Datenpunkt mit frage und Antwort; vergiss nicht den api code! ich habe bei assistant es auf 30 Wörter begrenzt, das kannst du rausnehmen, wenn es mit deiner Methode besser geht!
wenn du bei Message unten das hier einträgst: messages: [{ role: 'system', content: 'Du bist SwagGPT, ein eher unfreundlicher, aber dafür umso sqggiger Chatbot Du bist der Weltbeste Rapper, wie Moneyboy. Benutze Füllwörter wie "sheesh", "Diggi", "turn up". Ersetze "ein" immer durch "1". Benutze "vong" für "von".' },
dann kriegst du einen geilen Rapper, der dir antwortet xD habe ich von dem Video CT3003 übernommen. ist sehr lustig, habe ich bei einem freund so eingerichtet:)
const axios = require('axios'); var CHAT_HISTORY = "0_userdata.0.OpenAI.Chatverlauf"; var QUESTION_DP_ID = "0_userdata.0.OpenAI.neue_Frage"; var ANSWER_DP_ID = "0_userdata.0.OpenAI.neue_Antwort"; var LAST_INFO = "0_userdata.0.OpenAI.lastinfo";
let chatHistory = []; // Variable zum Speichern des Chatverlaufs
on({id: QUESTION_DP_ID, change: "ne"}, function (obj) {
// Get the current value of the question datapoint
const question = getState(QUESTION_DP_ID).val;
const oldquestion = getState(QUESTION_DP_ID).val;
console.log(Question: ${question}
);
let lastRequestTime = getState(LAST_INFO).val;
// Funktion zum Löschen des Chatverlaufs function clearChatHistory() { chatHistory = []; }
const MAX_INACTIVE_TIME = 2 60 1000; // 2 Minuten in Millisekunden
// Funktion zum Prüfen und Löschen des Chatverlaufs bei Inaktivität function checkAndClearChatHistory() { const currentTime = Date.now(); const lastRequestTimeNum = parseInt(lastRequestTime);
if (currentTime - lastRequestTimeNum > MAX_INACTIVE_TIME) { log('Inhalt wird gelöscht:' + chatHistory); clearChatHistory();
} }
async function sendChatGPTRequest(message) {
// Überprüfe und lösche den Chatverlauf bei Inaktivität checkAndClearChatHistory(); let currentTime = Date.now(); log('HistoryInhalt:' + chatHistory); setState(LAST_INFO, currentTime); try { const response = await axios.post('https://api.openai.com/v1/chat/completions', { model: 'gpt-3.5-turbo', // model: 'text-davinci-002', messages: [{ role: 'system', content: 'You are a helpful assistant.' }, ...chatHistory, { role: 'user', content: message + ' Antworte in maximal 30 Wörtern.' }], max_tokens: 128, // Begrenze die Antwort auf 128 Tokens }, { headers: { 'Authorization': 'Bearer **HIER DEIN API CODE*****', 'Content-Type': 'application/json', }, });
const { choices } = response.data;
const reply = choices[0].message.content;
// Speichere die aktuelle Benutzerantwort in der Chat-Historie
chatHistory.push({ role: 'user', content: message });
// Speichere die generierte Antwort des Modells in der Chat-Historie
chatHistory.push({ role: 'assistant', content: reply });
return reply;
} catch (error) { console.error('Error:', error.response.data); throw error; } }
// Beispielanfrage an die Chat API
sendChatGPTRequest(question) .then(reply => { console.log('Antwort:' + reply); setState(ANSWER_DP_ID, reply); }) .catch(error => { console.error('Fehler:' + error); });
}); // Ende ON
sehr vielen Dank! Werde ich die Tage ausprobieren. Die Begrenzung der Ausgabe finde ich auch sehr gut, damit ein verbaler Amoklauf vom ChatGPT nicht teuer wird.
PS: bei mir gehen mit speak nur 27 Wörter… hängt evtl. noch von was anderem ab. Und: im Gegensatz zu speak werden Ausgaben bei ssml hintereinandergehängt, es wird also nicht die erste Ausgabe abgebrochen.
ah klingt gut! ich habs jetzt auf 100 begrenzt und werde es testen! ich danke dir auch für den coolen Hinweis!
Ich glaube wenn man in den Text den man an den Datenpunkt speak gibt alle 256 Zeichen einen ";" einbaut kann man auch längere Text ansagen lassen. Ich hab mir da eine Funkiton von ChtGPT prorammieren lassen die diese Semikolon in einen langen Text einbaut: `/**
@param {string} text */ function prepareTextforAlexa(text) { log ("=============== Prepare for alexa==============="); log("prepare:"+ text); if (typeof text !== 'string') { throw new Error('Input must be a string.'); } const maxLength = 250;
const words = text.match(/\S+/g);
let combinedText = ''; let currentPart = ''; log("Words length="+words.length); for (let i = 0; i < words.length; i++) { const word = words[i]; if ((currentPart.length + word.length + 1) <= maxLength) { currentPart += word + ' '; log("CP["+i+"]:"+currentPart); } else { combinedText += currentPart.trim() + '; '; currentPart = word + ' '; log("!!!!current Part=" + currentPart); log ("CT:"+combinedText); } }
combinedText += currentPart.trim(); log ("================================================="); return combinedText; }`
Gruss Ralf
Inzwischen sind bei mir die Quotas ausgelaufen. Habt ihr das was gekauft? Wenn ja welches Modell?
hello everyone, have you made any progress with the instance for iobroker? i've got the chatgpt voice assistant working so far but it would be cool if there was an instance to link it to. greetings
Wie ist der Status dieses Projektes? Wird es irgendwann einen GPT4-Adapter geben, der auch Zugriff auf den Objektbaum hat? Er sollte ja selbst z.B. alle Hue-Lampen erkennen und auf die Anweisung „mach mal Party!“ die Lichter sinnvoll steuern.
Wie ist der Status dieses Projektes? Wird es irgendwann einen GPT4-Adapter geben, der auch Zugriff auf den Objektbaum hat? Er sollte ja selbst z.B. alle Hue-Lampen erkennen und auf die Anweisung „mach mal Party!“ die Lichter sinnvoll steuern.
In der letzten Release vom JavaScript Adapter gibt es eine chatgpt Implementierung
Sorry die Frage aber was heißt das konkret? Lg
Ich habe gefunden, was DutchmanNL meinte: https://www.youtube.com/watch?v=OigIpE3Aez0
Das hat aber nichts mit der Idee hier zu tun, das ist nur ein integrierter Javascript-Code-Generator für die Skripte.
Bitte beim Thema bleiben. Dinge die nicht in Zusammenhang mit einem ioBroker chatGPT Adapter stehen bitte woanders diskutieren. Das Topic wird sonst unnötig groß.
Das habe ich ja genau erklärt in meinen Kommentar, dass der Hinweis von DutchmannNL eben off-topic war. Du hast den falschen Kommentar off-topic markiert.
GPT4 Turbo wurde gerade vorgestellt: https://www.youtube.com/live/U9mJuUkhUzk
Das hat viele Erweiterungen die für einen ioBroker-GPT4-Adapter hilfreich sind, wie grösserer Kontext (128k), json-Response und multiple functions calling, custom GPTs usw.
Neu kann man direkt custom GPTs und Assistenten generieren, die dann den Kontext selbst behalten, er also nicht immer mitgeschickt werden muss. Eigentlich ideal für einen ioBroker-Adapter.
Die Implementierung sollte nicht zu komplex sein. Die Anfrage per Alexa entgegen nehmen, einen komprimierten Objektbaum als Kontext mitschicken und die Property-Änderungen per json zurückerhalten.
Sollte man nicht schon frühzeitig auch im Hinterkopf haben, LocalAI mit einzubeziehen?
Meines Wissens nach ist die API identisch.
Hey Leute, hat sich nun schon jemand die Mühe gemacht, aus den ganzen prachtvollen Ideen einen Adapter zu machen? Wäre schon nice. :-)
Hallo, alles tolle Ideen hier :-) würde gerne auch eine llm integration in iObroker haben um gewisse abläufe zu automatisieren und intelligenter zu machen. Spass macht es dann, wenn die prompts, die man in ein solches llm schickt so konkret und detailliert sind, dass das LLM entsprechend sinnvolle Antworten zurückschickt. Was es also bräuchte als Iobroker adapter wäre eine "prompt template engine" mit der man prompt templates für die oben beschriebenen Automatisierungs-Anwendungen schreiben kann. Diese Prompt-Templates könnte man dann immer wieder verwenden und mit verschiedenen actions aus dem Smarthome triggern. in der prompt template engine kann man nicht nur prompts schreiben, sondern diese auch "grounden", das heißt mit konkreten Datenpunkten aus dem Smarthome anreichern. Wird der prompt dann zur Laufzeit ausgeführt, so werden die aktuellen Werte der Datenpunkte in den Prompt geschrieben und dann an das LLM geschickt.
schaut Euch mal bitte an, wie Salesforce dies für use cases im Marketing, Sales und Service umsetzt: https://help.salesforce.com/s/articleView?id=sf.generative_ai_trust_arch.htm&type=5 neben dem prompt schreiben gibt es auch funktionen für "secure data retrieval & Grounding", "data masking" und "prompt defense" auf dem hinweg und "Toxicity detection", "Data demasking" und "Audit Trail" auf dem Rückweg vom llm. hier kann man sich auch eine Testumgebung bauen um das selbst mal auszuprobieren: https://trailhead.salesforce.com/de/content/learn/projects/quick-start-prompt-builder/get-started-with-prompt-builder
um das problem von @ELK169 oben zu lösen kann man im prompt template dann auch anweisungen geben, wie lang der ausgabetext werden kann im prompt template auch eine token obergrenze für die Antwort eingestellt werden.
also wenn sich jemand an die STruktur eines solchen Adapters macht. dann wäre es super wenn man einige der bei Salesforce verfügbaren dinge mit einbaut. (ob man jetzt ausgereifte Toxicity detection oder audit trail braucht sei dahin gestellt.). Aber evtl. ein Masking/ Demasking mechanismus, so dass man den namen seiner Datenpunkte und geräte nicht dem LLM verraten muss und diese trotzdem auf der Return journey wieder spezifisch angesprochen werden können.
a la: prompt: Die Luftfeuchtigkeit drinnen im {Wohnzimmer} beträgt {90%} bei einer Temperatur von {20°C}. Die Außentemperatur beträgt {16°C} bei einer Luftfeuchtigkeit von {50%}. Finde heraus ob die Absolute luftfeuchtigkeit draußen geringer als drinnen ist und ob es sich lohnt die {Dachfenster} zum lüften zu öffnen.
und was natürlich schön wäre, wenn man im Adapter konfigurieren könnte zu welchem LLM man sich verbindet. das wär a traum.
was meint ihr dazu?
Ja, das klingt doch schon sehr detailliert ;-) Spontan möchte ich nur anmerken, dass wir frühzeitig daran denken, nicht OpenAI fest zu "verdrahten" und damit auch Alternativen eine Chance geben. Wenn man sich an die API hält sollte das aber stressfrei sein, oder?
What kind of device or service would you like to see an adapter for? An adapter for ChatGPT, OpenAI's large-scale AI language model. ChatGPT can be used to generate human-like text responses based on given input prompts. More information can be found at https://beta.openai.com/docs/api-reference/introduction.
Is the device connected to the internet or only available on a local network? The ChatGPT service is connected to the internet and requires an internet connection to access the API.
Is an official App or Website available? There is no official app, but the API documentation is available on the OpenAI website: https://beta.openai.com/docs/api-reference/introduction.
Is an official API including documentation available? Yes, the official API documentation is available here: https://beta.openai.com/docs/api-reference/introduction.
Are other libraries for an integration available? There is an official openai npm package for JavaScript, which can be found here: https://www.npmjs.com/package/openai. Other unofficial libraries may also be available for different programming languages, but the official JavaScript package is recommended for ioBroker integration.
Is this device already integrated in other Smart Home systems? As ChatGPT is an AI language model and not a device, it is not natively integrated into other Smart Home systems. However, developers can create custom integrations for their specific use cases.
Is this device already integrated in homebridge? Might the ham adapter in combination with the homebridge plugin be sufficient? ChatGPT is not directly integrated with homebridge. However, you may be able to create a custom homebridge plugin to access the ChatGPT API and use the ham adapter in combination with that plugin.
Additional context Integrating ChatGPT with ioBroker would enable users to generate AI-generated responses based on various input prompts, which could be useful for automating tasks, providing information, or creating more interactive experiences within the ioBroker environment.