Yapılandırılmış Rapor Oluşturma
Şablonlu raporlar: yönetici özeti, bulgular, kanıtlar, öneriler.
Yapılandırılmış Rapor Oluşturma, CoddyKit'te ücretsiz bir AI Agents dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, AI Agents öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. AI Agents kursu toplamda 4 dersten oluşur.
Bilgilerden Okunabilir Bir Rapora
Yalnızca bir bilgi listesi çıkaran araştırma ajanının kullanımı zordur. Karar vericiler; yönetici özeti, arka plan bölümü, temel bulgular, kanıtlar ve öneriler içeren yapılandırılmış raporlara ihtiyaç duyar.
Bu derste doğrulanmış bilgilerden bölüm bölüm profesyonel raporlar oluşturma ele alınır.
Rapor Şablonu
Raporun yapısını önceden tanımlayın. LLM, her bölümü odaklanmış tutup tekrarı önleyerek aynı anda bir bölüm sentezler.
REPORT_SECTIONS = [
'executive_summary',
'background',
'key_findings',
'evidence',
'recommendations',
'sources'
]
SECTION_PROMPTS = {
'executive_summary': 'Write a 2-3 sentence executive summary of the key findings. Business audience.',
'background': 'Provide background context for the research topic (3-5 sentences).',
'key_findings': 'List 3-5 key findings as bullet points, each with one supporting fact.',
'evidence': 'Summarize the evidence for each finding with inline source citations.',
'recommendations': 'Based on the findings, provide 2-4 actionable recommendations.',
'sources': 'List all sources cited in the report, formatted as numbered URLs.'
}
if __name__ == '__main__':
print('Report sections:', REPORT_SECTIONS)
for section in REPORT_SECTIONS:
print(f'{section}: {SECTION_PROMPTS[section]}')
Tek Seferde Bir Bölüm Oluşturma
Raporun tamamını tek bir istemde oluşturmak güvenilir değildir; LLM bilgileri ve yapıyı takip etmekte zorlanır. Önceki bölümleri bağlam olarak aktararak bölümleri birer birer oluşturun.
import openai
client = openai.OpenAI(api_key='YOUR_OPENAI_KEY')
def generate_section(section_name: str, question: str,
facts: list[dict], prior_sections: dict) -> str:
facts_text = '\n'.join(
f'- {f["fact"]} (source: {f["source"]})' for f in facts[:25]
)
prior_text = '\n\n'.join(
f'## {k.replace("_"," ").title()}\n{v}'
for k, v in prior_sections.items()
)
prompt = (
f'Research question: "{question}"\n\n'
f'Verified facts:\n{facts_text}\n\n'
f'Report so far:\n{prior_text}\n\n'
f'Now write the "{section_name}" section.\n'
f'Instructions: {SECTION_PROMPTS[section_name]}'
)
resp = client.chat.completions.create(
model='gpt-4o',
messages=[{'role': 'user', 'content': prompt}]
)
return resp.choices[0].message.contentRaporu Yinelemeli Olarak Oluşturma
Tüm bölümler üzerinde, biriken bağlamı aktararak yineleme yapın. Her bölüm, kendisinden önce gelenleri bilir; böylece raporun tutarlılığı sağlanır ve rapor içindeki çelişkiler önlenir.
def build_report(question: str, facts: list[dict]) -> dict:
report = {}
sections_to_generate = [s for s in REPORT_SECTIONS if s != 'sources']
for section in sections_to_generate:
print(f'Generating section: {section}...')
report[section] = generate_section(
section_name=section,
question=question,
facts=facts,
prior_sections={k: v for k, v in report.items()}
)
# Sources section: generate citation list from fact URLs
unique_sources = list(dict.fromkeys(f['source'] for f in facts))
report['sources'] = '\n'.join(
f'{i+1}. {url}' for i, url in enumerate(unique_sources[:20])
)
return reportMetin İçi Atıfları Ekleme
Oluşturulan bölümlerdeki bilgi başvurularını, kaynak listesine bağlanan numaralı atıflarla değiştirin. Bu, her iddianın izlenebilir olmasını sağlar.
import re
def inject_citations(section_text: str, facts: list[dict]) -> str:
source_index = {} # url -> int
for i, fact in enumerate(facts):
url = fact['source']
if url not in source_index:
source_index[url] = len(source_index) + 1
annotated = section_text
for fact in facts:
if fact['fact'] in annotated:
num = source_index[fact['source']]
annotated = annotated.replace(
fact['fact'],
f'{fact["fact"]} [{num}]',
1 # replace first occurrence only
)
return annotated
if __name__ == '__main__':
demo_text = 'Revenue grew 12% last quarter. The team also launched two new products.'
demo_facts = [{'fact': 'Revenue grew 12% last quarter', 'source': 'https://example.com/report'}]
print(inject_citations(demo_text, demo_facts))
Markdown Olarak Biçimlendirme
Rapor bölümlerini Markdown olarak işleyin. Bu sayede çıktı HTML'ye, PDF'ye dönüştürülebilir veya Notion ya da Confluence gibi araçlarda doğrudan görüntülenebilir.
def render_markdown(report: dict, title: str) -> str:
section_titles = {
'executive_summary': 'Executive Summary',
'background': 'Background',
'key_findings': 'Key Findings',
'evidence': 'Evidence',
'recommendations': 'Recommendations',
'sources': 'Sources'
}
lines = [f'# {title}', '']
for key in REPORT_SECTIONS:
if key in report:
lines.append(f'## {section_titles[key]}')
lines.append('')
lines.append(report[key])
lines.append('')
return '\n'.join(lines)
# Usage:
# md = render_markdown(report, 'Causes of Inflation in 2024')
# with open('report.md', 'w') as f: f.write(md)Kaynak Bağlantılarıyla Rapor Oluşturma
Web için işlerken kaynak URL'lerini köprülere dönüştürün. Ayrıca raporun oluşturulma tarihini, kaynak sayısını ve doğrulama oranını içeren bir üst veri bloğu ekleyin.
from datetime import date
def render_html_report(report: dict, title: str,
facts: list[dict], question: str) -> str:
meta = (
f'<p><em>Generated: {date.today()} | '
f'Sources: {len(set(f["source"] for f in facts))} | '
f'Research question: {question}</em></p>'
)
html_parts = [f'<h1>{title}</h1>', meta]
section_titles = {
'executive_summary': 'Executive Summary',
'background': 'Background',
'key_findings': 'Key Findings',
'evidence': 'Evidence',
'recommendations': 'Recommendations',
'sources': 'Sources'
}
for key in REPORT_SECTIONS:
if key in report:
content = report[key].replace('\n', '<br>')
html_parts.append(f'<h2>{section_titles[key]}</h2><p>{content}</p>')
return '\n'.join(html_parts)Yayımlamadan Önce Kalite Denetimleri
Raporu teslim etmeden önce otomatik kalite denetimleri gerçekleştirin: bölüm başına asgari kelime sayısı, en az N atıf, tüm önerilerin eylem fiilleriyle başlaması ve "[INSERT]" gibi yer tutucu metinlerin bulunmaması.
def quality_check(report: dict) -> list[str]:
issues = []
for section in ['executive_summary', 'background', 'key_findings']:
word_count = len(report.get(section, '').split())
if word_count < 30:
issues.append(f'{section} too short: {word_count} words (min 30)')
if report.get('sources', '').count('http') < 3:
issues.append('Less than 3 cited sources')
if '[INSERT]' in str(report) or 'TODO' in str(report):
issues.append('Report contains placeholder text')
recs = report.get('recommendations', '')
if recs and not any(verb in recs.lower()
for verb in ['should', 'recommend', 'consider', 'implement']):
issues.append('Recommendations may not be actionable')
return issues
if __name__ == '__main__':
demo_report = {
'executive_summary': 'Too short.',
'background': 'Also short.',
'key_findings': 'Short too.',
'sources': 'http://a.com',
'recommendations': 'Looks fine as is.',
}
for issue in quality_check(demo_report):
print('-', issue)
Yönetici Özeti: Sıkı Kısıtlar
Yönetici özeti kendi başına yeterli olmalıdır: yalnızca bu bölümü okuyan biri temel bulguyu ve önerilen eylemi anlayabilmelidir. Kelime sınırı olan katı bir istem kullanın.
def generate_executive_summary(question: str, facts: list[dict],
max_words: int = 80) -> str:
top_facts = '\n'.join(f'- {f["fact"]}' for f in facts[:10])
prompt = (
f'Research question: "{question}"\n\n'
f'Key facts:\n{top_facts}\n\n'
f'Write an executive summary in EXACTLY {max_words} words or fewer.\n'
f'Format: [Main finding]. [Why it matters]. [Recommended action].'
)
resp = client.chat.completions.create(
model='gpt-4o',
messages=[{'role': 'user', 'content': prompt}]
)
return resp.choices[0].message.contentBirden Fazla Kitleye Yönelik Raporlar
Aynı araştırma, farklı kitleler için farklı rapor biçimleri gerektirebilir: mühendisler için teknik ve derinlemesine inceleme, yöneticiler için yönetici özeti, uzman olmayanlar için sade dilli kısa rapor. Her sürümü aynı bilgi kümesinden oluşturun.
AUDIENCE_STYLES = {
'executive': 'Brief, strategic. Avoid jargon. Focus on business impact and decisions.',
'technical': 'Detailed, precise. Include methodology, caveats, and data sources.',
'general': 'Plain language. Avoid technical terms. Use analogies where helpful.'
}
def generate_for_audience(facts: list[dict], question: str, audience: str) -> str:
style = AUDIENCE_STYLES.get(audience, AUDIENCE_STYLES['general'])
facts_text = '\n'.join(f'- {f["fact"]}' for f in facts[:20])
prompt = (
f'Synthesize these facts into a report for a {audience} audience.\n'
f'Style guide: {style}\n'
f'Question: "{question}"\n\n'
f'Facts:\n{facts_text}'
)
resp = client.chat.completions.create(
model='gpt-4o',
messages=[{'role': 'user', 'content': prompt}]
)
return resp.choices[0].message.contentRaporları Kaydetme ve Sürümlendirme
Raporları bir zaman damgası ve araştırma sorusunun karma değeriyle kaydedin. Böylece araştırma güncellenmiş kaynaklarla yeniden çalıştırıldığında rapor sürümlerini karşılaştırabilirsiniz.
import hashlib, json, os
from datetime import datetime, timezone
def save_report(report: dict, question: str, output_dir: str = '/tmp/reports'):
os.makedirs(output_dir, exist_ok=True)
q_hash = hashlib.md5(question.encode()).hexdigest()[:8]
timestamp = datetime.now(timezone.utc).strftime('%Y%m%d_%H%M')
filename = f'{output_dir}/report_{q_hash}_{timestamp}.json'
with open(filename, 'w') as f:
json.dump({
'question': question,
'generated': timestamp,
'sections': report
}, f, indent=2)
print(f'Report saved: {filename}')
return filename
if __name__ == '__main__':
import tempfile
demo_dir = tempfile.mkdtemp()
save_report({'executive_summary': 'AI agent adoption grew significantly in 2026.'},
'What are the key AI agent trends in 2026?', output_dir=demo_dir)
Rapor yapısında hangi bölüm her zaman kendi başına yeterli olmalıdır?
Rapor yapısı, zamanı kısıtlı okuyucuların belgenin tamamını okumadan bilgi edinebilmesi için tasarlanır. Hangi bölümün tek başına anlaşılabilir olması gerektiğini anlamak, rapor tasarımı açısından önemlidir.
Yapılandırılmış Rapor Oluşturmanın Özeti
Raporları sabit bir şablon kullanarak bölüm bölüm oluşturun (Yönetici Özeti → Arka Plan → Temel Bulgular → Kanıtlar → Öneriler → Kaynaklar). Metin içi atıfları ekleyin, kalite denetimleri gerçekleştirin ve aynı bilgi kümesinden farklı kitlelere yönelik biçimleri destekleyin.
Sürümlendirme için raporları her zaman zaman damgaları ve soru karmalarıyla kaydedin.
Sıkça Sorulan Sorular
“Yapılandırılmış Rapor Oluşturma” dersi ücretsiz mi?
Evet — “Yapılandırılmış Rapor Oluşturma” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve AI Agents kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. AI Agents kursu toplamda 4 dersten oluşur.
“Yapılandırılmış Rapor Oluşturma” dersinde ne öğreneceğim?
Şablonlu raporlar: yönetici özeti, bulgular, kanıtlar, öneriler. AI Agents ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
AI Agents öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te AI Agents, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.
“Yapılandırılmış Rapor Oluşturma” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu AI Agents dersinde kod yazıp çalıştırabilir miyim?
Evet. Her AI Agents dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Çok Adımlı Araştırma Döngüsü Tasarımı
- Kaynak Doğrulama ve Atıf
- Yapılandırılmış Rapor Oluşturma
- Bilgi Doğrulama ve Halüsinasyonları Önleme