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

170 lines
4.2 KiB
Markdown
Raw Permalink 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.

# 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、你可以通过如下方式定义智能体
```go
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、可以生成一个强制按顺序执行的智能体
```go
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)
}
}
```
`agent1``agent2` 将会严格按顺序执行
注意,根智能体的命名必须为 `rootAgent`
## 让 Agent 结构化输出
为保证更高的准确率和 Agent 执行时的可控性,使用结构化输出是一种有效的手段。
在定义 Agent 时,通过 `model_extra_config={"response_format": ...}` 可以让 Agent 结构化输出。其中,`...` 是你定义的 Pydantic 模型,用于描述 Agent 的输出格式。
```python
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},
)
```