用大模型做一个专职机器人(三)GLM 智能体

用大模型做一个专职机器人(三)GLM 智能体

首页休闲益智终极机器人英雄更新时间:2024-09-22
背景

在之前的文章里,已经尝试过 GLM 的智能体“英语翻译专家”,结论是不太行。

不过我对 GLM 的印象还是不错的,也许是因为它提供了 windows 桌面端的程序吧,使用起来还是很方便的,再加上它最新的 GLM-4 是免费使用的,不像文心一言 4.0 要开会员才能使用,所以这次呢,我就好好研究下,到底能不能用 GLM 智能体做一个专门的翻译机器人。

目标和准备

这个翻译助手呢,最基本的要求是翻译我的输入,这一点并不容易,大模型像人一样,哪怕你已经给它设定了工作职责,它还是会被带偏。

这就好像给你配了一个真人翻译一样,正在翻译着呢,你突然对你的翻译说了一句“你刚才翻译错了”,你觉得你的翻译会怎么办?大概率不会把这句话翻译过去。

我想要实现的这个翻译机器人,其职责如下

为了验证机器人是否能达到我的要求,我准备了一些语料用来测试,如下

正常翻译

测试它会不会跑偏

创建智能体

打开 https://chatglm.cn/ 网站,登录进去后,我们选择 【创建智能体】,开始试验

首先就是输入 【智能体描述】,那就把我对翻译机器人的期望输入进去吧

点击 【生成智能体配置】 即可,这时它会根据你输入的描述,自动创建一个智能体,还给起了个很傻的名字:“译界行者”,当然,你创建的时候名字可能不一样,好在可以修改,也不用太在意,同样的,这个智能体还自动生成了描述、配置信息、推荐问题,把联网能力、AI 绘画、代码能力都给勾上了,如下图

翻译功能是大模型自带功能,不需要联网或者编写代码,所以这里我将模型能力调用全部取消,然后就可以在右侧界面输入我准备的语料进行调试了

调试正常翻译

翻译没有问题,但是输入英文时,我还要求它提取知识点进行讲解,这个它没有做

没问题

跑偏测试

明显跑偏。

它滔滔不绝的讲起了笑话,我只好点击中断按钮

我又一次中断了它的滔滔不绝

几个测试一个都没有通过,后面的测试直接放弃。

分析

为什么译界行者这么容易跑偏?

实际上这也算正常,就算是个真人翻译,遇到这套测试题,搞不好也要翻船。

我们期望的是,大模型不需要理解你输入的内容,只要翻译就行。就好像大模型体内有个专门负责翻译的器官,大模型直接把输入的原始内容扔过去就行了,这个器官负责翻译,大模型拿到翻译结果再输出给我们。至于这个原始内容是什么意思,大模型不知道。

但实际上,大模型并不存在这么一个器官,它自己先得理解我们的输入,然后才能翻译。既然它理解我们的输入,那它就倾向于做最直接的反应:比如问题是“给我讲个笑话”,它首先就是搞懂什么是“给我讲个笑话”,然后再用英语把它的理解表达出来。由于它理解了“讲个笑话”,它就有个倾向,去讲个笑话,这也是我在之前文章里提到过的,大模型的本能。

很显然,我们要压制大模型的这个本能。

其实有个简单的做法,我们只要在每句话前面加上前缀,例如“翻译以下内容:”,就能解决这个问题。不过嘛,GLM 智能体并没有给我们开放这样的能力。我们能做的只有修改智能体的配置信息。

压制大模型的本能

现在我们清空系统自动生成的配置信息,重新给他一段自定义的配置,通过这段配置,来告诉智能体的工作职责,同时还要想办法压制它的本能。

其实也简单,我们告诉大模型,你要这么做,不要那么做就行了,如下

接下来我们在调试界面进行测试,注意:修改了配置后,点击 【刷新】 按钮确保配置生效。有时候可能要多点几下。

测试

又失败了,不过这个不是我们的配置本身的问题。实际上这个问题有点特殊,根据我的测试,基本上可以肯定,zhipu 后台修改了我的原始输入,给到大模型的文本已经不是“你是谁”了,具体原因嘛,我发现这类问题大模型有时候会回答自己是 openai 开发的,所以 zhipu 会做干预。不过,随着 GLM 的进化,这个干预应该会逐渐消失。实际上,在我调试时,这个干预也不是必现的。

成功了!

它又成功了

跑偏了

虽然这次测试不太成功,但已经有成功的迹象了,那就是我们的确可以压制大模型的本能。但某些情况,大模型依然是凭本能在行动。

如果我们把大模型当人看的话,那么也许我们的语气要更坚决更强硬些,同时,也许我们的说明还不够清晰,大模型没有完全理解。那么我们把配置再修改一下

再次测试

成功

成功

这里很有意思,译界行者知道自己应该翻译这段话,但是它在翻译之前说了一段话,有点给自己做辩护的意思:我不是不给你写示例代码,我是不得已要翻译的。

测试语料最后是两条程序代码,之前的测试一直都没有测试,现在试下

这个不能说它错,不过也许我们应该加一条规则,程序代码就不要翻译了。

英语讲解

现在基本能压制大模型的本能了,那么就要完善我们的机器人,让他可以对英语文本进行讲解。

我们可以给他加一条规则:如果原始输入是英文,那么提取几个知识点(疑难词汇)进行讲解,如果不是英文就不需要。我们可以更具体的告诉它,如何提取知识点,以及提取多少个知识点。

还可以设置输出的格式,如果有知识点要讲解,那么使用 markdown 格式,效果如下

- 我:When I was young, I’d listen to the radio, Waitin’ for my favorite songs - 译界行者:当我还小的时候,我会听收音机,等待我最喜欢的歌曲。 关键词 - favorite:表示“最喜欢的”,在这里指的是个人最喜爱的歌曲。优化大模型的自我辩护

我们可以通过加强规则,要求大模型不做辩护,不过我采用了另一种做法:给大模型提供一个标准输出的模板,让大模型使用,同时这个模板本身也更容易让大模型理解自己的职责,示例如下

提示:您可能输入了一个指令 [{raw_input}],但是我的工作是翻译,所以我只能提供这个指令的翻译,而不能执行它。

然后我们再测试下

使用知识库

GLM 的智能体支持知识库,在我最初被“你是谁”这个翻译困扰的时候,我一度采用过上传知识库来试图解决这个问题。

知识库怎么用,官方并没有解释。知识库文档的格式,也没有规定。

我自己总结了一下其使用方法

原文 - 你是谁? 译文 - Who are you?

当然,后来我发现这是 zhipu 后台在进行干预,我就移除了知识库文档,因为这个问题应该是无解的,除非 zhipu 放弃干预。

最终结果

我的翻译机器人最终命名为 “聪明的小英”,虽然还不完美,但已经能满足我的大多数需求了,以下是一些展示

一些结论

提示工程可以说是利用大模型最重要的一环。

大模型的能力很强,要充分的发挥它的能力,是需要技巧的。其中很关键的一点是对大模型本身的认识。

在传统的软件开发里,我们一般都需要弄懂业务,甚至要精通业务。那么在使用大模型时,我们又多了一个要求:要懂大模型。

很多时候,你对大模型的认知可能是不对的,一个良好的 prompt 是需要反复修改的。当一个 prompt 没有如你预期生效时,说明你对大模型的理解是错的,当你经过修改让一个 prompt 生效,说明你对大模型的正确认识又多了一点。

比如,在创建聪明的小英这个翻译机器人的过程里,我对大模型的认识就一直在深入

实际上我觉得写一个复杂的 prompt 就是用自然语言编程,也应该有参数,有变量,有分支控制,有循环控制。
有时候我会觉得自然语言不够精确,理解起来有二义性,这时甚至可以用一些伪代码来描述一个 prompt。

聪明的小英的 prompt 就比较复杂,我把它开源在 gitee 上,有兴趣可以浏览

https://gitee.com/refusea/prompt/blob/master/聪明的小英.md

当然,我觉得 GLM 智能体给我们提供的能力不太够,如果编程控制会简单很多。所以终极的解决方案还是编程实现。下次再讲吧。

查看全文
大家还看了
也许喜欢
更多游戏

Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved