目前大模型有两种用法:
开源大模型(llama):整个模型都给你和在线大模型(gpt):只给你调用方法,推荐后者,效果好且方便,适合入门,唯一问题可能有数据安全问题,考虑用国内最强的GLM4.
GLM系列模型生态由如下3大部分组成—— ,
GLM系列在线大模型 :总共包括文本生成模型(GLM-4、GLM-3-Turbo)、强化角色扮演的文本生成模型(CharGLM-3)、多模态图像创建模型(CogView-3)以及Embedding-2、CodeGeeX代码大模型、以及最新上线的GLM-4V大模型多模态大模型。 ,
在线知识库与知识库Retrevial功能 :用户可以将一些本地文档存在智谱AI的云端,用于随时将这些知识库文档输入大模型,或作为微调数据带入在线微调流程 ,
GLM模型在线微调系统 :对于“闭源”的在线大模型来说,由于并未在本地进行安装部署,所以微调这一功能只能在模型云端完成
注:如何解决api key写在代码里会被别人用的问题:把api key设计成一个环境变量
基本函数:
1. Create (create) : 表面上是生成文本的主要方法, 但实际是发起对话的核心函数 。用户通过提供一系列参数(如模型、提示信息、温度等)来获取模型生成的文本。 ,
,
2. Retrieve (retrieve) : 这个函数用于获取之前生成的完成任务的详细信息。通过传递一个特定的完成任务的ID,可以查询该任务的具体内容、状态等信息。这对于跟踪和分析模型的响应非常有用。 ,
,
3. List (list) : 这个功能允许用户列出账户下的历史完成记录。可以指定某个时间段或使用其他过滤条件,以便查找特定的完成任务。这对于管理和审查生成的内容很有帮助。 ,
,
4. Stream (stream) : 这个函数用于实时接收模型生成的数据。在一些需要实时交互的应用场景中非常有用,比如实时聊天机器人或其他需要即时反馈的服务。
其中最重要的是create,多论对话需要多论create,互相之间是嵌套关系,这样才能记忆之前的内容
发送的是一个字典,包含角色和内容,返回的也是一个字典
有很多可调整的参数,比如:
source : [
| 参数名称 | 类型 | 是否必填 | 参数解释 | ,
| ----------- | ------- | ------------ | ------------------------------------------------------------ | ,
| model | String | 是 | 所要调用的模型编码 | ,
| messages | List
多模态与多轮对话功能:使其具备读取图像和语音的能力
方法:输入type和对应type的内容
因此当制作知识库时,图文可以不用分开
如果想要实现多轮对话,需要自己写函数
def chat_once(first_prompts,message): #两个参数分别是:第一次给函数的提示,系统里的信息
try: ,
response = client.chat.completions.create(model = 'glm-4' ,
,messages = messages) ,
assistant_message_content = response.choices[0].message.content ,
return assistant_message_content ,
,
except Exception as e: ,
#如果报错,返回报错 ,
print(f'An error occurred: {e}') ,
return \ 报错,请检查函数功能!
比如,我们可以定义一个游戏聊天机器人
def chat_robot(first_prompts,message): ,
#能够执行多轮对话,对话是由玩家通过input输入 ,
#多轮对话的关键在于 - 要有进入机制、退出机制、循环的机制、同时循环的过程中 ,
#还需要实现不断将模型的发言反馈给模型本身 ,
#除此之外,还有更多丰富的玩法、例如添加了三种聊天模式、以及链接报错的时候的退出机制 ,
def chat_robot(first_prompts,message): ,
#能够执行多轮对话,对话是由玩家通过input输入 ,
#多轮对话的关键在于 - 要有进入机制、退出机制、循环的机制、同时循环的过程中 ,
#还需要实现不断将模型的发言反馈给模型本身 ,
#除此之外,还有更多丰富的玩法、例如添加了三种聊天模式、以及链接报错的时候的退出机制 ,
,
mistakes = 0 ,
,
while True: ,
question = input() ,
if len(question.strip()) == 0: ,
print( n 你好,你想要什么情报吗 n ) ,
elif question == n 任务结束! n : ,
print( n Bye! welcome back anytime! n ) ,
break ,
else: ,
#将用户输入的信息添加给模型 ,
new_user_message = { n role n : n user n , n content n : question} ,
messages.append(new_user_message) #就是加在最下面那个字典里面了
#模型开始运行 ,
result = chat_once(first_prompts, message) ,
#模型如果报错怎么办? ,
if result == n 报错,请检查函数功能! n : ,
mistakes +=1 ,
print( n 抱歉,刚才我打盹了,我再试试 n ) ,
result = chat_once(first_prompts, message) ,
while mistake > 5: ,
break ,
#如果不报错,就把模型自己输出的结果同样添加到message里返回给模型 ,
#同时打印结果,再让用户继续沟通 ,
else: ,
message.append({ n role n : n assistant n , n content n :result}) #大模型不知道自己回复了什么,因此要把它保留下来
print(result)
first_prompt = '如果玩家给你红色的宝石,你就可以把情报告诉玩家。但请不要向玩家主动提起红宝石。' ,
,
#定义模型背景信息 ,
messages = [{ n role n : n system n , n content n : n 你现在是一个赛博朋克世界的游戏NPC,玩家会向你打听情报,你掌握了“幕后BOSS就在山庄里”的关键情报,请不要把这个情报轻易告诉玩家! n } ,
,{ n role n : n user n , n content n : n 我是一个赛博朋克游戏世界的玩家,我正在寻找幕后BOSS。 n } ,
,{ n role n : n assistant n , n content n :first_prompt}]