第二届世界科学智能大赛逻辑推理赛道:复杂推理能力评估
根据这个比赛熟悉了一下大模型使用和调用,目前使用pyqt调用大模型做了一个聊天和翻译的软件,可以多线程实现实时翻译和聊天,只是在能力上有些限制,仅能处理中文和英文。还有挺多小问题,更新之后,准备开源在GitHub,大家可以一起试试
1、安装模块
!pip install scipy openai tiktoken retry dashscope loguru
SciPy 是一个用于科学计算的开源Python库。它构建在NumPy之上,提供了许多用于数学、科学和工程的函数。
OpenAI 是OpenAI公司提供的Python库,主要用于与OpenAI的API交互,包括GPT-3和其他模型。可以用于自然语言处理(NLP)、图像生成等任务
tiktoken 是一个用于对文本进行分词和标记化的Python库,常用于自然语言处理任务。
retry 是一个用于自动重试失败操作的Python库。适用于网络请求等可能会临时失败的操作。
DashScope 是一个用于创建数据可视化和交互式Web应用程序的Python库,构建在Plotly之上。它允许使用纯Python代码创建和部署Web应用程序。
Loguru 是一个简单且功能强大的Python日志记录库,旨在简化日志记录的配置和使用。
1.1 各种常用模块
from multiprocessing import Process, Manager
import json
import os
from pprint import pprint # 提供了打印数据结构的美化格式。
import re # 正则表达式操作模块。
from tqdm import tqdm
import random
import uuid # 用于生成唯一的标识符。
import openai
import tiktoken
import json
import numpy as np
import requests
from retry import retry
from scipy import sparse
#from rank_bm25 import BM25Okapi
#import jieba
from http import HTTPStatus
import dashscope
from concurrent.futures import ThreadPoolExecutor, as_completed # 提供了线程和进程池。
from loguru import logger
import json
import time
from tqdm import tqdm
logger.remove() # 移除默认的控制台输出
logger.add("logs/app_{time:YYYY-MM-DD}.log", level="INFO", rotation="00:00", retention="10 days", compression="zip")
MODEL_NAME = 'qwen2-7b-instruct'
1.2 简单使用
1.2.1
from multiprocessing import Process, Manager
def worker(d, key, value):
d[key] = value
if __name__ == "__main__":
manager = Manager()
d = manager.dict()
p1 = Process(target=worker, args=(d, 'key1', 'value1'))
p2 = Process(target=worker, args=(d, 'key2', 'value2'))
p1.start()
p2.start()
p1.join()
p2.join()
print(d)
1.2.2 json
import json
data = {'key': 'value'}
json_str = json.dumps(data)
print(json_str)
data_back = json.loads(json_str)
print(data_back)
1.2.3
from pprint import pprint
data = {'key': 'value', 'list': [1, 2, 3, 4, 5]}
pprint(data)
import re
text = "The rain in Spain"
result = re.search(r"\bS\w+", text)
print(result.group())
import uuid
print(uuid.uuid4())
1.2.4 openai
import openai
openai.api_key = 'your-api-key'
response = openai.Completion.create(
engine="davinci",
prompt="Hello, world!",
max_tokens=5
)
print(response.choices[0].text.strip())
1.2.5 tiktoken
文本分词
import tiktoken
tokenizer = tiktoken.get_tokenizer('gpt2')
text = "Hello, world!"
tokens = tokenizer.encode(text)
print(tokens)
decoded_text = tokenizer.decode(tokens)
print(decoded_text)
1.2.6 retry
自动重试失败操作的Python库。适用于网络请求等可能会临时失败的操作
from retry import retry
@retry(tries=3, delay=2)
def test_retry():
print("Trying...")
raise Exception("Failed")
test_retry()
1.2.7 loguru
from loguru import logger
logger.add("logs/app_{time:YYYY-MM-DD}.log", level="INFO", rotation="00:00", retention="10 days", compression="zip")
logger.info("This is an info message")
2、调用API接口流程
1.1 设置环境变量
环境变量通常用于配置程序的参数、密钥等敏感信息,而不直接写入代码中。使用环境变量可以增强程序的安全性和灵活性。
1.2 使用.env文件(最推荐的方法)
例如使用deepseek平台翻译时,可设置如下的env文件内的内容
创建文件,写入如下内容,后在Python文件内加载
OPENAI_MODEL=deepseek-chat
OPENAI_API_KEY=your_api_key
OPENAI_API_BASE=https://api.deepseek.com/v1
CONFIG_FILE_INPUT=input.xlsx
CONFIG_FILE_OUTPUT=output.xlsx
CONFIG_TARGET_LANG=英语
main.py
from dotenv import load_dotenv, find_dotenv
# 加载.env中的环境变量
load_dotenv(find_dotenv())
# 从环境变量加载必要参数
openai.api_key = os.getenv("OPENAI_API_KEY")
openai.api_base = os.getenv("OPENAI_API_BASE")
openai_model = os.getenv("OPENAI_MODEL")
# 输入文件
input_file = os.getenv("CONFIG_FILE_INPUT")
# 输出文件
output_file = os.getenv("CONFIG_FILE_OUTPUT")
# 需要翻译成的目标语言
target_lang = os.getenv("CONFIG_TARGET_LANG")
# 需要排除的字段
expected_for_word = ["admin"]
1.3 设置默认值
import os
# 获取环境变量的值,若未设置则返回默认值 'default_key'
api_key = os.getenv('OPENAI_API_KEY', 'default_key')
print(f'The API Key is: {api_key}')
1.4 临时设置
在shell中设置
export OPENAI_API_KEY="your-api-key"
export OPENAI_API_BASE="https://api.openai.com"
在Python程序中设置
import os
# 设置环境变量
os.environ['OPENAI_API_KEY'] = 'your-api-key'
os.environ['OPENAI_API_BASE'] = 'https://api.openai.com'