Ejen AI · Pelajaran

Corak Gelung Penyelidikan Mendalam

Pertanyaan → baca → ekstrak → sintesis → pertanyaan semula: penyelidikan berbilang lompatan.

Pelajaran 3 daripada 413 langkah

Corak Gelung Penyelidikan Mendalam ialah pelajaran Ejen AI percuma di CoddyKit. Ini ialah pelajaran 3 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Ejen AI, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Ejen AI merangkumi sejumlah 4 pelajaran.

Apakah Gelung Penyelidikan Mendalam?

Gelung penyelidikan mendalam ialah corak ejen yang mencari, membaca, mengenal pasti jurang pengetahuan dan mencari lagi secara berulang sehingga memperoleh maklumat yang mencukupi untuk menulis jawapan yang menyeluruh.

Berbeza daripada carian tunggal, corak ini meniru cara penyelidik manusia bekerja: teroka → pelajari → temui perkara yang belum diketahui → selidik dengan lebih mendalam.

Gambaran Keseluruhan Seni Bina Gelung

Gelung penyelidikan mendalam mempunyai lima fasa yang berulang:

  1. Pertanyaan awal — cari menggunakan soalan asal pengguna
  2. Baca hasil teratas — ekstrak fakta utama daripada 3 sumber terbaik
  3. Kenal pasti jurang — apakah soalan penting yang masih belum terjawab?
  4. Pertanyaan susulan — jana carian yang disasarkan untuk jurang tersebut
  5. Sintesis — gabungkan semua fakta yang dikumpulkan menjadi jawapan akhir
def deep_research(question, max_iterations=3):
    all_facts = []
    queries_used = [question]

    for iteration in range(max_iterations):
        results = search_and_rank(queries_used[-1])
        facts = extract_facts(results, question)
        all_facts.extend(facts)

        gaps = identify_knowledge_gaps(question, all_facts)
        if not gaps:
            print(f'Research complete after {iteration + 1} iterations')
            break

        follow_up = generate_follow_up_query(gaps)
        queries_used.append(follow_up)
        print(f'Iteration {iteration + 1}: {follow_up}')

    return synthesize_answer(question, all_facts)

Fasa 1: Carian Awal

Carian pertama menggunakan soalan asal pengguna. Dapatkan 3-5 hasil dan ekstrak kandungan teks mentah. Fasa ini menumpukan keluasan — mendapatkan gambaran keseluruhan tentang bidang topik tersebut.

from tavily import TavilyClient
import os

client = TavilyClient(api_key=os.getenv('TAVILY_API_KEY'))

def initial_search(question, n_results=5):
    results = client.search(
        query=question,
        max_results=n_results,
        search_depth='advanced'  # deeper extraction for research tasks
    )
    return results.get('results', [])

# Also capture the direct answer if available
def get_direct_answer(question):
    results = client.search(query=question, max_results=3)
    return results.get('answer', '')  # Tavily's synthesized answer

Fasa 2: Mengekstrak Fakta Utama

Hantar hasil carian mentah kepada LLM dan minta LLM mengekstrak fakta khusus yang boleh disahkan serta berkaitan dengan soalan penyelidikan. Fakta hendaklah atomik — satu dakwaan bagi setiap item.

EXTRACT_FACTS_PROMPT = '''You are a research assistant.
From the search results below, extract all factual claims relevant to the question.

Question: {question}

Search results:
{results_text}

Return a JSON list of facts:
["GPT-4 was released in March 2023",
 "GPT-4 supports 128k context window",
 ...]

Only include verifiable facts. No opinions or summaries. JSON:'''

def extract_facts(results, question):
    import json
    results_text = '\n\n'.join(
        f"[{i+1}] {r['title']}\n{r['content'][:600]}"
        for i, r in enumerate(results)
    )
    response = llm_call(EXTRACT_FACTS_PROMPT.format(
        question=question, results_text=results_text
    ))
    return json.loads(response)

Fasa 3: Mengenal Pasti Jurang Pengetahuan

Selepas setiap lelaran carian, tanya LLM: berdasarkan perkara yang kita ketahui setakat ini, apakah aspek penting soalan asal yang masih belum ditangani?

Jurang ini menjadi pertanyaan carian untuk pusingan seterusnya.

