جلب وتحليل محتوى الشبكة مع LLMS في C (العربية (Arabic))

جلب وتحليل محتوى الشبكة مع LLMS في C

Friday, 19 December 2025

//

16 minute read

ملاحظة ملاحظةوفيما يتعلق بحالات استخدام الإنتاج (التلخيص الشبكي، وتحليل الوثائق، وأدوات العوامل)، انظر: DocSumMesreز الإفراج عن GitHub - أنه ينفذ العمارة المعروضة هنا ولكن من حيث درجة الإنتاج: BERT consoldings، والبحث الهجين، والكتاب المسرحي لصفحات SPAs، وحماية SSRF، والاستشهادات المصادق عليها، والتتبع الصحيح للتغطية.

عندما تطلب من شاتاغبت أن "يقرأ هذه المقالة ويلخصها"، ماذا يحدث فعلاً؟ إذا تخيلت AI يفتح متصفح ويقرأ كما تريد - هذه ليست الطريقة التي يعمل بها.

LLLs لا يتصفح الشبكة. هم سبب على شظايا اختيارات رموزك.

هذه المقالة تظهر لكم كيفية بناء هذا في C# مع Olama - لا أطر، مجرد شفرة عملية يمكنك تصحيحها.

TTL؛ DRالـ LLM هو تحديد هو من تصميم هذا هو قيد و معمارية.

الشيء الوحيد الذي يجعل هذا ينجح

هذه هي البصيرة التي تغير كيفية بناء هذه الأنظمة:

الإختيار هو قرار المنتج. وهو أيضاً حيث تنشأ معظم حالات الفشل.

الـ LLM هو منتقى هو منتقى هو لا يستطيع استعادة معلومات أنت لم تعرضها. عندما a وكيل فشل إلى إيجاد الجواب المشكلة هو تقريباً لا نموذج هو أن تحديد منطق إختار القطع الخاطئة. (هذا هو نفس المبدأ وراء). لماذا أتجنب أُطر مثل Langchhain -تجرد من منطق الانتقاء الذي تحتاج إلى تصحيحه.)

هذا سبب فشل "البحث الوكيل" بصمت. الوكيل يجيب بثقة بناءاً على ما رآه. أنت لا تعرف أبداً أنه أخطأ المحتوى الصحيح.

flowchart LR
    URL[Full Page] --> Select[Your Selection]
    Select --> LLM[LLM Sees This]
    LLM --> Answer[Answer]
    
    URL -.->|"50KB"| Select
    Select -.->|"2KB"| LLM
    
    Miss[Missed Content] -.->|"Never seen"| X[❌]
    
    style Select stroke:#e74c3c,stroke-width:3px
    style Miss stroke:#95a5a6,stroke-width:2px,stroke-dasharray: 5 5

يمكن للنموذج فقط أن يفسر ما أعطيته له. بناء بناءً على ذلك.


أهداف التصميم قبل الشفرة

قبل كتابة أي شيء، هذه هي القيود:

لِمَ تُسِلُّ ؟ |------------|----------------| | لا توجد مذكرة تفاهم □ HTML الثابت فقط (كتاب مسرحي لـ SPAs) □ | الرسوم المُسندة ميزانية أساسية لكل طلب (2-4K رمز نمطي) | أجوبة مستمدة من مصادر المصدر LLLL يجب أن لا يُهلوس معرفة الويب | الانتقاء الذي يُعَدّ فيه □ نفس الإدخال □ نفس القطع (غير قابلة للتنقيط) □ □ نفس القطع نفسها (غير قابلة للتنقيط) □ | قابل للمسبور □ سجل ما اخترته، ولماذا، وما الذي تخلصت منه

إذا كنت لا تستطيع تفسير لماذا تم اختيار قطعة، لا يمكنك تصحيح الفشل.


الـ

