文章目录
- 上一节内容
- 学习目标:模型(models)
- 学习内容一:模型分类
- 学习内容二:不同模型实战
- 3.1 Chat-聊天模型
- 3.1.1 声明
- 3.1.2 Chat-聊天类型实战
- 3.1.2.1 AIMessage(AI 消息)
- 3.1.2.2 HumanMessage(用户消息)
- 3.1.2.3 SystemMessage(系统消息)
- 3.1.2.4 ChatMessage(聊天消息)
- 流处理
- 关于我-一个默默打工小孩
上一节内容
LangChain学习一:入门-本地化部署-接入大模型
http://t.csdnimg.cn/aqx9W
学习目标:模型(models)
LangChain 支持的各种模型类型和模型集成。
学习内容一:模型分类
- LLMs(大语言模型)
- Chat 聊天模型
- 文本嵌入模型
LLMs:这些模型将文本字符串作为输入,并返回文本字符串作为输出
聊天模型:这些模型通常由语言模型支持,但它们的API更加结构化。 具体来说,这些模型将聊天消息列表作为输入,并返回聊天消息。
文本嵌入模型:这些模型将文本作为输入,并返回一个浮点数列表
学习内容二:不同模型实战
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目前支持的消息类型
- AIMessage
- HumanMessage
- SystemMessage
- 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 或真实用户的消息。
流处理
只要在声明的地方加入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天一更新,继续加油吧