Free lesson · Forward Deployed GenAI Engineering
LangGraph state తో LLM-ఆధారిత discovery interviews నిర్వహించండి
మీరు DiscoveryInterviewAgent ను LangGraph state machine గా నిర్మిస్తారు, ఇది సందర్భానుసారమైన follow-up ప్రశ్నలను రూపొందించి, Pydantic ద్వారా నిర్మాణాత్మక insights ను సంగ్రహిస్తుంది.
Course: AI Solution Delivery · Chapter 1 · AI Use Case Discovery & Data Readiness Assessment
Free to read — no subscription required.
పరిచయం
ఇంజినీర్లు AI వినియోగ సందర్భాలను వెలికితీయడానికి తరచుగా వారాల తరబడి ఒకరితో-ఒకరు డిస్కవరీ ఇంటర్వ్యూలు నిర్వహిస్తారు, కానీ నిర్మాణరహిత నోట్స్ కారణంగా కీలకమైన సమస్యలు (pain points) కప్పబడిపోవడం లేదా పూర్తిగా విస్మరించబడటం జరుగుతుందని చివరికి తెలుసుకుంటారు. ఒక స్టేక్హోల్డర్ గత వైఫల్యం గురించి లేదా పరీక్షించని ఊహ గురించి సూచన ఇచ్చినప్పుడు మాన్యువల్ ఫెసిలిటేషన్లో మరింత లోతుగా ప్రశ్నించడం కూడా కష్టమవుతుంది. ఈ పాఠం LangGraph ఉపయోగించి ఒక DiscoveryInterviewAgent ను ఎలా నిర్మించాలో నేర్పుతుంది — ఇది సందర్భోచిత ఫాలో-అప్ ప్రశ్నలను రూపొందించే, నిర్మాణాత్మక మెటాడేటాతో ప్రతిస్పందనలను సంగ్రహించే, మరియు ప్రతి క్లయింట్ సంభాషణ నుండి AI అవకాశాలు మరియు డేటా సంసిద్ధత పరిమితుల గురించి స్కోర్ చేసిన అంతర్దృష్టులను వెలికితీసే ఒక స్టేట్ఫుల్, అనుకూలించే ఇంటర్వ్యూ వ్యవస్థ.
కీలక పదజాలం
-
InterviewState— ఇంటర్వ్యూ టర్న్ల అంతటాquestions_asked,responses,follow_ups_pending,insights, మరియుturn_countతో సహా అన్ని మార్చదగిన డేటాను కలిగి ఉండేTypedDict. LangGraph గ్రాఫ్లోని ప్రతి నోడ్ ఈ ఒకే షేర్డ్ ఆబ్జెక్ట్ నుండి చదువుతుంది మరియు దానిలోకే తిరిగి రాస్తుంది, దీనివల్ల ప్రతి నోడ్కు పూర్తిగా సేకరించబడిన సంభాషణ చరిత్రకు ప్రాప్యత లభిస్తుంది. -
addరిడ్యూసర్ —InterviewStateలోని లిస్ట్ ఫీల్డ్లకుAnnotated[List[T], add]రూపంలో వర్తించే ఒక అనోటేషన్, ఇది ప్రతి నోడ్returnలో లిస్ట్ను భర్తీ చేయకుండా కొత్త ఐటమ్లను జోడించమని LangGraph కు సూచిస్తుంది. ఎలాంటి మాన్యువల్ లిస్ట్-మెర్జింగ్ లాజిక్ లేకుండాquestions_askedమరియుresponsesటర్న్ల అంతటా పెరగడానికి ఇదే కారణం. -
నోడ్ ఫంక్షన్ —
add_nodeద్వారాStateGraphతో నమోదు చేయబడిన ఒక Python ఫంక్షన్, ఇది పూర్తి ప్రస్తుతInterviewStateను స్వీకరించి, తాను మార్చే ఫీల్డ్ల యొక్క పాక్షిక డిక్షనరీని మాత్రమే తిరిగి ఇస్తుంది. గ్రాఫ్లోని తదుపరి నోడ్కు రూటింగ్ చేసే ముందు LangGraph ప్రతి నోడ్ యొక్కreturnను స్టేట్లోకి విలీనం చేస్తుంది. -
DiscoveryInsight— ఇంటర్వ్యూ నుండి ఒక నిర్మాణాత్మక ఫలితాన్ని సూచించే ఒక Pydantic మోడల్, ఇందులోcategory(pain_point, opportunity, constraint, లేదా requirement), ఒకconfidencefloat, మరియు డౌన్స్ట్రీమ్ ట్రేసబిలిటీ కోసం ఫలితాన్ని స్టేక్హోల్డర్ యొక్క ఖచ్చితమైన ప్రకటనలకు అనుసంధానించేsupporting_quotesఉంటాయి. -
InterviewSummary— ఒక సెషన్లో ఉత్పత్తి అయిన అన్నిDiscoveryInsightఆబ్జెక్ట్లను సమీకరించి, సెషన్-స్థాయి ఫీల్డ్లను —key_themesమరియుrecommended_follow_ups— జోడించే ఒక Pydantic మోడల్, ఇది ఏ AI వినియోగ సందర్భాలకు పూర్తి డేటా సంసిద్ధత అంచనా అవసరమో నిర్ణయించడానికి కన్సల్టెంట్లకు ప్రాధాన్యతా దృక్పథాన్ని ఇస్తుంది. -
StateGraph— నోడ్ ఫంక్షన్లను మరియు వాటి మధ్య దిశాత్మక ఎడ్జ్లను నమోదు చేసే LangGraph నిర్మాణం,turn_countmax_turnsకు చేరిన తర్వాతENDకు వెళ్లే షరతుబద్ధ మార్గంతో సహా, ఇది వదులుగా అనుసంధానించబడిన ఫంక్షన్లను ఒక సుసంగతమైన, స్టేట్ఫుల్ ఇంటర్వ్యూ లూప్గా మారుస్తుంది.
భావనలు
గ్రాఫ్గా స్టేట్ఫుల్ సంభాషణ
డిస్కవరీ ఇంటర్వ్యూలు సరళరేఖలో సాగవు: ఒక స్టేక్హోల్డర్ గత వైఫల్యం గురించి అనాలోచితంగా చేసిన వ్యాఖ్య, దాని తర్వాత వచ్చే స్క్రిప్ట్ చేసిన ప్రశ్నకు వారి సమాధానం కంటే విలువైనది కావచ్చు. ఇంటర్వ్యూను LangGraph StateGraph గా సూచించడం ద్వారా ఆ బ్రాంచింగ్ లాజిక్ను స్పష్టంగా ఎన్కోడ్ చేయవచ్చు — generate_question analyze_response కు రూట్ చేస్తుంది, అది extract_insights కు రూట్ చేస్తుంది లేదా మరొక టర్న్ కోసం వెనక్కి లూప్ అవుతుంది — నియంత్రణ ప్రవాహాన్ని నెస్టెడ్ కండిషనల్స్లో కప్పిపెట్టకుండా. గ్రాఫ్ యొక్క ఎడ్జ్లు ఎప్పుడు ముందుకు సాగాలో మరియు ఎప్పుడు లోతుగా ప్రశ్నించాలో వివరిస్తాయి, దీనివల్ల ఇంటర్వ్యూ లాజిక్ పరిశీలించదగినదిగా మరియు పరీక్షించదగినదిగా మారుతుంది. ఏజెంట్ ఒక స్థిర స్క్రిప్ట్ను అనుసరించదు; అది గ్రాఫ్ నిర్వచించిన ట్రావర్సల్ పాలసీని అనుసరిస్తుంది, మరియు ఇప్పటివరకు సేకరించబడిన స్టేట్ ప్రతి ఎడ్జ్ ఏ మార్గాన్ని తీసుకుంటుందో నిర్ణయిస్తుంది (కోడ్ వాక్త్రూ చూడండి).
రిడ్యూసర్ ప్యాటర్న్: బుక్కీపింగ్ లేకుండా సేకరణ
LangGraph యొక్క డిఫాల్ట్ ప్రవర్తన ఒక నోడ్ ఏది తిరిగి ఇచ్చినా దానితో స్టేట్ ఫీల్డ్ను భర్తీ చేయడం. ఒకే టర్న్ ఉన్న ఇంటరాక్షన్కు అది సరిపోతుంది, కానీ బహుళ-టర్న్ ఇంటర్వ్యూకు questions_asked మరియు responses ప్రతి సైకిల్ అంతటా పెరగాలి. Annotated[List[T], add] అనోటేషన్ మెర్జ్ ప్రవర్తనను భర్తీ నుండి జోడింపుకు మారుస్తుంది: ప్రతి నోడ్ తాను ఉత్పత్తి చేసిన కొత్త ఐటమ్లను మాత్రమే తిరిగి ఇస్తుంది, మరియు LangGraph వాటిని కలపడాన్ని నిర్వహిస్తుంది. సెషన్ చివరిలో extract_insights ప్రారంభమయ్యే సమయానికి, పూర్తి సంభాషణ చరిత్ర ఇప్పటికే స్టేట్లో సమీకరించబడి ఉంటుంది — మాన్యువల్ లిస్ట్ నిర్వహణ లేదా గ్లోబల్ అక్యుములేటర్ అవసరం లేదు. నోడ్ల మధ్య సేకరణ బగ్లు లేదా స్టేట్ డ్రిఫ్ట్ లేకుండా DiscoveryInterviewAgent ఎన్ని టర్న్లైనా నడపగలగడానికి ఇదే ప్రధాన కారణం.
నిర్మాణంలో రెండు స్థాయిలు: ఇన్సైట్ vs. సమ్మరీ
ఈ పాఠం వేర్వేరు వినియోగదారులకు సేవ చేసే రెండు Pydantic అవుట్పుట్ ఆకారాలను వేరు చేస్తుంది. DiscoveryInsight సూక్ష్మ స్థాయిలో ఉంటుంది: ప్రతి ఆబ్జెక్ట్ ఒక ఫలితాన్ని, దాని వర్గాన్ని, ఒక confidence స్కోర్ను, మరియు స్టేక్హోల్డర్ వాస్తవంగా ఏం చెప్పారో దానికి తిరిగి ట్రేస్ చేసే supporting_quotes ను సంగ్రహిస్తుంది. ఫలితాలను ఈ సూక్ష్మ స్థాయిలో ఉంచడం వాటిని యంత్రం చదవగలిగేలా చేస్తుంది — డౌన్స్ట్రీమ్ స్కోరింగ్ దశ ఫ్రీ టెక్స్ట్ను పార్స్ చేయకుండానే category ద్వారా ఫిల్టర్ చేయవచ్చు, confidence ద్వారా ర్యాంక్ చేయవచ్చు, లేదా related_use_cases ద్వారా క్లస్టర్ చేయవచ్చు.
InterviewSummary సెషన్ దృక్పథం: ఇది ఒక ఇంటర్వ్యూ నుండి అన్ని అంతర్దృష్టులను సేకరించి, ఏ వినియోగ సందర్భాలకు పూర్తి డేటా సంసిద్ధత అంచనా అవసరమో నిర్ణయించాల్సిన కన్సల్టెంట్ కోసం key_themes మరియు recommended_follow_ups ను వెలికితీస్తుంది. ఈ రెండు-స్థాయి డిజైన్ అంటే ఒకే ముడి ఇంటర్వ్యూ అవుట్పుట్ ఆటోమేటెడ్ స్కోరింగ్ పైప్లైన్కు మరియు మానవ నిర్ణయ స్థాయికి రెండింటికీ ఆహారం అందిస్తుంది — డేటాను నకిలీ చేయకుండా లేదా supporting_quotes అందించే ట్రేసబిలిటీని కోల్పోకుండా (కోడ్ వాక్త్రూ చూడండి).
కోడ్ వాక్త్రూ
DiscoveryInterviewAgent ప్రయాణించే నాలుగు స్థితులను — ప్రశ్న రూపకల్పన, ప్రతిస్పందన సంగ్రహణ, ఫాలో-అప్ విశ్లేషణ, మరియు అంతర్దృష్టి వెలికితీత — ఇప్పుడు మీరు అర్థం చేసుకున్నారు కాబట్టి, తదుపరి దశ ఆ స్థితులను LangGraph గ్రాఫ్లోకి వైర్ చేయడం మరియు ఏజెంట్ అవుట్పుట్ను నిర్మాణాత్మకంగా చేసే Pydantic మోడల్లను నిర్వచించడం.
పునాది InterviewState, ఇది ఒక TypedDict, దీని లిస్ట్ ఫీల్డ్లు add రిడ్యూసర్తో Annotated ను ఉపయోగిస్తాయి. ఇది ప్రతి నోడ్ return లో questions_asked మరియు responses ను భర్తీ చేయకుండా వాటికి కొత్త ఐటమ్లను జోడించమని LangGraph కు చెబుతుంది, దీనివల్లనే ఏజెంట్ మాన్యువల్ మెర్జింగ్ లాజిక్ లేకుండా టర్న్ల అంతటా పూర్తి సంభాషణను సేకరించగలుగుతుంది.
Code snippetpython
1from langgraph.graph import StateGraph, END 2from typing import TypedDict, List, Annotated 3from operator import add 4 5class InterviewState(TypedDict): 6 """State maintained across interview turns.""" 7 topic: str 8 questions_asked: Annotated[List[str], add] 9 responses: Annotated[List[dict], add] 10 follow_ups_pending: List[str] 11 insights: List[dict] 12 turn_count: int 13 max_turns: int 14 15def generate_question(state: InterviewState) -> dict: 16 """Generate the next contextual question.""" 17 ... 18 19def analyze_response(state: InterviewState) -> dict: 20 """Analyze response and determine follow-up needs.""" 21 ... 22 23def extract_insights(state: InterviewState) -> dict: 24 """Extract structured insights from conversation history.""" 25 ... 26 27graph = StateGraph(InterviewState) 28graph.add_node("generate_question", generate_question) 29graph.add_node("analyze_response", analyze_response) 30graph.add_node("extract_insights", extract_insights)
ప్రతి నోడ్ ఫంక్షన్ పూర్తి ప్రస్తుత స్టేట్ను స్వీకరించి ఒక పాక్షిక డిక్షనరీని తిరిగి ఇస్తుంది; తదుపరి నోడ్ నడిచే ముందు LangGraph return విలువను స్టేట్లోకి తిరిగి విలీనం చేస్తుంది. generate_question → analyze_response → extract_insights సైకిల్ turn_count max_turns కు చేరే వరకు కొనసాగుతుంది, ఆ సమయంలో గ్రాఫ్ END కు రూట్ చేస్తుంది. add తో అనోటేట్ చేసిన ఫీల్డ్లు ప్రతి సైకిల్ అంతటా సేకరించబడతాయి, కాబట్టి extract_insights ప్రారంభమయ్యే సమయానికి, ఎలాంటి మాన్యువల్ బుక్కీపింగ్ లేకుండా పూర్తి సంభాషణ చరిత్ర questions_asked మరియు responses లో అందుబాటులో ఉంటుంది.
గ్రాఫ్ తగినంత టర్న్లను సేకరించిన తర్వాత, extract_insights నిర్మాణాత్మక Pydantic మోడల్లను నింపుతుంది. DiscoveryInsight వ్యక్తిగత ఫలితాలను — సమస్యలు, అవకాశాలు, పరిమితులు, మరియు అవసరాలు — ఒక confidence స్కోర్తో మరియు స్టేక్హోల్డర్ వాస్తవంగా ఏం చెప్పారో దానికి తిరిగి ట్రేసబిలిటీ కోసం supporting_quotes తో కలిపి సంగ్రహిస్తుంది. InterviewSummary ఒక సెషన్ నుండి అన్ని అంతర్దృష్టులను సమీకరించి, డౌన్స్ట్రీమ్ వినియోగ సందర్భ స్కోరింగ్ దశకు ఆహారం అందించే recommended_follow_ups మరియు key_themes ను వెలికితీస్తుంది.
Code snippetpython
1from pydantic import BaseModel 2from typing import List 3 4class DiscoveryInsight(BaseModel): 5 """Structured insight from interview analysis.""" 6 category: str # pain_point, opportunity, constraint, requirement 7 description: str 8 stakeholder: str 9 confidence: float 10 supporting_quotes: List[str] 11 related_use_cases: List[str] 12 13class InterviewSummary(BaseModel): 14 """Complete summary of an interview session.""" 15 session_id: str 16 stakeholder_role: str 17 duration_minutes: int 18 insights: List[DiscoveryInsight] 19 recommended_follow_ups: List[str] 20 key_themes: List[str]
DiscoveryInsight మరియు InterviewSummary మధ్య విభజన ఉద్దేశపూర్వకం: వ్యక్తిగత అంతర్దృష్టులు ఆటోమేటెడ్ స్కోరింగ్కు సరిపడేంత సూక్ష్మంగా ఉంటాయి, అదే సమయంలో సమ్మరీ ఏ AI వినియోగ సందర్భాలకు పూర్తి డేటా సంసిద్ధత అంచనా అవసరమో ప్రాధాన్యత ఇవ్వడానికి కన్సల్టెంట్కు అవసరమైన సెషన్-స్థాయి దృక్పథాన్ని అందిస్తుంది.
గ్రాఫ్ ఎర్రర్ లేకుండా అమలు అయ్యి, extract_insights ఒక InterviewSummary ను తిరిగి ఇచ్చి, దాని insights లిస్ట్ ఖాళీగా లేకుండా, ప్రతి ఎంట్రీ నింపిన confidence స్కోర్ను మరియు supporting_quotes లో కనీసం ఒక ఎంట్రీని కలిగి ఉన్నప్పుడు అది పనిచేస్తుందని మీకు తెలుస్తుంది.
విభాగ అనువర్తనం
చేయవలసినవి మరియు చేయకూడనివి
పై విషయాన్ని పరిశీలించిన తర్వాత, ఈ క్రింది చేయవలసినవి మరియు చేయకూడనివి దానిని ఆచరణగా సంక్షిప్తీకరిస్తాయి.
చేయవలసినవి
InterviewStateలోquestions_askedమరియుresponsesనుAnnotated[List[...], add]తో అనోటేట్ చేయండి —addరిడ్యూసర్ ప్రతి నోడ్returnలో లిస్ట్ను భర్తీ చేయకుండా ప్రతి సైకిల్ అంతటా ఐటమ్లను జోడించమని LangGraph కు చెబుతుంది, దీనివల్లనే ఎలాంటి మాన్యువల్ మెర్జింగ్ లాజిక్ లేకుండాextract_insightsకు పూర్తి సంభాషణ చరిత్రకు ప్రాప్యత లభిస్తుంది.- ప్రతి
DiscoveryInsightలోsupporting_quotesను నింపండి — ప్రతి ఫలితాన్ని స్టేక్హోల్డర్ యొక్క యథాతథ భాషకు అనుసంధానించడం అంతర్దృష్టులను వాస్తవంగా చెప్పిన దానికి ట్రేస్ చేయగలిగేలా ఉంచుతుంది, దీనివల్లనే డౌన్స్ట్రీమ్ వినియోగ సందర్భ స్కోరింగ్ దశ confidence స్కోర్లను బ్లాక్-బాక్స్ అవుట్పుట్లుగా చూడకుండా వాటిని ధృవీకరించగలుగుతుంది. - మీ షరతుబద్ధ ఎడ్జ్లో
turn_countనుmax_turnsతో పోల్చిENDకు రూట్ చేయండి — generate → analyze → extract సైకిల్ అనంతంగా నడవకుండా నిరోధించే ఏకైక విషయం స్పష్టమైన ముగింపు నియంత్రణ, మరియు ఖాళీ కానిinsightsలిస్ట్ను ఉత్పత్తి చేయడానికి తగినంత సంభాషణ సేకరించబడిన తర్వాతేextract_insightsప్రారంభమవుతుందని ఇది నిర్ధారిస్తుంది.
చేయకూడనివి
questions_askedలేదాresponsesనుaddరిడ్యూసర్ లేకుండా సాధారణList[str]లేదాList[dict]గా ప్రకటించకండి —Annotated[List[...], add]లేకుండా, ప్రతి నోడ్ యొక్కreturndict ఫీల్డ్ను పూర్తిగా ఓవర్రైట్ చేస్తుంది, మునుపటి టర్న్లను నిశ్శబ్దంగా విస్మరిస్తుంది, దీనివల్లextract_insightsపూర్తి సెషన్కు బదులుగా అత్యంత ఇటీవలి సంభాషణను మాత్రమే చూస్తుంది.DiscoveryInsightమరియుInterviewSummaryను ఒకే మోడల్గా కుదించకండి — వాటిని ఫ్లాట్ చేయడం ఆటోమేటెడ్ స్కోరింగ్ ఆధారపడే ప్రతి-అంతర్దృష్టిconfidenceస్కోర్ మరియుsupporting_quotesసూక్ష్మతను కోల్పోతుంది;InterviewSummaryలోని సెషన్-స్థాయిkey_themesమరియుrecommended_follow_upsకు సమీకరించడానికి వ్యక్తిగత అంతర్దృష్టి ఆబ్జెక్ట్లు అవసరం, దానికి విలోమంగా కాదు.- ఒక నోడ్ ఫంక్షన్ నుండి పూర్తి సేకరించిన స్టేట్ను తిరిగి ఇవ్వకండి — మీరు మారుస్తున్న ఫీల్డ్లను మాత్రమే
returnచేయండి — ప్రతి నోడ్ పూర్తిInterviewStateను స్వీకరిస్తుంది కానీ పాక్షిక dict ను తిరిగి ఇవ్వాలి; మొత్తం స్టేట్ ఆబ్జెక్ట్ను తిరిగి ఇవ్వడం వల్ల LangGraph మారనిadd-అనోటేట్ చేసిన ఫీల్డ్లను జోడించవలసిన కొత్త ఐటమ్లుగా అర్థం చేసుకుంటుంది, ప్రతి సైకిల్లో ప్రతి మునుపటి ప్రశ్న మరియు ప్రతిస్పందనను నకిలీ చేస్తుంది.
3 hands-on labs come with this lesson — real code, in a cloud IDE. Create a free account to run them. No card.
Free account · no card · straight to the labs
Or get the full path — from
Listen to this lesson
Audio overviews of this lesson's labs and its chapter, from GenBodha Bytes.
More free lessons in AI Solution Delivery
- Ch 1Score AI use cases with weighted multi-criteria evaluation
- Ch 1Profile customer datasets for quality and PII exposure
- Ch 1Run LLM-driven discovery interviews with LangGraph stateYou are here
- Ch 1Benchmark provider feasibility across OpenAI, Gemini, Anthropic
- Ch 1Generate executive discovery reports from structured assessment data
- Ch 2Classify project risks with DSPy-optimized prompts
- Ch 3Generate full SOW proposals with LangGraph workflows