flowchart TB
    URL[URL] --> Fetch[1. Fetch]
    Fetch --> Clean[2. Clean]
    Clean --> Chunk[3. Chunk]
    Chunk --> Select[4. Select]
    Select --> LLM[LLM]
    LLM --> Answer[Answer]
    
    Fetch -.->|"57KB HTML"| Clean
    Clean -.->|"6KB text"| Chunk
    Chunk -.->|"5 chunks"| Select
    Select -.->|"2 chunks"| LLM
    
    style Select stroke:#e74c3c,stroke-width:3px
    style Clean stroke:#f39c12,stroke-width:3px

كل خطوة تقلل من البيانات. بحلول الوقت الذي يراها LLM ، كنت قد ذهبت من 57KB من HTML إلى ربما 2KB من النصوص ذات الصلة. كل التقليص هو خسارة. كل التقليص يمكن ان يتخلى عن الاجابة. هذا هو نفس النمط الذي استخدمه كبير كبير CVSV ملفات - أسباب إل إل إل إل إل إل، رمزكَ يَحْسبُ ويَختارُ.


خلال هذه المادة، سنستخدم عنواناً واحداً:

https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-10/overview

وثلاثة أسئلة عن زيادة الخصوصية:

  1. "ما الجديد في Net 10؟"
  2. "ما هي تحسينات الأداء التي ذُكرت؟"
  3. "هل هناك أي شيء عن أي وقت من الأوقات؟"

وهذا يبقي الأمثلة قائمة على أساس وتبين كيف أن الانتقاء أكثر أهمية عندما تصبح الأسئلة محددة.


إنشاء

# Install Ollama from https://ollama.ai
ollama pull llama3.2:3b

# NuGet packages
dotnet add package AngleSharp      # HTML parsing
dotnet add package OllamaSharp     # Ollama client (5.1.x)

ملاحظة مُشَرْبفي النسخة 5.x، GenerateAsync 1 ف-5، 1 ف-4، 1 ف-3، 1 خ م، 1 م و، 1 م و، 1 م و، 1 م و، 1 م و، 1 م و، 1 م و، 1 م و، 1 م و، 1 م و، 1 م و، 1 م أ م و IAsyncEnumerable<GenerateResponseStream?> - يُمَيّزُ كَمَا يُولّدُونَ، تُجمّعُ مَع await foreachمشروع العينة دبابيس 5.1.5.


1:: أمر

معيار HTTTP، ولكن مع التفاصيل التي لها أهمية:

public class WebFetcher : IDisposable
{
    private readonly HttpClient _http;
    
    public WebFetcher()
    {
        var handler = new HttpClientHandler
        {
            AllowAutoRedirect = true,
            MaxAutomaticRedirections = 5,  // Cap redirects
            AutomaticDecompression = DecompressionMethods.All
        };
        
        _http = new HttpClient(handler) { Timeout = TimeSpan.FromSeconds(30) };
        _http.DefaultRequestHeaders.Add("User-Agent", 
            "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36");
    }
    
    public async Task<string> FetchAsync(string url)
    {
        var response = await _http.GetAsync(url);
        
        // Bail if not HTML
        var contentType = response.Content.Headers.ContentType?.MediaType ?? "";
        if (!contentType.Contains("html") && !contentType.Contains("text"))
            throw new InvalidOperationException($"Not HTML: {contentType}");
        
        response.EnsureSuccessStatusCode();
        return await response.Content.ReadAsStringAsync();
    }
    
    public void Dispose() => _http.Dispose();
}

ما الذي يُديره هذا: إعادة توجيه (مقصورة)، ضغط، فترات زمنية، عامل المستخدم، التحقق من نوع المحتوى.

ما لا يعني أنه لا: جافا سكريبت: ترجمة، توثيق، تحديد السعر، روبوتات.txt. من أجل الإنتاج، إضافة تأخيرات لكل مضيف واحترام سياسات الزحف.


الخطوة 2: نظيفة

هو في الغالب ضوضاء نظّفه أو تهدر الرسومات على التخطيط

a نمطي صفحة:

57KB HTML → 6KB useful text (90% reduction)

الاستراتيجية

