在之前的文章里,已经尝试过 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