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