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

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)
}
}