Loader - web url
基本介绍
URL 文档加载器是 Document Loader 接口的一个实现,用于从网络 URL 中加载文档内容。该组件实现了 Eino: Document Loader 使用说明。
特性介绍
URL 文档加载器具有以下特点:
- 默认支持 HTML 网页内容的解析
- 可自定义 HTTP 客户端配置 (eg: 自定义代理等)
- 支持自定义内容解析器 (eg: body、或其他特定的容器)
使用方式
组件初始化
URL 文档加载器通过 NewLoader
函数进行初始化,主要配置参数如下:
loader, err := NewLoader(ctx, &LoaderConfig{
Parser: parser, // 可选:自定义解析器,默认使用 HTML 解析器
Client: httpClient, // 可选:自定义 HTTP 客户端
RequestBuilder: requestBuilder, // 可选:自定义请求构建器
})
配置参数说明:
Parser
:文档解析器,默认使用 HTML 解析器,会提取网页正文内容Client
:HTTP 客户端,可以自定义超时、代理等配置RequestBuilder
:请求构建器,用于自定义请求方法、请求头等
加载文档
文档加载通过 Load
方法实现:
docs, err := loader.Load(ctx, document.Source{
URI: "https://example.com/document",
})
注意事项:
- URI 必须是有效的 HTTP/HTTPS URL
- 默认使用 GET 方法请求
- 如果需要其他 HTTP 方法或自定义请求头,需要配置 RequestBuilder,例如 鉴权 场景
完整使用示例
基本使用
package main
import (
"context"
urlloader "github.com/cloudwego/eino-ext/components/document/loader/url"
"github.com/cloudwego/eino/components/document"
)
func main() {
ctx := context.Background()
// 使用默认配置初始化加载器
loader, err := urlloader.NewLoader(ctx, nil)
if err != nil {
panic(err)
}
// 加载文档
docs, err := loader.Load(ctx, document.Source{
URI: "https://example.com/article",
})
if err != nil {
panic(err)
}
// 使用文档内容
for _, doc := range docs {
println(doc.Content)
}
}
自定义配置示例
package main
import (
"context"
"net/http"
"time"
urlloader "github.com/cloudwego/eino-ext/components/document/loader/url"
"github.com/cloudwego/eino/components/document"
)
func main() {
ctx := context.Background()
// 自定义 HTTP 客户端
client := &http.Client{
Timeout: 10 * time.Second,
}
// 自定义请求构建器
requestBuilder := func(ctx context.Context, src document.Source, opts ...document.LoaderOption) (*http.Request, error) {
req, err := http.NewRequestWithContext(ctx, "GET", src.URI, nil)
if err != nil {
return nil, err
}
// 添加自定义请求头
req.Header.Add("User-Agent", "MyBot/1.0")
return req, nil
}
// 初始化加载器
loader, err := urlloader.NewLoader(ctx, &urlloader.LoaderConfig{
Client: client,
RequestBuilder: requestBuilder,
})
if err != nil {
panic(err)
}
// 加载文档
docs, err := loader.Load(ctx, document.Source{
URI: "https://example.com/article",
})
if err != nil {
panic(err)
}
// 使用文档内容
for _, doc := range docs {
println(doc.Content)
}
}
相关文档
最后修改
January 9, 2025
: feat: add eino cn docs (#1182) (ad75444)