GAPS_PROMPT = '''You are a research analyst.

Original research question: {question}

Facts gathered so far:
{facts}

What important aspects of the question are still NOT covered by these facts?
List 2-3 specific knowledge gaps as a JSON array of strings.
If the question is fully answered, return an empty array [].

JSON:'''

def identify_knowledge_gaps(question, facts):
    import json
    facts_text = '\n'.join(f'- {f}' for f in facts)
    response = llm_call(GAPS_PROMPT.format(
        question=question, facts=facts_text
    ))
    return json.loads(response)

Fasa 4: Menjana Pertanyaan Susulan

Ubah jurang pengetahuan menjadi pertanyaan carian yang berkesan. Jurang seperti "Kami tidak mengetahui model penetapan harga" boleh menjadi pertanyaan yang disasarkan seperti "Harga API GPT-4 bagi setiap token pada tahun 2024".

QUERY_GEN_PROMPT = '''Convert these knowledge gaps into specific web search queries.

Original topic: {topic}
Knowledge gaps:
{gaps}

Return a JSON array of search query strings.
Make each query specific and searchable.
JSON:'''

def generate_follow_up_queries(topic, gaps):
    import json
    gaps_text = '\n'.join(f'- {g}' for g in gaps)
    response = llm_call(QUERY_GEN_PROMPT.format(
        topic=topic, gaps=gaps_text
    ))
    queries = json.loads(response)
    return queries[:3]  # max 3 follow-up queries per iteration

Kriteria Penamatan

Tanpa kriteria penamatan yang jelas, gelung akan berjalan selama-lamanya. Hentikan gelung apabila: (1) tiada jurang dikenal pasti, (2) bilangan maksimum lelaran telah dicapai, (3) belanjawan token telah habis, atau (4) fakta baharu terlalu serupa dengan fakta sedia ada (pulangan yang semakin berkurang).

MAX_ITERATIONS = 4
MAX_FACTS = 50
MIN_NEW_FACTS_TO_CONTINUE = 3

def should_continue(gaps, all_facts, new_facts, iteration):
    if iteration >= MAX_ITERATIONS:
        print(f'Stopping: max iterations ({MAX_ITERATIONS}) reached')
        return False
    if not gaps:
        print('Stopping: no knowledge gaps found')
        return False
    if len(all_facts) >= MAX_FACTS:
        print(f'Stopping: fact budget ({MAX_FACTS}) reached')
        return False
    if len(new_facts) < MIN_NEW_FACTS_TO_CONTINUE:
        print(f'Stopping: diminishing returns ({len(new_facts)} new facts)')
        return False
    return True

if __name__ == '__main__':
    print('Continue?', should_continue(gaps=['gap1'], all_facts=['f'] * 10, new_facts=['f1', 'f2', 'f3'], iteration=1))
    print('Continue?', should_continue(gaps=[], all_facts=['f'] * 10, new_facts=['f1'], iteration=1))

Fasa 5: Mensintesis Jawapan Akhir

Selepas gelung ditamatkan, hantar semua fakta yang dikumpulkan kepada LLM untuk disintesis. Tugas LLM adalah menyusun fakta menjadi jawapan yang koheren dan tersusun baik, serta menyertakan penyandaran sumber.

SYNTHESIS_PROMPT = '''You are a research writer.

Original question: {question}

Researched facts (gathered from {n_iterations} search iterations):
{facts}

Write a comprehensive, well-structured answer based on these facts.
Format with clear sections. Be specific and cite facts where relevant.
If any aspect of the question could not be fully answered, say so.

Answer:'''

def synthesize_answer(question, all_facts, n_iterations):
    facts_text = '\n'.join(f'- {f}' for f in all_facts)
    return llm_call(SYNTHESIS_PROMPT.format(
        question=question,
        facts=facts_text,
        n_iterations=n_iterations
    ))

Menjejaki Sumber Merentas Lelaran

Dalam gelung yang mempunyai berbilang lelaran, anda mengumpulkan fakta daripada banyak sumber yang berbeza. Jejaki sumber asal setiap fakta supaya jawapan akhir dapat memetiknya dengan tepat.

