novel-doomsday-resurgence/skills/veadk-go-skills/common/tools.md
唐天洛 cb9b16e5a8 初始提交:番茄小说创作工作区
包含:
- 核心配置文件(AGENTS.md, SOUL.md, USER.md等)
- 记忆系统(memory/文件夹)
- 技能库(skills/文件夹)
- 小说内容(novel/文件夹)
- .gitignore配置
2026-03-30 15:46:26 +08:00

126 lines
3.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Tools 定义方法
## 自定义 Tool
你可以通过撰写一个 Go 函数来定义一个自定义 Tool你必须清晰的定义好 Docstring
```go
import (
"context"
"fmt"
"log"
veagent "github.com/volcengine/veadk-go/agent/llmagent"
"github.com/volcengine/veadk-go/apps"
"github.com/volcengine/veadk-go/apps/agentkit_server_app"
"github.com/volcengine/veadk-go/utils"
"google.golang.org/adk/agent"
"google.golang.org/adk/agent/llmagent"
"google.golang.org/adk/tool"
"google.golang.org/adk/tool/functiontool"
)
// CalculatorAddArgs 定义加法工具的入参。使用静态类型,便于 LLM 以 JSON 方式调用。
type CalculatorAddArgs struct {
A float64 `json:"a" jsonschema:"第一个加数,支持整数或小数"`
B float64 `json:"b" jsonschema:"第二个加数,支持整数或小数"`
}
// CalculatorAddTool 返回一个符合 ADK functiontool 规范的工具。
// 该工具用于执行两数相加,并返回 result 字段。
func CalculatorAddTool() (tool.Tool, error) {
handler := func(ctx tool.Context, args CalculatorAddArgs) (map[string]any, error) {
result := args.A + args.B
return map[string]any{
"result": result,
"explain": fmt.Sprintf("%g + %g = %g", args.A, args.B, result),
}, nil
}
return functiontool.New(
functiontool.Config{
Name: "calculator_add",
Description: "一个简单的计算器工具,执行两数相加。参数: a, b; 返回: result(浮点数)",
},
handler,
)
}
func main() {
ctx := context.Background()
rootAgent, err := veagent.New(&veagent.Config{
Config: llmagent.Config{
Tools: []tool.Tool{utils.Must(CalculatorAddTool())},
},
})
if err != nil {
log.Fatalf("Failed to create agent: %v", err)
}
app := agentkit_server_app.NewAgentkitServerApp(apps.DefaultApiConfig())
err = app.Run(ctx, &apps.RunConfig{
AgentLoader: agent.NewSingleLoader(rootAgent),
})
if err != nil {
fmt.Printf("Run failed: %v", err)
}
}
```
## 使用内置工具
你可以通过如下方式将某个工具挂载到智能体上,例如 `web_search` 网络搜索工具:
```go
import (
"context"
"fmt"
"log"
"os"
veagent "github.com/volcengine/veadk-go/agent/llmagent"
"github.com/volcengine/veadk-go/common"
"github.com/volcengine/veadk-go/tool/builtin_tools/web_search"
"google.golang.org/adk/agent"
"google.golang.org/adk/cmd/launcher"
"google.golang.org/adk/cmd/launcher/full"
"google.golang.org/adk/session"
"google.golang.org/adk/tool"
)
func main() {
ctx := context.Background()
cfg := veagent.Config{
ModelName: "...",
ModelAPIBase: "...",
ModelAPIKey: "...",
}
webSearch, err := web_search.NewWebSearchTool(&web_search.Config{})
if err != nil {
fmt.Printf("NewWebSearchTool failed: %v", err)
return
}
cfg.Tools = []tool.Tool{webSearch}
a, err := veagent.New(&cfg)
if err != nil {
fmt.Printf("NewLLMAgent failed: %v", err)
return
}
config := &launcher.Config{
AgentLoader: agent.NewSingleLoader(a),
SessionService: session.InMemoryService(),
}
l := full.NewLauncher()
if err = l.Execute(ctx, config, os.Args[1:]); err != nil {
log.Fatalf("Run failed: %v\n\n%s", err, l.CommandLineSyntax())
}
}
```