flowchart LR
    HTML[Raw HTML] --> Remove[Remove Noise]
    Remove --> Find[Find Main Content]
    Find --> Extract[Extract Text + Headings]
    Extract --> Normalize[Normalize]
    
    Remove -.->|"script, style, nav, ads"| Find
    Find -.->|"main, article, .content"| Extract
    
    style Remove stroke:#e74c3c,stroke-width:3px
    style Find stroke:#f39c12,stroke-width:3px

التنظيف هو خسارة والاعتناء بالعناية

منظفك يستطيع حذف الجواب. أخطاء مشتركة:

  • تُزِل الناخات السلبية المحتوى المشروع
  • للمحتويات الرئيسية أسماء فئات غير عادية (للمحتويات الرئيسية أسماء فئات غير عادية).article-body, .post-text)
  • الجواب هو بوصة a جانب شريط جانبي أو نداء مرفَع

****:

  • مُنصبات المُنْظِرات بشكل صريح (h1-h6)
  • دال - الدور وقد عقد مؤتمراً بشأن طائــط الطائــات المعروفــةلا وجود لأنماط واسعة
  • لـ لـ لـ لـ لـ لـ لـ: مُنتج عنصر العنصر المسار
  • تراجع: إذا كان المحتوى الرئيسي قصيراً بشكل مريب، جرّب الجسم
public class HtmlCleaner
{
    private readonly HtmlParser _parser = new();
    
    // Known noise - remove these entirely
    private static readonly string[] NoiseElements = 
        { "script", "style", "nav", "footer", "aside", "iframe", "noscript" };
    
    // Boilerplate patterns - remove by role, not aggressive wildcards
    private static readonly string[] NoiseSelectors = 
    {
        "[role='navigation']", "[role='banner']", "[role='complementary']",
        "[class*='cookie']", "[class*='newsletter']", "[aria-hidden='true']"
    };
    
    // Where to find content - order matters (most specific first)
    private static readonly string[] ContentSelectors = 
        { "main", "article", "[role='main']", ".content", ".post-content" };
    
    public CleanResult Clean(string html)
    {
        var doc = _parser.ParseDocument(html);
        
        // Remove noise
        foreach (var tag in NoiseElements)
            foreach (var el in doc.QuerySelectorAll(tag).ToList())
                el.Remove();
        
        foreach (var selector in NoiseSelectors)
            foreach (var el in doc.QuerySelectorAll(selector).ToList())
                el.Remove();
        
        // Find main content
        IElement? main = null;
        string? matchedSelector = null;
        
        foreach (var selector in ContentSelectors)
        {
            main = doc.QuerySelector(selector);
            if (main != null) { matchedSelector = selector; break; }
        }
        
        // Fallback to body if main content is suspiciously short
        var text = main?.TextContent ?? "";
        if (text.Length < 500 && doc.Body != null)
        {
            main = doc.Body;
            matchedSelector = "body (fallback)";
            text = main.TextContent;
        }
        
        return new CleanResult
        {
            Text = NormalizeWhitespace(text),
            MatchedSelector = matchedSelector ?? "none",
            OriginalLength = html.Length
        };
    }
    
    private string NormalizeWhitespace(string text)
    {
        text = Regex.Replace(text, @"[ \t]+", " ");
        text = Regex.Replace(text, @"\n\s*\n+", "\n\n");
        return text.Trim();
    }
}

public record CleanResult(string Text, string MatchedSelector, int OriginalLength);

**** (فقرات مصاحبة، كثافة نصية) هي حفرة أرنب كاملة. في الوقت الراهن، يعمل الاستخراج القائم على الاختيار للتوثيق والمدونات. ويشمل مشروع العينة مستخرج درجات إذا كنت بحاجة إليها.


الخطوة 3: دانك

لديك 6 كيلو بايت من النص النظيف لم لا ترسلها كلها؟

  • ما بين العُق القُرَّب:الشراكات LLLS أداء أسوأ عندما يتم دفن المعلومات ذات الصلة في سياق واسع
  • ****المزيد من العوائد = المزيد من المال والتأخر
  • محور التركيز: تُنتج قطع مختارة حججاً أفضل من كل شيء في آن واحد

