目前大模型有两种用法:
开源大模型(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<Object> | 是 | 调用语言模型时,将当前对话信息列表作为提示输入给模型, 按照 `{\ role\ : \ user\ , \ content\ : \ 你好\ }` 的json 数组形式进行传参; 可能的消息类型包括 System message、User message、Assistant message 和 Tool message。 | ,
| request_id | String | 否 | 由用户端传参,需保证唯一性;用于区分每次请求的唯一标识,用户端不传时平台会默认生成。 | ,
| do_sample | Boolean | 否 | do_sample 为 true 时启用采样策略,do_sample 为 false 时采样策略 temperature、top_p 将不生效 | ,
| stream | Boolean | 否 | 使用同步调用时,此参数应当设置为 Fasle 或者省略。表示模型生成完所有内容后一次性返回所有内容。如果设置为 True,模型将通过标准 Event Stream ,逐块返回模型生成内容。Event Stream 结束时会返回一条`data: [DONE]`消息。 | ,
| temperature | Float | 否 | 采样温度,控制输出的随机性,必须为正数取值范围是:(0.0,1],不能等于 0,默认值为 0.95,值越大,会使输出更随机,更具创造性;值越小,输出会更加稳定或确定建议您根据应用场景调整 top_p 或 temperature 参数,但不要同时调整两个参数 | ,
| top_p | Float | 否 | 用温度取样的另一种方法,称为核取样 取值范围是:`(0.0, 1.0)` 开区间,不能等于 0 或 1,默认值为 0.7 模型考虑具有 `top_p` 概率质量tokens的结果 例如:0.1 意味着模型解码器只考虑从前 10% 的概率的候选集中取tokens 建议您根据应用场景调整 `top_p` 或 `temperature` 参数,但不要同时调整两个参数 | ,
| max_tokens | Integer | 否 | 模型输出最大tokens | ,
| stop | List | 否 | 模型在遇到stop所制定的字符时将停止生成,目前仅支持单个停止词,格式为`[\ stop_word1\ ]` | ,
| tools | List | 否 | 可供模型调用的工具列表,tools字段会计算 tokens ,同样受到tokens长度的限制 | ,
| type | String | 是 | 工具类型,目前支持`function`、`retrieval`、`web_search` | ,
| function | Object | 是 | 仅当工具类型为`function`时补充 | ,
| retrieval | Object | | 仅当工具类型为`retrieval`时补充 | ,
| web_search | Object | | 仅当工具类型为`web_search`时补充,如果tools中存在类型retrieval,此时web_search不生效。 | ,
| tool_choice | String 或 Object | 否 | 用于控制模型是如何选择要调用的函数,仅当工具类型为function时补充。默认为auto,当前仅支持auto |
多模态与多轮对话功能:使其具备读取图像和语音的能力
方法:输入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}]