我之前发过一个blog,是关于unity怎么接入大语言模型的,主要是根据b站的一个up发布的视频来自己改写的。后来经过一系列的代码学习和GPT的使用,发现这种简单的功能用GPT很容易的实现。
目前我这篇文章就主要提一些思路,以及GPT如何帮助我们写代码,实现目标功能。
1.LLM访问讲解.
首先我们需要知道的是LLM的一个使用流程就是
也就是说我们要在任何一个平台或者系统中集成LLM,就只需要有这个我们要访问的大语言模型LLM的api接口,就可以实现访问大语言模型了。至于输入输出的文本在这过程中的变化,才是大家初学者烦恼的。
其实大家可以理解为LLM的api他只能识别一封申请书,你这封申请书不按格式写,他就会拒收,而且LLM它回复你的格式也是一个回复函,它也一定按它的格式写。而申请书和回复函的格式一般再LLM的官方文档里有,这里默认大家已经获得了一个API接口了,大家不知道在哪看官方文档,那么其实可以在接口http://*.**.***.**/8001这种后面加一个/docs来查看这个接口的说明。在POST这一栏下面明确的说明了两个信息:第一是接口http://*.**.***.**/8001后面加上/v1/chat/completions就可以进行LLM的访问了,第二就是这封申请书的格式是黑色部分所展示的。
然后我们就能开始进行我们的测试了:
Postman的api访问测试,操作步骤如图所示,关键设置这里给新手提一下,在该界面下,输入API,然后点击Body,再点击raw,格式选json,然后把申请书格式直接粘贴复制在下面框内。这里关于申请书(正式名称叫请求体),里面我们需要对信息进行填写,毕竟你光有格式不行,还得需要填写嘛,模型名称需要填写,这个根据你的LLM实际情况来填。然后就是就是content的内容了,这里的内容就是我们之前说的输入文本。最后把申请书填好这两个后点击send,就可以的到回复函了(响应体)。
2.输入文本和输出文本的处理
这一步也是最关键的一步吧,这里我就给大家分享一个简单的经验,关于使用GPT帮我们完成这一步。首先大家再看图理解一下文本处理的过程,这个过程我们直接用语言描述给GPT,就可以让GPT帮我们实现这个功能,也就是实现了访问GPT。
你可以参考我设计的问题来问GPT,让GPT帮你写代码:
你是Untiy的专家,请帮我写一个能在Unity中运行的函数,该函数的输入是:文本text1,输出是:文本text2。该函数的功能是访问api:###(这里填写你的LLM的接口),请求体是
{ "model": "####", "messages": [ { "role": "user", "content": "text1", "metadata": "string", "tools": [ {} ] } ], "temperature": 0.7, "top_p": 1, "max_tokens": 0, "stop": "string", "stream": false, "stop_token_ids": [ 0 ], "repetition_penalty": 1.1, "return_function_call": false }
函数输入的text1的内容用于替换"content": "text1"中的text1。
响应体是:
{ "model": "###", "object": "chat.completion", "choices": [ { "index": 0, "message": { "role": "assistant", "content": "text2", "metadata": null, "tools": null }, "finish_reason": "stop", "history": null } ], "created": 1710316555, "usage": { "prompt_tokens": 8, "total_tokens": 36, "completion_tokens": 28 } }
函数的输出:text2的内容来自于其中的"content": "text2",需要注意的是响应体和请求体都是json格式。
利用以上的prompt,基本GPT就能写出一个很好的脚本了。具体可能的意外情况或许都可以将问题粘贴到GPT中再次提问让他解决。最后就实现了在Unity中访问LLM。关于这个输入文本该怎么来,输入的文本该怎么使用,这些都可以让GPT帮我们实现,但是大家最好一步一步来,如果你直接问gpt:你帮我写一个脚本,通过读取输入框内的文本来访问API,最后在UI中出现的回答,这种复杂的代码逻辑可能GPT会出错,GPT3.5更加智障。
3.个人经验小Tip分享
给看到这里的新手分享一些关于LLM的小知识,
GPT的官方文档也提供了外部访问它的模型,但他一般就只提供了key,可能Api都不用,直接访问,但是现在不知道有没有发布unity的相关demo。但是GPT的key是有访问额度的,超出部分需要额外付费,而且不管任何LLM,key都需要付费。只有自己部署在本地才是免费的,比如chatglm。
之前教程都是单轮对话,多轮对话其实同理,在"messages":中其实大家看到了,他其实是一个可包含多对象的数组,里面可以插入多个花括号{},也就是多条文本信息,而LLM通过识别role的内容就能区分上下文文本中哪些对话使它说的。而关于一些LLM的教程视频里面老讲到的prompt,其实就是在中括号[]里面的第一个加一个role为“system”的角色,然后在后面加上prompt。这样保证接下来的所有对话内容都是基于这个prompt中进行的。举个例子的话就是下图所示,而且这个多轮对话可以保存历史聊天记录。
"messages": [ { "role": "user", "content": "你好", "metadata": "greeting", "tools": [] }, { "role": "assistant", "content": "你好!有什么可以帮助你的吗?", "metadata": "response to greeting", "tools": [] }, { "role": "user", "content": "我想了解更多关于电池的信息。", "metadata": "query", "tools": [] }, { "role": "assistant", "content": "当然可以。锂离子电池是目前广泛应用于电子设备的一种电池类型,它有着高能量密度、小体积和长寿命等优点。", "metadata": "response to query", "tools": [] } ]