תיעוד/מתקדם

חיבור סוכן Hermes

הריצו את רכיב השיחות שלנו עם סוכן Hermes שרץ אצלכם בתור המוח. בסוף התהליך המספר שלכם עונה עם סוכן קולי בזמן אמת, שמדבר בפרסונה של ה-Hermes שלכם, זוכר את כל השיחה, ומקליט ומדווח על שיחות כמו כל סוכן אחר.

איך החלקים מתחברים

Caller -> phone network -> voice gateway -> session shim    -> Hermes API server
                           (on your host)   127.0.0.1:8788    127.0.0.1:8642

רכיב השיחות מדבר עם המוח שלו דרך OpenAI Responses API (POST /v1/responses), ושרת ה-API של Hermes מדבר באותו API בדיוק. נשאר רק הבדל אחד לגשר עליו: הזיכרון. רכיב השיחות מחבר את כל התגובות של שיחה אחת בכך שהוא שולח בכל בקשה את אותה כותרת x-openclaw-session-key. Hermes מתעלם מכותרות שהוא לא מכיר, ומשרשר שיחה דרך השדה conversation בגוף הבקשה.

רכיב תיווך (shim) קטן מעתיק את הכותרת לשדה הזה ומעביר את כל השאר בלי שינוי. כך הסוכן זוכר את כל השיחה, מתחילתה ועד סופה. תוכנית ההתקנה כותבת את רכיב התיווך ומריצה אותו כשירות. כל השאר הוא הגדרות.

לפני שמתחילים

  • סוכן קולי בדשבורד, כדי להפיק טוקן התקנה.
  • שרת Linux עם systemd שכבר מריץ את סוכן ה-Hermes שלכם, ושאפשר להריץ עליו את תוכנית ההתקנה כ-root או עם sudo בלי סיסמה. תוכנית ההתקנה יוצרת משתמש שירות ייעודי לרכיב השיחות.
  • Node.js ב-PATH של השרת, בשביל רכיב התיווך.

פרופיל Hermes נתמך ב-Linux בלבד. ב-macOS תוכנית ההתקנה תומכת ב-OpenClaw.

שלב 1: מפעילים את שרת ה-API של Hermes

הוסיפו את השורות האלה לקובץ הסביבה של Hermes, למשל ~/.hermes/.env, ואז הפעילו מחדש את Hermes:

API_SERVER_ENABLED=true
API_SERVER_KEY=<a-long-secret>
# the defaults are what the gateway expects:
# API_SERVER_HOST=127.0.0.1
# API_SERVER_PORT=8642

בדקו שהוא עלה:

