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

4.2 KiB
Raw Permalink Blame History

Agent 定义方法

导入方法

  • LLM Agent: import veagent "github.com/volcengine/veadk-go/agent/llmagent"
  • Sequential Agent: import "github.com/volcengine/veadk-go/agent/workflowagents/sequentialagent"
  • Loop Agent: import "github.com/volcengine/veadk-go/agent/workflowagents/loopagent"
  • Parallel Agent: import "github.com/volcengine/veadk-go/agent/workflowagents/parallelagent"

其中LLM Agent 是最基础的智能体(由 LLM 启动进行自主决策Sequential Agent 是按顺序执行的智能体Loop Agent 是循环执行的智能体Parallel Agent 是并行执行的智能体。

代码规范

1、你可以通过如下方式定义智能体

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)
	}
}

2、可以生成一个强制按顺序执行的智能体

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)
	}
}

agent1agent2 将会严格按顺序执行

注意,根智能体的命名必须为 rootAgent

让 Agent 结构化输出

为保证更高的准确率和 Agent 执行时的可控性,使用结构化输出是一种有效的手段。

在定义 Agent 时,通过 model_extra_config={"response_format": ...} 可以让 Agent 结构化输出。其中,... 是你定义的 Pydantic 模型,用于描述 Agent 的输出格式。

from pydantic import BaseModel
from veadk import Agent, Runner


# 定义分步解析模型(对应业务场景的结构化响应)
class Step(BaseModel):
    explanation: str  # 步骤说明
    output: str  # 步骤计算结果


# 定义最终响应模型(包含分步过程和最终答案)
class MathResponse(BaseModel):
    steps: list[Step]  # 解题步骤列表
    final_answer: str  # 最终答案


agent = Agent(
    instruction="你是一位数学辅导老师,需详细展示解题步骤",
    model_extra_config={"response_format": MathResponse},
)