اغطي هذا بتعمق في المادة 4 من هيكل مجموعة الـ RAG - نفس المبادئ تنطبق سواء كنت تؤلف صفحات الويب أو الوثائق.

مُعَرَف مُعَرَفَفَ مُنْعِف

هذه نقطة بداية، وليس رمز الإنتاج:

public List<string> ChunkBySentence(string text, int maxTokens = 2000)
{
    var chunks = new List<string>();
    
    // WARNING: This breaks on abbreviations, decimals, URLs, code samples
    var sentences = text.Split(new[] { ". ", ".\n", "! ", "? " }, 
        StringSplitOptions.RemoveEmptyEntries);
    
    var current = new StringBuilder();
    var tokens = 0;
    
    foreach (var sentence in sentences)
    {
        var sentenceTokens = EstimateTokens(sentence);
        
        if (tokens + sentenceTokens > maxTokens && current.Length > 0)
        {
            chunks.Add(current.ToString().Trim());
            current.Clear();
            tokens = 0;
        }
        
        current.Append(sentence).Append(". ");
        tokens += sentenceTokens;
    }
    
    if (current.Length > 0)
        chunks.Add(current.ToString().Trim());
    
    return chunks;
}

// Rough estimate - OK for demos, not for billing
private int EstimateTokens(string text) 
    => (int)(text.Split(' ').Length * 1.3);

لماذا هذا ساذج:

  • ". " على "د. سميث" و"v1." وURLs على "د. سميث" و"v1.
  • التقدير حسب كل كلمة عدد هو o20% من
  • عدم وجود تداخل بين القطع (سياق الخسارة عند الحدود)

أفضل: العنوان الرئيسي:

فيما يتعلق بالوثائق، قسماً فرعاً:

public List<ContentChunk> ChunkByHeadings(string html)
{
    var doc = new HtmlParser().ParseDocument(html);
    var chunks = new List<ContentChunk>();
    
    var headings = doc.QuerySelectorAll("h1, h2, h3");
    
    foreach (var heading in headings)
    {
        var content = new StringBuilder();
        content.AppendLine(heading.TextContent);
        
        var sibling = heading.NextElementSibling;
        while (sibling != null && !sibling.TagName.StartsWith("H"))
        {
            content.AppendLine(sibling.TextContent);
            sibling = sibling.NextElementSibling;
        }
        
        chunks.Add(new ContentChunk
        {
            Heading = heading.TextContent.Trim(),
            Content = content.ToString().Trim(),
            HeadingLevel = int.Parse(heading.TagName[1..])
        });
    }
    
    return chunks;
}

وهذا يحفظ هيكل الوثائق ويجعل الانتقاء أكثر جدوى.


يجري::::

هذا هو المكان الذي تحدث فيه معظم الإخفاقات. ومن أين ينبغي أن يبدأ التصحيح.

لديك 5 قطع. سأل المستخدم "ما هي تحسينات الأداء في.NET 10؟" فقط 1 إلى 2 قطعة تشير إلى الأداء. أرسل تلك.

flowchart TB
    Q["Question: What perf improvements?"] --> Score[Score Each Chunk]
    
    subgraph Chunks
        C1["Chunk 1: Overview..."] 
        C2["Chunk 2: Runtime perf..."]
        C3["Chunk 3: Libraries..."]
        C4["Chunk 4: SDK changes..."]
    end
    
    Score --> C1
    Score --> C2
    Score --> C3
    Score --> C4
    
    C2 -->|"score: 3"| Top[Selected]
    C3 -->|"score: 1"| Top
    
    style C2 stroke:#27ae60,stroke-width:3px
    style C1 stroke:#95a5a6,stroke-width:2px,stroke-dasharray: 5 5
    style C4 stroke:#95a5a6,stroke-width:2px,stroke-dasharray: 5 5

