ling-baseling-base

Runner

会话感知 Agent 执行、插件链与取消控制

在线 Playground

在浏览器中直接体验本页相关 API,无需本地安装 Go 环境。

Runner

agentkit/runnerAgent 之上提供会话管理、插件链、取消/steer、摘要恢复等生产级能力。应用通常通过 Runner 而非直接调用 Agent.Run

Runner 接口

type Runner interface {
    Run(ctx context.Context, userID, sessionID string, message compat.Message, runOpts ...agent.RunOption) (<-chan *event.Event, error)
    Close() error
}

type ManagedRunner interface {
    Runner
    Cancel(requestID string) bool
    RunStatus(requestID string) (RunStatus, bool)
}

type SteerableRunner interface {
    ManagedRunner
    EnqueueUserMessage(requestID string, message compat.Message) error
}

创建 Runner

import (
    "github.com/LingByte/ling-base/agentkit/runner"
    "github.com/LingByte/ling-base/agentkit/session/inmemory"
    compat "github.com/LingByte/ling-base/relay/compat"
)

sess := inmemory.NewSessionService()
r := runner.NewRunner("myapp", llmAgent,
    runner.WithSessionService(sess),
    runner.WithPlugins(myPlugin),
)
defer r.Close()

events, err := r.Run(ctx, "user-123", "session-abc",
    compat.NewUserMessage("你好"))
for ev := range events {
  // 处理 event.Event
}

常用 Option

Option说明
WithSessionService会话持久化(sqlite/redis/postgres)
WithMemoryService长期记忆服务
WithArtifactService会话文件 artifact
WithPlugins插件链(guardrail、日志等)
WithSummarizer会话超长时自动摘要

取消与 Steer

// ManagedRunner:按 requestID 取消
if mr, ok := r.(runner.ManagedRunner); ok {
    mr.Cancel(requestID)
}

// SteerableRunner:在工具调用边界安全插入用户消息
if sr, ok := r.(runner.SteerableRunner); ok {
    _ = sr.EnqueueUserMessage(requestID, compat.NewUserMessage("等等,换个问题"))
}

Plugin 插件

agentkit/plugin 在 Runner 生命周期注入钩子:

插件作用
plugin/guardrail提示注入检测、不安全意图、人工审批
plugin/toolsearch动态工具发现(MCP + 知识库)
plugin/identity身份上下文注入
plugin/debuglog调试快照
import "github.com/LingByte/ling-base/agentkit/plugin/guardrail"

p := guardrail.NewApprovalPlugin(approvalHandler)
r := runner.NewRunner("app", ag, runner.WithPlugins(p))

Ralph Loop 验证

Runner 支持 Ralph 循环:Agent 输出 → 验证器 → 不通过则重试(见 runnerVerifier 接口)。

与 Server 的关系

server/openaiserver/agui 等 HTTP 服务内部使用 Runner 处理请求,将 HTTP 转为 compat.Message 并流式返回事件。

On this page