برنامه نویسی

استفاده از هوش مصنوعی در IDE برای کار با مبانی کد منبع باز

Summarize this content to 400 words in Persian Lang

بیایید ببینیم چگونه می توانیم پیشرفت هایی را به آن اضافه کنیم langchaingo پروژه با پشتیبانی از توسعه دهنده آمازون Q در VS Code

با تشکر از langchaingo، امکان ساخت برنامه های کاربردی هوش مصنوعی مولد قابل ترکیب با استفاده از Go وجود دارد. من نحوه استفاده از قابلیت های تولید کد (و به طور کلی توسعه نرم افزار) در Amazon Q Developer با استفاده از VS Code را برای شما توضیح خواهم داد. langchaingo.

بیایید درست به آن برسیم!

من با شبیه سازی شروع کردم langchaingo، و پروژه را در VS Code باز کرد:

git clone https://github.com/tmc/langchaingo
code langchaingo

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

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

langchaingo دارای یک جزء LLM است که از مدل‌های بستر آمازون از جمله – کلود، خانواده Titan و غیره پشتیبانی می‌کند. من می‌خواستم برای مدل دیگری پشتیبانی اضافه کنم.

پشتیبانی Titan Text Premier را اضافه کنید

بنابراین من با این دستور شروع کردم – پشتیبانی از مدل Amazon Titan Text Premier از Amazon Bedrock را اضافه کنید. تست کیس را نیز به روز کنید.

توسعه دهنده آمازون Q فرآیند تولید کد را آغاز می کند…

استدلال

بخش جالب این بود که چگونه دائماً فرآیند فکر خود را به اشتراک می گذاشت (من واقعاً مجبور نبودم آن را برای انجام این کار ترغیب کنم!). اگرچه در اسکرین شات مشخص نیست، اما آمازون Q Developer روند فکر خود را در حین انجام وظیفه خود به روز می کند.

این خاطرات (نه چندان دوست داشتنی) از مصاحبه های Leetcode را بازگرداند که در آن مصاحبه کننده باید دائماً به من یادآوری کند که صدادار باشم و روند فکرم را به اشتراک بگذارم.

پس از انجام آن، تغییرات به وضوح لیست می شوند:

بررسی درونی پایه کد

همچنین دیدن فایل هایی که به عنوان بخشی از فرآیند درون سنجی شده اند بسیار مفید است. به یاد داشته باشید، آمازون Q Developer از کل پایه کد به عنوان مرجع یا زمینه استفاده می کند – این بسیار مهم است. در این مورد، توجه کنید که چگونه به اندازه کافی هوشمند بود که فقط فایل های مربوط به بیانیه مشکل را بررسی کرد.

پیشنهادات کد

در نهایت، آن را با پیشنهادات به روز رسانی کد، از جمله تست مورد آمد. با نگاهی به نتیجه، ممکن است به نظر برسد که این کار آسانی بود. اما، برای کسی که تازه وارد پایگاه کد شده است، این می تواند واقعا مفید باشد.

پس از پذیرش تغییرات، موارد تست را اجرا کردم:

cd llms/bedrock
go test -v

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

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

همه آنها گذشتند!

برای جمع بندی، این را نیز از یک پروژه جداگانه امتحان کردم. در اینجا کدی است که از مدل Titan Text Premier استفاده کرده است (نگاه کنید به bedrock.WithModel(bedrock.ModelAmazonTitanTextPremierV1)):

package main

import (
“context”
“fmt”
“log”

“github.com/tmc/langchaingo/llms”
“github.com/tmc/langchaingo/llms/bedrock”
)

func main() {
ctx := context.Background()

llm, err := bedrock.New(bedrock.WithModel(bedrock.ModelAmazonTitanTextPremierV1))
if err != nil {
log.Fatal(err)
}

prompt := “What would be a good company name for a company that makes colorful socks?”
completion, err := llms.GenerateFromSinglePrompt(ctx, llm, prompt)
if err != nil {
log.Fatal(err)
}

fmt.Println(completion)
}

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

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

از آنجایی که تغییرات را به صورت محلی داشتم، اشاره کردم go.mod به نسخه محلی langchaingo:

module demo

go 1.22.0

require github.com/tmc/langchaingo v0.1.12

replace github.com/tmc/langchaingo v0.1.12 => /Users/foobar/demo/langchaingo

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

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

