Agent 定义方法——模具行业从业者必备知识手册
-
<h2>Agent 定义方法</h2>
<h3>导入方法</h3>
<ul>
<li>LLM Agent: <code>import veagent "github.com/volcengine/veadk-go/agent/llmagent"</code></li>
<li>Sequential Agent: <code>import "github.com/volcengine/veadk-go/agent/workflowagents/sequentialagent"</code></li>
<li>Loop Agent: <code>import "github.com/volcengine/veadk-go/agent/workflowagents/loopagent"</code></li>
<li>Parallel Agent: <code>import "github.com/volcengine/veadk-go/agent/workflowagents/parallelagent"</code></li>
</ul><p>其中,LLM Agent 是最基础的智能体(由 LLM 启动进行自主决策),Sequential Agent 是按顺序执行的智能体,Loop Agent 是循环执行的智能体,Parallel Agent 是并行执行的智能体。</p>
<h3>代码规范</h3>
<h4>1、你可以通过如下方式定义智能体:</h4>
<pre><code>
import (
"context"
"fmt"veagent "github.com/volcengine/veadk-go/agent/llmagent" "github.com/volcengine/veadk-go/apps" "github.com/volcengine/veadk-go/apps/agentkit_server_app" vetool "github.com/volcengine/veadk-go/tool" "google.golang.org/adk/agent" "google.golang.org/adk/agent/llmagent" "google.golang.org/adk/tool")
func main() {
ctx := context.Background()subAgent, err := veagent.New(&veagent.Config{ Config: llmagent.Config{ Name: "...", Description: "...", Instruction: `...`, }, ModelName: "...", }) if err != nil { fmt.Printf("NewLLMAgent subAgent failed: %v", err) return } rootAgent, err := veagent.New(&veagent.Config{ Config: llmagent.Config{ Name: "...", Description: "...", Instruction: `...`, SubAgents: []agent.Agent{subAgent}, }, ModelName: "...", }) if err != nil { fmt.Printf("NewLLMAgent rootAgent failed: %v", err) return } 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>
<h4>2、可以生成一个强制按顺序执行的智能体:</h4>
<pre><code>
import (
"context"
"fmt"veagent "github.com/volcengine/veadk-go/agent/llmagent" "github.com/volcengine/veadk-go/agent/workflowagents/sequentialagent" "github.com/volcengine/veadk-go/apps" "github.com/volcengine/veadk-go/apps/agentkit_server_app" "google.golang.org/adk/agent" "google.golang.org/adk/agent/llmagent")
func main() {
ctx := context.Background()agent1, err := veagent.New(&veagent.Config{ Config: llmagent.Config{ Name: "...", Description: "...", Instruction: "...", }, }) if err != nil { fmt.Printf("NewLLMAgent agent1 failed: %v", err) return } agent2, err := veagent.New(&veagent.Config{ Config: llmagent.Config{ Name: "...", Description: "...", Instruction: "...", }, }) if err != nil { fmt.Printf("NewLLMAgent agent failed: %v", err) return } rootAgent, err := sequentialagent.New(sequentialagent.Config{ AgentConfig: agent.Config{ Name: "...", SubAgents: []agent.Agent{agent1, agent2}, Description: "...", }, }) if err != nil { fmt.Printf("NewSequentialAgent failed: %v", err) return } 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><p><code>agent1</code> 与 <code>agent2</code> 将会严格按顺序执行</p>
<p>注意,根智能体的命名必须为 <code>rootAgent</code>。</p>
<h3>让 Agent 结构化输出</h3>
<p>为保证更高的准确率和 Agent 执行时的可控性,使用结构化输出是一种有效的手段。</p>
<p>在定义 Agent 时,通过 <code>model_extra_config={"response_format": ...}</code> 可以让 Agent 结构化输出。其中,<code>...</code> 是你定义的 Pydantic 模型,用于描述 Agent 的输出格式。</p>
<pre><code>
from pydantic import BaseModel
from veadk import Agent, Runner定义分步解析模型(对应业务场景的结构化响应)
class Step(BaseModel):
explanation: str # 步骤说明
output: str # 步骤计算结果定义最终响应模型(包含分步过
各位师傅觉得这个方案怎么样?有更好的做法吗?
</code></pre>