首页 > 其他分享 >【RAG 项目实战 01】在 LangChain 中集成 Chainlit

【RAG 项目实战 01】在 LangChain 中集成 Chainlit

时间:2024-11-20 17:48:57浏览次数:3  
标签:RAG runnable cl LangChain 01 langchain import message

【RAG 项目实战 01】在 LangChain 中集成 Chainlit


NLP Github 项目:


1、 环境安装

pip install chainlit

2、 创建 app.py 文件

from langchain.chat_models 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

import chainlit as cl


@cl.on_chat_start
async def on_chat_start():
	""" 监听会话开始事件 """
	image = cl.Image(url="https://qingsong-1257401904.cos.ap-nanjing.myqcloud.com/wecaht.png")

    # 发送一个图片
    await cl.Message(
        content="欢迎关注 **FasterAI**, 让每个人的 AI 学习之路走的更容易些!",
        elements=[image],
    ).send()

    model = ChatOpenAI(streaming=True)
    prompt = ChatPromptTemplate.from_messages(
        [
            (
                "system",
                "You're a very knowledgeable historian who provides accurate and eloquent answers to historical questions.",
            ),
            ("human", "{question}"),
        ]
    )
    runnable = prompt | model | StrOutputParser()
    cl.user_session.set("runnable", runnable)


@cl.on_message
async def on_message(message: cl.Message):
	""" 监听用户消息事件 """
    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()]),
    ):
        await msg.stream_token(chunk)

    await msg.send()

3、使用千帆模型替换ChatGPT

import os

from langchain_community.chat_models import QianfanChatEndpoint
from langchain.prompts import ChatPromptTemplate
from langchain.schema import StrOutputParser
from langchain.schema.runnable import Runnable
from langchain.schema.runnable.config import RunnableConfig

import chainlit as cl

# 配置百度千帆大模型(免费、无需翻墙)
os.environ["QIANFAN_AK"] = "千帆模型 Token"
os.environ["QIANFAN_SK"] = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

model = QianfanChatEndpoint(
    streaming=True,
    model="ERNIE-Speed-8K",
)


@cl.on_chat_start
async def on_chat_start():
	""" 监听会话开始事件 """
	image = cl.Image(url="https://qingsong-1257401904.cos.ap-nanjing.myqcloud.com/wecaht.png")

    # 发送一个图片
    await cl.Message(
        content="欢迎关注 **FasterAI**, 让每个人的 AI 学习之路走的更容易些!",
        elements=[image],
    ).send()

    prompt = ChatPromptTemplate.from_messages(
        [
            (
                "system",
                "You're a very knowledgeable historian who provides accurate and eloquent answers to historical questions.",
            ),
            ("human", "{question}"),
        ]
    )
    runnable = prompt | model | StrOutputParser()
    cl.user_session.set("runnable", runnable)


@cl.on_message
async def on_message(message: cl.Message):
	""" 监听用户消息事件 """
    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()]),
    ):
        await msg.stream_token(chunk)

    await msg.send()

4、启动程序

chainlit run app.py -w

5、访问 http://localhost:8000/

与大模型进行对话:
在这里插入图片描述

[!NOTE] 问题
未结合上下文进行多轮对话


【动手学 RAG】系列文章:

本文由mdnice多平台发布

标签:RAG,runnable,cl,LangChain,01,langchain,import,message
From: https://blog.csdn.net/weixin_44025655/article/details/143917425

相关文章

  • 开源模型应用落地-LangChain实用小技巧-检索器-集成多种检索器(十八)
    一、前言   在LangChain中,检索器是一个重要模块,主要用于从数据源中检索与查询相关的文档或片段。它能高效进行信息检索,通过快速筛选和语义理解从大规模文本数据中找到相关内容,支持复杂应用场景如检索增强生成和多源数据整合,还具有可定制性和灵活性,可选择不同嵌入模型和索......
  • NOIP2016 提高组 蚯蚓
    NOIP2016提高组蚯蚓算法一容易想到用优先队列维护最大值,但是有“其余蚯蚓长度增加\(q\)”这个条件,考虑怎么快速地处理。我们把增加的总长度记为偏移量\(delta\)。每个数在加入前,把不产生贡献的时间的偏移量减去,再存进去就可以了。时间复杂度\(O(mlogn)\),用priority_queu......
  • 【架构设计篇】LLM应用架构实战:基于LangChain的企业级最佳实践
    前言随着ChatGPT等大语言模型的广泛应用,越来越多的企业开始将LLM整合到其业务系统中。然而,从概念验证(PoC)到生产环境的转换过程中,往往会遇到诸多技术挑战。本文将基于实际项目经验,分享LLM应用开发中的架构设计、性能优化、成本控制等关键环节和解决方案。1.LLM应用的特殊性在......
  • SAP MIGO 收货/退货操作和科目配置,货物移动类型101/122
    文章目录前言一、收货二、查询收货凭证三、退货操作及会计凭证退货操作查看会计凭证三、收货凭证配置(一)BSX(存货记账)配置(二)WRX(货物和发票清算科目)配置(三)PRD(成本价格差异)配置(四)整体流程前言一、收货确保已经创建了采购订单,并且采购订单号码已知。这是进行收货操......
  • RAG中late chunking的实验效果测试(续)
    前文使用了jinaaiv2的模型,接下来我们看看v3版本latechunking的实际效果,为了快速,我直接使用官方的api! #importrequests#url='https://api.jina.ai/v1/embeddings'headers={'Content-Type':'application/json','Authorization':'Bear......
  • RAG中late chunking的实验效果测试(续2)
    针对前面RAG测试的长文本问题,我又增加了长文本测试(代码同前):context_test_documents=[#文档1:AI发展史(约2500tokens)"""人工智能的发展历程可以追溯到20世纪50年代。1950年,图灵提出著名的"图灵测试",这被认为是人工智能研究的开端。在接下来的几十年里......
  • 算法日记 31 day 动态规划(01背包)
    继续来看动态规划中01背包的题目。题目:最后一块石头的重量II1049.最后一块石头的重量II-力扣(LeetCode)有一堆石头,用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为 x ......
  • PbRL | Christiano 2017 年的开山之作,以及 Preference PPO / PrefPPO
    PrefPPO首次(?)出现在PEBBLE,作为pebble的一个baseline,是用PPO复现Christianoetal.(2017)的PbRL算法。Forevaluation,wecomparetoChristianoetal.(2017),whichisthecurrentstate-of-the-artapproachusingthesametypeoffeedback.Theprimarydif......
  • AO3401-ASEMI中低压P沟道MOS管AO3401
    编辑:llAO3401-ASEMI中低压P沟道MOS管AO3401型号:AO3401品牌:ASEMI封装:SOT-23最大漏源电流:-4.2A漏源击穿电压:-30V批号:最新RDS(ON)Max:60mΩ引脚数量:3沟道类型:P沟道MOS管芯片尺寸:MIL漏电流:恢复时间:5ns芯片材质:封装尺寸:如图特性:中低压MOS管、P沟道MOS管工作结温:-55℃~150......
  • 面试精选01-谈谈你对Abp中模块的理解
    模块可以理解成系统中一个独立的功能。例如缓存Redis、队列RabbitMQ、IOC框架Autofac。使用ABP模块可以解决模块之间的依赖问题,通过模块化设计,每个模块可以独立开发、测试和部署,从而减少代码的耦合度,提高了代码的可维护性和复用性,同时使得应用程序更加容易扩展和升级。在A......