Task 2 Basline精读https://linklearner.com/activity/12/3/10
这节的task主要解释Baseline的代码,从而展示如何运用大模型思考、Prompting的示例。
整体代码介绍
两个主要组成部分:答案生成模块和纠错与结果文件生成模块。下面是该段落的重点总结:
1. 整体代码结构:
- 整体代码分为两大模块:答案生成模块和纠错与结果文件生成模块。
2. 答案生成模块:
- 包括大模型的处理函数、从大模型返回结果中抽取所需信息、多线程处理以及答案生成的启动过程。
- 大模型部分是整个代码的核心。
- 动手能力强的开发者可以从此处入手改进代码。
- 为了提高性能,使用了多线程处理请求。
3. 纠错与结果文件生成模块:
- 目的是处理由于网络问题或模型能力限制导致的结果缺失或不完整的情况。
- 可能出现的问题包括大模型未明确给出选项(如ABCD)的答案,或者返回空值。
- 有时即使重试机制用尽,仍然无法获取到有效结果,这种情况下会跳过相应问题。
环境配置
导入需要的环境,包括日志处理、多线程、api请求等相关库引入。
答案生成部分
- `call_qwen_api` 函数的作用是接收模型名称和提示(prompt),并完成对大型模型 API 的调用。
- `api_retry` 函数用于解决调用大型模型 API 时可能出现的错误或中断问题。为了确保每个问题都能被模型处理,我们设置了一个重试机制。该机制的最大尝试次数为5次,并且在每次重试之间会有60秒的等待时间。如果重试过程中出现错误,相关信息会被记录到日志文件中。
- `get_prompt` 是一个模板函数,它通过字符串处理来构建完整的提示(prompt)。
抽取函数
通过使用抽取函数,我们可以将大型语言模型生成的结果转换为相应的答案选项。这一过程遵循与`prompt`相匹配的原则。`prompt`模板要求结果的最后一行格式必须为“答案是:A”这样的形式,因此我们利用正则表达式 (`re.compile`) 来精确匹配答案选项。如果匹配失败,则默认选择“A”作为答案。
`get_prompt` 是一个用于构建完整`prompt`的模版函数,它通过字符串处理来组合所需的完整提示信息。
多线程处理
启动函数
纠错与结果文件生成
去重与排序:对于相同问题背景下的所有问题,将其统一存入一个字典中,并按照ID序号进行排序。
纠错:实施纠错措施以修正因网络或模型能力问题导致的错误答案。
补错:针对缺失的答案进行补充。
处理空缺答案:对于缺失答案的条目,我们可以默认将`answer`字段填充为“A”。如果不满意这种处理方式,可以选择再次通过多线程函数进行处理。
存储文件:最终处理完成的数据会被保存到文件中以供后续使用。