def extract_facts_with_sources(results, question):
    import json

    PROMPT = '''Extract facts from these search results. For each fact include the source URL.

Question: {question}
Results: {results_text}

Return JSON list:
[{{"fact": "GPT-4 supports 128k context", "source": "https://openai.com/..."}}, ...]
JSON:'''

    results_text = '\n\n'.join(
        f"[URL: {r['url']}]\n{r['content'][:500]}"
        for r in results
    )
    response = llm_call(PROMPT.format(
        question=question, results_text=results_text
    ))
    return json.loads(response)

Pelaksanaan Carian Selari

Apabila anda mempunyai beberapa pertanyaan susulan, jalankannya secara selari menggunakan asyncio untuk mengurangkan jumlah masa penyelidikan. Ini boleh mengurangkan masa gelung 3 lelaran daripada 30 saat kepada 15 saat.

import asyncio

async def async_search(client, query):
    # Tavily has async support
    loop = asyncio.get_event_loop()
    result = await loop.run_in_executor(
        None,
        lambda: client.search(query=query, max_results=3)
    )
    return result.get('results', [])

async def parallel_search(queries):
    tasks = [async_search(client, q) for q in queries]
    results_list = await asyncio.gather(*tasks)
    # Flatten
    return [r for results in results_list for r in results]

# Run in event loop
all_results = asyncio.run(parallel_search(follow_up_queries))

Menyahpendua Fakta

Sumber yang berbeza sering menyatakan fakta yang sama dengan perkataan yang berbeza. Sebelum sintesis, nyahpendua fakta menggunakan keserupaan benaman untuk mengelakkan maklumat yang sama diulang beberapa kali dalam jawapan akhir.

def deduplicate_facts(facts, similarity_threshold=0.92):
    if not facts:
        return facts

    # Get embeddings for all facts
    embeddings = [embed(f) for f in facts]
    unique_indices = [0]  # always keep first

    for i in range(1, len(facts)):
        is_duplicate = False
        for j in unique_indices:
            sim = cosine_similarity(embeddings[i], embeddings[j])
            if sim > similarity_threshold:
                is_duplicate = True
                break
        if not is_duplicate:
            unique_indices.append(i)

    unique_facts = [facts[i] for i in unique_indices]
    print(f'Deduplicated: {len(facts)} -> {len(unique_facts)} facts')
    return unique_facts

Semakan Pengetahuan

Apakah syarat penamatan yang betul bagi gelung penyelidikan mendalam apabila tiada jurang pengetahuan ditemui?

Imbas Kembali: Corak Gelung Penyelidikan Mendalam

Corak gelung penyelidikan mendalam ialah: cari → ekstrak fakta → cari jurang → jana pertanyaan susulan → ulangi → sintesis. Corak ini meniru cara penyelidik manusia bekerja.

Keputusan reka bentuk utama termasuk kriteria penamatan (lelaran maksimum, tiada jurang, pulangan yang semakin berkurang), penjejakan sumber untuk penyandaran, carian selari untuk kelajuan dan nyahpenduaan fakta sebelum sintesis. Hadkan kepada 3-4 lelaran untuk mengimbangi kedalaman dengan kos dan kependaman.

Percuma untuk bermula

Pelajari Ejen AI dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
60
Pelajaran
239

Soalan Lazim

Adakah pelajaran “Corak Gelung Penyelidikan Mendalam” percuma?

Ya — teks penuh “Corak Gelung Penyelidikan Mendalam” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Ejen AI, tingkat taraf kepada CoddyKit PRO. Kursus Ejen AI merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Corak Gelung Penyelidikan Mendalam”?

Pertanyaan → baca → ekstrak → sintesis → pertanyaan semula: penyelidikan berbilang lompatan. Anda berlatih Ejen AI menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Ejen AI?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Ejen AI di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 3 daripada 4.

Berapa lamakah pelajaran “Corak Gelung Penyelidikan Mendalam” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Ejen AI ini?

Ya. Setiap pelajaran Ejen AI menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Tavily dan SerpAPI untuk Carian Ejen
  2. Menyusun Kedudukan dan Menapis Hasil Carian
  3. Corak Gelung Penyelidikan Mendalam
  4. Menggabungkan Carian Web dengan RAG
← Kembali ke Ejen AI