Jobsuche: Berufsbezeichnungen steuern die Suche, nicht mehr Faehigkeiten
Der Feinschliff schlug per KI Technologien vor ("Proxmox", "Rechenzentrum")
und verbot Rollenbezeichnungen ausdruecklich - die sollte die Suche selbst
aus dem Lebenslauf ableiten. Das war schief: Welche Anzeigen ueberhaupt
gefunden werden, entscheidet die Suchanfrage, also der Stellentitel.
Technologien gewichten nur, was schon da ist. Damit schlug die KI genau das
vor, was der Such-Agent ohnehin selbst ableitet, waehrend die eine Sache,
die der Nutzer weder sieht noch steuern kann - unter welchen Titeln gesucht
wird -, bei jedem Lauf neu improvisiert wurde. Faellt "Fachinformatiker
Systemintegration" weg, merkt das niemand; es kommt nur wenig zurueck.
- Neues Profilfeld berufsbezeichnungen: die KI schlaegt es vor, der Nutzer
editiert es, der Such-Agent fragt jeden Titel einzeln ab.
- zusatz_begriffe bleibt, aber als Kontext (Branche, Umfeld, Arbeitszeit),
nicht als Stellentitel; ausschluesse unveraendert.
- Leeres Feld = altes Verhalten (Titel aus dem Lebenslauf), niemandes
Profil aendert sich durch das Update.
- Spalte wird fuer bestehende Installationen nachgezogen.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+30
-3
@@ -34,6 +34,7 @@ const DEFAULTS = {
|
||||
aktiv: 0,
|
||||
modus: 'regional',
|
||||
staedte: [],
|
||||
berufsbezeichnungen: '',
|
||||
zusatz_begriffe: '',
|
||||
ausschluesse: 'Zeitarbeit / Arbeitnehmerüberlassung, Personalvermittler / Headhunter',
|
||||
zeitplan_tage: '1,2,3,4,5',
|
||||
@@ -91,6 +92,7 @@ function fromRow(row) {
|
||||
aktiv: r.aktiv ? 1 : 0,
|
||||
modus,
|
||||
staedte: parseStaedte(r.staedte),
|
||||
berufsbezeichnungen: r.berufsbezeichnungen || '',
|
||||
zusatz_begriffe: r.zusatz_begriffe || '',
|
||||
ausschluesse: r.ausschluesse != null ? r.ausschluesse : DEFAULTS.ausschluesse,
|
||||
zeitplan_tage: parseTage(r.zeitplan_tage != null ? r.zeitplan_tage : DEFAULTS.zeitplan_tage),
|
||||
@@ -108,6 +110,7 @@ function fromForm(body, sanitize = (v) => v) {
|
||||
aktiv: (b.aktiv === '1' || b.aktiv === 'on' || b.aktiv === true) ? 1 : 0,
|
||||
modus,
|
||||
staedte: parseStaedte(b.staedte).map((s) => sanitize(s)),
|
||||
berufsbezeichnungen: sanitize(String(b.berufsbezeichnungen || '').trim()),
|
||||
zusatz_begriffe: sanitize(String(b.zusatz_begriffe || '').trim()),
|
||||
ausschluesse: sanitize(String(b.ausschluesse || '').trim()),
|
||||
zeitplan_tage: parseTage(tage.join(',')),
|
||||
@@ -121,6 +124,7 @@ function toRow(profil) {
|
||||
aktiv: profil.aktiv ? 1 : 0,
|
||||
modus: profil.modus,
|
||||
staedte: JSON.stringify(profil.staedte || []),
|
||||
berufsbezeichnungen: profil.berufsbezeichnungen || '',
|
||||
zusatz_begriffe: profil.zusatz_begriffe || '',
|
||||
ausschluesse: profil.ausschluesse || '',
|
||||
zeitplan_tage: (profil.zeitplan_tage || []).join(','),
|
||||
@@ -203,14 +207,37 @@ function buildPrompt(profil, profilText) {
|
||||
);
|
||||
}
|
||||
|
||||
// Die Berufsbezeichnungen sind die eigentlichen Suchanfragen — sie entscheiden,
|
||||
// welche Anzeigen überhaupt gefunden werden. Sind sie gesetzt, sucht der Agent
|
||||
// danach, statt sich die Titel bei jedem Lauf neu aus dem Lebenslauf zu
|
||||
// improvisieren (was der Nutzer weder sieht noch steuern kann). Das Profil
|
||||
// liefert dann nur noch die Technologien zur Gewichtung.
|
||||
if (profil.berufsbezeichnungen) {
|
||||
teile.push(
|
||||
`Suche gezielt nach Stellen mit diesen Berufsbezeichnungen (das sind deine Suchanfragen, jede einzeln ` +
|
||||
`abfragen): ${profil.berufsbezeichnungen}. Nahe Schreibweisen und gängige Varianten desselben Titels ` +
|
||||
`(m/w/d, "IT-" davor, Singular/Plural, englische Entsprechung) darfst du ergänzen; auf fachfremde Rollen ` +
|
||||
`ausweichen darfst du NICHT.`
|
||||
);
|
||||
}
|
||||
|
||||
if (profilText && profilText.trim()) {
|
||||
teile.push(
|
||||
'Leite Rollenbezeichnungen (Query-Varianten) und Technologie-Buzzwords AUS DEM FOLGENDEN PROFIL DES ' +
|
||||
'BEWERBERS ab — fasse die Rolle breit (dieselbe Tätigkeit läuft je nach Firma unter vielen Titeln) und ' +
|
||||
'gewichte Treffer höher, je mehr aus dem Profil passt:\n\n--- PROFIL ---\n' +
|
||||
(profil.berufsbezeichnungen
|
||||
? 'Technologie-Buzzwords und die Gewichtung der Treffer leitest du AUS DEM FOLGENDEN PROFIL DES ' +
|
||||
'BEWERBERS ab (die Suchtitel stehen oben und gelten) — gewichte Treffer höher, je mehr aus dem ' +
|
||||
'Profil passt:'
|
||||
: 'Leite Rollenbezeichnungen (Query-Varianten) und Technologie-Buzzwords AUS DEM FOLGENDEN PROFIL DES ' +
|
||||
'BEWERBERS ab — fasse die Rolle breit (dieselbe Tätigkeit läuft je nach Firma unter vielen Titeln) und ' +
|
||||
'gewichte Treffer höher, je mehr aus dem Profil passt:') +
|
||||
'\n\n--- PROFIL ---\n' +
|
||||
profilText.trim().slice(0, 6000) +
|
||||
'\n--- ENDE PROFIL ---'
|
||||
);
|
||||
} else if (profil.berufsbezeichnungen) {
|
||||
teile.push(
|
||||
'Es ist kein Lebenslauf/Profil hinterlegt — halte dich strikt an die oben genannten Berufsbezeichnungen.'
|
||||
);
|
||||
} else {
|
||||
teile.push(
|
||||
'ACHTUNG: Es ist kein Lebenslauf/Profil hinterlegt. Leite Rollen und Suchbegriffe aus den bereits ' +
|
||||
|
||||
Reference in New Issue
Block a user