برنامه نویسی

نحوه ایجاد یک ابزار جستجوی وب با استفاده از OpenAi API در GO

در این آموزش ، ما یک ابزار ساده جستجوی وب را با استفاده از API OpenAI ایجاد خواهیم کرد. این برنامه از قابلیت های OpenAI برای پردازش نمایش داده های جستجو و ادغام جستجوی Google برای بازیابی نتایج مربوطه استفاده می کند. در پایان این راهنما ، یک ابزار جستجوی وب کاربردی برای ارتقاء پروژه های خود خواهید داشت.


فهرست مطالب

  1. مقدمه
  2. پیش نیازهای
  3. ساخت پوشه
  4. راه اندازی پروژه
  5. نوشتن منطق جستجو
  6. آزمایش برنامه
  7. پایان

مقدمه

ابزارهای جستجوی وب با استفاده از OpenAI یک روش هوشمندانه برای تعامل با موتورهای جستجو و نتایج پردازش ارائه می دهند. در این آموزش ، ما یک برنامه Go ایجاد خواهیم کرد که:

  1. نمایش داده های کاربر را می پذیرد.
  2. نتایج جستجو را با استفاده از جستجوی Google بازیابی می کند.
  3. نتایج را با API OpenAI برای خلاصه پردازش می کند.

پیش نیازهای

قبل از شروع ، اطمینان حاصل کنید که:

  • GO نصب شده (نسخه 1.19 یا بالاتر).
  • آتش سوزی باز
  • دسترسی به یک API جستجوی Google یا یک ابزار مرورگر مناسب.
  • دانش اساسی برنامه نویسی GO.

ساخت پوشه

ساختار زیر را برای پروژه خود ایجاد کنید:

websearch-go/
|-- main.go
|-- search/
|   |-- search.go
|-- openai/
    |-- openai.go
حالت تمام صفحه را وارد کنید

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


راه اندازی پروژه

مرحله 1: پروژه را آغاز کنید

دستور زیر را اجرا کنید تا یک ماژول GO جدید را اولیه کنید:

mkdir websearch-go && cd websearch-go
go mod init websearch-go
حالت تمام صفحه را وارد کنید

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

مرحله 2: وابستگی ها را نصب کنید

ما از کتابخانه های زیر استفاده خواهیم کرد:

  • github.com/joho/godotenv برای متغیرهای محیط
  • net/http برای درخواست HTTP.
  • encoding/json برای تجزیه پاسخ های JSON.

کتابخانه های مورد نیاز را نصب کنید:

go get github.com/joho/godotenv
حالت تمام صفحه را وارد کنید

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

مرحله 3: ایجاد .env پرونده

کلید API OpenAI و کلید API Google خود را به a اضافه کنید .env پرونده:

OPENAI_API_KEY=your_openai_api_key
GOOGLE_API_KEY=your_google_api_key
GOOGLE_SEARCH_ENGINE_ID=your_search_engine_id
حالت تمام صفحه را وارد کنید

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


نوشتن منطق جستجو

مرحله 1: جستجوی Google را پیاده سازی کنید

یک فایل جدید ایجاد کنید search/search.go:

package search

import (
    "encoding/json"
    "fmt"
    "net/http"
    "os"
)

type GoogleSearchResult struct {
    Items []struct {
        Title       string `json:"title"`
        Link        string `json:"link"`
        Snippet     string `json:"snippet"`
    } `json:"items"`
}

func GoogleSearch(query string) ([]string, error) {
    apiKey := os.Getenv("GOOGLE_API_KEY")
    cx := os.Getenv("GOOGLE_SEARCH_ENGINE_ID")
    url := fmt.Sprintf("https://www.googleapis.com/customsearch/v1?q=%s&key=%s&cx=%s", query, apiKey, cx)

    resp, err := http.Get(url)
    if err != nil {
        return nil, err
    }
    defer resp.Body.Close()

    var result GoogleSearchResult
    if err := json.NewDecoder(resp.Body).Decode(&result); err != nil {
        return nil, err
    }

    var links []string
    for _, item := range result.Items {
        links = append(links, fmt.Sprintf("%s: %s", item.Title, item.Link))
    }

    return links, nil
}
حالت تمام صفحه را وارد کنید

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

مرحله 2: ادغام OpenAi

یک فایل جدید ایجاد کنید openai/openai.go:

package openai

import (
    "bytes"
    "encoding/json"
    "fmt"
    "net/http"
    "os"
)

type OpenAIRequest struct {
    Model       string   `json:"model"`
    Prompt      string   `json:"prompt"`
    MaxTokens   int      `json:"max_tokens"`
    Temperature float64  `json:"temperature"`
}

type OpenAIResponse struct {
    Choices []struct {
        Text string `json:"text"`
    } `json:"choices"`
}

func Summarize(prompt string) (string, error) {
    apiKey := os.Getenv("OPENAI_API_KEY")
    url := "https://api.openai.com/v1/completions"

    requestBody := OpenAIRequest{
        Model:       "text-davinci-003",
        Prompt:      prompt,
        MaxTokens:   150,
        Temperature: 0.7,
    }

    jsonBody, err := json.Marshal(requestBody)
    if err != nil {
        return "", err
    }

    req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonBody))
    if err != nil {
        return "", err
    }

    req.Header.Set("Content-Type", "application/json")
    req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", apiKey))

    client := &http.Client{}
    resp, err := client.Do(req)
    if err != nil {
        return "", err
    }
    defer resp.Body.Close()

    var response OpenAIResponse
    if err := json.NewDecoder(resp.Body).Decode(&response); err != nil {
        return "", err
    }

    if len(response.Choices) > 0 {
        return response.Choices[0].Text, nil
    }

    return "", fmt.Errorf("no response from OpenAI")
}
حالت تمام صفحه را وارد کنید

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

مرحله 3: جستجوی Google و OpenAI را با هم ترکیب کنید

در main.go، هر دو سرویس را با هم ترکیب کنید:

package main

import (
    "fmt"
    "log"
    "os"

    "websearch-go/openai"
    "websearch-go/search"

    "github.com/joho/godotenv"
)

func main() {
    if err := godotenv.Load(); err != nil {
        log.Fatal("Error loading .env file")
    }

    query := "Latest technology trends"
    fmt.Println("Searching for:", query)

    results, err := search.GoogleSearch(query)
    if err != nil {
        log.Fatal(err)
    }

    for _, result := range results {
        fmt.Println("Result:", result)
    }

    summary, err := openai.Summarize("Summarize these results: \n" + fmt.Sprint(results))
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println("Summary:", summary)
}
حالت تمام صفحه را وارد کنید

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


آزمایش برنامه

برنامه را با استفاده از:

go run main.go
حالت تمام صفحه را وارد کنید

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

شما باید نتایج جستجو را مشاهده کنید که پس از آن یک خروجی خلاصه شده است.


پایان

در این راهنما ، ما یک ابزار جستجوی وب ساده را با استفاده از GO ، OpenAI API و Google Search ایجاد کردیم. این ترکیب به ما امکان می دهد تا نتایج جستجو را به صورت هوشمندانه واکشی و پردازش کنیم و آن را به ابزاری قدرتمند برای برنامه های مختلف تبدیل کنیم. با اضافه کردن یک رابط وب یا ویژگی های اضافی ، می توانید در این مورد گسترش دهید!

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

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

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

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