达永编程网

程序员技术分享与交流平台

.net core调Dify工作流,返回AI生成的结果

C# .NET Core调用Dify工作流:自动化开发新范式

1. C# .NET Core特性

  • 跨平台能力:基于.NET Core 3.0的跨平台特性,使应用可部署于Windows、Linux及macOS
  • 异步编程模型:通过async/await实现非阻塞IO操作,提升系统吞吐量
  • 模块化设计:支持依赖注入(DI)和中间件(Middleware)架构,便于功能扩展
  • 云原生特性:ASP.NET Core的Kestrel服务器支持Docker容器化部署

2. Dify工作流引擎

  • 可视化编排:提供图形化工作流编辑器,支持DSL(领域特定语言)配置
  • 智能节点:包含LLM调用、HTTP请求、模板引擎等核心节点
  • 可扩展性:支持自定义工具和API集成,满足企业级需求
  • 私有部署:提供本地化部署方案,确保数据安全

3. C#程序原码如下

private async Task<string> GetDataTrendAnalysis(string storeName)
{
    string strReturn = "";
    // 替换为您的Dify API密钥
    string apiKey = "app-1234567890987654321";
    string apiUrl = "https://dify2.****.com/v1/workflows/run";
    // 清除可能存在的旧头部
    client.DefaultRequestHeaders.Clear();
    // 只添加授权头
    client.DefaultRequestHeaders.Add("Authorization", #34;Bearer {apiKey}");
    // 注意:不再添加 Content-Type 到请求头
    var requestBody = new
    {
        inputs = new
        {
            a = storeName
        },
        response_mode = "streaming",    //streaming:追求实时性或处理长文本。blocking:需要结构化数据或短文本响应。
        user = "abc-123"
    };
    string jsonRequestBody = JsonConvert.SerializeObject(requestBody);
    // Content-Type 在这里设置,作为 HttpContent 的一部分
    StringContent content = new StringContent(jsonRequestBody, Encoding.UTF8, "application/json");
    try
    {
        HttpResponseMessage response = await client.PostAsync(apiUrl, content);
        if (response.IsSuccessStatusCode)
        {
            string responseBody = await response.Content.ReadAsStringAsync();
            //Console.WriteLine("API Response: " + responseBody);
            strReturn = ExtractTextFromStream(responseBody);
        }
        else
        {
            //Console.WriteLine(#34;请求失败: {response.StatusCode}");
            string errorContent = await response.Content.ReadAsStringAsync();
            //Console.WriteLine(#34;错误详情: {errorContent}");
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine(#34;发生异常: {ex.Message}");
    }
    return strReturn;
}


public static string ExtractTextFromStream(string streamContent)
{
    var lines = Regex.Split(streamContent, "\r\n|\n");
    string strReturn = "";
    foreach (var line in lines)
    {
        if (line.StartsWith("data:"))
        {
            string jsonStr = line.Substring(5).Trim();
            if (string.IsNullOrEmpty(jsonStr)) continue;
            var json = JsonDocument.Parse(jsonStr);
            try
            {
                // 确保变量在try块内声明                        
                var root = json.RootElement;
                var eventValue = root.GetProperty("event").GetString() ?? string.Empty;
                if (eventValue.ToString() != "workflow_finished")
                    continue;
                string dataObject = root.GetProperty("data").ToString();
                CompletionResponseData completionResponseData = JsonConvert.DeserializeObject<CompletionResponseData>(dataObject);
                strReturn = completionResponseData.outputs.text.ToString();
                break;
            }
            catch (System.Text.Json.JsonException ex)
            {
                // 忽略解析错误,记录日志
                Console.WriteLine(#34;JSON解析失败: {ex.Message}");
            }
        }
    }
    return strReturn;
}

#Zui懂保险的IT架构师#-----求一键四连:关注、点赞、分享、收藏

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言