Created
February 5, 2026 14:02
-
-
Save leomonteiro92/72cef04c1868c7bad7071f4136c5cd84 to your computer and use it in GitHub Desktop.
Gerador de Questões de Vestibular
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import os | |
| from anthropic import Anthropic, types | |
| from collections.abc import Callable | |
| from datetime import datetime | |
| from dotenv import load_dotenv | |
| load_dotenv() | |
| MODEL = "claude-sonnet-4-5-20250929" | |
| client = Anthropic(api_key=os.environ.get("ANTHROPIC_API_KEY")) | |
| system_prompt = ( | |
| "Você é um expert em criar questões de múltipla escolha no formato da FUVEST" | |
| ) | |
| # Primeira Fase | |
| first_phase_user_prompt = ( | |
| lambda topic: f"""" | |
| Crie 12 questões de múltipla escolha, no formato da prova de primeira fase da FUVEST com DIFICULDADE MÉDIA, | |
| separe cada questão com uma linha feita por CINCO asteriscos(*****) e separe o gabarito com uma linha feita por CINCO sinais de igualdade(=====) APÓS as questões | |
| O tema das questões é {topic} | |
| EVITE questões com gráficos pois são dificeis de renderizar | |
| """ | |
| ) | |
| # Segunda Fase | |
| second_phase_user_prompt = ( | |
| lambda topic1, topic2: f"""" | |
| Crie 1 questão no formato da prova de SEGUNDA FASE da FUVEST com DIFICULDADE MÉDIA, | |
| Separe o gabarito com uma linha feita por CINCO sinais de igualdade(=====) APÓS o enunciado | |
| O tema das questões deve ser multidisciplinar e pode envolver {topic1} e {topic2} | |
| EVITE questões com gráficos pois são dificeis de renderizar | |
| """ | |
| ) | |
| user_prompt = (lambda phase, topic1, topic2: first_phase_user_prompt(topic1) if phase == 1 else second_phase_user_prompt(topic1, topic2)) | |
| def generate_questions(phase: int, topic1: str, topic2: str) -> str | None: | |
| response: types.Message = client.messages.create( | |
| max_tokens=4096, | |
| model=MODEL, | |
| messages=[ | |
| { | |
| "role": "user", | |
| "content": system_prompt + "\n" + user_prompt(phase, topic1, topic2), | |
| }, | |
| ], | |
| stream=False, | |
| ) | |
| content = response.content | |
| return content[0].text | |
| def write_file(preffix: str, content: str, ttype: str): | |
| with open(f"qa/{preffix}-{ttype}.md", "w") as file: | |
| file.write(content) | |
| def main(): | |
| phase = 1 | |
| topic1 = "Geometria_espacial" | |
| topic2 = "Analise_combinatoria" | |
| response = generate_questions(phase,topic1, topic2) | |
| [questions, answer_key] = response.split("=====") | |
| now = datetime.now() | |
| preffix = now.strftime("%Y%m%d%H%M%S") + "_" + topic1.lower() + "_" + topic2.lower() | |
| write_file(preffix, questions, "Q") | |
| write_file(preffix, answer_key, "A") | |
| if __name__ == "__main__": | |
| main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment