LangChain学习一:模型-实战

上一节内容

LangChain学习一:入门-本地化部署-接入大模型
http://t.csdnimg.cn/aqx9W

学习目标:模型(models)


LangChain 支持的各种模型类型和模型集成。

学习内容一:模型分类

  • Chat 聊天模型

  • LLMs(大语言模型)

  • 文本嵌入模型

Chat 聊天模型:这些模型通常由语言模型支持,但它们的API更加结构化。 具体来说,这些模型将聊天消息列表作为输入,并返回聊天消息。

LLMs:这些模型将文本字符串作为输入,并返回文本字符串作为输出

文本嵌入模型:这些模型将文本作为输入,并返回一个浮点数列表

学习内容二:不同模型实战

3.1 Chat-聊天模型

3.1.1 声明

from langchain.chat_models import ChatOpenAI
from langchain import PromptTemplate, LLMChain
from langchain.prompts.chat import (
    ChatPromptTemplate,
    SystemMessagePromptTemplate,
    AIMessagePromptTemplate,
    HumanMessagePromptTemplate,
)
from langchain.schema import (
    AIMessage,
    HumanMessage,
    SystemMessage
)
 
 

在这里插入图片描述
这个警告是应为PromptTemplate和LLMChain现在弃用了可以使用如下导入

from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain

3.1.2 Chat-聊天类型实战

# ChatOpenAI默认是chatGTP3.5的模型
# chat = ChatOpenAI(temperature=0)
# 我们在上一节内容部署了自己的模型

chat = ChatOpenAI(
    streaming=True,
    verbose=True,
    # callbacks=[callback],
    openai_api_key="none",
    openai_api_base="http://127.0.0.1:8000/v1",
    model_name="Qwen-7B-Chat"
)

LangChain目前支持的消息类型

  1. AIMessage
  2. HumanMessage
  3. SystemMessage
  4. ChatMessage
    前面三个常用,后面ChatMessage接受任意角色的参数,大多数情况下只需要处理前三个。
3.1.2.1 AIMessage(AI 消息)

由人工智能生成和发送的消息。这些消息可能包含自动生成的回复、建议或信息。

from langchain.chat_models import ChatOpenAI
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain
from langchain.prompts.chat import (
    ChatPromptTemplate,
    SystemMessagePromptTemplate,
    AIMessagePromptTemplate,
    HumanMessagePromptTemplate,
)
from langchain.schema import (
    AIMessage,
    HumanMessage,
    SystemMessage
)

from langchain.chat_models import ChatOpenAI

from langchain.schema import HumanMessage

chat = ChatOpenAI(
    streaming=True,
    verbose=True,
    # callbacks=[callback],
    openai_api_key="none",
    openai_api_base="http://127.0.0.1:8000/v1",
    model_name="Qwen-7B-Chat"
)


out=AIMessage(content="你好,我是代码浪人", additional_kwargs={})
print("==========")
print(out)

在这里插入图片描述

这里的content就相当于大模型机器回答,干啥用呢,为了以后的多轮对话做准备。

3.1.2.2 HumanMessage(用户消息)

由真实用户生成和发送的消息。这些消息来自人类用户,包括文本、图片或其他形式的交流内容。

from langchain.chat_models import ChatOpenAI
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain
from langchain.prompts.chat import (
    ChatPromptTemplate,
    SystemMessagePromptTemplate,
    AIMessagePromptTemplate,
    HumanMessagePromptTemplate,
)
from langchain.schema import (
    AIMessage,
    HumanMessage,
    SystemMessage
)

from langchain.chat_models import ChatOpenAI

from langchain.schema import HumanMessage

chat = ChatOpenAI(
    streaming=True,
    verbose=True,
    # callbacks=[callback],
    openai_api_key="none",
    openai_api_base="http://127.0.0.1:8000/v1",
    model_name="Qwen-7B-Chat"
)

out=chat([HumanMessage(content="你好,你是谁")])
print("==========")
print(out)
print("==========")

在这里插入图片描述

这里才是我们提问的地方

3.1.2.3 SystemMessage(系统消息)

用于向用户提供系统通知、警告或其他重要信息的消息。这些消息通常由系统自动生成并发送。

from langchain.chat_models import ChatOpenAI
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain
from langchain.prompts.chat import (
    ChatPromptTemplate,
    SystemMessagePromptTemplate,
    AIMessagePromptTemplate,
    HumanMessagePromptTemplate,
)
from langchain.schema import (
    AIMessage,
    HumanMessage,
    SystemMessage
)

from langchain.chat_models import ChatOpenAI

from langchain.schema import HumanMessage

chat = ChatOpenAI(
    streaming=True,
    verbose=True,
    # callbacks=[callback],
    openai_api_key="none",
    openai_api_base="http://127.0.0.1:8000/v1",
    model_name="Qwen-7B-Chat"
)

messages = [
    SystemMessage(content="你现在是翻译专家,你会把我的话转化成英文"),
    HumanMessage(content="我是个帅小伙,很开心认识大家")
]
out=chat(messages)
print("==========")
print(out)
print("==========")

在这里插入图片描述
看到没,这时候,我们的大模型就可以作为一个助手帮你了

还可有以下情况,就是上面说的模仿大模型说话,我们先看一下原生的

from langchain.chat_models import ChatOpenAI
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain
from langchain.prompts.chat import (
    ChatPromptTemplate,
    SystemMessagePromptTemplate,
    AIMessagePromptTemplate,
    HumanMessagePromptTemplate,
)
from langchain.schema import (
    AIMessage,
    HumanMessage,
    SystemMessage
)

from langchain.chat_models import ChatOpenAI

from langchain.schema import HumanMessage

chat = ChatOpenAI(
    streaming=True,
    verbose=True,
    # callbacks=[callback],
    openai_api_key="none",
    openai_api_base="http://127.0.0.1:8000/v1",
    model_name="Qwen-7B-Chat"
)


print("==========")
res = chat(
    [
        SystemMessage(content="你现在是一个青春期叛逆少年,不喜欢学习,喜欢新事物"),
        HumanMessage(content="老师让我写作业,我不想写,怎么办")
    ]
)
print(res)

在这里插入图片描述

加入之后

print("==========")
res = chat(
    [
        SystemMessage(content="你现在是一个青春期叛逆少年,不喜欢学习,喜欢新事物"),
        HumanMessage(content="老师让我写作业,我不想写,怎么办"),
        AIMessage(content="我要玩一会,我要玩一会!"),
        HumanMessage(content="老师让我写作业,我不想写,怎么办")
    ]
)
print(res)

在这里插入图片描述
是不是很好玩

同时还支持批量操作

print("==========")
batch_messages = [
    [
        SystemMessage(content="你是一名鼓励师,你要夸我"),
        HumanMessage(content="我是一个开发人员")
    ],
    [
        SystemMessage(content="你是一名翻译工作人员,帮我的话翻译成英文"),
        HumanMessage(content="我是一个开发人员")
    ],
]
result = chat.generate(batch_messages)
print(result)
print("==========")

print(result.llm_output)

print("==========")

print(result.generations)
 
 

在这里插入图片描述

3.1.2.4 ChatMessage(聊天消息)

用于表示在聊天对话中交换的消息,可以是来自 AI 或真实用户的消息。

3.2 LLMs(大语言模型)

在介绍LLMs大语言模型不得不介绍python中的一个类叫LLM,它是和LLMs(大模型)进行交互的方式。

有许多LLM提供商(OpenAI、Cohere、Hugging Face等)-该类旨在为所有LLM提供商提供标准接口。

3.2.1 LLM提供商OpenAI

申明
from langchain.llms import OpenAI
llm = OpenAI(model_name="text-ada-001", n=2, best_of=2)
 
 
调用(单例)
out=llm("给我说一个笑话")
print(out)

结果:
“那只鸡为什么过马路?去另一边。” 
调用(批量)
llm_result = llm.generate(["给我说一个笑话", "给我说一个笑话"])
 

3.3 文本嵌入(Text Embedding)

嵌入会创建文本的向量表示。

这很有用,因为这意味着我们可以在向量空间中考虑文本,并执行诸如语义搜索之类的操作,其中我们在向量空间中寻找最相似的文本片段。

LangChain中的基本Embedding类公开了两种方法:embed_documents和embed_query。

  • embed_documents:适用于多个文档
  • embed_query:适用于单个文档

除此之外,将这两个方法作为两个单独的方法的另一个原因是,某些嵌入提供商针对要搜索的文档与查询本身具有不同的嵌入方法。

在这里插入图片描述