حرکت به سمت چیزی که کمی درگیرتر است. مانند LLM، langchaingo دارای کامپوننت Document loader است. من می خواستم آمازون S3 را اضافه کنم – به این ترتیب هر کسی می تواند به راحتی داده های سطل S3 را در برنامه های خود قرار دهد.

آمازون S3 – اجرای بارکننده سند

طبق معمول، من با یک اعلان شروع کردم – یک پیاده سازی بارگذار سند برای آمازون S3 اضافه کنید.

با استفاده از پایه کد موجود

خلاصه تغییرات واقعا جالب است. بار دیگر، Amazon Q Developer تمرکز خود را بر آنچه برای انجام کار لازم است حفظ کرد. در این مورد، آن را بررسی کرد documentloaders دایرکتوری برای درک پیاده سازی های موجود و برنامه ریزی شده برای پیاده سازی Load و LoadAndSplit توابع – خوب!

پیشنهادات کد، با نظرات برای وضوح

این به شما یک ایده واضح از فایل هایی که بررسی شده اند می دهد. در نهایت، منطق کامل در فایلی به نام (طبق انتظار) بود s3.go.

این کد پیشنهادی است:

بعد از پذیرش تغییرات جزئی در آن ایجاد کردم. اینم نسخه نهایی:

توجه داشته باشید که فقط داده های متنی را در نظر می گیرد (فایل txt.)

package documentloaders

import (
“context”
“fmt”

“github.com/aws/aws-sdk-go-v2/service/s3”
“github.com/tmc/langchaingo/schema”
“github.com/tmc/langchaingo/textsplitter”
)

// S3 is a loader for documents stored in Amazon S3.
type S3 struct {
client *s3.Client
bucket string
key string
}

var _ Loader = (*S3)(nil)

// NewS3 creates a new S3 loader with an S3 client, bucket name, and object key.
func NewS3(client *s3.Client, bucket, key string) *S3 {
return &S3{
client: client,
bucket: bucket,
key: key,
}
}

// Load retrieves the object from S3 and loads it as a document.
func (s *S3) Load(ctx context.Context) ([]schema.Document, error) {
// Get the object from S3
result, err := s.client.GetObject(ctx, &s3.GetObjectInput{
Bucket: &s.bucket,
Key: &s.key,
})
if err != nil {
return nil, fmt.Errorf(“failed to get object from S3: %w”, err)
}

defer result.Body.Close()

// Use the Text loader to load the document
return NewText(result.Body).Load(ctx)
}

// LoadAndSplit retrieves the object from S3, loads it as a document, and splits it using the provided TextSplitter.
func (s *S3) LoadAndSplit(ctx context.Context, splitter textsplitter.TextSplitter) ([]schema.Document, error) {

docs, err := s.Load(ctx)
if err != nil {
return nil, err
}

return textsplitter.SplitDocuments(splitter, docs)
}

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

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

می توانید آن را از یک برنامه مشتری به این صورت امتحان کنید:

package main

import (
“context”
“fmt”
“log”
“os”

“github.com/aws/aws-sdk-go-v2/config”
“github.com/aws/aws-sdk-go-v2/service/s3”
“github.com/tmc/langchaingo/documentloaders”
“github.com/tmc/langchaingo/textsplitter”
)

func main() {
cfg, err := config.LoadDefaultConfig(context.Background(), config.WithRegion(os.Getenv(“AWS_REGION”)))
if err != nil {
log.Fatal(err)
}

client := s3.NewFromConfig(cfg)

s3Loader := documentloaders.NewS3(client, “test-bucket”, “demo.txt”)

docs, err := s3Loader.LoadAndSplit(context.Background(), textsplitter.NewRecursiveCharacter())
if err != nil {
log.Fatal(err)
}

for _, doc := range docs {
fmt.Println(doc.PageContent)
}

}

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

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

جمع کنید

اینها فقط چند نمونه بود. این قابلیت‌های پیشرفته برای استدلال مستقل به توسعه‌دهنده آمازون Q اجازه می‌دهد تا با وظایف چالش برانگیز مقابله کند. من دوست دارم که چگونه در مورد مشکل تکرار می کند، چندین رویکرد را در طول راه امتحان می کند، و مانند یک شما را در مورد روند فکر خود به روز نگه می دارد.

این برای تولید کد، مشکلات اشکال زدایی، بهبود اسناد و موارد دیگر مناسب است. برای چه چیزی از آن استفاده خواهید کرد؟

بیایید ببینیم چگونه می توانیم پیشرفت هایی را به آن اضافه کنیم langchaingo پروژه با پشتیبانی از توسعه دهنده آمازون Q در VS Code

