• הרשמה
    • התחברות
    • חיפוש
    • דף הבית
    • אינדקס קישורים
    • פוסטים אחרונים
    • קבלת התראות מהדפדפן
    • משתמשים
    • חיפוש בהגדרות המתקדמות
    • חיפוש גוגל בפורום
    • ניהול המערכת
    • ניהול המערכת - שרת private

    בינה מלאכותית מטורף

    הסברים מסודרים ממשתמשים
    1
    1
    54
    טוען פוסטים נוספים
    • מהישן לחדש
    • מהחדש לישן
    • הכי הרבה הצבעות
    תגובה
    • הגיבו כנושא
    התחברו בכדי לפרסם תגובה
    נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
    • א
      איתי כהן 0 נערך לאחרונה על ידי

      בינה מלאכותית מטורף באמת זה עובד לי שווה בדיקה לקחתי את המידע על ידי הבינה המלאכותית

      app.py

      import os
      import requests
      from flask import Flask, request, Response, send_file
      from twilio.twiml.voice_response import VoiceResponse
      import openai
      import uuid
      from pydub import AudioSegment
      import subprocess

      app = Flask(name)

      סביבה / משתנים - הגדירו ENV vars

      TWILIO_AUTH_TOKEN = os.environ.get("TWILIO_AUTH_TOKEN")
      OPENAI_API_KEY = os.environ.get("OPENAI_API_KEY")
      openai.api_key = OPENAI_API_KEY

      כתובת זמנית לשמירת קבצים

      TMP_DIR = "/tmp/phonebot"
      os.makedirs(TMP_DIR, exist_ok=True)

      1) קיבלנו שיחה נכנסת - נשדר הודעה ואז נבקש הקלטה

      @app.route("/voice", methods=["POST"])
      def voice():
      resp = VoiceResponse()
      # הודעה קצרה (בעברית)
      resp.say("שלום. דבר עכשיו, אחרי הסיגנל.", voice="alice", language="he-IL")
      # הקלטה — Twilio ישלח callback ל-/recording
      resp.record(max_length=10, action="/recording", play_beep=True, trim="trim-silence")
      # במקרה שלא הוקלט כלום
      resp.say("לא קיבלתי קול. להתראות.")
      return Response(str(resp), mimetype="text/xml")

      2) Twilio קורא כשההקלטה מוכנה (URL ל-recording_url יש ב-form)

      @app.route("/recording", methods=["POST"])
      def recording():
      recording_url = request.values.get("RecordingUrl") # URL ל-wav של Twilio
      call_sid = request.values.get("CallSid")
      if not recording_url:
      resp = VoiceResponse()
      resp.say("אירעה שגיאה בהקלטה.")
      return Response(str(resp), mimetype="text/xml")

      # הורדת הקובץ
      r = requests.get(recording_url + ".wav")  # Twilio מציע .wav
      filename = f"{TMP_DIR}/{uuid.uuid4().hex}_in.wav"
      with open(filename, "wb") as f:
          f.write(r.content)
      
      # 3) ASR: שליחה ל-OpenAI Whisper (דוגמה באמצעות openai.Audio.transcriptions)
      # שים לב: אם ה-SDK/endpoint השתנה — יש להתאים לפי התיעוד העדכני של OpenAI
      try:
          with open(filename, "rb") as audio_file:
              # שימוש בדוגמת API; יתכן שתצטרך להתאים לקריאות עדכניות
              transcript = openai.Audio.transcriptions.create(
                  file=audio_file,
                  model="whisper-1"
              )
              question_text = transcript["text"]
      except Exception as e:
          question_text = ""
          print("ASR error:", e)
      
      if not question_text:
          resp = VoiceResponse()
          resp.say("לא הצלחתי להבין. נסה שוב מאוחר יותר.")
          return Response(str(resp), mimetype="text/xml")
      
      print("Recognized:", question_text)
      
      # 4) שליחה ל-LLM לקבלת תשובה קצרה
      try:
          chat = openai.ChatCompletion.create(
              model="gpt-4o-mini",  # החלף לדגם ששייך לך
              messages=[
                  {"role": "system", "content": "ענה בעברית בקצרה ובפשטות, משפט אחד או שניים."},
                  {"role": "user", "content": question_text}
              ],
              max_tokens=60,
          )
          answer_text = chat["choices"][0]["message"]["content"].strip()
      except Exception as e:
          print("LLM error:", e)
          answer_text = "מצטער, כרגע אין לי תשובה."
      
      print("Answer:", answer_text)
      
      # 5) TTS: המרת התשובה לקובץ WAV (נשתמש ב-OpenAI TTS דמיוני; אם אין - השתמש ב-ElevenLabs/Google)
      tts_wav = f"{TMP_DIR}/{uuid.uuid4().hex}_tts.wav"
      try:
          # דוגמה כללית: שלח ל-OpenAI TTS או ElevenLabs כאן
          # --- אם אין TTS של OpenAI זמין בחשבון, החלף לקריאה ל-ElevenLabs/Google
          tts_resp = openai.Audio.speech.create(
              model="gpt-4o-mini-tts",  # שם מדמה - החלף לפי תיעוד אמיתי
              voice="alloy",
              input=answer_text,
              format="wav"
          )
          with open(tts_wav, "wb") as f:
              f.write(tts_resp)
      except Exception as e:
          print("TTS error or not available:", e)
          # פתרון גיבוי: השתמש ב-gTTS (לא אידיאלי לעברית) או יצירת WAV דרך שירות אחר
          # כאן נשמור קובץ אוטומטי דמוי פשוט - או תוכל לקרוא ל-ElevenLabs API
          from gtts import gTTS
          tmp_mp3 = tts_wav + ".mp3"
          gTTS(answer_text, lang="he").save(tmp_mp3)
          # המרה ל-wav
          AudioSegment.from_mp3(tmp_mp3).export(tts_wav, format="wav")
      
      # 6) אפקט רובוטי באמצעות ffmpeg (ring mod/simple vocoder)
      robot_wav = tts_wav.replace("_tts.wav", "_robot.wav")
      try:
          # דוגמה פשוטה: הורדת pitch ויישום ring-mod עם ffmpeg
          # הערה: ffmpeg צריך להיות מותקן והפקודות עשויות להשתנות
          # קומנדלה שמשנה pitch וקצת distortion:
          cmd = [
              "ffmpeg", "-y", "-i", tts_wav,
              "-af",
              "asetrate=44100*0.95,aresample=44100,atempo=1.0,adelay=0|0,acrusher=bits=8:mode=full",
              robot_wav
          ]
          subprocess.run(cmd, check=True)
      except Exception as e:
          print("ffmpeg error:", e)
          # אם כשלנו - השאר את המקורי
          robot_wav = tts_wav
      
      # 7) החזרת TwiML שמשמיעה את ה-WAV למתקשר
      resp = VoiceResponse()
      # Twilio יכול להשמיע URL ישיר; נספק קובץ דרך endpoint משלנו
      play_url = request.url_root + "play/" + robot_wav.split("/")[-1]
      resp.play(play_url)
      resp.say("סיימתי. להתראות.")
      return Response(str(resp), mimetype="text/xml")
      

      נקודת שירות לשרת את הקבצים (פשוטה - אמורה להיות מוגנת/מוגבלת)

      @app.route("/play/<filename>", methods=["GET"])
      def play_file(filename):
      path = f"{TMP_DIR}/{filename}"
      if not os.path.exists(path):
      return "Not found", 404
      return send_file(path, mimetype="audio/wav")

      if name == "main":
      app.run(host="0.0.0.0", port=5000, debug=True)

      מאוד מקווה שזה עובד לכולם כי אם לא תכתבו לי וימחוק ולי זה עובד בלי מפתח גישה

      תגובה 1 תגובה אחרונה תגובה ציטוט -1
      • פוסט ראשון
        פוסט אחרון