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

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

اکنون ، ما سعی خواهیم کرد “کاربران 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, ¶ms); 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 اکنون قادر به مدیریت اتصالات پایگاه داده ، تمرکز بر روی هر پایگاه داده ، اجازه دادن به نمایش داده ها در زبان های طبیعی است و در نهایت پاسخ های خوبی را در قالب جدول بر اساس محتوای پایگاه داده دریافت می کند.



