- 博客(38)
- 资源 (1)
- 收藏
- 关注
原创 【Agent】构建专家级SQL Agent交互
本文介绍了构建企业SQL问答Agent的完整流程,包括:1)安装依赖项和初始化LLM;2)设置SQLite数据库并获取表结构;3)使用预构建Agent进行SQL查询处理;4)自定义Agent实现更精确的控制。关键技术点包括:通过LangChain工具包获取数据库元数据,系统提示约束查询行为,以及分步执行流程(获取表→确定相关表→提取结构→生成查询→校验→执行→修正)。文章还演示了从预构建Agent到自定义工作流的进阶方法,通过专用节点强制特定工具调用顺序,提升处理可靠性。最终实现了一个能自动修正错误、准确回
2025-07-04 17:55:35
1056
1
原创 Agent的记忆详细实现机制
本文介绍了如何使用InMemoryStore实现跨线程状态共享,特别适用于需保留用户特定信息的场景(如聊天机器人)。文章首先演示了基本操作: 创建InMemoryStore实例并定义命名空间 使用put/store方法存取记忆数据 支持语义检索功能(需配置嵌入模型) 然后说明如何在LangGraph框架中集成InMemoryStore: 与checkpointer协同工作,分别处理线程内持久化和跨线程共享 通过configurable参数传递用户ID实现记忆隔离 在节点中访问存储进行读写操作 最后强调相同u
2025-06-22 13:18:06
674
原创 Agent短期记忆的几种持久化存储方式
本文介绍了Agent长期对话的三种持久化存储方案。针对短期记忆(线程级持久性)和长期记忆(跨线程持久性)的不同需求,重点讲解了PostgreSQL、MongoDB和Redis三种检查点实现方式。PostgreSQL方案需要初始化5张表存储检查点数据;MongoDB采用文档结构存储;Redis则通过键值方式实现。三种方案都能有效保存对话状态,确保Agent重启时不丢失数据。文章提供了每种方案的具体代码实现,包括数据库连接设置、模型初始化和对话流处理,并展示了执行结果和数据存储结构,为开发者提供了实用的持久化解
2025-06-09 00:08:40
491
原创 超详细入门指南,什么是MCP,为什么突然间所有人都在谈论它?
即使是最复杂的模型也受限于其与数据的隔离,特别是当被困在信息孤岛和传统系统之后。所以上下文集成很重要
2025-05-11 23:15:06
866
原创 【Agent的革命之路——LangGraph】工作流中追踪复杂图执行过程中的状态变化
下面我将详细介绍如何在 LangGraph 中为包含子图的图结构添加线程级持久化功能,步骤清晰明了。
2025-04-20 16:52:04
900
原创 LangGraph——Agent AI的持久化状态
记忆是一种认知功能,允许人们存储、检索和使用信息来理解他们的现在和未来。想象一下,与一个总是忘记你告诉他们事情的同事合作是多么令人沮丧,这需要不断地重复!随着人工智能代理承担涉及众多用户交互的更复杂任务,为它们配备记忆功能对于提高效率和用户满意度同样至关重要。通过记忆功能,代理可以从反馈中学习,并适应用户的偏好。短期记忆(Short-term memory,),或称为线程范围内的记忆,可以在与用户的单个对话线程中的任何时间被回忆起来。LangGraph将短期记忆管理为代理状态的一部分。
2025-04-13 21:00:28
1184
原创 LangGraph 怎么控制递归次数
这一节我们讲讲langgraph图的递归限制 Recursion Limit,递归限制设置了图在单次执行过程中可以执行的最大超级步骤数。一旦达到该限制,LangGraph 将引发 GraphRecursionError 错误。默认情况下,此值设置为 25 步。递归限制可以在运行时为任何图进行设置,并通过配置字典传递给 .invoke 或 .stream 方法。需要注意的是,recursion_limit 是一个独立的配置键,不应像其他用户定义的配置那样放在 configurable 键内部。
2025-03-25 23:25:38
721
原创 LangGraph 构建的工作流调用数据库的时候怎么添加重试机制
gentState: 定义一个类型化的字典,表示工作流的状态。其中:messages: 是一个 BaseMessage 的序列,表示消息列表。Annotated: 使用 operator.add 注解,表示在状态更新时,messages 会通过追加的方式合并。")query_database: 该节点函数从数据库中查询数据,并将结果封装为 AIMessage 返回。db.run: 执行 SQL 查询,返回查询结果。AIMessage: 将查询结果包装为 AI 消息,以便后续节点处理。
2025-03-13 00:19:36
1266
原创 让 AI 不再只会聊天!Function Calling 让大模型真正“动起来”![特殊字符]
如果我们想要手动管理函数调用,而不是完全交给 OpenAI API。如我们可以自己定义 function_call 逻辑。return f"location } 的天气是晴天 🌞" functions = [ {"name" : "get_weather" , "description" : "获取天气信息" , "parameters" : {
2025-03-11 23:55:58
908
原创 AI生成代码,模仿AlphaCodium引擎,通过 RAG 和 Agent 自我修正来生成代码
大家知道吗, 它提出了一种利用控制流进行代码生成的方法。它的核心思想就是通过迭代的方式逐步构建和改进代码答案。它不仅仅依赖于一次性生成代码,而是通过多次测试和修正来优化生成的代码,确保其正确性和鲁棒性。在公开测试和 AI 生成的测试上迭代测试并改进针对特定问题的答案。再问一个问题大家知道是怎么为我们生成代码的吗?我来为大家梳理一下步骤,首先,会理解用户提出的编程问题,并生成一个初始的代码解决方案。这一步通常基于大型语言模型(LLM)的能力,结合问题描述生成初步代码。其次。
2025-03-02 23:23:49
760
原创 【Agent的革命之路——LangGraph】工作流中的 Command 模式
foo: str定义节点A,# 判断应该跳转到哪个节点else:# Command 允许我们同时更新图状态并路由到下一个节点。# 更新图中的状态# 替换edgegoto=goto,定义好了上面节点之后,现在,我们可以使用上述节点创建 StateGraph。需要注意的是,该图没有定义条件的路由edge!这是因为控制流是用 Command 内部 node_a 定义的。
2025-02-22 23:29:08
564
原创 【Agent的革命之路——LangGraph】工作流中的 map-reduce 模式
这节我们来探索一下工作流设计中常用的 Map-Reduce 模式,在介绍 Map-Reduce 模式之前,我们想来看下 LangGraph 中的Send 对象已经结构化输出。
2025-02-16 15:00:40
821
原创 使用DeepSeek来构建LangGraph Agent
随着的发布,我们不得不把目光聚焦在这个能赶超多个顶流大模型的模型身上,它主要是其在后训练阶段大规模使用了强化学习技术,在仅有极少标注数据的情况下,极大提升了模型推理能力。在数学、代码、自然语言推理等任务上,性能比肩OpenAI o1正式版。为了更好的了解它的性能,我们这篇文章来尝试用它来构建Agent。
2025-02-16 00:46:58
1959
3
原创 LangGraphd的细节大全——如何定义或者更新状态
让我们构建一个包含单个节点的图。我们的节点只是一个 Python 函数,它读取图的状态并对其进行更新。")定义节点只是将消息附加到我们的消息列表中,然后填充一个额外的字段。接下来,接下来我们将定义一个简单的图,其中包含我们之前创建的节点。我们将使用 StateGraph 来定义一个操作该状态的图,并使用 add_node 将我们的节点添加到图中。在这种情况下,我们的图只是执行一个节点。
2025-02-06 23:24:04
1019
原创 震惊世界的DeepSeek-V3技术与其他主流模型的全面评估对比
近年来,大型语言模型(LLM)一直在进行快速迭代和进化,比如Openai,Anthropic,逐渐减少(AGI)的差距。除了封闭式模型,开源模型,比如DeepSeek系列,也正在取得长足的进步,努力与封闭源同行缩小差距。为了进一步推动开源模型功能的边界,deepseek团队扩大了模型并引入DeepSeek-V3,这是具有671B参数的大型专家(MOE)模型,每个 token 都激活了37B。从具有前瞻性的角度来看,他们始终如一地努力争取强大的模型绩效和经济成本。
2025-02-03 00:31:41
2202
原创 在 crag 中用 LangGraph 进行评分知识精炼-下
首先我们还是先定义web搜索工具,这里的web### Search然后定义我们graph"""表示我们图的状态。
2025-02-02 23:57:23
447
原创 在 crag 中用 LangGraph 进行评分
这次给大家展示LangGraph不一样的功能,crag。大家知道crag是什么吗,我给大家提前小科普一下,是一种改进的RAG(Retrieval-Augmented Generation,检索增强生成)策略,它引入了对检索文档的自我反思/自我评分机制。我们需要做些什么呢?最开始实现时,可以跳过知识精炼阶段。如果需要,可以将其作为一个节点添加回来。如果检索到的文档不相关,则选择通过网络搜索补充检索内容。使用 Tavily Search 进行网络搜索。通过查询重写优化搜索查询,以提高检索效果。
2025-01-31 00:25:34
899
原创 【Agent的革命之路——LangGraph】多个agent的多轮对话如此方便
在我们新写的例子中,我们要建立一个旅行助理代理团队,他们可以通过交流相互沟通。下面我们先创建两个agent:可以帮助推荐旅行目的地。可以向hotel_advisor agent寻求帮助。:可以帮助推荐酒店。可以向travel_advisor agent寻求帮助。我们将使用这种方式来构建agent,因为我们的每个agent都将拥有特定于其专业领域的工具以及用于移交到另一个agent 的特殊工具。@tool""" 获得旅游城市推荐 """
2025-01-23 00:51:57
841
原创 【Agent的革命之路——LangGraph】细节分析Agent里面强大的Tools,你会怎么用?
先问大家一个问题,在很多应用程序中,不管是开发或者使用,其实我们都是用大模型在做响应,但是如果出现了一些场景,需要和其他API平台或者数据库交互,该怎么办呢?这里我们就可以用到工具,使用工具调用来请求和特定架构下匹配的模型的响应。大家看一张图:这张图就充分展示了大模型与工具之间的数据字段是怎么样交互的,当然这只是抽象出来的概念字段,实际参数远远不止这些。
2025-01-15 00:25:04
1841
原创 人脸识别最简单但性能最好的喂饭教程
大家知道人脸识别吗,计算机上的视频(本质也是图⽚)是由数字组成的,因此通过数学计算可以进⾏图像识别。⼈脸识别任务是图像识别的⼦类,图像识别可拆分为图像检测和图像对⽐两个任务:检测图像⾥的⼈脸,实际上是分类问题的⼀种,即图像⾥有没有⼈脸,图像对⽐是指检测出的⼈脸和预先采集的⼈脸的相似程度。
2025-01-12 23:55:15
805
原创 【Agent的革命之路——LangGraph】人机交互中的细节(等待用户的指令)
这节我们探讨下如何使用interrupt等待用户输入,虽然前面都有讲过,但是有部分同学还是一知半解,我决定把这一块详细的逻辑整理出来,从头到尾给大家讲述一下。人机交互 (HIL) 交互对于agentic系统至关重要。等待人工输入是一种常见的HIL交互模式,允许agentic询问用户澄清问题并在继续之前等待输入。我们可以使用函数在LangGraph中实现这一点。interrupt允许我们停止图形执行以收集用户的输入,并使用收集的输入继续执行。
2025-01-12 13:38:11
1029
原创 【Agent的革命之路——LangGraph】人机交互中的interrupt&Command
在LangGraph中,实现人机交互最核心的就是Command和interrupt,就是前面设计4种交互模式所使用的共同方法,简单点说就是中断图,获取人类提供的值,再恢复图。我们这次就来详细分析一下这两个语法。
2025-01-11 15:38:22
1939
原创 CES 2025 引爆科技行业,黄仁勋: AI 正以“惊人速度”发展
AI“正以惊人的速度发展”。NVIDIA及其合作伙伴推出了用于 Agentic AI的AI 蓝图(Blueprints),包括PDF到播客的高效研究工具,以及用于分析大量视频和图像的视频搜索和摘要工具,使开发者能够随时随地构建、测试和运行AI Agentic。“自动驾驶汽车革命已经到来,”黄仁勋说,“构建自动驾驶汽车与所有机器人一样,需要三台计算机:NVIDIA DGX用于训练AI模型,Omniverse用于测试驾驶和生成合成数据,以及DRIVE AGX,这是车内的超级计算机。
2025-01-09 00:33:45
1034
原创 【Agent的革命之路——LangGraph】人机交互中的四种决策设计模式
从上面4中设计模式可以看到,LangGraph 的中断功能为 LLM 应用程序提供了强大的人机交互能力,使得在关键步骤中引入人工审查和干预成为可能。通过合理设计工作流,开发者可以确保LLM生成的输出和工具调用在敏感或关键场景中的准确性和可靠性。无论是批准、编辑还是多轮对话,LangGraph 的设计模式都为构建复杂的人机协同系统提供了灵活且强大的工具。
2025-01-08 00:00:49
1641
原创 【Agent】我们怎样与agent交互,纠错agent。
我们从上面的例子可以看出,我们已经实现了怎么给agent纠错,我们用的就是LangGraph中的时间检查点遍历的方式。这为我们做自主软件工程AI应用提供了强大灵活的处理方法。
2025-01-05 23:10:39
372
原创 【LangGraph】真正的自定义状态,我们提供建议,agent采纳
如果设置了标志,将导向到该节点。否则,它让预构建函数选择下一个节点。这里回忆一下,tools_condition函数只是检查响应消息中是否chatbot有任何响应。如果是,它将导向到该节点。否则,它将结束graph`。"chatbot",最后,我们添加简单的边并编译图形。这些边指示图形每当a执行完成时 a -> b。try:pass可以看到chatbot。
2025-01-04 23:59:39
1430
2
原创 【LangGraph】强大的功能人类和agent的交互(中)
在我们的代码中,这个更新状态和覆盖消息都是基于我们打断agent来的,在上面这些运行日志里也可以看到每一步包括agent在用tools工具搜索之前组装的内容是什么,然后我们覆盖的消息是什么,最后工具出来的结果是什么,很好的实现了我们控制agent的行为。下一节我们将实现人类和agent交互的最后一步,自定义状态。
2025-01-01 23:48:00
831
原创 Graph RAG的秘密
Graph RAG 通过引入图结构,为传统的 RAG 框架带来了以下优势:更强的关系建模能力:图结构能够显式地表示实体之间的关系,适合处理复杂知识。更高效的检索:图遍历算法能够快速检索到相关信息,提升系统性能。更丰富的生成结果:通过融合图信息,生成的结果更加准确和多样化。未来,随着知识图谱和图神经网络技术的不断发展,Graph RAG 有望在问答系统、推荐系统、知识推理等领域发挥更大的作用。对于 AI 从业者来说,掌握 Graph RAG 技术将为解决复杂问题提供新的思路和工具。
2024-12-31 00:00:29
733
原创 【LangGraph】强大的功能人类和agent的交互(上)
设置环境的引用定义状态包含的消息格式和状态图上面就是我们控制状态图agent的第一步,我们已经使用interrupt为agent添加了人机交互中的断点,以便在需要时进行人工监督和干预。由于我们已经添加了检查点,因此图表可以无限期暂停并随时恢复,就像什么都没发生过一样。下面,我们将探讨如何使用自定义状态更新进一步定制机器人的行为。
2024-12-30 00:05:09
746
原创 分词器和词嵌入那些不为人知的故事
分词器:将文本分解为可处理的最小单元(tokens嵌入:为这些最小单元提供语义信息的数值表示。只有当二者结合才能高效处理自然语言并输入到深度学习模型中,让模型既理解词语的语义,又能建模其上下文关系。
2024-12-29 16:10:01
664
原创 【redisRDB持久化问题】
RDB快照(1)亮点1:RDB快照就像拍合影,记录当时的状态,(2)要点1:RDB快照,将此时内存中的所有的数据写入磁盘,(3)要点2:生成快照有两种方式:sava和bgsava,save是主进程执行,生成时会阻塞redis,只能执行查找。bgsave是由主进程fork出子进程执行,(4)要点3:子进程在被fork处理时,与主进程共享同一份内存,但在生成快照时采取COW机制,确保不会阻塞主进程的数据读写(5)要点4:RDB的执行频率很重要,这会影响到数据的完整性和Redis的性能稳定性。所以4.0
2022-03-14 00:37:06
1174
原创 【Redis采用fork子进程重写AOF文件时,潜在的阻塞风险】
Redis采用fork子进程重写AOF文件时,潜在的阻塞风险包括:fork子进程 和 AOF重写过程中父进程产生写入的场景,下面依次介绍。a、fork子进程,fork这个瞬间一定是会阻塞主线程的(注意,fork时并不会一次性拷贝所有内存数据给子进程,老师文章写的是拷贝所有内存数据给子进程,我个人认为是有歧义的),fork采用操作系统提供的写实复制(Copy On Write)机制,就是为了避免一次性拷贝大量内存数据给子进程造成的长时间阻塞问题,但fork子进程需要拷贝进程必要的数据结构,其中有一项就是拷
2022-03-07 20:13:54
1157
1
原创 【高性能IO模型:为什么单线程Redis能那么快?】
Redis 为什么用单线程?要更好地理解 Redis 为什么用单线程,我们就要先了解多线程的开销。多线程的开销日常写程序时,我们经常会听到一种说法:“使用多线程,可以增加系统吞吐率,或是可以增加系统扩展性。”的确,对于一个多线程的系统来说,在有合理的资源分配的情况下,可以增加系统中处理请求操作的资源实体,进而提升系统能够同时处理的请求数,即吞吐率。下面的左图是我们采用多线程时所期待的结果。但是,请你注意,通常情况下,在我们采用多线程后,如果没有良好的系统设计,实际得到的结果,其实是右图所展示的那样。
2022-03-04 19:02:57
184
原创 【redis的数据结构以及rehash】
redis的数据结构:1,亮点1:string,list,set,hast,sortset都只是数据的保存形式,底层的数据结构是:简单动态字符串,双向链表,压缩列表,哈希表,跳表,整数数组。2,亮点2:Redis使用了一个哈希表保存所有的键值对。3,要点1:五种数据形式的底层实现a: string:简单动态字符串b: list:双向链表,压缩列表c: hash:压缩列表,哈希表d: Sorted Set:压缩列表,跳表e: set:哈希表,整数数组4,要点2:List ,hash
2022-03-03 17:29:27
579
原创 【Redis Cluster采用hash槽的方式映射到实例】
Redis Cluster不采用把key直接映射到实例的方式,而采用哈希槽的方式原因:1、整个集群存储key的数量是无法预估的,key的数量非常多时,直接记录每个key对应的实例映射关系,这个映射表会非常庞大,这个映射表无论是存储在服务端还是客户端都占用了非常大的内存空间。2、Redis Cluster采用无中心化的模式(无proxy,客户端与服务端直连),客户端在某个节点访问一个key,如果这个key不在这个节点上,这个节点需要有纠正客户端路由到正确节点的能力(MOVED响应),这就需要节点之间互相交
2022-03-03 01:48:29
432
1
原创 【Redis使用规范】
我总结的 Redis 使用规范分为两大方面,主要包括业务层面和运维层面。业务层面主要面向的业务开发人员:1、key 的长度尽量短,节省内存空间2、避免 bigkey,防止阻塞主线程3、4.0+版本建议开启 lazy-free4、把 Redis 当作缓存使用,设置过期时间5、不使用复杂度过高的命令,例如SORT、SINTER、SINTERSTORE、ZUNIONSTORE、ZINTERSTORE6、查询数据尽量不一次性查询全量,写入大量数据建议分多批写入7、批量操作建议 MGET/MSET 替
2022-03-03 01:38:50
1567
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人