كلمة مفتاح متطابقة (SM هذا، مُنْمِج مُنْرِج)

public record ScoredChunk(string Content, string? Heading, int Score, List<string> MatchedKeywords);

public List<ScoredChunk> SelectByKeywords(
    List<ContentChunk> chunks, 
    string question, 
    int topK = 3)
{
    // Normalize and filter stopwords
    var keywords = question.ToLower()
        .Split(' ', StringSplitOptions.RemoveEmptyEntries)
        .Where(w => w.Length > 3)
        .Where(w => !Stopwords.Contains(w))
        .Select(w => w.Trim(',', '.', '?', '!'))
        .Distinct()
        .ToList();
    
    var scored = chunks.Select(chunk =>
    {
        var text = (chunk.Heading + " " + chunk.Content).ToLower();
        var matched = keywords.Where(kw => text.Contains(kw)).ToList();
        
        // Boost if keyword appears in heading
        var headingBoost = chunk.Heading != null && 
            keywords.Any(kw => chunk.Heading.ToLower().Contains(kw)) ? 2 : 0;
        
        return new ScoredChunk(
            chunk.Content, 
            chunk.Heading, 
            matched.Count + headingBoost,
            matched
        );
    })
    .OrderByDescending(x => x.Score)
    .Take(topK)
    .ToList();
    
    // LOG THIS - it's your debugging lifeline
    foreach (var s in scored)
        Console.WriteLine($"  [{s.Score}] {s.Heading ?? "(no heading)"}: {string.Join(", ", s.MatchedKeywords)}");
    
    return scored;
}

private static readonly HashSet<string> Stopwords = new()
    { "what", "how", "does", "the", "are", "is", "in", "for", "of", "to", "and" };

إدخال تحسينات رئيسية على العد السد السد السد:

  • (غير ذلك "ماذا" و"المطابقة الدائمة")
  • معززز توجيه رأسي (إشارة معدنية)
  • مور - هذا هو مسار الحياة الخاص بك

القائمة على أساس مدمج (Semstic)

الكلمات الرئيسية تفشل على المرادفات. "perf" لن تطابق "تحسينات الأداء".

إذا كنت تريد أن تذهب أعمق على الترسيخات و متجه البحث، أنا أغطي هذا بشكل مكثف في وقد عقد مؤتمراً بشأن مع OONNX.

public async Task<List<ScoredChunk>> SelectByEmbedding(
    List<ContentChunk> chunks, 
    string question, 
    int topK = 3)
{
    var questionEmbed = await EmbedAsync(question);
    
    // Cache these per URL in production
    var scored = new List<(ContentChunk Chunk, double Score)>();
    
    foreach (var chunk in chunks)
    {
        var chunkEmbed = await EmbedAsync(chunk.Content);
        var similarity = CosineSimilarity(questionEmbed, chunkEmbed);
        scored.Add((chunk, similarity));
    }
    
    return scored
        .OrderByDescending(x => x.Score)
        .Take(topK)
        .Select(x => new ScoredChunk(x.Chunk.Content, x.Chunk.Heading, (int)(x.Score * 100), new()))
        .ToList();
}

private async Task<double[]> EmbedAsync(string text)
{
    var request = new EmbedRequest { Model = "nomic-embed-text", Input = [text] };
    var response = await _ollama.EmbedAsync(request);
    return response.Embeddings.First().ToArray();
}

****:

  • الكلمات المفتاحية: سريع ، مُنمّق ، مُطابقة حرفية
  • مبدئي، لكن أبطأ و يحتاج إلى كشط

(URL, bet hish) في SQLite أو قاعدة بيانات متجهة مثل: .


يُرسَل إلى LLM

(ب) الهيكل النافذ إلى أجوبة مصدر القوة مع الإشارة إلى ما يلي:

