برنامه نویسی

کار DBCHAT برای اولین بار در VSCode – قسمت 9

سلام من Shrijith Venkatrama ، بنیانگذار Hexmos هستم. در حال حاضر ، من در حال ساخت LiveApi هستم ، ابزاری بسیار مناسب که با تولید اسناد عالی API از کد شما در عرض چند دقیقه ، گردش کار مهندسی را ساده می کند.

در این مجموعه آموزش ، من در یک سفر برای ساخت خودم DBCHAT هستم – ابزاری ساده برای استفاده از چت AI برای کشف و تکامل بانکهای اطلاعاتی.

برای دریافت زمینه بیشتر به پست های قبلی مراجعه کنید:

  1. ساختمان DBCHAT – DB خود را با گپ ساده کاوش و تکامل دهید (قسمت 1)
  2. DBCHAT: گرفتن یک اسباب بازی Repl در Golang (قسمت 2)
  3. DBCHAT قسمت 3 – پایگاه داده ها را پیکربندی ، اتصال و حذف کنید
  4. با DB خود از طریق DBChat & Gemini (قسمت 4) گپ بزنید
  5. پروتکل سرور زبان – ساختمان DBCHAT (قسمت 5)
  6. ساخت DBCHAT VSCODE پسوند – پینگ پنگ با پس زمینه LSP (قسمت 6)
  7. شروع یک UI پسوند VScode برای DBCHAT (قسمت 7)
  8. مدیریت پیکربندی TOML را از پسوند VScode – DBCHAT قسمت 8 مدیریت کنید

برخی از تصاویر نسخه کار

نمای پیش فرض برای DBCHAT به این شکل خواهد بود:

نمای پیش فرض

پس از انتخاب یک بانک اطلاعاتی – ما یک نمایش چت دریافت می کنیم:

نمایش گپ

اکنون ، ما سعی خواهیم کرد “کاربران Gmail” در مقابل “کاربران غیر GMail” را با ساده ترین درخواست ها/درخواست ها دریافت کنیم:

کاربران Gmail

پرس و جو عالی است. وقتی این کار را می کنم exec 1 من دقیقاً نتیجه مورد انتظار در قالب جدول را می گیرم.

منطق مشابه برای پرس و جو “دریافت همه کاربران غیر Gmail” نیز کار می کند.

نمای دقیق تر به به روزرسانی های DBCHAT

این کد ارتباط با یک مشتری LSP ، احتمالاً مشتری پروتکل سرور زبان در یک ویرایشگر کد است. در اینجا یک شکست:

1. تنظیم مرحله: پیکربندی و اولیه سازی

  • بارگیری پیکربندی: کد با خواندن پرونده پیکربندی شروع می شود. این پرونده احتمالاً تنظیماتی مانند رشته های اتصال پایگاه داده را در خود جای داده است.
  • ایجاد کنترل کننده پرس و جو: سپس تنظیم می کند queryHandler، که احتمالاً مسئول درک و اجرای درخواست های کاربر است.
  • ساخت کنترل کننده: سرانجام ، آن را ایجاد می کند DBChatHandler، یک مؤلفه اصلی که پیکربندی ، کنترل کننده پرس و جو و اتصال بالقوه پایگاه داده را مدیریت می کند.
config, err := utils.LoadConfig()
if err != nil {
    log.Printf("Warning: Could not load config: %v", err)
    config = &utils.Config{Connections: make(map[string]string)}
}

queryHandler, err := query.NewHandler(config.LLM.GeminiKey)
if err != nil {
    log.Printf("Warning: Could not create query handler: %v", err)
}

handler := &DBChatHandler{
    config:       config,
    queryHandler: queryHandler,
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

2. ارتباطات LSP: ضربان قلب

  • حلقه LSP: این برنامه وارد یک حلقه مداوم می شود و به طور مداوم به پیام های مشتری LSP گوش می دهد.
  • پیام خواندن: با دقت پیام های مشتری را می خواند و به آن توجه زیادی می کند Content-Length هدر برای دانستن چقدر داده ها باید انتظار داشته باشید.
  • پیام های تجزیه کننده: پس از دریافت ، داده های خام به یک پیام ساخت یافته JSON-RPC تبدیل می شوند و درک آن را آسان تر می کنند.
for {
    // Read Content-Length header 
    // ... (code for reading header) ...

    // Read message body 
    // ... (code for reading message body) ...

    // Parse JSON-RPC message
    var msg JSONRPCMessage
    if err := json.Unmarshal(body, &msg); err != nil { 
        // ... (handle parsing error) ...
    }
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

3. درخواست های رسیدگی: چه کاری باید انجام شود؟

  • درخواست های “پینگ”: ساده! این برنامه با یک “پنگ” پاسخ می دهد تا پینگ مشتری را تصدیق کند.
  • درخواست های “گپ”: اینجاست که عمل اتفاق می افتد.

    • کد پیام گپ کاربر را استخراج می کند.
    • این پیام را به Eval روش در DBChatHandlerبشر این روش به احتمال زیاد با پایگاه داده و queryHandler برای پردازش درخواست
    • نتیجه پردازش سپس به یک پاسخ بسته بندی شده و به مشتری ارسال می شود.
switch msg.Method {
    case "ping":
        response.Result = "pong"
    case "chat":
        var params struct {
            Message string `json:"message"`
        }
        if err := json.Unmarshal(msg.Params, &params); err != nil {
            // ... (handle invalid params) ...
        }

        log.Printf("Processing chat message: %q", params.Message)
        result := handler.Eval(params.Message) 
        log.Printf("Eval result: %q", result) 

        response.Result = map[string]interface{}{
            "message": result,
        }
    // ... (handle other methods) ...
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

4. رسیدگی به خطا و پاسخ ها

  • خطاهای صید: در صورت بروز هر چیزی – مانند مشکلات تجزیه پیام یا مشکلات مربوط به پایگاه داده – این برنامه با ظرافت خطا را کنترل می کند و یک پیام خطای مناسب را به مشتری ارسال می کند.
  • ارسال پاسخ: سرانجام ، برنامه پیام پاسخ را با فرمت صحیح JSON-RPC ساخته و آن را به مشتری ارسال می کند.
if err := writeResponse(response); err != nil {
    log.Printf("Error writing response: %v", err)
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

پایان

DBCHAT اکنون قادر به مدیریت اتصالات پایگاه داده ، تمرکز بر روی هر پایگاه داده ، اجازه دادن به نمایش داده ها در زبان های طبیعی است و در نهایت پاسخ های خوبی را در قالب جدول بر اساس محتوای پایگاه داده دریافت می کند.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا