Type something to search...
精通 langgraph js:通过 5 个基本步骤创建您的第一个 AI 工作流

精通 langgraph js:通过 5 个基本步骤创建您的第一个 AI 工作流

Langgraph.js

它是一个使用 LLM 构建有状态、多角色应用程序的库,用于创建代理和多代理工作流程,使用节点和边的概念,因此称为图。它提供循环、可控性和持久性,并且还包括内置的持久性,从而实现先进的“人-在-环”和内存功能!

请注意,所有代码都可以在此存储库中找到!

在我们开始之前,让我们探索构成 langgraph.js 基础的关键概念,例如工作流程、图、状态、节点和边。

什么是工作流程?

在我看来,它只是一个包含 N 个作业(节点)的管道,每个节点都有一个要处理的特定任务,然后移动到下一个,依此类推,此外,它在所有节点之间有一个共享上下文(图状态),任何节点都可以编辑!

此外,维基百科 对工作流程有更详细的定义,请参考它以了解更多相关信息!

LangGraph 的核心是将代理工作流程建模为图。该图由三个主要键构成,它们是:

状态

一个共享的数据结构,表示应用程序的当前快照。

节点

简单的函数,接收当前状态作为输入,对其执行一些操作,然后返回一个更新的状态。

节点之间的连接,根据当前State确定接下来要执行哪个Node,它们可以是条件性的,例如仅在特定情况下执行此节点,否则忽略它!

构建图

要实现图,首先,我建议在一些干净的板子上绘制它,例如 tldraw,并在开始编码之前了解您想要的内容,这应该可以帮助您想象您的图,并将其与输出进行比较,就像我们将在下面看到的那样!

实现您的图的步骤

要实现一个图,无论它是一个简单的图还是一个大型图,我总是遵循以下步骤:

  1. 定义状态对象
  2. 实现节点(首先使其为空)
  3. 构建图并将边连接起来
  4. 编译图并打印它
  • 定义状态
import { Annotation, messagesStateReducer } from '@langchain/langgraph'

const StateAnnotation = Annotation.Root({
  messages: Annotation({
    reducer: messagesStateReducer, // how you update your state
    default: () => [],
  }),
  /** add any keys regards to your business requirements below */
})

Reducer: 表示如何更新您的状态(在我们的例子中是消息)

它需要两个参数,第一个是当前状态下一个是更新的状态

示例

const StateAnnotation = Annotation.Root({
  sum: Annotation<number>({
    reducer: (current: number, next: number) => current + next,
    default: 0,
  }),
})
  • 定义空节点
export const nodeOne = async (state: typeof StateAnnotation.State) => {
  // return the current state for now
  return state
}

export const nodeTwo = async (state: typeof StateAnnotation.State) => {
  // return the current state for now
  return state
}

export const nodeThree = async (state: typeof StateAnnotation.State) => {
  // return the current state for now
  return state
}
  • 构建工作流程并连接边
import { StateGraph, START, END } from '@langchain/langgraph'

const workflow = new StateGraph(StateAnnotation)
  .addNode('one', nodeOne)
  .addNode('two', nodeTwo)
  .addNode('three', nodeThree)
  // Conecting Edges Here
  .addEdge(START, 'one')
  .addEdge('one', 'two')
  .addEdge('two', 'three')
  .addEdge("three", END)

编译工作流程,并打印您的第一个图

请注意,我在这里使用 Bun!

// ********************** Compile the graph
const graph = workflow.compile()

// ********************** Drawing & Output a png
async function main() {
  // print the graph
  const drawableGraph = await graph.getGraphAsync()
  const png = await drawableGraph.drawMermaidPng()
  Bun.write(process.cwd() + '/src/simple/conditional-graph.png', png)
}

main()

// ********************** Invoking (With Stream)
// Invoke the graph
graph.invoke({})
// Invoke with stream
graph.stream({})

输出 Png

输出图图像

Langgraph 中最有趣的事情之一是您在上面看到的输出,从一张图片中,您可以弄清楚所有流程,而无需调试您的代码!

条件边

一种特殊的边类型允许您根据某些条件控制流程!

有两种处理条件边的方法

  1. 使用addConditionalEdges
export const shouldContinue = async (state: typeof StateAnnotation.State) => {
  const random = Math.random() * 100
  if (random > 50) {
    return END
  } else {
    return 'two'
  }
}

const workflow = new StateGraph(StateAnnotation)
  .addNode('one', nodeOne)
  .addNode('two', nodeTwo)
  .addNode('three', nodeThree)
  // Conecting Edges
  .addEdge(START, 'one')
  .addEdge('one', 'two')
  .addEdge('two', 'three')
  .addEdge('three', END)
  .addConditionalEdges('one', shouldContinue, {
    true: 'two',
    false: END,
  })

  1. 使用Command