public string BuildPrompt(string url, List<ScoredChunk> chunks, string question)
{
    var sb = new StringBuilder();
    
    sb.AppendLine("You are answering a question using ONLY the content below.");
    sb.AppendLine("Rules:");
    sb.AppendLine("- Answer ONLY from the provided sources");
    sb.AppendLine("- Cite which SOURCE number supports each claim");
    sb.AppendLine("- Include 1-2 brief quotes as evidence");
    sb.AppendLine("- If the answer isn't in the sources, say 'Not enough information'");
    sb.AppendLine("- End with Confidence: High/Medium/Low");
    sb.AppendLine();
    
    for (int i = 0; i < chunks.Count; i++)
    {
        sb.AppendLine($"=== SOURCE {i + 1} ===");
        if (chunks[i].Heading != null)
            sb.AppendLine($"Section: {chunks[i].Heading}");
        sb.AppendLine($"From: {url}");
        sb.AppendLine(chunks[i].Content);
        sb.AppendLine();
    }
    
    sb.AppendLine($"Question: {question}");
    sb.AppendLine();
    sb.AppendLine("Answer (with citations and confidence):");
    
    return sb.ToString();
}

هذا ينتقل من "ملخص chatie" إلى "تحليل مع مصدر."

نداء الوليمة

public async Task<string> AskAsync(string prompt)
{
    var request = new GenerateRequest { Model = "llama3.2:3b", Prompt = prompt };
    
    var response = new StringBuilder();
    await foreach (var chunk in _ollama.GenerateAsync(request))
    {
        if (chunk?.Response != null)
            response.Append(chunk.Response);
    }
    
    return response.ToString().Trim();
}

هذا هذا هذا

ما بنيناه هو نمط عامل بدون الإطار. لماذا أفضل هذا النهج على لانغ تشين -الانترنت الواضح يتغلب على الملخصات السحرية عندما يكون تصحيح الأمور مهمّاً

flowchart LR
    subgraph Tools["Tools (Deterministic)"]
        T1[fetch_url]
        T2[clean_html]
        T3[chunk_text]
        T4[select_relevant]
    end
    
    subgraph LLM["LLM (Reasoning)"]
        R[Interpret + Answer]
    end
    
    T1 --> T2 --> T3 --> T4 --> R
    
    R -->|"Low confidence"| Retry[Retry with different selection]
    Retry --> T4
    
    style T4 stroke:#e74c3c,stroke-width:3px
    style R stroke:#3498db,stroke-width:3px

الحلقة: إذا كانت الثقة منخفضة، أعيد المحاولة مع المزيد من القطع أو كلمات رئيسية مختلفة.

var answer = await AskAsync(prompt);

if (answer.Contains("Not enough information") || answer.Contains("Confidence: Low"))
{
    // Retry with more chunks
    var moreChunks = SelectByKeywords(allChunks, question, topK: 5);
    answer = await AskAsync(BuildPrompt(url, moreChunks, question));
}

ما الذي يحدث خطأ

flowchart TB
    subgraph Failures["Failure Modes"]
        F1[Cleaner removes content]
        F2[Chunking breaks mid-thought]
        F3[Selection picks wrong chunks]
        F4[LLM hallucinates connections]
    end
    
    F1 --> R1["'Not enough info' - answer existed"]
    F2 --> R2["Partial answer - context lost"]
    F3 --> R3["Wrong answer - right content skipped"]
    F4 --> R4["Confident but wrong"]
    
    style F3 stroke:#e74c3c,stroke-width:3px

دال - القاعدة المتعلقة بالإلغاء:

إذا كان الجواب خاطئاً، فإنه تقريباً دائماً لأن كان الانتقاء خاطئاًليس بسبب فشل النموذج

لا

  1. & & & & &
  2. **** (أو أَنْ يُرسِلَ مسالماً)
  3. جاري التنفيذ الذي أُرسل
  4. مقارنة مقارنة مقارنةهل كان المحتوى الصحيح في الـ HTML؟ النص المنظف؟ أي جزء؟

الفشل في العادة ليس إل إل إل إل إل إل.


وضعها معاً

