Tool - DuckDuckGoSearch
基本介绍
DuckDuckGo 搜索工具是 Tool InvokableTool 接口的一个实现,用于通过 DuckDuckGo 搜索引擎进行网络搜索,DuckDuckGo 是一个注重隐私的搜索引擎,不会追踪用户的搜索行为,重点是无需 api key 鉴权即可直接使用。该组件实现了 Eino: ToolsNode 使用说明
使用方式
组件初始化
DuckDuckGo 搜索工具通过 NewTool
函数进行初始化,主要配置参数如下:
import "github.com/cloudwego/eino-ext/components/tool/duckduckgo"
tool, err := duckduckgo.NewTool(ctx, &duckduckgo.Config{
ToolName: "duckduckgo_search", // 工具名称
ToolDesc: "search web for information by duckduckgo", // 工具描述
Region: ddgsearch.RegionWT, // 搜索地区
MaxResults: 10, // 每页结果数量
SafeSearch: ddgsearch.SafeSearchOff, // 安全搜索级别
TimeRange: ddgsearch.TimeRangeAll, // 时间范围
DDGConfig: &ddgsearch.Config{}, // DuckDuckGo 配置
})
搜索参数
搜索请求支持以下参数:
type SearchRequest struct {
Query string `json:"query"` // 搜索关键词
Page int `json:"page"` // 页码
}
完整使用示例
package main
import (
"context"
"encoding/json"
"fmt"
"log"
"github.com/cloudwego/eino-ext/components/tool/duckduckgo"
"github.com/cloudwego/eino-ext/components/tool/duckduckgo/ddgsearch"
)
func main() {
ctx := context.Background()
// Create configuration
config := &duckduckgo.Config{
MaxResults: 3, // Limit to return 3 results
Region: ddgsearch._RegionCN_,
DDGConfig: &ddgsearch.Config{
Timeout: 10,
Cache: true,
MaxRetries: 5,
},
}
// Create search client
tool, err := duckduckgo.NewTool(ctx, config)
if err != nil {
log.Fatal("Failed to create tool:", err)
}
// Create search request
searchReq := &duckduckgo.SearchRequest{
Query: "Golang programming development",
Page: 1,
}
jsonReq, err := json.Marshal(searchReq)
if err != nil {
log.Fatal("Failed to marshal search request:", err)
}
// Execute search
resp, err := tool.InvokableRun(ctx, string(jsonReq))
if err != nil {
log.Fatal("Search failed:", err)
}
var searchResp duckduckgo.SearchResponse
if err := json.Unmarshal([]byte(resp), &searchResp); err != nil {
log.Fatal("Failed to unmarshal search response:", err)
}
// Print results
fmt.Println("Search Results:")
fmt.Println("==============")
for i, result := range searchResp.Results {
fmt.Printf("\n%d. Title: %s\n", i+1, result.Title)
fmt.Printf(" Link: %s\n", result.Link)
fmt.Printf(" Description: %s\n", result.Description)
}
fmt.Println("")
fmt.Println("==============")
}
搜索结果示例
{
"results": [
{
"title": "Go 并发编程实践",
"description": "这是一篇关于 Go 语言并发编程的文章...",
"link": "https://example.com/article1"
},
{
"title": "Understanding Concurrency in Go",
"description": "A comprehensive guide to concurrent programming...",
"link": "https://example.com/article2"
}
]
}
相关文档
最后修改
February 21, 2025
: doc: add eino english docs (#1255) (4f6a3bd)