curl -s http://127.0.0.1:8642/v1/health
# the response includes "status":"ok"
שמרו את המפתח בקובץ ה-.envתוכנית ההתקנה מוצאת את המפתח כשהיא קוראת את API_SERVER_KEY מתוך /docker/*/.env, ~/.hermes/.env או /root/.hermes/.env, ושומרת את הראשון ששרת ה-API בפורט 8642 מקבל. מפתח שמוגדר במקום אחר לא יימצא.

שלב 2: מתקינים את רכיב השיחות

בהגדרות הסוכן, תחת Settings (הגדרות) ואז Installation (התקנה), הפיקו טוקן התקנה. הוא תקף לשימוש אחד ופג אחרי 15 דקות. אחר כך, על שרת ה-Hermes:

curl -sSL https://api.talktomyagent.io/install.sh \
  | bash -s -- --token <YOUR_TOKEN> --agent-profile hermes --accept-license

תוכנית ההתקנה מזהה בעצמה Hermes שרץ על השרת, ו---agent-profile hermes הופך את הבחירה למפורשת. אחר כך היא:

  1. מוצאת את ה-API_SERVER_KEY שעובד ומעבירה אותו לרכיב השיחות כטוקן ה-backend שלו, ומכוונת אותו לרכיב התיווך בכתובת 127.0.0.1:8788, לא ישירות ל-Hermes.
  2. יוצרת משתמש שירות נעול שאינו root, ttma-voice, שתיקיית הבית שלו היא /opt/ttma-voice. רכיב השיחות מותקן ב-/opt/ttma-voice/ninja-talk/, וסביבת העבודה שלו היא /opt/ttma-voice/workspace/.
  3. כותבת את רכיב התיווך ומפעילה אותו כשירות ttma-hermes-shim, שמאזין רק ב-127.0.0.1.
  4. מעתיקה את הפרסונה שלכם מ-Hermes לסביבת העבודה הקולית: SOUL.md, וגם USER.md ו-MEMORY.md מתוך התיקייה memories של Hermes. טיימר מעתיק אותם שוב כל 15 דקות, כך ששינויים ב-Hermes מגיעים לסוכן הקולי בלי שתצטרכו לעשות דבר.
  5. לוקחת את אזור הזמן של הסוכן הקולי מההגדרה timezone בקובץ config.yaml של Hermes, אם הוגדרה.
  6. יוצרת פלייבוק קולי ראשוני ומחילה את פרופיל התכונות של Hermes (פירוט בהמשך).

שימו לב לסימני ה-V. אזהרה ש-Node.js לא נמצא אומרת שהשירות של רכיב התיווך לא יכול לעלות. התקינו Node.js, ואז הריצו sudo systemctl restart ttma-hermes-shim.service.

פרופיל התכונות של Hermes

חלק מהתכונות של רכיב השיחות תלויות ב-OpenClaw, ולכן תוכנית ההתקנה קובעת את הערכים האלה ב-/opt/ttma-voice/ninja-talk/config.json, וקובעת אותם מחדש בכל התקנה חוזרת:

"features": { "kbSearch": false, "crmCapture": false, "openclawStream": false },
"context":  { "files": ["SOUL.md", "USER.md", "MEMORY.md"] }
הגדרהלמה
kbSearch: falseהחיפוש המובנה במאגר הידע קורא את מסד הנתונים המקומי של OpenClaw, שאין בשרת Hermes. במקום זה הסוכן נשען על Hermes בכל מה שקשור לידע.
crmCapture: falseזיכרון המתקשרים משתמש בכלים של סביבת העבודה של OpenClaw, שלא קיימים בשרת Hermes.
openclawStream: falseרכיב התיווך מעביר תשובות רגילות, ולא ממיר תשובה שמגיעה בסטרימינג.
context.filesקובצי הפרסונה שהועתקו מ-Hermes. ל-Hermes אין IDENTITY.md.

openclawQuery נשאר פעיל. למרות השם, זה הכלי "לשאול את המוח" שקורא ל-/v1/responses, ודרכו Hermes עונה. העברת משימות ארוכות לערוץ צ'אט פונה ל-endpoint שקיים רק ב-OpenClaw, ולכן היא נשארת כבויה.

שלב 3: בודקים

קודם בדקו את הנתיב ל-Hermes, בלי להוציא שיחה. הבקשה הזו עוברת דרך רכיב התיווך, וצריכה להחזיר JSON עם מערך output שמכיל "type":"output_text":

curl -s http://127.0.0.1:8788/v1/responses \
  -H "Authorization: Bearer <your API_SERVER_KEY>" \
  -H "Content-Type: application/json" \
  -H "x-openclaw-session-key: test-123" \
  -d '{"model":"openclaw","input":"Say hello in five words."}'

אחר כך בחרו קול ומספר בדשבורד, והתקשרו. עשו בדיקת זיכרון: בשיחה מהמספר שלכם, ספרו לסוכן פרט כלשהו ("קוראים לי דנה"), וכמה תגובות אחר כך שאלו "איך קוראים לי?". תשובה נכונה אומרת שרכיב התיווך משרשר את השיחה. עקבו אחרי הלוגים בזמן הבדיקה:

ninja-talk logs -f
sudo journalctl -u ttma-hermes-shim.service -n 30

מתי הסוכן פונה ל-Hermes

הסוכן הקולי מדבר בעצמו, על סמך קובצי הפרסונה והפלייבוק, ופונה ל-Hermes דרך openclaw_query כשבקשה דורשת את המוח. באילו שיחות זה אפשרי נקבע לפי מצב השיחה:

  • שיחות של בעל העסק (מצב פרטי, מהמספר שלכם) ושיחות שהסוכן מוציא יכולות לבקש מ-Hermes כל דבר שהוא יודע לעשות, כולל הסקילים (skills) שלו.
  • שיחות ציבוריות אף פעם לא מגיעות ל-Hermes. מתקשרים מהציבור מקבלים תשובות מתוך הפרסונה, הפלייבוק וכל כלי מותאם שתוסיפו. כתבו קטע ## Public Mode אמיתי בקובץ /opt/ttma-voice/workspace/protocols/dojo-voice-agent-playbook.md לפני שאתם מפרסמים את המספר.

רכיב התיווך משתמש במפתח השיחה (session key) של רכיב השיחות כמזהה השיחה ב-Hermes. שיחות של בעל העסק ושיחות שהסוכן מוציא משתמשות כולן במפתח של בעל העסק.

פרסונה וקבצים

  • ערכו את הפרסונה ב-Hermes (SOUL.md וקובצי הזיכרון שלו). הטיימר מעתיק אותם לסביבת העבודה הקולית כל 15 דקות ודורס את מה שיש שם, ולכן שינוי שנעשה ישירות ב-/opt/ttma-voice/workspace/ יימחק.
  • הפלייבוק, voice-tools.json והמקורות שנטענים תמיד נמצאים בסביבת העבודה הקולית, /opt/ttma-voice/workspace/, ושם אתם עורכים אותם. ראו פלייבוקים וכלים מותאמים.
  • קובצי התמלול נכתבים ל-/opt/ttma-voice/ninja-talk/transcripts/. ראו תמלולי שיחות.

מה עובד

יכולתעם Hermes
שיחה בזמן אמת עם זיכרון לאורך כל השיחהעובד, דרך רכיב התיווך
פרסונה מתוך SOUL.md וקובצי הזיכרוןעובד, מסונכרן מ-Hermes
Hermes עונה, עם הסקילים שלובשיחות של בעל העסק ובשיחות שהסוכן מוציא
הקלטה, תמלולים דרך API ו-webhook, שיחות יוצאות דרך ה-Voice APIעובד, כמו בכל סוכן
פלייבוק, מקורות שנטענים תמיד, כלי HTTPS מותאמיםעובד
חיפוש מובנה במאגר הידע, זיכרון מתקשריםכבוי: OpenClaw בלבד. בנו את המקבילה כסקילים של Hermes.
העברת משימות ארוכות, כלים ישירים של OpenClawOpenClaw בלבד

פתרון תקלות

תסמיןמה לבדוק
הסוכן שוכח דברים באמצע השיחהרכיב התיווך לא רץ, או שרכיב השיחות לא מכוון אליו. בדקו את systemctl status ttma-hermes-shim.service, והריצו את ה-curl משלב 3 פעמיים עם אותו x-openclaw-session-key, כדי לוודא שהתשובה השנייה זוכרת את הראשונה.
הסוכן אומר שלא הצליח להגיע ל-backendHermes או רכיב התיווך לא פועלים, או שהמפתח שגוי. בדקו את /v1/health בפורט 8642, ואז את ה-curl משלב 3 בפורט 8788. הלוג של רכיב השיחות מציין את הסטטוס ש-Hermes החזיר.
הלוג מראה 401 מה-backendהטוקן של רכיב השיחות כבר לא תואם ל-API_SERVER_KEY של Hermes, למשל אחרי שהחלפתם את המפתח. הריצו שוב את תוכנית ההתקנה עם טוקן התקנה חדש, כדי שתקלוט את המפתח החדש.
פרסונה כללית או שגויהSOUL.md חסר ב-/opt/ttma-voice/workspace/. בדקו שהוא קיים ב-Hermes, ושה-ttma-persona-sync.timer פעיל.
תוכנית ההתקנה מודיעה שלא נמצא מפתח שעובדשרת ה-API של Hermes לא מופעל, לא רץ בפורט 8642, או שהמפתח שלו לא נמצא באחד מקובצי ה-.env שמופיעים בשלב 1.

כדי להסיר הכול, הריצו את תוכנית ההתקנה במצב הסרה (uninstall). היא מסירה גם את רכיב התיווך, את טיימר הפרסונה ואת משתמש השירות שיצרה. רוצים עזרה בהגדרה? ספרו לנו מה אתם מריצים.

איזו שיחה הסוכן שלכם יקבל קודם?

ספרו לנו אילו בקשות הצוות שלכם מקבל שוב ושוב. נציע לכם מאיפה כדאי להתחיל.