(Command 在“人-在-环”流程中使用很多)

使用Command的主要区别在于,您可以在路由之前更新状态!

export const nodeOne = async (state: typeof StateAnnotation.State) => {
  const someChecks = '...'
  if (someChecks) {
    return new Command({
      goto: END,
      // Update your state here!
      update: {
        // what to update
      },
    })
  }

return new Command({
    goto: 'two',
  })

}

Langgraph Studio

一个用于在本地原型设计和调试 LangGraph 应用程序的桌面应用程序,它允许您调试、测试和运行您的工作流程。

从这里下载 Langgraph Studio 并按照以下步骤开始!

  1. 确保您已安装 docker 并在您的机器上运行
  2. 克隆 repo
  3. 拖动您的项目,然后从底部栏打开项目设置
  4. 选择 NodeJS 作为项目版本,并将图的路径设置为 ./src/simple/graph.ts:graph 不要忘记 :graph,它是来自 graph.ts 文件的命名导出
  5. 启动项目,然后从提交按钮运行您的流程

来自 langgraph studio 的截图

在下一篇文章中,我将演示一个真实的示例工作流程,例如 TripPlanner,使用此处解释的相同技术,但使用真实的代理和工具,敬请关注!

Mustafa Elsayed

Related Posts

结合chatgpt-o3-mini与perplexity Deep Research的3步提示:提升论文写作质量的终极指南

结合chatgpt-o3-mini与perplexity Deep Research的3步提示:提升论文写作质量的终极指南

AI 研究报告和论文写作 合并两个系统指令以获得两个模型的最佳效果 Perplexity AI 的 Deep Research 工具提供专家级的研究报告,而 OpenAI 的 ChatGPT-o3-mini-high 擅长推理。我发现你可以将它们结合起来生成令人难以置信的论文,这些论文比任何一个模型单独撰写的都要好。你只需要将这个一次性提示复制到 **

阅读更多
让 Excel 过时的 10 种 Ai 工具:实现数据分析自动化,节省手工作业时间

让 Excel 过时的 10 种 Ai 工具:实现数据分析自动化,节省手工作业时间

Non members click here作为一名软件开发人员,多年来的一个发现总是让我感到惊讶,那就是人们还在 Excel

阅读更多
使用 ChatGPT 搜索网络功能的 10 种创意方法

使用 ChatGPT 搜索网络功能的 10 种创意方法

例如,提示和输出 你知道可以使用 ChatGPT 的“搜索网络”功能来完成许多任务,而不仅仅是基本的网络搜索吗? 对于那些不知道的人,ChatGPT 新的“搜索网络”功能提供实时信息。 截至撰写此帖时,该功能仅对使用 ChatGPT 4o 和 4o-mini 的付费会员开放。 ![](https://images.weserv.nl/?url=https://cdn-im

阅读更多
掌握Ai代理:解密Google革命性白皮书的10个关键问题解答

掌握Ai代理:解密Google革命性白皮书的10个关键问题解答

10 个常见问题解答 本文是我推出的一个名为“10 个常见问题解答”的新系列的一部分。在本系列中,我旨在通过回答关于该主题的十个最常见问题来分解复杂的概念。我的目标是使用简单的语言和相关的类比,使这些想法易于理解。 图片来自 [Solen Feyissa](https://unsplash.com/@solenfeyissa?utm_source=medium&utm_medi

阅读更多
在人工智能和技术领域保持领先地位的 10 项必学技能 📚

在人工智能和技术领域保持领先地位的 10 项必学技能 📚

在人工智能和科技这样一个动态的行业中,保持领先意味着不断提升你的技能。无论你是希望深入了解人工智能模型性能、掌握数据分析,还是希望通过人工智能转变传统领域如法律,这些课程都是你成功的捷径。以下是一个精心策划的高价值课程列表,可以助力你的职业发展,并让你始终处于创新的前沿。 1. 生成性人工智能简介课程: [生成性人工智能简介](https://genai.works

阅读更多
揭开真相!深度探悉DeepSeek AI的十大误区,您被误导了吗?

揭开真相!深度探悉DeepSeek AI的十大误区,您被误导了吗?

在AI军备竞赛中分辨事实与虚构 DeepSeek AI真的是它所宣传的游戏规则改变者,还是仅仅聪明的营销和战略炒作?👀 虽然一些人将其视为AI效率的革命性飞跃,但另一些人则认为它的成功建立在借用(甚至窃取的)创新和可疑的做法之上。传言称,DeepSeek的首席执行官在疫情期间像囤积卫生纸一样囤积Nvidia芯片——这只是冰山一角。 从其声称的550万美元培训预算到使用Open

阅读更多
Type something to search...