public class WebAnalyzer : IDisposable
{
    private readonly WebFetcher _fetcher = new();
    private readonly HtmlCleaner _cleaner = new();
    private readonly OllamaApiClient _ollama = new(new Uri("http://localhost:11434"));
    
    public async Task<AnalysisResult> AnalyzeAsync(string url, string question)
    {
        // 1. Fetch
        var html = await _fetcher.FetchAsync(url);
        
        // 2. Clean (with observability)
        var cleaned = _cleaner.Clean(html);
        Console.WriteLine($"Cleaned: {cleaned.OriginalLength} → {cleaned.Text.Length} bytes ({cleaned.MatchedSelector})");
        
        // 3. Chunk
        var chunks = ChunkByHeadings(html);
        Console.WriteLine($"Chunks: {chunks.Count}");
        
        // 4. Select (with logging)
        Console.WriteLine("Selection scores:");
        var selected = SelectByKeywords(chunks, question, topK: 3);
        
        // 5. Prompt + LLM
        var prompt = BuildPrompt(url, selected, question);
        var answer = await AskAsync(prompt);
        
        return new AnalysisResult
        {
            Answer = answer,
            ChunksUsed = selected.Count,
            SelectionScores = selected.Select(s => s.Score).ToList()
        };
    }
    
    public void Dispose() => _fetcher.Dispose();
}

مُنَاقَشَةً مَع مِثَالِنَا ٱلْمُقَدَّسِ :

using var analyzer = new WebAnalyzer();

var result = await analyzer.AnalyzeAsync(
    "https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-10/overview",
    "What performance improvements are in .NET 10?"
);

Console.WriteLine(result.Answer);

يشمل الناتج الاستشهادات والثقة:

Based on SOURCE 1 and SOURCE 2:

.NET 10 includes several performance improvements:
- JIT improvements including better inlining and method devirtualization (SOURCE 1)
- "Enhanced loop inversion for better optimization" (SOURCE 1)
- NativeAOT enhancements for improved code generation (SOURCE 2)

Confidence: High

عندما يعمل هذا (و لا)

عمل جيد لا يعمل |------------|--------------| الوثائق المعروضة على الأمانة العامة للأمم المتحدة □ وظائف مدونة، مواد □ المحتوى الدينامي/المحتويات التفاعلية □ المراجع التقنية - البحوث المتعددة الصفحات □ المحتوى الثابت HTML □ المحتوى الموثَّق □

للمواقع التي تحتاجها العزف لـ NET.


المبدأ الأساسي

flowchart LR
    subgraph Your["Your Code's Job"]
        direction TB
        F[Fetch reliably]
        C[Clean carefully]
        S[Select correctly]
        O[Observe everything]
    end
    
    subgraph LLM["LLM's Job"]
        direction TB
        R[Reason over what you gave it]
        A[Admit when it doesn't know]
    end
    
    Your --> LLM
    
    style S stroke:#e74c3c,stroke-width:3px
    style R stroke:#3498db,stroke-width:3px

LLL يمكن أن يكون السبب فقط حول ما أعطيته. الاختيار هو مسؤوليتك.

لا تطلبي من (إل إل إل إم) أن يتجولوا أطلبي منه أن يكون منطقياً


كامل مشروع

التنفيذ الكامل: Llmwwb Fetchr

المصدر::

  • WebFetcher - HTTP مع المناولة المناسبة
  • HtmlCleaner - إزالة الضوضاء + استراتيجيات التراجع
  • ContentChunker - القطع على أساس الجملة أو العنوان
  • WebContentAnalyzer - كامل خط الأنابيب مع قطع الأشجار
  • OllamaExtensions - مساعد في توجيه الردود
cd Mostlylucid.LlmWebFetcher
dotnet run

الموارد الخارجة عن


LLLLL

مواد مُسْمِمْمِم

ميكرو ميكرو ميكرو ميكرو ميكرو ميكرو Name

Finding related posts...
logo

© 2026 Scott Galloway — Unlicense — All content and source code on this site is free to use, copy, modify, and sell.