Go 語言中的 LangGraph:基於 LangGraphgo 的 AI 任務編排
在 AI 任務編排領域,LangChain 提供了 LangGraph,幫助開發者搭建複雜、多步驟、有狀態的 AI 工作流。但這個庫主要基於 Python,而在 Go 語言生態中,如何實現類似的 AI 任務編排呢?今天,我們來介紹 langgraphgo,一個爲 Golang 量身定製的 AI 任務流管理框架。通 langgraphgo,你可以高效地構建 AI 代碼審計、對話系統、多智能體協作等應用。本文將簡單的解析其概念,並通過代碼示例****帶你體驗一下。
什麼是 langgraphgo?
langgraphgo 是 LangGraph 在 Go 語言中的擴展實現, 提供的功能具體如下:
-
任務節點(Node):每個任務都是一個獨立的執行單元,可以是 AI 代理、數據庫查詢、API 請求等。
-
有向圖(Graph):任務之間形成有向無環圖(DAG),可定義複雜的執行流程。
-
狀態管理(State Management):任務執行過程可以保留狀態,用於後續計算或分支判斷。
Langgraphgo 實戰示例
場景,智能代碼審計, 假設我們要實現一個智能代碼審計 AI,它的執行流程如下:
-
用戶上傳代碼
-
AI 執行代碼安全分析
-
如果發現漏洞,AI 自動修復
-
修復後,然後生成最終的安全報告
首先我們先創建一個 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 生成的結果。
📌 任務流邏輯
-
audit:執行代碼審計,發現漏洞 → 進入 fix
-
fix:修復漏洞 → report 出報告
-
reprt 出報告 → 結束流程
運行結果如下所示:
從運行的效果來看,並不符合預期,可能是我理解不夠🤷
📌 結論
langgraphgo 是 Go 語言中 LangGraph 的一個擴展實現,適用於簡單的 AI 任務編排工作。本文通過智能代碼審計示例,展示了 langgraphgo 如何高效地執行 AI 任務流。💡 如果你希望在 Golang 生態中構建 AI 自動化工作流,我想 langgraphgo 絕對是一個不好的選擇🙂↕️(畢竟作者都不怎麼維護了,推薦還是使用 python 庫畢竟實時就擺在那裏了)!
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/kaVgTOZzx0ZYP5gUcVoPXw?poc_token=HKxV0mej8JCCiZeuWnLra0CKLk8KoO1V72E7I0Ua