You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
160 lines
3.9 KiB
160 lines
3.9 KiB
package dify_test
|
|
|
|
import (
|
|
"bufio"
|
|
"yunyan/sys/dify"
|
|
"encoding/json"
|
|
"fmt"
|
|
"net/http"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/go-resty/resty/v2"
|
|
)
|
|
|
|
func Test_Sys_Chat(t *testing.T) {
|
|
if sys, err := dify.NewSys(
|
|
dify.SetApiKey("app-7wHwovYZsZBveMPpi1k1ZN8c"),
|
|
); err != nil {
|
|
fmt.Printf("Sys Init err:%v", err)
|
|
} else {
|
|
result := make(chan string)
|
|
go func() {
|
|
err := sys.ChatForChan("你好! 你的名字?", result)
|
|
if err != nil {
|
|
fmt.Printf(" err:%v", err)
|
|
return
|
|
}
|
|
}()
|
|
|
|
for v := range result {
|
|
fmt.Printf(" result:%v", v)
|
|
}
|
|
}
|
|
}
|
|
|
|
func Test_Sys_Workflows(t *testing.T) {
|
|
|
|
client := resty.New()
|
|
// Dify API 端点
|
|
url := "https://api.dify.ai/v1/workflows/run"
|
|
// 请求数据
|
|
requestData := map[string]interface{}{
|
|
"inputs": map[string]interface{}{
|
|
"user_input": "武汉的天气如何?",
|
|
}, // 工作流输入参数
|
|
"response_mode": "blocking", // 响应模式
|
|
"user": "abc-123", // 用户标识
|
|
}
|
|
|
|
// 发送 POST 请求
|
|
resp, err := client.R().
|
|
SetHeader("Authorization", "Bearer app-Dh6RBY4u4G8Kfk4l9sle1UPl").
|
|
SetHeader("Content-Type", "application/json").
|
|
SetBody(requestData).
|
|
Post(url)
|
|
|
|
if err != nil {
|
|
fmt.Println("Error sending request:", err)
|
|
return
|
|
}
|
|
|
|
// 打印响应
|
|
fmt.Println("Response Status:", resp.Status())
|
|
// fmt.Println("Response Body:", resp.String())
|
|
wresp := &dify.WorkflowResponse{}
|
|
err = json.Unmarshal(resp.Body(), wresp)
|
|
fmt.Printf("Response:%+v", wresp)
|
|
}
|
|
|
|
func Test_Sys_WorkflowsForSatem(t *testing.T) {
|
|
// Dify API 端点
|
|
url := "https://api.dify.ai/v1/workflows/run"
|
|
// 请求数据
|
|
requestData := map[string]interface{}{
|
|
"inputs": map[string]interface{}{
|
|
"user_input": "武汉的天气如何?",
|
|
}, // 工作流输入参数
|
|
"response_mode": "streaming", // 响应模式
|
|
"user": "abc-123", // 用户标识
|
|
}
|
|
|
|
// 将请求数据转换为 JSON
|
|
jsonData, err := json.Marshal(requestData)
|
|
if err != nil {
|
|
t.Fatalf("Error marshalling JSON: %v", err)
|
|
}
|
|
|
|
// 创建 HTTP 请求
|
|
req, err := http.NewRequest("POST", url, strings.NewReader(string(jsonData)))
|
|
if err != nil {
|
|
t.Fatalf("Error creating request: %v", err)
|
|
}
|
|
req.Header.Set("Authorization", "Bearer app-Dh6RBY4u4G8Kfk4l9sle1UPl")
|
|
req.Header.Set("Content-Type", "application/json")
|
|
|
|
// 发送请求
|
|
client := &http.Client{}
|
|
resp, err := client.Do(req)
|
|
if err != nil {
|
|
t.Fatalf("Error sending request: %v", err)
|
|
}
|
|
defer resp.Body.Close()
|
|
|
|
defer resp.Body.Close()
|
|
|
|
scanner := bufio.NewScanner(resp.Body)
|
|
for scanner.Scan() {
|
|
line := scanner.Text()
|
|
if strings.HasPrefix(line, "data: ") {
|
|
line = strings.TrimPrefix(line, "data: ")
|
|
var event dify.EventData
|
|
if err := json.Unmarshal([]byte(line), &event); err != nil {
|
|
fmt.Printf("Error parsing JSON: %v\n", err)
|
|
continue
|
|
}
|
|
parseEvent(event) // 解析不同类型的事件
|
|
}
|
|
}
|
|
|
|
if err := scanner.Err(); err != nil {
|
|
t.Fatalf("Error reading stream response: %v", err)
|
|
}
|
|
}
|
|
|
|
// 解析数据
|
|
func parseEvent(event dify.EventData) {
|
|
switch event.Event {
|
|
case "workflow_started":
|
|
var data dify.WorkflowStartedData
|
|
if err := json.Unmarshal(event.Data, &data); err == nil {
|
|
fmt.Printf("Workflow started: %+v\n", data)
|
|
}
|
|
|
|
case "node_started":
|
|
var data dify.NodeStartedData
|
|
if err := json.Unmarshal(event.Data, &data); err == nil {
|
|
fmt.Printf("Node started: %+v\n", data)
|
|
}
|
|
|
|
case "node_finished":
|
|
var data dify.NodeFinishedData
|
|
if err := json.Unmarshal(event.Data, &data); err == nil {
|
|
fmt.Printf("Node finished: %+v\n", data)
|
|
}
|
|
|
|
case "workflow_finished":
|
|
var data dify.WorkflowFinishedData
|
|
if err := json.Unmarshal(event.Data, &data); err == nil {
|
|
fmt.Printf("Workflow finished: %+v\n", data)
|
|
}
|
|
|
|
case "tts_message":
|
|
var data dify.TTSMessageData
|
|
if err := json.Unmarshal(event.Data, &data); err == nil {
|
|
fmt.Printf("TTS message: %+v\n", data)
|
|
}
|
|
default:
|
|
fmt.Printf("Unknown event: %s\n", event.Event)
|
|
}
|
|
}
|
|
|