offer-catcher-agent-final / src /agent_state.py
hungryb's picture
Deploy Offer Catcher final public demo
c974f5d verified
Raw
History Blame Contribute Delete
3.64 kB
"""
Agent State — shared state schema for LangGraph workflow.
All agents read/write this typed dict.
"""
from dataclasses import dataclass, field
from typing import Optional
@dataclass
class CareerIntent:
direction: str # 大模型算法 / LLM应用算法 / Agent算法 / 推荐转大模型 / 后端转AI
stage: str # 实习 / 校招 / 提前批
target_cities: list[str] # ["深圳", "北京"]
salary_min: Optional[int] = None
risk_preference: str = "平衡" # 稳妥 / 平衡 / 冲刺
reasoning: str = "" # Agent 的判断理由
@dataclass
class JDProfile:
title: str
company: str
city: str
salary: str
source_url: str = ""
jd_text: str = ""
hard_skills: list[str] = field(default_factory=list)
soft_skills: list[str] = field(default_factory=list)
education: str = ""
bonus_points: list[str] = field(default_factory=list)
hidden_requirements: list[str] = field(default_factory=list)
direction: str = ""
stage: str = ""
@dataclass
class ResumeEvidence:
skill_evidence: dict = field(default_factory=dict) # skill → [evidence_fragment, ...]
project_evidence: dict = field(default_factory=dict) # project → [evidence_fragment, ...]
metrics_evidence: list[str] = field(default_factory=list)
llm_evidence: list[str] = field(default_factory=list)
agent_evidence: list[str] = field(default_factory=list)
gap_areas: list[str] = field(default_factory=list) # 明显缺失的方向
@dataclass
class MatchResult:
title: str = ""
company: str = ""
match_score: float = 0.0
pass_likelihood: float = 0.0
risk_level: str = "中"
evidence_based_reasoning: str = ""
supporting_evidence: list[str] = field(default_factory=list)
missing_evidence: list[str] = field(default_factory=list)
apply_action: str = "暂缓"
can_rewrite: bool = True
need_new_project: bool = False
@dataclass
class CounterfactualPlan:
what_if_items: list[dict] = field(default_factory=list)
top3_payoffs: list[dict] = field(default_factory=list)
@dataclass
class CoachOutput:
can_rewrite: list[str] = field(default_factory=list)
need_project_first: list[str] = field(default_factory=list)
dont_fabricate: list[str] = field(default_factory=list)
optimized_resume_fragments: dict = field(default_factory=dict)
@dataclass
class InterviewPrep:
likely_questions: list[str] = field(default_factory=list)
prep_plan_7day: list[str] = field(default_factory=list)
focus_areas: list[str] = field(default_factory=list)
@dataclass
class StrategyOutput:
safe_jobs: list[MatchResult] = field(default_factory=list)
stretch_jobs: list[MatchResult] = field(default_factory=list)
skip_jobs: list[MatchResult] = field(default_factory=list)
today_plan: list[str] = field(default_factory=list)
week_plan: list[str] = field(default_factory=list)
@dataclass
class AgentState:
"""Full state graph for LangGraph workflow."""
resume_text: str = ""
user_goal: str = ""
user_jd_text: str = ""
intent: Optional[CareerIntent] = None
search_queries: list[str] = field(default_factory=list)
jds: list[JDProfile] = field(default_factory=list)
resume_evidence: Optional[ResumeEvidence] = None
match_results: list[MatchResult] = field(default_factory=list)
counterfactual: Optional[CounterfactualPlan] = None
coach: Optional[CoachOutput] = None
interview_prep: Optional[InterviewPrep] = None
strategy: Optional[StrategyOutput] = None
error: str = ""
agent_trace: list[str] = field(default_factory=list)