书生实战营4:OpenCompass 评测、AI搜索试用和提示词工程

284 阅读4分钟

本次实验来自【第四期书生大模型实战营】,官网地址为:第四期书生大模型实战营

OpenCompass 评测大模型

OpenCompass是书生系列的大语言模型评测工具,提供Api模式评测和本地直接评测两种方式。本次实验我们需要完成两次评测。

实验1:使用 OpenCompass 评测浦语 API

实验步骤

首先使用OpenCompass评测API访问的大模型。这个过程只需要两步即可完成:

  1. 在model文件夹下,创建要评测的模型文件的配置。例如,这里在/opencompass/configs/models/openai下面创建puyu_api.py,写如下文件。
import os
from opencompass.models import OpenAISDK


internlm_url = 'https://internlm-chat.intern-ai.org.cn/puyu/api/v1/' # 你前面获得的 api 服务地址
internlm_api_key = os.getenv('INTERNLM_API_KEY')

models = [
    dict(
        # abbr='internlm2.5-latest',
        type=OpenAISDK,
        path='internlm2.5-latest', # 请求服务时的 model name
        # 换成自己申请的APIkey
        key=internlm_api_key, # API key
        openai_api_base=internlm_url, # 服务地址
        rpm_verbose=True, # 是否打印请求速率
        query_per_second=0.16, # 服务请求速率
        max_out_len=1024, # 最大输出长度
        max_seq_len=4096, # 最大输入长度
        temperature=0.01, # 生成温度
        batch_size=1, # 批处理大小
        retry=3, # 重试次数
    )
]
  1. 配置评测数据集,这里作为实验,仅在CMMLU Benchmark的每一个子数据集取一个样本进行评测。在opencompass/configs/datasets/demo/下面创建demo_cmmlu_chat_gen.py,贴入下面代码:
from mmengine import read_base

with read_base():
    from ..cmmlu.cmmlu_gen_c13365 import cmmlu_datasets


# 每个数据集只取前2个样本进行评测
for d in cmmlu_datasets:
    d['abbr'] = 'demo_' + d['abbr']
    d['reader_cfg']['test_range'] = '[0:1]' # 这里每个数据集只取1个样本, 方便快速评测.


复现结果

代码运行完成后,会呈现出下面的情况: image.png

我们也可以打开日志文件,可以看到日志文件中的情况如下所示: image.png

实验2:评测 internlm2.5-chat-1.8b 模型在 ceval 数据集上的性能

同样按照加载模型和配置数据集的思路进行即可。

复现结果如下:

image.png

书生多模态对话与AI搜索试用

这个任务主要是试用一下书生多模态大模型的对话能力和AI搜索能力,整体下来我对AI搜索方面这个产品还是很震惊的,感觉可视化了模型的思考过程和工具调用过程,用户体验不错。

首先是AI搜索,询问一个问题,AI会给出答复以及思考过程,还会给出网页链接。

image.png

AI搜索可以用来辅助知乎回答(建议不要直接将AI结果粘到知乎上面,而是将AI当作copilot来用,让AI辅助思考而不是代替思考)

image.png

其次是测试多模态对话:我选了一张带有计算机网络习题的照片,让模型根据给定图片,识别并给出解答。整体来说效果还是不错的。

image.png

最后是书生大模型基础对话服务,就没什么特殊的地方了,就是普通chatgpt的形式。

image.png

提示词工程

任务要求

利用对提示词的精确设计,引导语言模型正确回答出“strawberry”中有几个字母“r”。完成正确的问答交互并提交截图作为完成凭证。

实验步骤

  1. 没有使用提示词策略,直接让模型回答,结果是错误的:

image.png

  1. 刚开始,根据分解任务的prompt策略进行测试,发现效果还是不行。

image.png

  1. 这种推理的任务,应该还是需要人类给予反馈,因为这个模型比较小,他似乎没法自己反思出结果是错误的,当我们帮他反馈之后,他很快就得到正确结果了(页面太长,直接复制了模型的输出)
我:不对,请你给出三个可能的解决思路并尝试解决,最终看看结果应该是多少。
模型:
当然,我们可以采用不同的方法来解决这个问题。
以下是三种可能的解决思路: 
### 方法一:直接计数 这是最简单直接的方法。我们可以逐个检查单词中的每个字母,看它是否等于我们要查找的字母"r"。
- "s" 不等于 "r"
- "t" 不等于 "r" 
- "r" 等于 "r"(计数+1)
- "a" 不等于 "r" 
- "w" 不等于 "r" 
- "b" 不等于 "r" 
- "e" 不等于 "r" 
- "r" 等于 "r"(计数+1) 
- "r" 等于 "r"(计数+1) 
- "y" 不等于 "r" 所以,"r" 出现了3次。 
### 方法二:使用Python代码 我们可以编写一个简单的Python程序来计算字母"r"在单词"strawberry"中出现的次数。
```python word = "strawberry" count = word.count('r') print(count) ``` 
运行这段代码,输出结果为3。 
### 方法三:使用正则表达式 我们可以使用正则表达式来匹配单词中所有的"r",并计算它们的数量。
```python import re word = "strawberry" count = len(re.findall('r', word)) print(count) ``` 
运行这段代码,输出结果也为3。 
综上所述,无论采用哪种方法,结果都是一致的:单词"strawberry"中字母"r"出现了3次。
因此,我选择了这个结果作为最终答案。