示例
以下命令都从仓库根目录运行。需要模型服务的示例会使用你的账户凭据,可能产生费用。
快速开始
sh
go run ./example/quickstart运行前设置 OPENAI_API_KEY 和 AGENT_MODEL。使用其他兼容服务的配置方法见快速开始。
CLI 聊天
sh
go run ./example/cli-chat这个命令行应用展示工具调用、专家 Agent 交接、流式输出、模型选择、技能和会话管理。示例源码说明了各 Provider 所需的环境变量,以及如何启用持久化。
A2A 服务与客户端
分别在两个终端运行:
sh
go run ./example/a2a-serversh
go run ./example/a2a-client服务使用返回固定结果的测试 Provider,无需模型密钥,默认监听端口 8080。可以通过 PORT 更换端口,但需要同时检查客户端的目标 URL。
完整服务源码
go
package main
import (
"context"
"fmt"
"log"
"os"
"github.com/covoyage/covonaut/agentcore"
"github.com/covoyage/covonaut/a2a"
)
// stubProvider is a minimal provider for demonstration purposes.
type stubProvider struct{}
func (stubProvider) Complete(ctx context.Context, req *agentcore.ProviderRequest) (*agentcore.ProviderResponse, error) {
return &agentcore.ProviderResponse{
Content: "Hello! I'm a demo A2A agent.",
}, nil
}
func (stubProvider) Stream(ctx context.Context, req *agentcore.ProviderRequest) (<-chan agentcore.StreamDelta, error) {
ch := make(chan agentcore.StreamDelta, 1)
ch <- agentcore.StreamDelta{Content: "Hello! I'm a demo A2A agent."}
close(ch)
return ch, nil
}
func main() {
if err := run(); err != nil {
log.Fatal(err)
}
}
func run() error {
port := os.Getenv("PORT")
if port == "" {
port = "8080"
}
cfg := agentcore.Config{
ModelConfig: agentcore.ModelConfig{
Name: "demo-a2a-agent",
Model: "stub",
Provider: stubProvider{},
},
SystemPrompt: "You are a helpful demo agent exposed via the A2A protocol.",
}
// Create a simple agent
agent, err := agentcore.NewWithError(cfg)
if err != nil {
return err
}
defer agent.Close()
// Define agent card
card := a2a.AgentCard{
Name: "demo-a2a-agent",
Description: "A demonstration A2A agent built with Covonaut",
URL: fmt.Sprintf("http://localhost:%s", port),
Version: "1.0.0",
Capabilities: a2a.AgentCapabilities{
Streaming: true,
PushNotifications: false,
},
Skills: []a2a.AgentSkill{
{
ID: "echo",
Name: "Echo",
Description: "Echo back the user's message",
Tags: []string{"demo", "echo"},
},
{
ID: "greet",
Name: "Greeting",
Description: "Greet the user",
Tags: []string{"demo", "greeting"},
},
},
}
// Create A2A handler and server
handler := a2a.NewDefaultAgentHandler(card, agent, cfg)
server := a2a.NewServer(handler)
log.Printf("A2A server starting on :%s", port)
log.Printf("Agent Card: http://localhost:%s/.well-known/agent-card.json", port)
return server.ListenAndServe(":" + port)
}终端界面
sh
go run ./example/tui-demo
go run ./example/tui-demo2
go run ./example/tui-demo3请在交互式终端中逐个运行。这些示例使用 TUI,而不是浏览器界面,分别展示输入输出、主题、组件、聊天状态和适配器。配置见示例源码,设计与用法见终端指南。
其他完整示例
| 命令 | 演示 | 凭据 |
|---|---|---|
go run ./example/recovery | 中断、检查点、恢复、继续 | 无 |
go run ./example/orchestration | 类型图、Pipeline/Router、流聚合 | 无 |
go run ./example/http-server | 认证 HTTP、持久化线程 | 模型密钥/名称和 API token |
兼容测试
provider-compat 用于测试模型服务兼容性,itk 是供 A2A 集成测试工具调用的 Agent。它们适合验证集成,初次使用建议先运行上面的示例。