ChatGPT使用中的常见错误和解决方法

释放双眼,带上耳机,听听看~!
本文总结了ChatGPT在日常使用中出现的各类错误回答,以及对应的解决方法,帮助用户更好地理解和应对ChatGPT的局限性。

文章归纳了 ChatGPT 在日常使用中的各类错误回答,如时区设置、法律案例、代码实现、图像识别等都曾出现过失误,虽然它看似智能,但仍存在局限。

GPT-4,这一人工智能的杰出代表,已经在许多方面超越了普通人类。我的日常也原来越离不开 ChatGPT 了,它大大提高了日常的工作效率。然而,在使用中发现 ChatGPT 还是有时会犯一些 “幼稚” 的错误,就像一个正在成长的孩子偶尔会出现的调皮行为。

本文记录日常使用 ChatGPT 过程中发现的一些错误回答,就像记录孩子成长过程中的出丑时刻一样。等到有一天 AI “长大成人”,也能一起回顾这些 “小时候” 的出丑时刻。

小盛律师做一个简单的分类筛选,找出里面有用的信息。于是写了一个脚本,用 ChatGPT 来执行一些分类和摘要总结的任务,结果发现对于某些内容为空的记录,ChatGPT 给我一个很奇怪的分类和汇总。

我的提示词是这样的:

你是一个中国的专业律师,熟悉民法典和其他现行中国法律。
现在你的任务是对用户咨询的问题进行归类、总结,并尝试回答。
你需要输出一个 json,包括下面字段:

"isneedlawer": true/false, # 用户是否需要律师的帮忙
"customreplycontent": ""# 针对问题给出的一个法律建议,如果无法律建议,则为空字符串,
"cityzone": ""# 问题涉及的地点,精确到城市即可,比如广州市。如何没有地点信息,则为空字符串,
"abstract": "" # 问题的简单概述,不超过 200 字,要包含用户主要传达的信息"

输出一定要是 json,如果做不到,那么请输出一个空的 json。
用户咨询的内容如下:
{seperator}{question}{seperator}

其中 seperator 是分隔符,question 则是从其他地方读到的咨询内容。如果咨询内容不为空,则一切符合预期,但是一旦咨询内容为空,ChatGPT 就会返回一个很奇怪的结果,如下图:

Langchain 是一个最近刚出来的 LLM 开发框架,ChatGPT 没有其相关知识。为了能够让它回答 langchain 的问题,我开了 Webpolit 插件,并且提供给他文档地址,然后提问如下:

参考 python.langchain.com/docs/get_st… 这里 langchain 的文档,帮我给指定中文文本分类,提取下面信息,并输出 json。

cityzone:提取文本里有提到的位置信息
customreplycontent:生成一段回复

然后 GPT4 就自信的说,根据文档和需求,可以用下面的脚本来完成任务。

from langchain import Langchain


lc = Langchain()


@lc.register
def analyze_text(text: str) -> dict:
    cityzone = 提取位置信息(text)
    customreplycontent = 生成一段回复(text)
    return {
        "cityzone": cityzone,
        "customreplycontent": customreplycontent
    }


@lc.register
def 提取位置信息(text: str) -> str:
    
    return "上海"

这个大聪明怎么忽然这么笨啦?提取位置信息(text) 这都能拿出来作为 python 代码,也太敷衍了。就这还大言不惭,让我通过安装 Langchain 库并运行上述代码来测试这个脚本。没办法,只好提醒他用插件重新读文档来实现,终于变聪明了。

Code Interpreter 帮我写个简单的代码来处理一下。于是给它传了图片,然后提问:

如何用 python 识别这个图片里红色方框的坐标位置,并且把里面的内容替换为其他内容

ChatGPT 给出了自己的步骤,看起来是很合理:

  1. 读取图像。
  2. 识别红色方框的坐标位置。
  3. 截取该区域并替换为所需内容。
  4. 将替换的内容粘贴回原始图像。

然后就是第一步,识别红色方框的坐标位置。信誓旦旦说成功识别了红色方框的坐标位置,它位于图像的 (562,474) 位置,并具有 142 的宽度和 172 的高度。还好心好意地用蓝色方框在图片上标记了出来,如下图:

Graphviz 生成的,还给出了所有配图的源码 redisbook1e-gallery。当时就觉得用源码生成图片也太酷了,还打开 Graphviz 的官网看了下,奈何文档看起来太多了,上手需要点时间,就搁置了。

最近刚好想用 Graphviz 画一个简单的图,想着让 ChatGPT 生成源码,岂不快哉?动动嘴图片就出来了,这多好。于是就提问如下:

你是一个 Graphviz 绘图的专家,帮我用 markdown 输出下面描述中的图片的制作代码,要求绘的图简单清晰,结构工整。

图片描述:有一个 int 的链表,里面从头往尾部元素值分别是 1 ,2,3,… ,100,其中有一个箭头指向头部,箭头上有文字 head,有一个带有标题 tail 的箭头指向链表尾部。

ChatGPT 果然会!给出了一个不错的源码,还好心好意提醒我可以将此代码粘贴到一个 Graphviz 编辑器(例如 WebGraphviz)中,然后生成链表的图像。

