百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 文章教程 > 正文

创建一个与 LangChain 集成的 Chainlit 应用程序

xsobi 2024-12-06 20:28 24 浏览

在本文中,我们将逐步介绍如何创建一个与 LangChain 集成的 Chainlit 应用程序。



前提条件

开始之前,请确保具备以下条件:

  • 已安装并可正常使用的 Chainlit
  • 安装了 LangChain 包
  • OpenAI API 密钥
  • 基本的 Python 编程知识



第 1 步:创建 Python 文件

在您的项目目录中创建一个名为 chainlit-app.py 的新 Python 文件。此文件将包含大型语言模型(LLM)应用程序的主要逻辑。


第 2 步:编写应用程序逻辑

在上述python文件中,导入必要的包,并定义一个函数来处理新的聊天会话,另一个函数来处理来自用户界面的消息。


使用 Langchain 表达式语言 (LCEL),示例代码如下所示:

Bash
from langchain_openai import ChatOpenAI
from langchain.prompts import ChatPromptTemplate
from langchain.schema import StrOutputParser
from langchain.schema.runnable import Runnable
from langchain.schema.runnable.config import RunnableConfig
from typing import cast
from dotenv import load_dotenv
import chainlit as cl
import os

# 设置代理服务器的环境变量,以便通过代理进行网络请求
os.environ['HTTP_PROXY'] = 'http://127.0.0.1:8001' # 设置HTTP代理
os.environ['HTTPS_PROXY'] = 'http://127.0.0.1:8001' # 设置HTTPS代理

# 加载.env文件中的环境变量
load_dotenv()

# 在聊天开始时,创建一个模型实例和prompt模板
@cl.on_chat_start
async def on_chat_start():
 # 创建一个模型实例,启用流式输出
 model = ChatOpenAI(streaming=True)

 # 创建一个prompt模板
 prompt = ChatPromptTemplate.from_messages(
 [
 (
 "system",
 "你是一位知识渊博的历史学家,对历史问题提供了准确而雄辩的答案。",
 ),
 ("human", "{question}"),
 ]
 )
 # 创建一个Runnable对象,用于处理聊天请求
 runnable = prompt | model | StrOutputParser()
 # 将Runnable对象存储在用户会话中
 cl.user_session.set("runnable", runnable)

# 处理用户消息
@cl.on_message
async def on_message(message: cl.Message):
 # 从用户会话中获取Runnable对
 runnable = cast(Runnable, cl.user_session.get("runnable")) # type: Runnable
 # 创建一个空消息对象,用于流式输出
 msg = cl.Message(content="")
 # 异步处理聊天请求,并流式输出结果
 async for chunk in runnable.astream(
 {"question": message.content},
 config=RunnableConfig(callbacks=[cl.LangchainCallbackHandler()]),
 ):
 # 流式输出每个chunk
 await msg.stream_token(chunk)
 # 发送最终消息
 await msg.send()


这段代码为每个聊天会话设置了 Runnable 的一个实例,并为每个会话定制了一个 ChatPromptTemplate。每当用户发送消息时,就会调用 Runnable 来生成响应。

回调处理器负责监听链的中间步骤,并将它们发送到用户界面。


第 3 步:运行应用程序

要启动应用程序,请打开终端,导航到包含 chainlit-app.py 的目录。然后运行以下命令:

Bash
chainlit run chainlit-app.py -w


-w 标志告诉 Chainlit 启用自动重载,因此不需要每次对应用程序进行更改时都重新启动服务器。聊天机器人用户界面现在应该可以在 http://localhost:8000 上访问。


了解智能体开发更多细节,访问智能体Agent轻松入门专栏,内容包括:理解什么是智能体(AI Agent),基于LangChain开源框架从零开始实现简单的智能体开发,学习如何使用 LangSmith 监控工具监控和追踪智能体的内部运行,以及综合使用PyPDF2库、Qdrant 向量数据库、Agent智能体、OpenAI 大语言模型、Gradio库等技术来进行开发实践。



#头条创作游园会#

相关推荐

我把家搬进了NAS?家庭资产数字化革命,现在连袜子都有编号了!

本内容来源于@什么值得买APP,观点仅代表作者本人|作者:羊刀仙家里东西一多,总有一种“我记得我有这个,但我不知道放哪了”的错觉。...

Mega Run第3关通关攻略-跳上高空(mega运动)

错过火炮等于失败,这是MegaRun在上一关中给玩家的一点小挑战,那在后面的关卡中,这中挑战会给你造成什么困难呢?具体请看MegaRun第3关通关攻略-跳上高空。MegaRun第3关在一开始我...

Axure高保真教程:中继器表格自动合计模板

编辑导语:合计作为日常使用频率比较高的一个功能,但在Axure里面传统的表格如果做合计是很麻烦的,遇到数据多的时候很耗费时间,那么该如何优化,提高工作效率?本文以中继器表格为核心,教大家如何制作一个自...

多角色登录原型(分角色登录)

编辑导读:多角色登录是很多系统都需要具备的功能,例如在招聘网站里,登录的角色包括、求职者、招聘企业的hr、猎头、内部员工等等。本文作者分享了如何在Axure里面制作多角色登录的原型模板,希望对你有帮助...

利用Axure+js创建可配置地图页面(axure地址选择)

编辑导语:如何利用Axure实现自定义地图展示?本篇文章里,作者结合Axure与高德地图,对如何在Axure中设置相应参数、进而预览时实现自定义地图展示效果的操作流程进行了示范和总结,一起来看一下。本...

纬地智能模板的一些基础与概念(纬地智能模板的一些基础与概念是什么)

对于公路及相关土木工程的勘测设计工作,虽然基础的理论和方法是基本相同的,但是受到各国家、地区文化、制图习惯等方面因素的影响,不同地域公路勘测设计的习惯和表达方式有着很大的差异,当然语言方面的不同和差...

WPF界面开发第三方控件入门指南——菜单项

点击“了解更多”获取工具DevExpressWPFSubscription拥有120+个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpressWPF能创建有着强...

鸿蒙开发:自定义一个搜索模版(鸿蒙系统怎么添加百度搜索条)

前言代码案例基于Api13。...

简单介绍一下前端各框架中的模板标签

在各大前端框架、小程序中,此类标签的作用主要是用来帮助我们包裹多个元素。在浏览器实际渲染中会将其移除只渲染其包裹的DOM元素,所以说不会增加额外的DOM节点...

法媒:简单的几个步骤让你的运动鞋更加炫酷

【环球网综合报道】有没有觉得自己的运动鞋样式单调,希望它变得更加炫酷?法媒《ELLE》推荐了一种简单易行的装饰方法,让您的运动鞋更加时尚。制作前,您需要准备一张细毡子、一张闪光热胶合布、胶水、两个银夹...

Blazor 代码隐藏(blazor 操作dom)

Razor组件通常是在单个.razor文件中创作的,这样就存在页面中包含html代码和后台代码(@code标记指定的代码)。如下...

DevExpress WPF入门指南:DXBars, DXRibbon中使用MVVM的两种方式

你也可以下载Universal安装包或者到DevExpress中文网查看更多示例和教程哦本文档介绍在DXBars,DXRibbon和GalleryControl这三个控件中使用MVVM框架的...

干货,Uploadfive插件上传,Python接收存储

在Web开发工作中,经常遇到上传需求,上传照片,文件等,网上的上传插件有很多,我使用的是一款H5上传插件Uploadfive,与之对应的是Uploadify,后者是基于Flash的,不过现在越来越多的...

用DevExpress实现基于HTML&CSS的桌面应用程序的UI(二)

DevExpressWinForm拥有180+组件和UI库,能为WindowsForms...

Avalonia:一个开源的跨平台UI选项

...