大模型应用实战1——GLM4的原理与应用(用大模型做游戏npc制作)

作者 : admin 本文共4678个字,预计阅读时间需要12分钟 发布时间: 2024-06-17 共1人阅读

目前大模型有两种用法:

开源大模型(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     | 是   | 调用语言模型时,将当前对话信息列表作为提示输入给模型, 按照 `{\ 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}] 

本站无任何商业行为
个人在线分享 » 大模型应用实战1——GLM4的原理与应用(用大模型做游戏npc制作)
E-->