با تشکر از langchaingo، امکان ساخت برنامه های کاربردی هوش مصنوعی مولد قابل ترکیب با استفاده از Go وجود دارد. من نحوه استفاده از قابلیت های تولید کد (و به طور کلی توسعه نرم افزار) در Amazon Q Developer با استفاده از VS Code را برای شما توضیح خواهم داد. langchaingo.

بیایید درست به آن برسیم!

من با شبیه سازی شروع کردم langchaingo، و پروژه را در VS Code باز کرد:

git clone https://github.com/tmc/langchaingo
code langchaingo
وارد حالت تمام صفحه شوید

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

langchaingo دارای یک جزء LLM است که از مدل‌های بستر آمازون از جمله – کلود، خانواده Titan و غیره پشتیبانی می‌کند. من می‌خواستم برای مدل دیگری پشتیبانی اضافه کنم.

پشتیبانی Titan Text Premier را اضافه کنید

بنابراین من با این دستور شروع کردم – پشتیبانی از مدل Amazon Titan Text Premier از Amazon Bedrock را اضافه کنید. تست کیس را نیز به روز کنید.

توسعه دهنده آمازون Q فرآیند تولید کد را آغاز می کند…

استدلال

بخش جالب این بود که چگونه دائماً فرآیند فکر خود را به اشتراک می گذاشت (من واقعاً مجبور نبودم آن را برای انجام این کار ترغیب کنم!). اگرچه در اسکرین شات مشخص نیست، اما آمازون Q Developer روند فکر خود را در حین انجام وظیفه خود به روز می کند.

این خاطرات (نه چندان دوست داشتنی) از مصاحبه های Leetcode را بازگرداند که در آن مصاحبه کننده باید دائماً به من یادآوری کند که صدادار باشم و روند فکرم را به اشتراک بگذارم.

پس از انجام آن، تغییرات به وضوح لیست می شوند:

توضیحات تصویر

بررسی درونی پایه کد

همچنین دیدن فایل هایی که به عنوان بخشی از فرآیند درون سنجی شده اند بسیار مفید است. به یاد داشته باشید، آمازون Q Developer از کل پایه کد به عنوان مرجع یا زمینه استفاده می کند – این بسیار مهم است. در این مورد، توجه کنید که چگونه به اندازه کافی هوشمند بود که فقط فایل های مربوط به بیانیه مشکل را بررسی کرد.

توضیحات تصویر

پیشنهادات کد

در نهایت، آن را با پیشنهادات به روز رسانی کد، از جمله تست مورد آمد. با نگاهی به نتیجه، ممکن است به نظر برسد که این کار آسانی بود. اما، برای کسی که تازه وارد پایگاه کد شده است، این می تواند واقعا مفید باشد.

توضیحات تصویر

پس از پذیرش تغییرات، موارد تست را اجرا کردم:

cd llms/bedrock
go test -v
وارد حالت تمام صفحه شوید

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

همه آنها گذشتند!

برای جمع بندی، این را نیز از یک پروژه جداگانه امتحان کردم. در اینجا کدی است که از مدل Titan Text Premier استفاده کرده است (نگاه کنید به bedrock.WithModel(bedrock.ModelAmazonTitanTextPremierV1)):

package main

import (
    "context"
    "fmt"
    "log"

    "github.com/tmc/langchaingo/llms"
    "github.com/tmc/langchaingo/llms/bedrock"
)

func main() {
    ctx := context.Background()

    llm, err := bedrock.New(bedrock.WithModel(bedrock.ModelAmazonTitanTextPremierV1))
    if err != nil {
        log.Fatal(err)
    }

    prompt := "What would be a good company name for a company that makes colorful socks?"
    completion, err := llms.GenerateFromSinglePrompt(ctx, llm, prompt)
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println(completion)
}
وارد حالت تمام صفحه شوید

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

توضیحات تصویر

از آنجایی که تغییرات را به صورت محلی داشتم، اشاره کردم go.mod به نسخه محلی langchaingo:

module demo

go 1.22.0

require github.com/tmc/langchaingo v0.1.12

replace github.com/tmc/langchaingo v0.1.12 => /Users/foobar/demo/langchaingo
وارد حالت تمام صفحه شوید

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

حرکت به سمت چیزی که کمی درگیرتر است. مانند LLM، langchaingo دارای کامپوننت Document loader است. من می خواستم آمازون S3 را اضافه کنم – به این ترتیب هر کسی می تواند به راحتی داده های سطل S3 را در برنامه های خود قرار دهد.