3.1.1实战

网上的有的是需要key

from langchain.embeddings import AlephAlphaAsymmetricSemanticEmbedding

document = "这是一个测试文档。"
query = "测试文档"
embeddings = AlephAlphaAsymmetricSemanticEmbedding()
doc_result = embeddings.embed_documents([document])
query_result = embeddings.embed_query(query)
print(query_result)

在这里插入图片描述

3.1.1.1 HuggingFaceEmbeddings

这个是HuggingFace,他是开源免费的,我看了一下源码的里面方法,说明这个他是需要安装sentence_transformers这个依赖的,然后支持cpu的

pip install sentence_transformers

在这里插入图片描述
这里我们使用的是FAISS向量库

import re

from langchain import FAISS
from langchain.embeddings import HuggingFaceEmbeddings
from langchain.prompts import SemanticSimilarityExampleSelector
from langchain.text_splitter import RecursiveCharacterTextSplitter


def information_extraction(text_content,my_noun):


    text_splitter = RecursiveCharacterTextSplitter(separators=["\n\n", "\n"], chunk_size=200, chunk_overlap=100)

    # 将文本按照指定的方式进行分割
    chunks = text_splitter.split_text(text_content)

    # 创建包含content字段的字典并保存在数组中
    examples = [{"content": chunk} for chunk in chunks]

    example_selector = SemanticSimilarityExampleSelector.from_examples(
        examples,
        # 这是用于生成用于测量语义相似性的嵌入的嵌入类
        HuggingFaceEmbeddings(),
        # 这是用于存储联入和进行相似性搜索的 VectorStore 类,
        FAISS,
        # 最想的要的示例要几个
        k=3
    )
    input_variables = {
        'content': my_noun 
            }
    output=example_selector.select_examples(input_variables)
    # 提取'input'内容并拼接成str,中间换行
    res=''
    for i, d in enumerate(output, start=1):
        if 'content' in d:
            res += f"第{i}段相关信息内容:\n{d['content']}\n"
    return res.strip()
if __name__ == '__main__':
    with open('wendang.txt', 'r', encoding="utf-8") as file:
        text = file.read()
    my_noun='添加微信'
    print(information_extraction(text,my_noun))

wendang.txt文本内容

角色:0 :哎,
角色:1 :你好你好好,
角色:2 :您是朱杰朱女士是吧?
角色:2 :啊,
角色:2 :对啊,
角色:2 :哎,
角色:1 :你女士您好,
角色:1 :打扰到您了。
角色:2 :我这边是XX燃气的工作人员,
角色:1 :就是您的那个江苏省兴化市安丰镇徐吴八组的一个房子啊,
角色:1 :当时在在户需要天然气的时候,
角色:1 :买这天然气保障是保保。
角色:1 :您谈两个联系的这个女士,
角色:1 :您还记得吧?
角色:0 :是什么时候啊?
角色:1 :呃,
角色:1 :就是您开户的时候是二一年二一年的时候买的那车。
角色:1 :嗯,
角色:1 :但是你是交钱去呃,
角色:1 :上门师傅给你上门安装的时候买的嘛,
角色:1 :一年应该是两百块钱左右。
角色:1 :然后当时买的话,
角色:1 :你是年的,
角色:1 :就是去年的十一月份就过去哦,
角色:0 :是买了什么保险是吧?
角色:0 :嗯,
角色:0 :对,
角色:2 :新望燃气保险。
角色:1 :嗯,
角色:1 :对对,
角色:1 :这边保健那块来好想去的,
角色:1 :然后这个现在不是断保了吗?
角色:1 :女士,
角色:1 :我这边通知到您啊,
角色:1 :为了确保您家房屋后期由于这个意外导致的一些损失啊,
角色:1 :可以这边给给你保险理赔,
角色:1 :所以耽误您几分钟时间,
角色:1 :现场协助。
角色:1 :另外那续保的女士,
角色:1 :嗯,
角色:1 :你看这里那个续保地址应该是没有更改吧。
角色:1 :女士呃,
角色:0 :没有,
角色:0 :还是那个嗯嗯好的女士。
角色:2 :呃,
角色:1 :那您看一下女士,
角色:1 :我这边用那个企业微信加您好友。
角色:1 :稍后我把新年的那个 q 码把信息给您发到微信上面去,
角色:1 :您打开手机看一下。
角色:1 :呃,
角色:1 :就您这个微信的话是二五八六,
角色:1 :尾号是二五八。
角色:1 :这地方女士啊,
角色:1 :对对对,
角色:1 :嗯嗯,
角色:1 :好的,
角色:1 :女士,
角色:1 :我这边添加你了。
角色:1 :您看您的手机微信上面有没有收到的服务师,
角色:1 :就是黄色的一个喇叭,
角色:1 :你看一下。
角色:1 :对对对,
角色:2 :我看一下啊。
角色:2 :嗯,
角色:2 :好的哦,
角色:0 :企业微信是吧?
角色:1 :嗯,
角色:1 :对对对,
角色:1 :然后你扫二维码添加我就可以了。
角色:1 :然后我把这边给您发过去。
角色:1 :好,
角色:1 :这个那直接添加吧。
角色:1 :嗯,
角色:1 :对对,
角色:1 :您扫完添加我的名片就可以了。
角色:1 :嗯,
角色:1 :再见。
角色:0 :好嘞,
角色:1 :哦我看到了女士,
角色:1 :你稍等一下,
角色:1 :我把这个给您发过去。
角色:1 :然后这个上面的话,
角色:1 :有你的这个今年的你一个手机号码,
角色:1 :还有你的地址,
角色:1 :你看看有没有需要更改的,
角色:1 :我给您发过去,
角色:1 :您稍等一下,
角色:2 :我已经啊,
角色:2 :女士,
角色:2 :我这边就不您发送了,
角色:2 :您仔细看一下。
角色:1 :对,
角色:1 :这个是您现在的投保信息。
角色:2 :您看您直接扫二维码,
角色:1 :看一下你上面这个信息,
角色:1 :对不对?
角色:0 :女士哦,
角色:0 :我要扫一下那个二维码,
角色:0 :看一下。
角色:0 :嗯,
角色:1 :对对对,
角色:1 :二维码里把里面里面有你的这个投保信息息里面有你的地址,
角色:2 :还有你的手机号码,
角色:1 :还应该是这个身份证号码,
角色:1 :你看核对对不对?
角色:0 :女士保费九百元。
角色:1 :对,
角色:1 :这个是三年的,
角色:1 :您直接保障二六年的十一月份就不需要那个车钱了。
角色:1 :因为因为这边很多老用户啊,
角色:1 :他是宝贝上涨了女士,
角色:1 :她是三百块钱,
角色:1 :涨到五百块钱左右。
角色:2 :我直接给您按三连续二时,
角色:1 :其中的话您这个宝贝再上涨五百块钱,
角色:1 :您也不用补其中差价。
角色:1 :女士哦,
角色:0 :他那个还是他那个是里面会加的吗?
角色:1 :嗯,
角色:1 :因为女士您之前不是两百吗?
角色:1 :现在是三百了,
角色:1 :女士对吧?
角色:1 :哦,
角色:1 :对对对,
角色:0 :我记得好像有一次两百块钱。
角色:0 :嗯,
角色:1 :对,
角色:1 :三百块钱。
角色:1 :我跟你说一下,
角色:1 :为什么三百块钱他多了一百来块钱的话,
角色:1 :他是姥姥给你上涨了,
角色:1 :你你保额之前是五百多万,
角色:1 :现在是一千一百多万,
角色:1 :就是你总共可以理赔的,
角色:1 :保额是一千一百多万。
角色:1 :嗯,
角色:1 :然后呢,
角色:1 :给您加了一下,
角色:1 :可以保家庭六伙人的人身意外险,
角色:1 :就是您后期这个意外险方面就不用买了,
角色:1 :他最多可以保啊家里六口人,
角色:1 :您的呃您的爱人和您的孩子啊,
角色:1 :您的您家的老人都可以保就是挪六个人。
角色:1 :就比如说啊包含了啊,
角色:0 :都是包含在这个里面的是吧?
角色:0 :嗯,
角色:2 :对对对,
角色:2 :就是后期两个。
角色:1 :对你这个意外险方面就可以不用再买了,
角色:1 :可以保最多六六人。
角色:1 :他像这个平时磕磕磕碰碰是吧?
角色:1 :那个磕磕碰碰边京马扎口有一些呃,
角色:1 :离去医院那个门诊费挂挂号的话,
角色:1 :或者是这些费用啊,
角色:1 :只要超过两百块钱以上,
角色:1 :我们是按百分之九十给你报销。
角色:1 :就是您这个医保用完之后话,
角色:1 :您可以再接着用,
角色:2 :用们这支付宝也可以女士。
角色:0 :嗯,
角色:0 :哦,
角色:0 :我先看一下自然灾害跟意外事故。
角色:2 :对,
角色:1 :那意外事故就是您这个房子里面呢,
角色:1 :比如说水源管爆裂造您一下一个一些损失啊。
角色:1 :嗯,
角色:1 :呃墙体发霉之类的,
角色:1 :就像意外事故的话,
角色:1 :到时候手机拍个照片,
角色:1 :我们呃师傅上门给您看一下。
角色:1 :呃,
角色:1 :这个是到时候会按情况给你理赔的女士嗯,
角色:0 :是这个意思吧?
角色:2 :对对,
角色:1 :就是比如说你们家里那个电器啊,
角色:1 :由于意外导致的损,
角色:2 :主要是女士,
角色:2 :主要是由于意外导致的损失,
角色:1 :我们这边都是可以给你把了一下,
角色:0 :这个管个嗯管道破裂它也可以的。
角色:2 :嗯,
角色:2 :对对对,
角色:0 :哦,
角色:0 :哦哦,
角色:0 :是这个意思。
角色:1 :嗯,
角色:1 :他不是说只是保个燃气,
角色:1 :燃气上,
角色:1 :就是您家里面能看得到的一些财产,
角色:1 :他主要是机己的。
角色:1 :嗯,
角色:1 :对,
角色:1 :主要是由于意外导致的损失,
角色:1 :然后你用手机拍个照片呃,
角色:1 :做个证据,
角色:1 :我们到时候给您上门看一下,
角色:1 :然后直接给您理赔的女生,
角色:1 :到时候如果情况属实的话,
角色:1 :是一个理赔预算。
角色:0 :哦,
角色:0 :那如果有这个的话,
角色:0 :那卧室我是联系谁呀?
角色:0 :呃,
角色:1 :这个您联系我客呃呃,
角色:1 :保险基金公司啊。
角色:1 :女士,
角色:1 :您不知道您您您这边有没有我们的客服电话?
角色:0 :女士好像没有?
角色:0 :哎,
角色:1 :客服电话的话,
角色:1 :您您直接关我们关注我们公众号,
角色:1 :嗯,
角色:1 :对你微信上下直接搜索,
角色:1 :关注我们就可以了。
角色:1 :如果你不知道号码的话,
角色:1 :您到时候可以查查,
角色:1 :都可以能查得到。
角色:1 :因为他这个号码的话,
角色:1 :您直接上网搜搜,
角色:1 :然后您这边投保完之后啊,
角色:1 :您需要看您的这个投保订单,
角色:1 :直接关注我们公众号里面就能看得到你的这个订单。
角色:1 :女士不能查得到买单你的传哦,
角色:0 :我这边的话,
角色:0 :去那个官方官方热线电话也可以的吧。
角色:0 :对,
角色:1 :嗯嗯,
角色:1 :都可以。
角色:1 :女士,
角色:1 :您找我们客服电话都可以吗?
角色:1 :四零零六零五三个八呃,
角色:1 :一个八三个零女士,
角色:1 :就那个客服电话啊。
角色:0 :对对对对对,
角色:0 :四零零六零八零零零零二。
角色:0 :对对对,
角色:0 :女士,
角色:1 :这是我们客服电话吗?
角色:1 :女士,
角色:1 :嗯,
角色:1 :哦对,
角色:1 :然后我这边就是按照您这个三年给您续嘛,
角色:1 :因为很多老用户的话也是担心宝贝上涨。
角色:1 :您这个三年之后直接保到三年八六年,
角色:1 :其中的话如果保费调到五百元,
角色:1 :这个也跟你没关系,
角色:1 :你也不用补其中差价嘛。
角色:1 :女士,
角色:0 :因为之前我知道这个在二六年之内吧,
角色:0 :反正是不需要的吧。
角色:2 :嗯,
角色:2 :对,
角色:2 :二六年呢,
角色:1 :就您如果保费上涨就不用补差价的车,
角色:1 :就直接是三百块钱一年。
角色:2 :对哦,
角色:0 :现在是直接三百亚,
角色:0 :对吧?
角色:2 :对对,
角色:2 :女士,
角色:1 :那您看您这个资料是不是正确的女士啊啊,
角色:2 :对,
角色:1 :跟跟对的啊。
角色:1 :嗯,
角色:1 :对,
角色:1 :那您下滑女士,
角色:1 :您下滑上面签个字就可以了。
角色:2 :对,
角色:0 :我看一下啊。
角色:1 :对,
角色:1 :它下面不有一个签字嘛,
角色:1 :看你本人的。
角色:1 :对呀,
角色:1 :对,
角色:1 :你点击签字提交,
角色:1 :然后您支付完之后就投保成功了。
角色:1 :女士,
角色:1 :到时候您可以下载一个你的那个投保订单,
角色:1 :不能下下载就可以了,
角色:1 :而且你的直接可以了。
角色:1 :很有理解的是思情好爱,
角色:0 :这样直接再查填就好了,
角色:0 :对吧?
角色:1 :对,
角色:1 :签字提交就可以了,
角色:1 :然后他直接支付就可以了,
角色:0 :我也接受成功了。
角色:1 :哦,
角色:1 :您支付成功了是吧?
角色:1 :嗯,
角色:1 :对,
角色:1 :嗯,
角色:1 :好的,
角色:1 :我这边帮您看一下。
角色:1 :嗯,
角色:1 :看到女士你这边退后成功了。
角色:1 :那您看有没有要您下载一个电子保单,
角色:1 :女士下载个电子保单吗?
角色:0 :啊,
角色:0 :那要点一下下载保单是吧?
角色:1 :嗯,
角色:1 :下载之后,
角色:1 :您上面不有一个电子保单吗?
角色:1 :或者说女士呃,
角色:1 :您可以关注我们这个新药保险经济公众号,
角色:1 :您这边有没有关注过?
角色:1 :女士?
角色:0 :没有,
角色:0 :好像那这个还要还要发送验证码呀,
角色:0 :呃,
角色:1 :零零四嘛。
角色:1 :嗯,
角色:1 :对,
角色:1 :因为你士你不是第一第一一登女士啊,
角色:1 :对,
角色:1 :京动的话需要发发京东吧,
角色:1 :或者女士您后期您要想学着查的话,
角色:1 :您关注一下。
角色:2 :那我们新浪保险经济公众号,
角色:0 :你给他发任务,
角色:0 :我要相信亲哦,
角色:2 :对你公众号呀,
角色:1 :对,
角色:1 :关注一下啊,
角色:0 :等我有时间再关注吧。
角色:0 :对对,
角色:1 :您想查的话,
角色:1 :您随时查下。
角色:1 :您先把那公众号关注一下,
角色:1 :然后您想看的话,
角色:1 :您随时过查一下。
角色:2 :那您这前对对,
角色:1 :您这边是嗯交完了是吧?
角色:1 :那我女士,
角色:1 :对嗯您后期有什么问题的话,
角色:1 :您直接微信随时联系我。
角色:1 :比如什么理赔方面有问题啊,
角色:1 :你到时候直接联系我就行。
角色:1 :女士,
角色:1 :我会协助您参加理赔的旅程,
角色:0 :联系你就好了。
角色:0 :嗯,
角色:0 :对对对,
角色:1 :到时候我会协助你们。
角色:1 :您如果家里出什么意外的那个损失,
角色:1 :您到时候联系我就可以了的,
角色:1 :万以上。
角色:0 :哦,
角色:0 :行行行,
角色:1 :可以。
角色:1 :嗯,
角色:1 :行,
角色:1 :那女士我这边就不耽误太多时间了,
角色:2 :好吧,
角色:2 :您有问题。
角色:2 :好的好的,
角色:2 :嗯,
角色:1 :好好好,
角色:1 :再见。
角色:1 :嗯,
角色:1 :好好,
角色:1 :再见,
角色:1 :嗯,
角色:1 :好,
角色:1 :再见。

