Go 語言中的 LangGraph:基於 LangGraphgo 的 AI 任務編排

在 AI 任務編排領域,LangChain 提供了 LangGraph,幫助開發者搭建複雜、多步驟、有狀態的 AI 工作流。但這個庫主要基於 Python,而在 Go 語言生態中,如何實現類似的 AI 任務編排呢?今天,我們來介紹 langgraphgo,一個爲 Golang 量身定製的 AI 任務流管理框架。通 langgraphgo,你可以高效地構建 AI 代碼審計、對話系統、多智能體協作等應用。本文將簡單的解析其概念,並通過代碼示例****帶你體驗一下

什麼是 langgraphgo?

langgraphgo 是 LangGraph 在 Go 語言中的擴展實現, 提供的功能具體如下:

Langgraphgo 實戰示例

場景,智能代碼審計, 假設我們要實現一個智能代碼審計 AI,它的執行流程如下:

  1. 用戶上傳代碼

  2. AI 執行代碼安全分析

  3. 如果發現漏洞,AI 自動修復

  4. 修復後,然後生成最終的安全報告

首先我們先創建一個 demo 項目,操作如下所示:

mkdir graph
cd graph/ && go mod init demo
go get github.com/tmc/langchaingo
go get github.com/tmc/langgraphgo

鍵入如下代碼, 具體如下所示:

package main
import (
    "context"
    "fmt"
    "github.com/tmc/langchaingo/llms"
    "github.com/tmc/langchaingo/llms/ollama"
    "github.com/tmc/langgraphgo/graph"
)
func main() {
    // 初始化LLM
    llm, err := ollama.New(ollama.WithModel("qwen2:7b"))
    if err != nil {
        panic(err)
    }
    // 創建任務流
    g := graph.NewMessageGraph()
    // 任務 1:代碼審計
    g.AddNode("audit", func(ctx context.Context, state []llms.MessageContent) ([]llms.MessageContent, error) {
        r, err := llm.GenerateContent(ctx, state, llms.WithTemperature(0.9))
        if err != nil {
            return nil, err
        }
        return append(state,
            llms.TextParts(llms.ChatMessageTypeAI, r.Choices[0].Content),
        ), nil
    })
    // 任務 2️:修復漏洞
    g.AddNode("fix", func(ctx context.Context, state []llms.MessageContent) ([]llms.MessageContent, error) {
        prompt := "請修復代碼中的安全漏洞,並返回安全版本的代碼。"
        state = append(state, llms.TextParts(llms.ChatMessageTypeHuman, prompt))
        r, err := llm.GenerateContent(ctx, state, llms.WithTemperature(0.9))
        if err != nil {
            return nil, err
        }
        return append(state,
            llms.TextParts(llms.ChatMessageTypeAI, r.Choices[0].Content),
        ), nil
    })
    // 任務 3️:生成審計報告
    g.AddNode("report", func(ctx context.Context, state []llms.MessageContent) ([]llms.MessageContent, error) {
        prompt := "請基於代碼審計過程生成最終的安全審計報告。"
        state = append(state, llms.TextParts(llms.ChatMessageTypeHuman, prompt))
        r, err := llm.GenerateContent(ctx, state, llms.WithTemperature(0.9))
        if err != nil {
            return nil, err
        }
        return append(state,
            llms.TextParts("ai", r.Choices[0].Content),
        ), nil
    })
    // 任務 4️:終點
    g.AddNode(graph.END, func(_ context.Context, state []llms.MessageContent) ([]llms.MessageContent, error) {
        return state, nil
    })
    // 設置任務流連接
    g.AddEdge("audit""fix")      // 審計後進入修復
    g.AddEdge("fix""report")     // 修復後生成報告
    g.AddEdge("report", graph.END) // 讓report連接END
    g.SetEntryPoint("audit")       // 設置入口節點
    // 編譯任務流
    runnable, err := g.Compile()
    if err != nil {
        panic(err)
    }
    // 運行任務流
    ctx := context.Background()
    res, err := runnable.Invoke(ctx, []llms.MessageContent{
        llms.TextParts(llms.ChatMessageTypeHuman, "func login(user_input string) { sql_query := \"SELECT * FROM users WHERE name = '\" + user_input + \"'\" }"),
    })
    if err != nil {
        panic(err)
    }
    // 輸出AI代碼審計結果
    fmt.Println(res)
}

代碼解析

AddNode採用func(ctx context.Context, state []llms.MessageContent) ([]llms.MessageContent, error) 結構:
  state []llms.MessageContent:存儲對話歷史,所有任務共享狀態。
  model.GenerateContent(ctx, state, llms.WithTemperature(0.9)):使用Ollama進行推理。
append(state, llms.TextParts(llms.ChatMessageTypeHuman, r.Choices[0].Content)):記錄 AI 生成的結果。

📌 任務流邏輯

運行結果如下所示:

從運行的效果來看,並不符合預期,可能是我理解不夠🤷

📌 結論

langgraphgo 是 Go 語言中 LangGraph 的一個擴展實現,適用於簡單的 AI 任務編排工作。本文通過智能代碼審計示例,展示了 langgraphgo 如何高效地執行 AI 任務流。💡 如果你希望在 Golang 生態中構建 AI 自動化工作流,我想 langgraphgo 絕對是一個不好的選擇🙂‍↕️(畢竟作者都不怎麼維護了,推薦還是使用 python 庫畢竟實時就擺在那裏了)!

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/kaVgTOZzx0ZYP5gUcVoPXw?poc_token=HKxV0mej8JCCiZeuWnLra0CKLk8KoO1V72E7I0Ua