从JSON动态生成工作流的实现
可以做一个类似于langflow或者bisheng/dify这样的工具,可以根据json还原一个动态的工作流,这样到了话比较容易打通flowgram.ai,实现类似于coze的效果,或者有更好思路吗?
这个功能目前正在探索中
该功能目前正在探索中
有计划开发实现吗,我们能贡献什么?
目前我们在尝试自定义一套DSL、以及从DSL中构建Graph/Workflow的能力。
从某个通用DSL中构建Chain/Graph/Workflow我觉得是比较有意义的,短期内我们应该也没有精力做这一部分。
目前我们在尝试自定义一套DSL、以及从DSL中构建Graph/Workflow的能力。
从某个通用DSL中构建Chain/Graph/Workflow我觉得是比较有意义的,短期内我们应该也没有精力做这一部分。
我也有这样的需求,正常尝试使用 Dify 的 DSL 定义
目前我们在尝试自定义一套DSL、以及从DSL中构建Graph/Workflow的能力。 从某个通用DSL中构建Chain/Graph/Workflow我觉得是比较有意义的,短期内我们应该也没有精力做这一部分。
我也有这样的需求,正常尝试使用 Dify 的 DSL 定义
你们正在尝试吗,可以一起联合开发的
如果是人员精力不够,可以一起来做这个事情,刚好对这部分也有这方面需求
@tinkermend 可以的,有需要我们可以开放个群聊
目前在飞书群里有个祝好大佬做了个示例: func CreateEngine(cfg *parser.Config) (*Engine, error) { var err error e := &Engine{} e.ctx = context.Background() e.mcps = make(map[string]types.IMcpServer) e.tools = make(map[string][]*schema.ToolInfo) e.models = make(map[string]model.ChatModel) e.g = compose.NewGraphmap[string]any, *schema.Message
for _, mcpCfg := range cfg.McpServers {
fmt.Println("mcpCfg: ", mcpCfg.Name)
switch mcpCfg.Type {
case "SSEServer":
server, err := components.CreateMcpSSEServer(&mcpCfg)
if err != nil {
return nil, err
}
e.mcps[mcpCfg.Name] = server
}
}
for _, nodeCfg := range cfg.Nodes {
fmt.Println("CreateEngine: ", nodeCfg.Name)
switch nodeCfg.Type {
case "ChatTemplate":
err := e.CreateChatTemplateNode(&nodeCfg)
if err != nil {
return nil, err
}
case "McpTemplate":
err := e.CreateMcpTemplateNode(&nodeCfg)
if err != nil {
return nil, err
}
case "ChatModel":
err := e.CreateChatModelNode(&nodeCfg)
if err != nil {
return nil, err
}
case "McpToolNode":
err := e.CreateMcpToolNode(&nodeCfg)
if err != nil {
return nil, err
}
case "OllamaChatModel":
err := e.CreateOllamaChatModelNode(&nodeCfg)
if err != nil {
return nil, err
}
case "QwenChatModel":
err := e.CreateQwenChatModelNode(&nodeCfg)
if err != nil {
return nil, err
}
}
}
for _, edgeCfg := range cfg.Edges {
fmt.Printf("CreateEdge: %s -> %s\n", edgeCfg.Src, edgeCfg.Dst)
err = e.BindTools(edgeCfg.Src, edgeCfg.Dst)
if err != nil {
return nil, err
}
err = e.g.AddEdge(edgeCfg.Src, edgeCfg.Dst)
if err != nil {
return nil, err
}
}
e.r, err = e.g.Compile(e.ctx, compose.WithMaxRunSteps(10))
if err != nil {
return nil, err
}
return e, nil
}
@tinkermend 可以的,有需要我们可以开放个群聊
目前在飞书群里有个祝好大佬做了个示例: func CreateEngine(cfg *parser.Config) (*Engine, error) { var err error e := &Engine{} e.ctx = context.Background() e.mcps = make(map[string]types.IMcpServer) e.tools = make(map[string][]*schema.ToolInfo) e.models = make(map[string]model.ChatModel) e.g = compose.NewGraphmap[string]any, *schema.Message
for _, mcpCfg := range cfg.McpServers { fmt.Println("mcpCfg: ", mcpCfg.Name) switch mcpCfg.Type { case "SSEServer": server, err := components.CreateMcpSSEServer(&mcpCfg) if err != nil { return nil, err } e.mcps[mcpCfg.Name] = server } } for _, nodeCfg := range cfg.Nodes { fmt.Println("CreateEngine: ", nodeCfg.Name) switch nodeCfg.Type { case "ChatTemplate": err := e.CreateChatTemplateNode(&nodeCfg) if err != nil { return nil, err } case "McpTemplate": err := e.CreateMcpTemplateNode(&nodeCfg) if err != nil { return nil, err } case "ChatModel": err := e.CreateChatModelNode(&nodeCfg) if err != nil { return nil, err } case "McpToolNode": err := e.CreateMcpToolNode(&nodeCfg) if err != nil { return nil, err } case "OllamaChatModel": err := e.CreateOllamaChatModelNode(&nodeCfg) if err != nil { return nil, err } case "QwenChatModel": err := e.CreateQwenChatModelNode(&nodeCfg) if err != nil { return nil, err } } } for _, edgeCfg := range cfg.Edges { fmt.Printf("CreateEdge: %s -> %s\n", edgeCfg.Src, edgeCfg.Dst) err = e.BindTools(edgeCfg.Src, edgeCfg.Dst) if err != nil { return nil, err } err = e.g.AddEdge(edgeCfg.Src, edgeCfg.Dst) if err != nil { return nil, err } } e.r, err = e.g.Compile(e.ctx, compose.WithMaxRunSteps(10)) if err != nil { return nil, err } return e, nil}
[[Node]] type = "ChatTemplate" name = "prompt" server = "Amap" system_message = "你是一名导游。" history=true
#[[Node]] #type = "OllamaChatModel" #name = "chatmodel-tool" #base_url = "http://localhost:11434/" #model = "qwq"
[[Node]] type = "McpToolNode" name = "amap_tools" server = "Amap"
[[Node]] type = "OllamaChatModel" name = "ollama-llm" base_url = "http://localhost:11434/" model = "qwq"
[[Node]] type = "QwenChatModel" name = "chatmodel-tool" base_url = "https://dashscope.aliyuncs.com/compatible-mode/v1" api_key = "" model = "qwen2.5-vl-32b-instruct"
[[Edge]] src = "start" dst = "prompt"
[[Edge]] src = "prompt" dst = "chatmodel-tool"
[[Edge]] src = "chatmodel-tool" dst = "amap_tools"
[[Edge]] src = "amap_tools" dst = "ollama-llm"
#[[Edge]] #src = "chatmodel-tool" #dst = "end"
[[Edge]] src = "ollama-llm" dst = "end"
[[McpServer]] type = "SSEServer" name = "Amap" server_url="https://mcp.amap.com/sse?key="
https://gitee.com/ByteDance/flowgram.ai 你们不是一家的吗
这个是 ts 的可视化搭建。 eino 是 golang 的全码开发
我们也有这个需求,目前是我自己简单写的demo,用 Eino的调试器生成的 scheme.json 去动态生成graph,但是变量赋值这块还没有想到怎么实现好
我们也有这个需求,目前是我自己简单写的demo,用 Eino的调试器生成的 scheme.json 去动态生成graph,但是变量赋值这块还没有想到怎么实现好
调试器会生成sceme 呀,可以的
我们也有这个需求,目前是我自己简单写的demo,用 Eino的调试器生成的 scheme.json 去动态生成graph,但是变量赋值这块还没有想到怎么实现好
调试器会生成sceme 呀,可以的
会啊,还能生成对应代码啊
coze开源了,这部分有了吧
嘿,有关于实现这个功能的交流群吗