本系列分享前三期分别讲述了
- LangChain&LangGraph的核心原理
- LangChain接入大模型的基本方法
- LangChain核心概念——链
学完以上内容我们就掌握了LangChain代码编写的基本语法。本期分享笔者将通过一个包含前端和后端的全栈项目——大模型智能问答网站,带大家进一步巩固LangChain的基础知识。
本系列分享是笔者结合自己学习工作中使用LangChain&LangGraph经验倾心编写,力求帮助大家体系化快速掌握LangChain&LangGraph AI Agent智能体开发的技能!大家感兴趣可以关注笔者掘金账号和系列专栏。更可关注笔者同名微信公众号: 大模型真好玩, 每期分享涉及的代码均可在公众号私信: LangChain智能体开发获得。
学习完以上三节内容,相信大家已经掌握与大模型实Agent 智能体现单轮对话的技巧,这里通过一个快速示例带大家简单回顾一下LangChain链式调用的基本内容。编写LangChain对话智能体的基本流程如下:
- 导入相关依赖包并初始化提示词
- 调用统一接口初始化大模型组件
- 使用LCEL语法将大模型组件和输出解析器组件相连接,形成“链”
- 执行“链”并输出结果
按照以上流程编写代码如下:
以上代码的执行结果如下图所示,可见大模型正确输出了回答:

要把单轮对话修改为多轮对话我们应该怎么做呢?逻辑其实很简单,在LangChain中我们可以通过人工拼接消息队列来为每次模型调用设置多轮对话记忆。需要进行如下步骤:
- 构建提示词组件时,通过占位符定义一个消息列表, 关键代码为
- 在多轮对话中不断的向列表中追加消息,并将其传递给占位符,大模型组件接收到列表信息后会自动关联历史消息并回复内容, 关键代码为:
完整的多轮对话代码如下:
执行结果如下:

当前的多轮聊天大模型存在一个严重问题,大模型每次只有获得聊天的全部内容才会输出到屏幕上,这样用户输入问题后会感觉大模型反应很慢。我们平常使用的网站包括, , 等都是大模型一旦有字立马输出,用户看到的是模型边回答边思考的效果,体验更好!
那么在LangChain中如何实现这个效果呢?其实也很简单,LangChain提供了一个方法,可以实现流式输出,大家只需要在调用模型回答时将方法替换为即可。是同步方法,使用循环接受返回的块。如果异步调用,需要使用,然后使用异步for循环获取模型输出。
修改上述多轮代码中的指定部分如下:
实现效果如下:

上述代码我们学习了如何构建多轮对话的大模型应用以及如何实现流式输出。对于我们来说在命令行输入输出还是太抽象了,下面我们就一起来编写一个支持在网页上进行交互的问答机器人。
本项目前端使用构建,gradio是一个开源的Python库,旨在快速构建机器学习模型的交互式网页界面。它允许用户通过简单的几行代码创建可视化的机器学习模型演示项目。在我们的anaconda虚拟环境中执行命令安装gradio依赖包:

关于的使用方法笔者这里不会展开讲解,大家可以看gradio官方文档,笔者也推荐B站视频 www.bilibili.com/video/BV1TK… 快速学习。
全栈智能聊天机器人的核心原理就是上面分享的多轮对话实例,在上述对话实例中加入相应的前端代码即可完成项目搭建,完整的项目代码如下:
以上代码如下要点向大家解释说明:
- 通过对象储存我们的对话列表状态,同时在事件绑定中将对象作为输入和输出。如函数,将发送消息按钮与函数绑定, 与函数的输入参数绑定,函数的返回值给下一状态赋值。绑定了用户输入消息栏的内容,绑定了对话栏内容。
- 流式响应函数支持流式输出, 使用循环来获取模型的异步输出即可。同时这里使用生成器实时反馈到前端。
上述代码的执行效果如下,可以看到我们已经可以和聊天机器人进行多轮对话

本期分享首先回顾了LangChain的基本概念、接入大模型和构造链的方法,然后学习了LangChain多轮对话记忆的编写原理,最后通过gradio和多轮对话打造了具备前后端功能的智能机器人。学习完本期分享,大家就掌握了LangChain的基本使用方法了。
不过大模型的能力就是陪你聊聊天,说说话?自然不是,现在的大模型已经是具备函数调用能力,工具接入能力的大聪明了,能够利用外界的函数和工具拓展自己的能力边界,真正成为人类的小助手。在LangChain中我们如何让大模型调用外界的函数和工具呢?我们下期内容接着分享,大家拭目以待。
本系列分享预计会有20节左右的规模,保证大家看完一定能够掌握LangChain&LangGraph的开发能力,大家感兴趣可关注笔者掘金账号和专栏,更可关注笔者的同名微信公众号:大模型真好玩, 本系列分享的全部代码均可在微信公众号私信笔者: LangChain智能体开发 免费获得。
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/242169.html原文链接:https://javaforall.net
