Tool - Googlesearch
基本介绍
Google 搜索工具是 Eino InvokableTool 接口的一个实现,用于通过 Google Custom Search API 进行网络搜索。该组件实现了 Eino: ToolsNode 使用说明。
使用方式
组件初始化
Google 搜索工具通过 NewGoogleSearchTool
函数进行初始化,主要配置参数如下:
import "github.com/cloudwego/eino-ext/components/tool/googlesearch"
tool, err := googlesearch.NewTool(ctx, &googlesearch.Config{
APIKey: "your-api-key", // Google API 密钥
SearchEngineID: "your-engine-id", // 搜索引擎 ID
BaseURL: "custom-base-url", // 可选:自定义 API 基础 URL, default: https://customsearch.googleapis.com
Num: 5, // 可选:每页结果数量
Lang: "zh-CN", // 可选:搜索界面语言
ToolName: "google_search", // 可选:工具名称
ToolDesc: "google search tool", // 可选:工具描述
})
搜索参数
搜索请求支持以下参数:
type SearchRequest struct {
Query string `json:"query"` // 搜索关键词
Num int `json:"num"` // 返回结果数量
Offset int `json:"offset"` // 结果起始位置
Lang string `json:"lang"` // 搜索语言
}
完整使用示例
package main
import (
"context"
"encoding/json"
"fmt"
"log"
"os"
"github.com/cloudwego/eino-ext/components/tool/googlesearch"
)
func main() {
ctx := context.Background()
googleAPIKey := os.Getenv("GOOGLE_API_KEY")
googleSearchEngineID := os.Getenv("GOOGLE_SEARCH_ENGINE_ID")
if googleAPIKey == "" || googleSearchEngineID == "" {
log.Fatal("[GOOGLE_API_KEY] and [GOOGLE_SEARCH_ENGINE_ID] must set")
}
// create tool
searchTool, err := googlesearch.NewTool(ctx, &googlesearch.Config{
APIKey: googleAPIKey,
SearchEngineID: googleSearchEngineID,
Lang: "zh-CN",
Num: 5,
})
if err != nil {
log.Fatal(err)
}
// prepare params
req := googlesearch.SearchRequest{
Query: "Golang concurrent programming",
Num: 3,
Lang: "en",
}
args, err := json.Marshal(req)
if err != nil {
log.Fatal(err)
}
// do search
resp, err := searchTool.InvokableRun(ctx, string(args))
if err != nil {
log.Fatal(err)
}
var searchResp googlesearch.SearchResult
if err := json.Unmarshal([]byte(resp), &searchResp); err != nil {
log.Fatal(err)
}
// Print results
fmt.Println("Search Results:")
fmt.Println("==============")
for i, result := range searchResp.Items {
fmt.Printf("\n%d. Title: %s\n", i+1, result.Title)
fmt.Printf(" Link: %s\n", result.Link)
fmt.Printf(" Desc: %s\n", result.Desc)
}
fmt.Println("")
fmt.Println("==============")
// seems like:
// Search Results:
// ==============
// 1. Title: My Concurrent Programming book is finally PUBLISHED!!! : r/golang
// Link: https://www.reddit.com/r/golang/comments/18b86aa/my_concurrent_programming_book_is_finally/
// Desc: Posted by u/channelselectcase - 398 votes and 46 comments
// 2. Title: Concurrency — An Introduction to Programming in Go | Go Resources
// Link: https://www.golang-book.com/books/intro/10
// Desc:
// 3. Title: The Comprehensive Guide to Concurrency in Golang | by Brandon ...
// Link: https://bwoff.medium.com/the-comprehensive-guide-to-concurrency-in-golang-aaa99f8bccf6
// Desc: Update (November 20, 2023) — This article has undergone a comprehensive revision for enhanced clarity and conciseness. I’ve streamlined the…
// ==============
}
搜索结果示例
{
"query": "Golang concurrent programming",
"items": [
{
"link": "https://example.com/article1",
"title": "Go 并发编程实践",
"snippet": "这是一篇关于 Go 语言并发编程的文章...",
"desc": "详细介绍了 Go 语言中的 goroutine 和 channel..."
},
{
"link": "https://example.com/article2",
"title": "Understanding Concurrency in Go",
"snippet": "A comprehensive guide to concurrent programming...",
"desc": "Learn about Go's concurrency model and best practices..."
}
]
}
相关文档
最后修改
April 2, 2025
: doc(Eino): fix a typo (#1294) (048e436)