Skip to content

Repository files navigation

DAGLLM 使用指南

DAGLLM 是一个 .NET 工作流引擎,用于构建和执行基于 DAG(有向无环图)的工作流。它支持 LLM 节点的集成,适用于构建复杂的 AI 工作流。

核心概念

  • Node(节点): 工作流中的基本执行单元
  • Edge(边): 连接节点的路径,支持硬边和条件边
  • Graph(图): 由节点和边组成的工作流定义
  • State(状态): 工作流执行过程中的状态数据
  • Executor(执行器): 负责执行工作流

快速开始

1. 创建简单工作流

using DAGLLM.Core;
using DAGLLM.Core.Graph;
using DAGLLM.Core.Executor;
using DAGLLM.Core.State;

// 创建节点
var startNode = new SimpleNode("start", "Start", state =>
{
    Console.WriteLine("Starting workflow...");
    return new Dictionary<string, object?> { ["initialized"] = true };
});

var endNode = new SimpleNode("end", "End", state =>
{
    Console.WriteLine("Ending workflow...");
    return new Dictionary<string, object?> { ["completed"] = true };
});

// 构建图
var graph = new GraphBuilder()
    .AddNode("start", "Start", startNode)
    .AddNode("end", "End", endNode)
    .AddEdge(new HardEdge("start", "end"))
    .SetEntry("start")
    .Build();

// 执行工作流
var executor = new WorkflowExecutor();
var initialState = WorkflowState.Initial.WithInput("Hello");
var result = await executor.ExecuteAsync(graph, initialState);

Console.WriteLine($"Status: {result.Status}");

2. 使用条件分支

var graph = new GraphBuilder()
    .AddNode("entry", "Entry", entryNode)
    .AddNode("success", "Success", successNode)
    .AddNode("failure", "Failure", failureNode)
    .AddEdge(new ConditionalEdge("entry", state =>
    {
        // 根据状态决定下一个节点
        var ctx = ((WorkflowState)state).Context;
        return ctx.TryGetValue("isValid", out var v) && v is true 
            ? "success" 
            : "failure";
    }, new[] { "success", "failure" }))
    .SetEntry("entry")
    .Build();

3. 内置节点类型

FallbackNode

当没有匹配的 Skill 时返回默认消息:

var fallbackNode = new FallbackNode("fallback", "Fallback");

SkillMatchNode

匹配可用的 Skill:

var skillMatchNode = new SkillMatchNode("skill_match", "Skill Match", skillRegistry);

WebSearchNode

执行 Web 搜索:

var webSearchNode = new WebSearchNode("web_search", "Web Search", webSearchService, maxResults: 10);

RagSearchNode

执行 RAG 检索:

var ragSearchNode = new RagSearchNode("rag_search", "RAG Search", ragService, topK: 5);

运行示例

# 运行示例项目
dotnet run --project DAGLLM.Examples

# 运行测试
dotnet test DAGLLM.Core.Tests

# 生成覆盖率报告
dotnet test DAGLLM.Core.Tests --collect:"XPlat Code Coverage"

项目结构

DAGLLM/
├── DAGLLM.Core/           # 核心库
│   ├── Graph/            # 图构建和验证
│   ├── Executor/         # 工作流执行
│   ├── State/            # 状态管理
│   ├── Nodes/            # 内置节点
│   ├── Interfaces/       # 接口定义
│   ├── Checkpoint/       # 状态持久化
│   └── Events/           # 事件流
├── DAGLLM.Core.Tests/     # 单元测试
└── DAGLLM.Examples/       # 使用示例

测试覆盖率

项目包含 80+ 测试,覆盖:

  • Graph 构建和验证
  • Executor 执行逻辑
  • State 状态管理
  • Nodes 节点执行
  • Checkpoint 持久化
  • 异常处理

许可证

MIT

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages