GLM调用三种方式及多轮对话
智谱AI开放平台SDK安装。
智谱AI GLM
企业中一般使用 环境变量 配置API_KEY
client.chat.completions.create 参数:
该API底层原理——发送HTTP请求
from zhipuai import ZhipuAI import os # 使用GLM自己的# api_key = os.getenv('API_KEY') # print(api_key) client = ZhipuAI(api_key='0884a4262379e6b9e98d08be606f2192.TOaCwXTLNYo1GlRM')response = client.chat.completions.create(model='glm-4-0520',messages=[{'role': "user", 'content': '请介绍一下大模型的定义?'}],stream=True )# 流试的输出 for s in response:print(s.choices[0].delta)#print(s.choices[0].delta.content)# print(response) # # print(response.choices[0].message.content)
非流式输出(stream!=True)response:
流式输出:一个token 一个token返回。需要循环打印结果。
GLM OpenAI API
from openai import OpenAI import os # 使用OpenAI的API# api_key = os.getenv('API_KEY') # print(api_key) client = OpenAI(api_key='0884a4262379e6b9e98d08be606f2192.TOaCwXTLNYo1GlRM',base_url='https://open.bigmodel.cn/api/paas/v4/' )response = client.chat.completions.create(model='glm-4-0520',messages=[{'role': "user", 'content': '北京天气怎么样?'}],# stream=True )print(response)print(response.choices[0].message.content)
Langchain调用
多轮对话
创建模型
import osfrom langchain_community.chat_message_histories import ChatMessageHistory from langchain_core.messages import HumanMessage from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder from langchain_core.runnables import RunnableWithMessageHistory from langchain_openai import ChatOpenAI# 聊天机器人案例 # 创建模型 model = ChatOpenAI(model='glm-4-0520',temperature='0.6',api_key='0884a4262379e6b9e98d08be606f2192.TOaCwXTLNYo1GlRM',base_url='https://open.bigmodel.cn/api/paas/v4/' )
Prompt&Chain
# 定义提示模板 prompt_template = ChatPromptTemplate.from_messages([('system', '你是一个乐于助人的助手。用{language}尽你所能回答所有问题。'),MessagesPlaceholder(variable_name='my_msg') ])# 得到链 chain = prompt_template | model# 保存聊天的历史记录 store = {} # 所有用户的聊天记录都保存到store。key: sessionId,value: 历史聊天记录对象# 此函数预期将接收一个session_id并返回一个消息历史记录对象。 def get_session_history(session_id: str):if session_id not in store:store[session_id] = ChatMessageHistory()return store[session_id]do_message = RunnableWithMessageHistory(chain,get_session_history,input_messages_key='my_msg' # 每次聊天时候发送msg的key )config = {'configurable': {'session_id': 'zs1234'}} # 给当前会话定义一个sessionId# 第一轮 resp1 = do_message.invoke({'my_msg': [HumanMessage(content='你好啊! 我是LaoXiao')],'language': '中文'},config=config )print(resp1.content)# 第二轮 resp2 = do_message.invoke({'my_msg': [HumanMessage(content='请问:我的名字是什么?')],'language': '中文'},config=config )print(resp2.content)# 第3轮: 返回的数据是流式的 config = {'configurable': {'session_id': 'zs1234'}} # 给当前会话定义一个sessionId for resp in do_message.stream({'my_msg': [HumanMessage(content='请给我讲一个笑话?')], 'language': 'English'},config=config):# 每一次resp都是一个tokenprint(resp.content, end='')
GLM+向量库
此处和Langchain-构建向量数据库和检索器-CSDN博客一样,只不过这里用的GLM,编码器用的 魔塔社区ModelScopeEmbeddings
import osfrom langchain_chroma import Chroma from langchain_community.embeddings import ModelScopeEmbeddings from langchain_core.documents import Document from langchain_core.messages import HumanMessage from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder from langchain_core.runnables import RunnableWithMessageHistory, RunnableLambda, RunnablePassthrough from langchain_openai import ChatOpenAI# 聊天机器人案例 # 创建模型 model = ChatOpenAI(model='glm-4-0520',temperature=0,api_key='0884a4262379e6b9e98d08be606f2192.TOaCwXTLNYo1GlRM',base_url='https://open.bigmodel.cn/api/paas/v4/' )# 如果未来我们采用国内大模型,相关的其他工具最好也是国内 # https://www.modelscope.cn/models/iic/nlp_gte_sentence-embedding_chinese-large/summary # 在中文环境下推荐使用的Embeddingsembeddings = ModelScopeEmbeddings(model_id='iic/nlp_gte_sentence-embedding_chinese-base')# 实例化一个向量数空间 vector_store = Chroma.from_documents(documents, embedding=embeddings)