在这里插入图片描述
根据代码设置,我们这里就会出现三段相关信息的片段

3.1.1.2 m3e-base

比较

问了一下ChatGTP是一下结果,仅供参考
在这里插入图片描述
我查了一下资料,大概一下几个方向

  1. 开源公司不一样
  • m3e-base 是由中国一家人工智能公司 Moka AI 开源的
  • all-mpnet-base-v2 是由 Google AI 和 DeepMind 联合开发的,因此可以说是由这两个公司共同开源的
  1. 模型架构不一样
  • m3e-base 是基于 Transformer 架构的模型
  • all-mpnet-base-v2 是基于 MPNet 架构的模型

Transformer 架构是目前最流行的语言模型架构之一,具有良好的性能和效率。MPNet 架构是 Transformer 架构的一种改进,具有更大的模型容量和更好的性能。

  1. 训练数据
  • m3e-base 是基于 BookCorpus 和 WikiText-103 数据集训练的模型
  • all-mpnet-base-v2 是基于 BookCorpus、WikiText-103 和 OpenWebText 数据集训练的模型
  1. 性能
    在 GLUE 基准测试中,all-mpnet-base-v2 的平均分数比 m3e-base 高出约 1.5 个点。这表明 all-mpnet-base-v2 在各种自然语言处理任务上具有更强的性能。

  2. 适用场景
    m3e-base 和 all-mpnet-base-v2 都适用于文本表示和自然语言处理任务。然而,all-mpnet-base-v2 在性能方面更有优势,因此更适合需要高性能的任务,例如文本分类、问答和机器翻译。

  3. 总结
    m3e-base 和 all-mpnet-base-v2 都是强大的语言模型,具有不同的优势。m3e-base 的优势在于效率和易用性,而 all-mpnet-base-v2 的优势在于性能和鲁棒性。具体选择哪个模型,需要根据具体的应用场景和需求来决定。
    鲁棒性:鲁棒是Robust的音译,也就是健壮和强壮的意思

下载
from modelscope.hub.snapshot_download import snapshot_download

local_dir_root = "/root/autodl-tmp/models_from_modelscope"
snapshot_download('Jerry0/m3e-base', cache_dir=local_dir_root)

实战


from sentence_transformers import SentenceTransformer

model = SentenceTransformer('/root/autodl-tmp/models_from_modelscope/Jerry0/m3e-base')

#Our sentences we like to encode
sentences = [
    '* Moka 此文本嵌入模型由 MokaAI 训练并开源,训练脚本使用 uniem',
    '* Massive 此文本嵌入模型通过**千万级**的中文句对数据集进行训练',
    '* Mixed 此文本嵌入模型支持中英双语的同质文本相似度计算,异质文本检索等功能,未来还会支持代码检索,ALL in one'
]

#Sentences are encoded by calling model.encode()
embeddings = model.encode(sentences)

#Print the embeddings
for sentence, embedding in zip(sentences, embeddings):
    print("Sentence:", sentence)
    print("Embedding:", embedding)
    print("")

在这里插入图片描述

"""
@FileName:信息抽取.py
@Description:
@Author:lucky 
@Time:2023/12/5 10:12
"""
from langchain import FAISS, PromptTemplate, FewShotPromptTemplate
from langchain.chat_models import ChatOpenAI
from langchain.embeddings import HuggingFaceEmbeddings
from langchain.prompts import SemanticSimilarityExampleSelector
from langchain.text_splitter import RecursiveCharacterTextSplitter

from sentence_transformers import SentenceTransformer



embeddings = HuggingFaceEmbeddings(
model_name = "/root/autodl-tmp/models_from_modelscope/Jerry0/m3e-base",
model_kwargs = {'device': 'cuda'})


 
llm = ChatOpenAI(
    streaming=True,
    verbose=True,
    # callbacks=[callback],
    openai_api_key="none",
    openai_api_base="http://127.0.0.1:8000/v1",
    model_name="/Qwen-7B-Chat"
)
def information_extraction(text_content, prompt_object=None):
    if prompt_object is None:
        prompt_object = {}
    
    num_tokens = llm.get_num_tokens(text_content)
    print(f"=============本次分析token数量为:{num_tokens}==============")
    text_splitter = RecursiveCharacterTextSplitter(separators=["\n\n", "\n"], chunk_size=200, chunk_overlap=100)

    # 将文本按照指定的方式进行分割
    chunks = text_splitter.split_text(text_content)

    # 创建包含content字段的字典并保存在数组中
    examples = [{"content": chunk} for chunk in chunks]

    example_selector = SemanticSimilarityExampleSelector.from_examples(
        examples,
        # 这是用于生成用于测量语义相似性的嵌入的嵌入类
        embeddings,
        # 这是用于存储联入和进行相似性搜索的 VectorStore 类,
        FAISS,
        # 最想的要的示例要几个
        k=3
    )
    # 模板
    example_prompt = PromptTemplate(
        input_variables=["content"],
        template="信息提取:\n{content}",
    )
    # 选择示例的模板
    similar_prompt = FewShotPromptTemplate(
        example_selector=example_selector,
        example_prompt=example_prompt,
        prefix="根据下面信息提取,找出相关内容",
        suffix="信息提取要点:{noun}\n",
        input_variables=["noun"],
    )
    my_noun=prompt_object.get('content')
    # 显示示例
    output=similar_prompt.format(noun=my_noun)
    return output
