跳至正文

示例 ​

以下命令都从仓库根目录运行。需要模型服务的示例会使用你的账户凭据,可能产生费用。

快速开始 ​

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-server
sh
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

完整源码及执行方式见恢复指南、图执行和HTTP API。

兼容测试 ​

provider-compat 用于测试模型服务兼容性,itk 是供 A2A 集成测试工具调用的 Agent。它们适合验证集成,初次使用建议先运行上面的示例。

基于 MIT 许可证发布。