langchain实践——简单的RAG

阿里云灵积平台API

新用户申请阿里云灵积平台服务可获取部分模型限量免费API额度,由于项目模型处于开发微调中,故使用阿里云灵积平台服务API进行后端应用开发。

RAG

LLM 支持的最强大的应用程序之一是复杂的问答 (Q&A) 聊天机器人。这些应用程序可以回答有关特定来源信息的问题。这些应用程序使用一种称为检索增强生成 (RAG)的技术。

典型的 RAG 应用程序有两个主要组件:

索引:用于从源引入数据并编制索引。通常发生在离线状态。

检索和生成:实际的 RAG 链,它需要用户在运行时查询并从索引中检索相关数据,然后将其传递给模型。

从原始数据到答案最常见的完整序列如下所示:

  • 加载:首先我们需要加载数据。
  • 拆分:将大块数据分成更小的块。以方便用索引数据并将其传递到模型,因为大块更难搜索,并且不适合模型的有限上下文窗。
  • 存储:我们需要某个地方来存储和索引我们的拆分,以便以后可以搜索它们。这通常是使用向量数据库和嵌入模型完成的。

实践

引入必要的库

from langchain_core.runnables import  RunnablePassthrough
from langchain_community.vectorstores import Chroma
from langchain_text_splitters import CharacterTextSplitter
from langchain_community.chat_models.tongyi import ChatTongyi
from langchain_community.embeddings import ModelScopeEmbeddings
from langchain.prompts import ChatPromptTemplate
from langchain.schema import StrOutputParser
import os

首将云灵积平台API-KEY写入环境变量

os.environ["DASHSCOPE_API_KEY"] = "your-key"

加载我们的数据,以本地txt文件为例

full_txt = open("./o.txt", encoding="utf-8").read()

将大块数据分成更小的块

text_splitter = CharacterTextSplitter(separator="\n\n", chunk_size=30, chunk_overlap=8, length_function=len)
documents = text_splitter.split_text(full_txt)

将数据块转化为向量并存入向量数据库中

model_id = "damo/nlp_corom_sentence-embedding_chinese-base"
embeddings_model = ModelScopeEmbeddings(model_id=model_id)
db = Chroma.from_texts(documents, embeddings_model)
retriever = db.as_retriever()

定义模型对象以及输入提示词

chatLLM = ChatTongyi(
    streaming=True,
    model_name="qwen-turbo",
)
template = '''仅依据以下提供的内容回答给出的问题
{context}
问题:{question}
'''
chat_prompt = ChatPromptTemplate.from_template(template)

构建方法拼接召回的数据

def form_docs(docs):
    return "\n\n".join([d.page_content for d in docs])

创建任务链,数据流为:用户输入(str)>搜索器(context)/ 运行输入(question)>模板(prompt)>LLM对象(json)>解析器(str)>输出

chain = ({"context": retriever | form_docs, "question": RunnablePassthrough()}
         | chat_prompt
         | chatLLM
         | StrOutputParser()
         )

应用代码

while True:
    query = input("请输入问题\n")
    if query == "quit":
        break
    print(chain.invoke(query))
    print()

 测试

本地文档内容

餐饮业领衔一季度消费增长,消费分化下中端餐饮日子不好过

  一家连锁港式茶餐厅的相关负责人透露,整个品牌2024年第一季度的数据比2023年的数据好很多。

  国家统计局近日公布3月份社会消费品零售总额,其中餐饮收入同比增长显著。3月份的餐饮收入3964亿元,增长6.9%,1—3月份的餐饮收入13445亿元,增长10.8%。

  从去年开始,餐饮行业的收入增幅就在所有社会消费品中位于前列,不过据第一财经记者了解,疫情后我国的餐饮消费已现“K形分化”。

  客流营收持续回暖

  第一财经记者从多家餐饮企业了解到,今年一季度不少餐饮企业的客流量或营收同比去年都有所上升。

  比如2024年一季度,全聚德(002186.SZ)实现营业收入3.58亿元,同比增长11.99%;归母净利润1530.71万元,同比增长66.85%。

  去年上半年实现扭亏为盈的全聚德在财报中称,2024年餐饮业持续回暖向好,消费活力有望进一步释放。公司餐饮门店春节期间收入同比增长 32.6%,接待消费者28.7 万人次,同比增长 27%。线上线下业务融合发展,共同满足消费者多场景、多元化、高品质消费需求。

  西安饮食公布的2024年一季度报告则显示,公司营业收入1.82亿元,同比增长3.47%,归属于上市公司股东的净利润仍亏损2993万元,但同比收窄3.83%。

  除了以上2家A股上市公司以外,第一财经记者从西贝集团了解到,今年3月份,西贝整体客流和营收平稳向好,部分门店与去年比增幅显著,例如北京四元桥家乐福店营收同比增长48%、合肥万象城店客流同比增长43%。不过今年3月份,客单价和高峰消费时段平均等位时间基本与去年持平。

  海底捞北京合生汇店的相关负责人告诉第一财经记者:“今年过完年到现在,店里一直都很忙,再加上我们门店周围的商超、办公楼、居民区也多,顾客消费群体以年轻人为主,工作日正常每天接待量在300桌左右,节假日周末我们每天的接待量都要超过500桌。今年到店吃火锅的顾客明显比去年多,人流量回来了,人气旺了。”

  一家连锁港式茶餐厅的相关负责人透露,整个品牌2024年第一季度的数据比2023年的数据好很多。“而且由于2023年第一季度香港和深圳口岸才全面开放,所以2024年一季度广东深圳地区门店的业绩增长率比北方城市高不少。”

  中端餐饮被挤压

  当然,也有一些企业的情况不理想。


  一位在湘菜、粤菜品牌都工作过的资深餐饮人士和记者谈及了他的观察:“今年高端餐饮不差,因为高端商务宴请还是较多的,被挤压的主要是中间档位的品牌,一些消费者可能会用大众餐饮品牌来作为替代品。”

  从一季度的市场情况来看,人均消费在二三百元的中端餐饮日子确实不那么好过。近日,一家人均消费约为320元的海鲜餐厅相关负责人告诉记者:“我们门店以前一个月能做350万左右的营业额,现在只能做到250万元。”另一家人均消费约为222元的苏浙菜员工则表示:“生意比去年下滑20%。”甚至还有一家人均消费约为276元的私营浙菜馆老板表示:“我们马上倒闭了。”

  事实上早在2023年,这个趋势已经显现。红餐产业研究院发布的《2023年中国餐饮消费趋势》报告显示,餐饮业消费已经显现出“第四消费时代”的特征,消费者对高性价比有着极致追求。我国的餐饮消费呈现出了“K形分化”,即一端向上探顶,一端往下坠落的分化走势,主张高端、差异化与主打刚需、价低质优的企业有较大机会承接住时代的红利。

请输入问题
《2023年中国餐饮消费趋势》报告显示什么?
《2023年中国餐饮消费趋势》报告显示,餐饮业消费已经显现出“第四消费时代”的特征,消费者对高性价比有着极致追求。

请输入问题
全聚德财报情况?
全聚德2024年一季度实现营业收入3.58亿元,同比增长11.99%;归母净利润1530.71万元,同比增长66.85%。

请输入问题
quit

进程已结束,退出代码为 0

  • 8
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值