if __name__ == '__main__':
    with open('wendang.txt', 'r', encoding="utf-8") as file:
        text = file.read()
    prompt_object={'content':'添加微信'}
    out=information_extraction(text,prompt_object)
    print(out)

在这里插入图片描述

流处理

只要在声明的地方加入streaming和callbacks

from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler
chat = ChatOpenAI(streaming=True, callbacks=[StreamingStdOutCallbackHandler()])
from langchain.chat_models import ChatOpenAI
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain
from langchain.prompts.chat import (
    ChatPromptTemplate,
    SystemMessagePromptTemplate,
    AIMessagePromptTemplate,
    HumanMessagePromptTemplate,
)
from langchain.schema import (
    AIMessage,
    HumanMessage,
    SystemMessage
)

from langchain.chat_models import ChatOpenAI

from langchain.schema import HumanMessage
from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler
chat = ChatOpenAI(streaming=True, callbacks=[StreamingStdOutCallbackHandler()],
    verbose=True,
    # callbacks=[callback],
    openai_api_key="none",
    openai_api_base="http://127.0.0.1:8000/v1",
    model_name="Qwen-7B-Chat"
)
resp = chat([HumanMessage(content="你好,你是谁")])
print(resp)

然后就在控制台一个字一个字打印
在这里插入图片描述

关于我-一个默默打工小孩

我是去年本科计算机毕业的,一直在前进。不存在商业化博客,乱七八糟的。
如果帮到大家了,或者遇到什么麻烦欢迎和我一起讨论
18956043585(微信同号)
如果解决你的麻烦,也欢迎在这里留下你的兴奋
目标是2天一更新,继续加油吧

  • 33
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
根据引用中的内容,JSONDecodeError: Expecting value: line 1 column 1 (char 0) 是一个常见的bug。这个错误通常是由于尝试解析一个空的或无效的JSON字符串所导致的。这可能是由于请求返回的响应中没有有效的JSON数据造成的。 根据引用中的代码示例,你在使用docker上的langchain时,可能会遇到这个错误。这段代码使用requests库发送一个GET请求,并尝试将响应的JSON数据解析为Python对象。但是,如果返回的响应不是有效的JSON格式,就会引发JSONDecodeError。 要解决这个问题,你可以检查你的请求是否返回了有效的JSON数据。你可以通过检查响应的状态码来确定请求是否成功,并使用try-except语句来处理可能的JSONDecodeError异常。此外,你还可以使用try-except语句来捕获这个错误,并在发生错误时采取适当的处理措施,例如打印错误消息或返回默认值。 以下是一个示例代码,演示如何处理这个错误: ``` import requests import json try: response = requests.get(url="http://www.example.com", headers=headers) response.raise_for_status() result = json.loads(response.text) # 处理结果 except requests.exceptions.HTTPError as err: print(f"HTTP请求错误: {err}") except json.JSONDecodeError: print("无效的JSON数据") # 处理错误 ``` 这段代码首先发送一个GET请求,并检查响应的状态码。如果状态码表示请求成功,则尝试将响应的JSON数据解析为Python对象。如果解析失败,就会捕获JSONDecodeError,并打印出一个错误消息。你可以根据你的需求来处理这个错误,例如打印错误消息或返回一个默认值。 希望这个解答能对你有所帮助!<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [小白遇到requests.exceptions.JSONDecodeError: Expecting value: line 1 column 1 (char 0)求解决](https://blog.csdn.net/hc7265680/article/details/128763071)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Docker容器服务输出json报错:json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)](https://blog.csdn.net/pearl8899/article/details/116572664)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代码浪人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值