آمازون S3 – اجرای بارکننده سند

طبق معمول، من با یک اعلان شروع کردم – یک پیاده سازی بارگذار سند برای آمازون S3 اضافه کنید.

با استفاده از پایه کد موجود

خلاصه تغییرات واقعا جالب است. بار دیگر، Amazon Q Developer تمرکز خود را بر آنچه برای انجام کار لازم است حفظ کرد. در این مورد، آن را بررسی کرد documentloaders دایرکتوری برای درک پیاده سازی های موجود و برنامه ریزی شده برای پیاده سازی Load و LoadAndSplit توابع – خوب!

توضیحات تصویر

پیشنهادات کد، با نظرات برای وضوح

این به شما یک ایده واضح از فایل هایی که بررسی شده اند می دهد. در نهایت، منطق کامل در فایلی به نام (طبق انتظار) بود s3.go.

این کد پیشنهادی است:

توضیحات تصویر

بعد از پذیرش تغییرات جزئی در آن ایجاد کردم. اینم نسخه نهایی:

توجه داشته باشید که فقط داده های متنی را در نظر می گیرد (فایل txt.)

package documentloaders

import (
    "context"
    "fmt"

    "github.com/aws/aws-sdk-go-v2/service/s3"
    "github.com/tmc/langchaingo/schema"
    "github.com/tmc/langchaingo/textsplitter"
)

// S3 is a loader for documents stored in Amazon S3.
type S3 struct {
    client *s3.Client
    bucket string
    key    string
}

var _ Loader = (*S3)(nil)

// NewS3 creates a new S3 loader with an S3 client, bucket name, and object key.
func NewS3(client *s3.Client, bucket, key string) *S3 {
    return &S3{
        client: client,
        bucket: bucket,
        key:    key,
    }
}

// Load retrieves the object from S3 and loads it as a document.
func (s *S3) Load(ctx context.Context) ([]schema.Document, error) {
    // Get the object from S3
    result, err := s.client.GetObject(ctx, &s3.GetObjectInput{
        Bucket: &s.bucket,
        Key:    &s.key,
    })
    if err != nil {
        return nil, fmt.Errorf("failed to get object from S3: %w", err)
    }

    defer result.Body.Close()

    // Use the Text loader to load the document
    return NewText(result.Body).Load(ctx)
}

// LoadAndSplit retrieves the object from S3, loads it as a document, and splits it using the provided TextSplitter.
func (s *S3) LoadAndSplit(ctx context.Context, splitter textsplitter.TextSplitter) ([]schema.Document, error) {

    docs, err := s.Load(ctx)
    if err != nil {
        return nil, err
    }

    return textsplitter.SplitDocuments(splitter, docs)
}
وارد حالت تمام صفحه شوید

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

می توانید آن را از یک برنامه مشتری به این صورت امتحان کنید:

package main

import (
    "context"
    "fmt"
    "log"
    "os"

    "github.com/aws/aws-sdk-go-v2/config"
    "github.com/aws/aws-sdk-go-v2/service/s3"
    "github.com/tmc/langchaingo/documentloaders"
    "github.com/tmc/langchaingo/textsplitter"
)

func main() {
    cfg, err := config.LoadDefaultConfig(context.Background(), config.WithRegion(os.Getenv("AWS_REGION")))
    if err != nil {
        log.Fatal(err)
    }

    client := s3.NewFromConfig(cfg)

    s3Loader := documentloaders.NewS3(client, "test-bucket", "demo.txt")

    docs, err := s3Loader.LoadAndSplit(context.Background(), textsplitter.NewRecursiveCharacter())
    if err != nil {
        log.Fatal(err)
    }

    for _, doc := range docs {
        fmt.Println(doc.PageContent)
    }

}
وارد حالت تمام صفحه شوید

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

جمع کنید

اینها فقط چند نمونه بود. این قابلیت‌های پیشرفته برای استدلال مستقل به توسعه‌دهنده آمازون Q اجازه می‌دهد تا با وظایف چالش برانگیز مقابله کند. من دوست دارم که چگونه در مورد مشکل تکرار می کند، چندین رویکرد را در طول راه امتحان می کند، و مانند یک شما را در مورد روند فکر خود به روز نگه می دارد.

این برای تولید کد، مشکلات اشکال زدایی، بهبود اسناد و موارد دیگر مناسب است. برای چه چیزی از آن استفاده خواهید کرد؟

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

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

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

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