Tools 定义方法——模具行业从业者必备知识手册
-
<h2>Tools 定义方法</h2>
<h3>自定义 Tool</h3>
<p>你可以通过撰写一个 Go 函数来定义一个自定义 Tool(你必须清晰的定义好 Docstring):</p>
<pre><code>
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 float64json:"a" jsonschema:"第一个加数,支持整数或小数"
B float64json:"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) }}
</code></pre><h3>使用内置工具</h3>
<p>你可以通过如下方式将某个工具挂载到智能体上,例如 <code>web_search</code> 网络搜索工具:</p>
<pre><code>
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()) }}
</code></pre>
<hr>
<p>本文由模极社发布</p>
<hr>
<p>!<a href="upload://im5w4bbZS7qEfHo32U8caxAUX72.svg">Tools 定义方法</a></p><hr>
<h4>
你可能还感兴趣</h4>
<ul>
<li><a href="/t/4513/4513">@vue/shared</a></li>
<li><a href="/t/4298/4298">confbox</a></li>
<li><a href="/t/939/939">扇形浇口尺寸怎么算?</a></li>
</ul><hr>
<p><strong>相关推荐:</strong></p>
<ul>
<li><a href="https://www.mj7.cn/t/4836-4836">北京模具产业 — 科技研发驱动型模具基地</a></li>
<li><a href="https://www.mj7.cn/t/4835-4835">上海模具产业 — 高端精密模具研发中心</a></li>
<li><a href="https://www.mj7.cn/t/4834-4834">产业集群与模具产业发展的关系</a></li>
</ul><hr>
<p>各位师傅觉得这个方案怎么样?有更好的做法吗?</p>