The RAG Recruitment Assistant uses ChatGoogleGenerativeAI (Gemini 1.5 Flash) to analyze resumes, extract structured data, and provide intelligent candidate assessments.
Template string with variable placeholders using {variable} syntax.
from langchain_core.prompts import ChatPromptTemplatetemplate = """Eres un Mentor de Carrera Tecnológica y experto en empleabilidad joven.Tu misión es analizar el perfil de este estudiante basándote SOLO en el siguiente contexto (su CV):{context}Pregunta: {question}"""prompt = ChatPromptTemplate.from_template(template)
from langchain_core.output_parsers import JsonOutputParserfrom pydantic import BaseModel, Field# Define schemaclass PerfilEstudiante(BaseModel): nombre: str = Field(description="Nombre completo del estudiante") universidad: str = Field(description="Universidad o instituto") stack_principal: list = Field(description="Top 5 tecnologías") tipo_perfil: str = Field(description="Backend, Frontend, Data, o Fullstack")parser = JsonOutputParser(pydantic_object=PerfilEstudiante)template = """Eres un Experto en Reclutamiento IT.Analiza el CV y extrae los datos estructurados.UTILIZA EL SIGUIENTE FORMATO JSON:{format_instructions}TEXTO DEL CV:{context}"""prompt = ChatPromptTemplate.from_template(template)
from langchain_core.prompts import ChatPromptTemplatefrom langchain_core.output_parsers import StrOutputParserfrom langchain_core.runnables import RunnablePassthrough# Define prompttemplate = """Eres un Mentor de Carrera Tecnológica y experto en empleabilidad joven.Tu misión es analizar el perfil de este estudiante basándote SOLO en el siguiente contexto (su CV):{context}Pregunta: {question}"""prompt = ChatPromptTemplate.from_template(template)# Create chainchain = ( {"context": retriever, "question": RunnablePassthrough()} | prompt | llm | StrOutputParser())# Executepregunta = "¿Qué proyectos destacados tiene este estudiante?"respuesta = chain.invoke(pregunta)print(respuesta)
From the notebook - analyzing individual student profiles:
reference/notebook/Talent_Scout_3000x.ipynb
from langchain_community.document_loaders import PyPDFLoaderfrom langchain_community.vectorstores import FAISSfrom langchain_core.prompts import ChatPromptTemplatefrom langchain_core.output_parsers import StrOutputParserfrom langchain_core.runnables import RunnablePassthrough# Load resumeruta_archivo = "cvs_estudiantes_final/CV_Estudiante_4_Fernanda_Paredes.pdf"loader = PyPDFLoader(ruta_archivo)docs = loader.load()# Create vector storevectorstore = FAISS.from_documents(docs, embeddings)retriever = vectorstore.as_retriever()# Prompt templatetemplate = """Eres un Mentor de Carrera Tecnológica y experto en empleabilidad joven.Tu misión es analizar el perfil de este estudiante basándote SOLO en el siguiente contexto (su CV):{context}Pregunta: {question}"""prompt = ChatPromptTemplate.from_template(template)# Build chainchain = ( {"context": retriever, "question": RunnablePassthrough()} | prompt | llm | StrOutputParser())# Querypregunta = "¿Qué proyectos destacados o experiencia académica tiene este estudiante y cuál es su stack tecnológico principal?"respuesta = chain.invoke(pregunta)print(respuesta)
Output:
Basado en el CV, este es el análisis del perfil de Fernanda Paredes:### 1. Proyectos Destacados y Experiencia AcadémicaFernanda es una estudiante de 9no ciclo de Ingeniería de Software (UTP).1. **Proyecto Académico como Data Analyst Trainee (Jun 2025 - Feb 2026)**2. **Primer puesto en Hackathon universitaria** por desarrollo de app de reciclaje### 2. Stack Tecnológico Principal| Área | Tecnologías ||------|-------------|| Análisis de Datos | Python, PowerBI || Desarrollo | Java, Spring Boot |
from langchain_core.messages import SystemMessage, HumanMessagemessages = [ SystemMessage(content="Eres un experto en reclutamiento tecnológico."), HumanMessage(content="Analiza este perfil: Python developer con 3 años de experiencia")]response = llm.invoke(messages)print(response.content)