digraph LinkedList {
    rankdir=LR;
    node [shape=record];
    
    // 定义头部和尾部标签
    head [label="head", shape=plaintext];
    tail [label="tail", shape=plaintext];
    
    // 定义链表节点
    node1 [label="{ 1 | <p1> }"];
    node2 [label="{ 2 | <p2> }"];
    node3 [label="{ 3 | <p3> }"];
    ellipsis [label="...", shape=plaintext];
    node100 [label="{ 100 | }"];
    
    // 定义箭头和连接
    head -> node1 [dir=back, constraint=false];
    node1:p1 -> node2;
    node2:p2 -> node3;
    node3:p3 -> ellipsis;
    ellipsis -> node100;
    tail -> node100 [dir=back, constraint=false];
    
    // 定义排列
    { rank=same; head tail }
}

于是我就拿源码贴过去,发现语法都有错误,生成的图片也不对。head 和 tail 画不对,还多了个 svg 出来,如下图了:

Code Interpreter 还是很好用的,不用自己写代码就能用来分析数据,并进行可视化。有次使用过程中,需要对数据中的中文内容进行分词,想到了 jieba 分词,但是怕 ChatGPT 的代码解释器环境没有安装这个包,于是就问了下 ChatGPT:

你可以用一些中文分词库,比如 jieba 吗?

ChatGPT 就自信回答当然可以使用 jieba 分词库来更准确地分析中文文本,还说这个库能够更好地识别中文词汇和短语。然后就开始刷刷刷写代码了:

import jieba


jieba_words = jieba.cut(consultation_texts)


jieba_word_counts = Counter(jieba_words)


top_50_jieba_words = [word for word, _ in jieba_word_counts.most_common(50) if word.strip() and word not in '.,;:!?。,;:!?']


top_50_jieba_words

然后 ChatGPT 就开始运行代码,果不其然,发现没有安装 jieba 这个库 No module named 'jieba'。然后终于意识到当前环境中没有安装 jieba 分词库,所以无法直接使用。

ChatGPT使用中的常见错误和解决方法Code interpreter 加载 jieba 库失败

这个例子其实 AI 的表现也是可以理解的,毕竟这种错误人也经常犯,经常是代码跑一般才发现没有安装某个库。不过 AI 还是可以表现的更好些,可以在跑失败的时候,告诉我怎么手动在当前环境安装这个库。毕竟,你都知道我想用这个库,而你也有方法安装这个库,那为啥不告诉我呢?看来还是不够聪明呀~

Clickhouse 函数

背景是这样的,我想用 Clickhouse 写一个查询语句,将一个按照位存储的 field 字段,转换成数组出来。每一位 (从低位到高位) 分别对应:

解释
0 CN
1 EN
2 HK
3 JA

对于数字 13 (1101),我想转换为 [CN, HK, JA],提示词如下:

clickhsoue 里,我查找到了一个 field 字段,是个二进制按位记录的 flag 位,如果转换为一个数组?

& 1 = 1 , CN
& 2 = 1 , EN

然后让我这样操作:

arrayJoin(arrayFilter(x -> x != '', [if(field & 1, 'CN', ''), if(field & 2, 'EN', '')])) AS CombinedFlags

我就开心的拿去测了下,发现不对,最简化一个测试 sql: select 5&1,发现也报错了,于是直接提示:

select 5&1
Error running query: Code: 62, e.displayText() = DB::Exception: Syntax error: failed at position 335 (‘&’) (line 5, col 9): &1 FORMAT JSON. Unrecognized token: ‘&’ (version 21.8.12.1)

然后 ChatGPT 就认错了,说疏忽了 ClickHouse 的 SQL 语法细节。在 ClickHouse 中,你需要使用 bitAnd 函数来进行按位与运算。例如,要检查数字 5 的第 1 位是否为 1,可以这样写:

SELECT bitAnd(5, 1) AS Result

我就又拿来试,发现还是不对。想了下,这里不是求与,应该是测试某一位是否是 1,然后把是 1 的全部拼接起来。不再靠 ChatGPT 了,直接去查官方文档,发现了函数 bitTest,这个可以测试某一位是否是 1。最后写了下面的 SQL(可以用 13 替换 field 来测试):

select arrayFilter(x -> x != '', [if(bitTest(field, 0)=1, 'CN', ''), 
    if(bitTest(field, 1)=1, 'EN', ''),
    if(bitTest(field, 2)=1, 'HK', ''),
    if(bitTest(field, 3)=1, 'JA', '')]) AS combine

通过这些日常真实案例,我们可以看到当前 ChatGPT 在回答一些问题时,仍会胡编乱造一些看起来很正确的答案。但是我们不应因此否定 ChatGPT 的价值,更不应该弃之不用。认识到其局限并合理使用,才是我们应有的态度。

本网站的内容主要来自互联网上的各种资源,仅供参考和信息分享之用,不代表本网站拥有相关版权或知识产权。如您认为内容侵犯您的权益,请联系我们,我们将尽快采取行动,包括删除或更正。
AI教程

使用LangChain和Gradio构建阿里云灵积接口调用Web服务demo

2023-11-28 11:50:14

AI教程

langchain源码阅读-代理模块详解和示例

2023-11-28 11:58:14

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索