Lab 079: Deep Research Agents — Síntese de Conhecimento em Múltiplas Etapas¶
O que Você Vai Aprender¶
- Como Deep Research Agents usam um pipeline multi-agente para síntese de conhecimento
- A arquitetura Planner → Researcher → Writer → Reviewer e as responsabilidades de cada papel
- Como o rastreamento de citações garante que cada afirmação seja mapeada de volta a uma fonte
- Analisar um rastreamento de pesquisa de 14 etapas com papéis de agentes, uso de tokens e pontuações de qualidade
- Identificar gargalos, distribuição de tokens e padrões de qualidade ao longo do pipeline
Introdução¶
Deep Research Agents implementam um pipeline de múltiplas etapas para produzir relatórios de pesquisa abrangentes e bem referenciados. Em vez de um único LLM gerar um relatório inteiro, o trabalho é dividido entre agentes especializados:
O Pipeline¶
┌──────────┐ ┌────────────┐ ┌──────────┐ ┌──────────┐
│ Planner │────►│ Researcher │────►│ Writer │────►│ Reviewer │
└──────────┘ └────────────┘ └──────────┘ └──────────┘
│ │ │ │
Decompõe Coleta info Sintetiza Revisa &
consulta em das fontes descobertas fornece
sub-perguntas com citações em relatório feedback
| Agente | Papel | Saída Principal |
|---|---|---|
| Planner | Decompõe a pergunta de pesquisa em sub-perguntas e cria um plano de pesquisa | Sub-perguntas, estratégia de busca |
| Researcher | Executa buscas, lê fontes, extrai descobertas principais com citações | Descobertas com citações de fontes |
| Writer | Sintetiza descobertas em um relatório coerente e bem estruturado | Rascunho do relatório com citações inline |
| Reviewer | Revisa o rascunho quanto à precisão, completude e qualidade das citações | Feedback, pontuação de qualidade, aprovação/revisão |
Rastreamento de Citações¶
Cada afirmação no relatório final deve ser rastreável até uma fonte. O pipeline rastreia:
- sources_cited: Número de fontes únicas citadas em cada etapa
- quality_score: Autoavaliação de qualidade da saída pelo agente (0.0–1.0)
O Cenário¶
Você é um Líder de Equipe de Pesquisa avaliando um sistema de agentes de pesquisa profunda. Você tem um rastreamento de pesquisa de 14 etapas (research_trace.csv) de uma execução de pesquisa concluída. Sua tarefa: analisar o rastreamento para entender o comportamento dos agentes, uso de tokens, padrões de qualidade e identificar oportunidades de otimização.
Dados Simulados
Este laboratório usa um CSV de rastreamento de pesquisa simulado. Os dados representam uma execução realista de pesquisa profunda com 14 etapas em 4 papéis de agentes, incluindo planejamento, pesquisa multi-fonte, escrita e revisão iterativa.
Pré-requisitos¶
| Requisito | Por quê |
|---|---|
| Python 3.10+ | Executar os scripts de análise |
Biblioteca pandas |
Manipulação de dados |
📦 Arquivos de Apoio¶
Baixe estes arquivos antes de iniciar o laboratório
Salve todos os arquivos em uma pasta lab-079/ no seu diretório de trabalho.
| Arquivo | Descrição | Download |
|---|---|---|
broken_research.py |
Exercício de correção de bugs (3 bugs + autotestes) | 📥 Download |
research_trace.csv |
Rastreamento de pesquisa de 14 etapas com papéis de agentes, tokens e qualidade | 📥 Download |
Etapa 1: Entenda o Formato do Rastreamento¶
Cada linha no rastreamento representa uma etapa no pipeline de pesquisa:
| Coluna | Descrição |
|---|---|
| step_id | Número sequencial da etapa (1–14) |
| agent_role | Qual agente executou esta etapa: planner, researcher, writer, reviewer |
| action | O que o agente fez (ex.: decompose_query, search_sources, write_section) |
| tokens_used | Número de tokens consumidos nesta etapa |
| sources_cited | Número de fontes citadas na saída desta etapa |
| quality_score | Avaliação de qualidade da saída desta etapa (0.0–1.0) |
| duration_sec | Tempo gasto nesta etapa em segundos |
Etapa 2: Carregue e Explore o Rastreamento¶
import pandas as pd
df = pd.read_csv("lab-079/research_trace.csv")
print(f"Total steps: {len(df)}")
print(f"Agent roles: {df['agent_role'].value_counts().to_dict()}")
print(f"Total tokens: {df['tokens_used'].sum():,}")
print(f"Total sources cited: {df['sources_cited'].sum()}")
print(f"\nFull trace:")
print(df[["step_id", "agent_role", "action", "tokens_used", "sources_cited", "quality_score"]].to_string(index=False))
Saída esperada:
Total steps: 14
Agent roles: {'researcher': 6, 'writer': 4, 'reviewer': 2, 'planner': 2}
Total tokens: varies
Total sources cited: 10
Etapa 3: Analise o Uso de Tokens por Agente¶
print("Token usage by agent role:\n")
for role, group in df.groupby("agent_role"):
total_tokens = group["tokens_used"].sum()
avg_tokens = group["tokens_used"].mean()
steps = len(group)
print(f" {role:>12s}: {total_tokens:>7,} tokens across {steps} steps (avg {avg_tokens:,.0f}/step)")
print(f"\nTotal tokens: {df['tokens_used'].sum():,}")
# Token share by agent
total_tokens = df["tokens_used"].sum()
print("\nToken distribution:")
for role, group in df.groupby("agent_role"):
share = group["tokens_used"].sum() / total_tokens * 100
bar = "█" * int(share / 2)
print(f" {role:>12s}: {share:>5.1f}% {bar}")
Insight de Otimização
O Researcher normalmente consome a maior quantidade de tokens porque processa múltiplas fontes por sub-pergunta. Para reduzir custos, considere armazenar em cache as extrações de fontes e limitar o número de fontes por sub-pergunta.
Etapa 4: Analise o Fluxo de Citações¶
print("Citation flow through the pipeline:\n")
for _, row in df.iterrows():
cited = "📚" * row["sources_cited"] if row["sources_cited"] > 0 else "—"
print(f" Step {row['step_id']:>2}: [{row['agent_role']:>10s}] {row['action']:<25s} sources={row['sources_cited']} {cited}")
total_sources = df["sources_cited"].sum()
print(f"\nTotal sources cited across all steps: {total_sources}")
# Sources by agent role
print("\nSources cited by role:")
for role, group in df.groupby("agent_role"):
print(f" {role:>12s}: {group['sources_cited'].sum()} sources")
Etapa 5: Análise de Qualidade¶
print("Quality scores by agent role:\n")
for role, group in df.groupby("agent_role"):
avg_q = group["quality_score"].mean()
min_q = group["quality_score"].min()
max_q = group["quality_score"].max()
print(f" {role:>12s}: avg={avg_q:.2f} min={min_q:.2f} max={max_q:.2f}")
# Find the lowest-quality step
worst_step = df.loc[df["quality_score"].idxmin()]
print(f"\nLowest quality step:")
print(f" Step {worst_step['step_id']}: [{worst_step['agent_role']}] {worst_step['action']}")
print(f" Quality: {worst_step['quality_score']}")
print(f" Tokens: {worst_step['tokens_used']}")
# Find the highest-quality step
best_step = df.loc[df["quality_score"].idxmax()]
print(f"\nHighest quality step:")
print(f" Step {best_step['step_id']}: [{best_step['agent_role']}] {best_step['action']}")
print(f" Quality: {best_step['quality_score']}")
Variância de Qualidade
Fique atento a quedas de qualidade nas etapas posteriores do Researcher — isso frequentemente indica esgotamento de fontes (o agente está encontrando fontes de menor qualidade para sub-perguntas mais difíceis). Considere adicionar um limiar de qualidade que acione uma nova busca com consultas alternativas.
Etapa 6: Construa o Relatório de Análise da Pesquisa¶
writer_tokens = df[df["agent_role"] == "writer"]["tokens_used"].sum()
researcher_steps = len(df[df["agent_role"] == "researcher"])
total_duration = df["duration_sec"].sum()
report = f"""# 📋 Deep Research Trace Analysis
## Pipeline Summary
| Metric | Value |
|--------|-------|
| Total Steps | {len(df)} |
| Total Tokens | {df['tokens_used'].sum():,} |
| Total Sources Cited | {total_sources} |
| Total Duration | {total_duration:.0f}s ({total_duration/60:.1f} min) |
| Avg Quality | {df['quality_score'].mean():.2f} |
## Agent Breakdown
| Role | Steps | Tokens | Sources | Avg Quality |
|------|-------|--------|---------|-------------|
"""
for role in ["planner", "researcher", "writer", "reviewer"]:
group = df[df["agent_role"] == role]
report += f"| {role} | {len(group)} | {group['tokens_used'].sum():,} | {group['sources_cited'].sum()} | {group['quality_score'].mean():.2f} |\n"
report += f"""
## Key Findings
- **Researcher** executed {researcher_steps} steps — the most of any agent role
- **Writer** consumed {writer_tokens:,} tokens for synthesis
- **Total sources cited**: {total_sources} across the pipeline
- **Quality** {'improved' if df.iloc[-1]['quality_score'] > df.iloc[0]['quality_score'] else 'varied'} through the pipeline
## Optimization Recommendations
1. **Cache source extractions** to reduce Researcher token usage
2. **Parallelize sub-question research** — steps are independent
3. **Add quality gates** between pipeline stages
4. **Limit sources per sub-question** to top-3 most relevant
"""
print(report)
with open("lab-079/research_analysis.md", "w") as f:
f.write(report)
print("💾 Saved to lab-079/research_analysis.md")
🐛 Exercício de Correção de Bugs¶
O arquivo lab-079/broken_research.py contém 3 bugs que produzem análises de pesquisa incorretas. Você consegue encontrar e corrigir todos?
Execute os autotestes para ver quais falham:
Você deve ver 3 testes com falha. Cada teste corresponde a um bug:
| Teste | O que verifica | Dica |
|---|---|---|
| Teste 1 | Total de fontes citadas | Deve somar sources_cited, não contar linhas |
| Teste 2 | Contagem de tokens do Writer | Deve filtrar agent_role == "writer", não "researcher" |
| Teste 3 | Contagem de etapas do Researcher | Deve contar linhas onde agent_role == "researcher", não somar tokens |
Corrija todos os 3 bugs e execute novamente. Quando você vir All passed!, está pronto!
🧠 Verificação de Conhecimento¶
Q1 (Múltipla Escolha): Qual é a principal vantagem de um pipeline multi-agente em relação a uma abordagem de LLM único para pesquisa?
- A) Usa menos tokens no total
- B) Cada agente se especializa em uma tarefa, permitindo melhor qualidade e rastreabilidade
- C) Requer apenas uma implantação de modelo
- D) Elimina a necessidade de citações
✅ Revelar Resposta
Correto: B) Cada agente se especializa em uma tarefa, permitindo melhor qualidade e rastreabilidade
Ao dividir a pesquisa em planejamento, busca, escrita e revisão, cada agente pode ser otimizado para sua tarefa específica. O Researcher pode focar na qualidade das fontes, o Writer na coerência da prosa e o Reviewer na precisão factual. Essa especialização normalmente produz saídas de maior qualidade do que uma geração única de ponta a ponta.
Q2 (Múltipla Escolha): Por que o rastreamento de citações é importante em agentes de pesquisa profunda?
- A) Reduz o uso de tokens
- B) Garante que cada afirmação seja mapeada de volta a uma fonte, permitindo verificação e confiança
- C) Torna o relatório mais longo
- D) É exigido pelos termos de serviço do LLM
✅ Revelar Resposta
Correto: B) Garante que cada afirmação seja mapeada de volta a uma fonte, permitindo verificação e confiança
O rastreamento de citações cria uma cadeia auditável de cada afirmação no relatório final até sua fonte. Isso permite que revisores verifiquem a precisão factual, que usuários explorem fontes primárias e que organizações mantenham a integridade da pesquisa — crítico para aplicações de alto risco como pesquisa jurídica, médica ou financeira.
Q3 (Execute o Laboratório): Qual é o número total de fontes citadas em todas as etapas?
Execute a análise da Etapa 4 em 📥 research_trace.csv e some a coluna sources_cited.
✅ Revelar Resposta
10 fontes
A soma de todos os valores de sources_cited nas 14 etapas é igual a 10. A maioria das fontes é citada durante as etapas do Researcher, com algumas citações adicionais incluídas durante a síntese do Writer.
Q4 (Execute o Laboratório): Quantos tokens no total o agente Writer consumiu?
Execute a análise da Etapa 3 e encontre o total de tokens para o papel writer.
✅ Revelar Resposta
Soma de tokens_used onde agent_role == "writer"
A contagem total de tokens do Writer inclui todas as etapas de escrita e síntese. Filtre o rastreamento por agent_role == "writer" e some a coluna tokens_used para obter o valor exato.
Q5 (Execute o Laboratório): Quantas etapas o agente Researcher executou?
Conte as linhas onde agent_role == "researcher".
✅ Revelar Resposta
6 etapas
O Researcher executou 6 etapas — o maior número de qualquer papel de agente. Isso faz sentido porque o Researcher lida com múltiplas sub-perguntas do Planner, com cada sub-pergunta potencialmente exigindo múltiplas etapas de busca e extração.
Resumo¶
| Tópico | O que Você Aprendeu |
|---|---|
| Deep Research Agents | Pipeline multi-agente para síntese de conhecimento com rastreamento de citações |
| Arquitetura do Pipeline | Planner → Researcher → Writer → Reviewer com papéis especializados |
| Rastreamento de Citações | Cada afirmação é mapeada de volta a uma fonte ao longo do pipeline |
| Distribuição de Tokens | Researcher usa mais tokens; Writer sintetiza; Reviewer valida |
| Padrões de Qualidade | A qualidade varia por etapa — etapas de pesquisa posteriores podem mostrar esgotamento de fontes |
| Otimização | Armazenar fontes em cache, paralelizar pesquisa, adicionar portões de qualidade |
Próximos Passos¶
- Lab 034 — Multi-Agent com Semantic Kernel (construa os agentes)
- Lab 067 — GraphRAG (aprimore a pesquisa com recuperação por grafo de conhecimento)
- Lab 033 — Observabilidade de Agentes (monitore pipelines de pesquisa profunda em produção)
- Lab 076 — Microsoft Agent Framework (implemente pipelines com MAF Graph Workflows)