暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

langchaingo+mermaid生成流程图

    尝试将golang实现langchain graph这个例子的代码生成流程图,首先尝试了下Fitten code插件,选中代码后,右键>Fiten Code - Explain Code,在ai对话框里可以看到对这段代码的解释,然后输入提示词“总结下这段代码,并生成mermaid活动图代码”。然后我们就可以得到下面的代码:
    graph TD;
        A[开始] --> B[导入包];
        B --> C[初始化OpenAI模型];
        C --> D[创建消息图];
        D --> E[添加"oracle"节点];
        E --> F[添加END节点];
        F --> G[添加从"oracle"到END的边];
        G --> H[设置入口点为"oracle"];
        H --> I[编译消息图];
        I --> J[创建背景上下文];
        J --> K[调用消息图处理用户输入];
        K --> L[打印结果];
        L --> M[结束];


        subgraph 初始化OpenAI模型 [初始化OpenAI模型]
            C1[设置BaseURL为"http://127.0.0.1:11434/v1/"];
            C2[设置Token为"ollama"];
            C3[设置Model为"deepseek-r1:1.5b"];
            C1 --> C2 --> C3;
        end


        subgraph 调用消息图处理用户输入 [调用消息图处理用户输入]
            K1[传入用户消息"What is 1 + 1?"];
            K2[生成AI回复];
            K3[返回结果];
            K1 --> K2 --> K3;
        end


        I --> N[编译失败];
        K --> O[处理失败];
        N --> P[程序终止];
        O --> P;
    可以看到,生成的代码其实不符合mermaid语法,有很多错误,我们可以把代码复制到一个markdown文件里,是用vscode插件Markdown Preview Mermaid Support进行预览和修正,使其符合语法规范
      ```mermaid
      graph TD;
          A[开始] --> B[导入包];
          B --> C[初始化OpenAI模型];
          C --> D[创建消息图];
          D --> E[添加oracle节点];
          E --> F[添加END节点];
          F --> G[添加从oracle到END的边];
          G --> H[设置入口点为oracle];
          H --> I[编译消息图];
          I --> J[创建背景上下文];
          J --> K[调用消息图处理用户输入];
          K --> L[打印结果];
          L --> M[结束];


          subgraph 初始化OpenAI模型 [初始化OpenAI模型]
              C1[设置BaseURL];
              C2[设置Token为ollama];
              C3[设置Model为deepseek-r1:1.5b];
              C1 --> C2 --> C3;
          end


          subgraph 调用消息图处理用户输入 [调用消息图处理用户输入]
              K1[传入用户消息What is 1 + 1?];
              K2[生成AI回复];
              K3[返回结果];
              K1 --> K2 --> K3;
          end


          I --> N[编译失败];
          K --> O[处理失败];
          N --> P[程序终止];
          O --> P;
      ```
      符合规范后我们可以预览到流程图
      接着我们可以使用到另外两个插件Draw.io VS Code Integration和Drawio.io Integration: Mermaid Plugin将mermaid代码转变成可以编辑的流程图。首先新建一个drawio文件,然后选择Arrange>Insert>Advanced>Mermaid 会弹出一个dialog,在dialog里填入刚刚生成的mermaid代码,就可以生成drawio流程图了。
             用ai生成流程图的过程就是将fiten code那部分工作交给ai来完成,下面是langchaingo的代码实现:
        package main
        import (
            "context"
            "fmt"
            "io/ioutil"
            "log"


                "github.com/tmc/langchaingo/llms"
            "github.com/tmc/langchaingo/llms/openai"
        )
        func main() {
            llm, err := openai.New(
                openai.WithBaseURL("http://127.0.0.1:11434/v1/"),
                openai.WithToken("ollama"),
                openai.WithModel("deepseek-r1:1.5b"),
            )
            if err != nil {
                panic(err)
            }
            ctx := context.Background()
            var roleContent llms.MessageContent
            roleContent=llms.TextParts(llms.ChatMessageTypeSystem, "You are a professional coder.")
            // 增加 human 消息
            code, err := ioutil.ReadFile("/go/exp20/main.go")
            if err != nil {
                log.Fatal(err)
                return
            }
            commentedContent:=[]llms.MessageContent{
                roleContent,
                llms.TextParts(llms.ChatMessageTypeHuman, fmt.Sprintf("请理解这段代码和注释进行总结:%s,生成核心流程的mermaid活动图代码,要求符合mermaid语法规范,所有标签不能有引号等特殊字符,可以包含中文"string(code))),
            }
            // 调用模型生成回复
            reply, err := llm.GenerateContent(ctx, commentedContent,
                // 设置最大生成长度
                llms.WithMaxTokens(2048),
                // 设置 temperature
                llms.WithTemperature(0.01),
            )
            if err != nil {
                log.Fatal(err)
            }
            fmt.Println(reply.Choices[0].Content)
        }
        生成的mermaid代码修正后如下
          ```mermaid
          graph TD
              A[Start] --> B[Initialize Model]
              B --> C{Model Initialization Success?}
              C -- Yes --> D[Create Message Graph]
              C -- No --> E[Error: Panic]
              D --> F[Add oracle Node]
              D --> G[Add END Node]
              D --> H[Add Edge from oracle to END]
              D --> I[Set oracle as Entry Point]
              F --> J[Compile Graph]
              J --> K{Compilation Success?}
              K -- Yes --> L[Run Graph]
              K -- No --> M[Error: Panic]
              L --> N[Invoke Graph with Input]
              N --> O{Graph Execution Success?}
              O -- Yes --> P[Output Result]
              O -- No --> Q[Error: Panic]
              P --> R[End]
          ```
          最终生成的流程图如下

          文章转载自golang算法架构leetcode技术php,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

          评论