יצירת בינה מלאכותית טלפונית מדריך
-
שלב א'
הרצת הקוד הבא בשלוחה הרצויה:type=api api_link=פה תכניס את הכתובת של השרת שלך api_url_post=yes api_000=RECORD_PATH,no,record,/9/9,user_query_temp,no,yes,no api_end_goto=/ api_answer_OK=read=t api_answer_ERROR_LINK=../error_handler
שלב ב'
להוציא api מהאתר של OpenAI (https://platform.openai.com/)
שלב ג'
התקנת המתמלל של גוגל- "SpeechRecognition"
התקנת המתמלל
לקיש על מקש הווינדואס ביחד עם האות R באנגלית ולכתוב CMD (זה פותח את טרמינל)
ולהריץ: pip install flask openai SpeechRecognition pydub
שלב ד'
יצירת סקריפט ב nodejs שיצור שרת שיעשה את הדברים הבאים:(אני יעלה בהמשך השיחה)
1- יקבל מהמערכת שלך הקלטה עם הדיבור של המשתמש
2 ישלח את זה למתמלל שהתקנו
*ישלח את התמלול ל- GPT דרך ה- API שהוצאנו בשלב ב'
3 יקבל את התמלול בחזרה וישלח אותו למערכת
ואז המקריא של "ימות המשיח יקריא את הטקסט למשתמש
שלב ה'
צריך להתקין את "נגרוק"
התקנת נגרוק
א' הורדת נגרוק מהאתר הרישמי: https://ngrok.com/download/
הפעלת נגרוק
אחרי שמריצים את הסקריפט nodejs נקבל תגובה בחזרה מטרמינל עם כתובת שרת אך זה שרת פנימי שהיא אפשר להשתמש בו עבור ימות המשיח ולכן צריך להפעיל את "נגרוק"
אחרי שמפעילים את הסקריפט לא לסגור את חלון הטרמינל
פותחים חלון טרמינל חדש ריק ומריצים בו את הקוד הבא: ngrok http 5000ולאחר מכן נקבל תגובה של נגרוק כמו טבלא כזו באחת השורות יהיה כתוב את כתובת השרת
משהו שנראה בערך כמו זה:
https://a1b2c3d4.ngrok.io -> forwards to http://localhost:3000(זה לא כתובת אמיתית מה שכתבתי פה)
צריך להעתיק את הכתובת שלפני ה"חץ ולהכניס לימות המיח במקום הנכון בקוד של ה-ext.ini" -
-
פוסט זה נמחק! -
@יוסף-המתכנת כתב ביצירת בינה מלאכותית טלפונית מדריך:
api_link=פה תכניס את הכתובת של השרת שלך
איך אני ידוע מה השרת שלי ?
-
פוסט זה נמחק! -
יצירת השרת ע"י nodejs
שלב א'
לפתוח את "פנקס הרשימות"
שלב ב' לכתוב בו את הקוד הבא ולשמור בשם "grok-transcribe-gpt-server.js"
הקודrequire('dotenv').config(); const express = require('express'); const multer = require('multer'); const fs = require('fs'); const axios = require('axios'); const { SpeechClient } = require('@google-cloud/speech'); const app = express(); const upload = multer({ dest: 'uploads/' }); const speechClient = new SpeechClient(); const PORT = process.env.PORT || 3000; const OPENAI_API_KEY =פה שים את ה API'; const DEFAULT_LANG = 'he-IL'; function guessEncoding(mimetype) { if (!mimetype) return undefined; mimetype = mimetype.toLowerCase(); if (mimetype.includes('wav')) return 'LINEAR16'; if (mimetype.includes('x-wav')) return 'LINEAR16'; if (mimetype.includes('mpeg') || mimetype.includes('mp3')) return 'MP3'; if (mimetype.includes('ogg')) return 'OGG_OPUS'; if (mimetype.includes('webm')) return 'WEBM_OPUS'; if (mimetype.includes('flac')) return 'FLAC'; return undefined; } app.get('/', (req, res) => { res.send('Server is running. POST /transcribe with form-data field `audio`.'); }); app.post('/transcribe', upload.single('audio'), async (req, res) => { if (!req.file) { return res.status(400).json({ error: 'No audio file uploaded.' }); } const filepath = req.file.path; const mimetype = req.file.mimetype; const lang = req.query.lang || DEFAULT_LANG; try { const fileBuffer = fs.readFileSync(filepath); const audioBytes = fileBuffer.toString('base64'); const encoding = guessEncoding(mimetype); const request = { audio: { content: audioBytes }, config: { ...(encoding ? { encoding } : {}), languageCode: lang, enableAutomaticPunctuation: true, }, }; const [response] = await speechClient.recognize(request); let transcription = ''; if (response && response.results) { transcription = response.results .map(r => (r.alternatives && r.alternatives[0]) ? r.alternatives[0].transcript : '') .join('\n') .trim(); } if (!transcription) transcription = ''; const openaiPayload = { model: 'gpt-3.5-turbo', messages: [ { role: 'system', content: 'You are a helpful assistant.' }, { role: 'user', content: `Transcription (language ${lang}):\n${transcription}` } ], max_tokens: 800, temperature: 0.2, }; const openaiRes = await axios.post('https://api.openai.com/v1/chat/completions', openaiPayload, { headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${OPENAI_API_KEY}`, }, }); let assistantReply = ''; try { const choices = openaiRes.data.choices || []; if (choices.length > 0 && choices[0].message) { assistantReply = choices[0].message.content.trim(); } else { assistantReply = JSON.stringify(openaiRes.data); } } catch (err) { assistantReply = ''; } res.json({ transcription, gpt_reply: assistantReply }); } catch (err) { res.status(500).json({ error: 'Server error', details: err.message }); } finally { try { fs.unlinkSync(filepath); } catch (e) { } } }); app.listen(PORT, () => { console.log(`Server listening on port ${PORT}`); });
לאחר מכן ללכת במנהל הקבצים למיקום של הקובץ ואז בשורת המיקום של הקובץ למחוק את מה שכתוב ולכתוב "CMD" ווללחוץ אנטר
(כפי שרואים בתמונה איפה לכתוב CMD ואת הקובץ באותו מיקום)ואז יפתח הטרמינל באותו מיקום
ואז לכתוב בטרמינל
pip install flask openai SpeechRecognition pydub
וללחוץ אנטר ואז לאחר שזה יגמור לרוץ לכתוב:
npm install express multer dotenv axios @google-cloud/speech
וללחוץ אנטר ואז לאחר שזה יגמור לרוץ לכתוב:
node ngrok-transcribe-gpt-server.js
ואז לפתוח טרמינל חדש ריק לא לסגור את הישן (לכתוב CMD במיקום של הקובץ כמו מקודם)
ולכתוב
ngrok http 3000
ואז להעתיק את כתובת השרת (כתבנו איפה זה בתחילת המדריך בשלב ה' או ד') ולהמשיך משאר המדריך הראשון -
-
@יעקב-קליין אותו דבר בדיוק!
-
@יוסף-המתכנת עשיתי אנטר אבל לא מסתדר אחר כך
-
@יעקב-קליין באיזה שלב אתה
הוצאת - API
איפה אתה? -
אל תדלג על שום שלב במדריך עם תדלג זה לא יעבוד לך
-
-
א' יש לך API מOpenAI (הסברתי איך להוציא)?
ב'הכנסת את API במקום המתאים בקובץ?
ג' פתח את טרמינל כמו בהסבר?
ד' כתבת בטרמינל את מה שאמרתי לכתוב?
ה' את כל השלבים הקודמים עשית?
ו' התקנת "נגרוק"? -
@יעקב-קליין פתחתי צ'אט למי שלא הצליח לעשות כמו ההסבר במדריך בקישור הזה
https://f2.freeivr.co.il/topic/18721/יצירת-בינה-מלאכותית-טלפונית-כמו-במדריך-של-יוסף-המתכנת/3 -
@יוסף-המתכנת אבל מה עוזר לך עם ngrok?, זה הרי עובד רק כשהמחשב פתוח ואתה מפעיל את השרת!
-
@CUBASE נכון! אלא למי שרוצה ליצור שרתים חיצוניים (הוא רצה מערכת שתחפש בשבילו מידע על רכבים) ואת האמת אף פעם לא ניסיתי ליצור שרת חיצוני כך שאני לא יכול לכתוב מדריך על משהו שלא עשיתי
-
@יוסף-המתכנת אבל אין קטע במערכת טלפונית שעובדת רק כשהמחשב פתוח - אפשר כבר לבדוק במחשב..
-
@CUBASE לי אישית זה עזר כי המחשב שלי פתוח כמעט כל הזמן