python 如何调用GPT系列的api接口,实现想要的功能

目录

问题描述:

问题解决:


问题描述:

随着各种LLMs (Large Language Models)的出现,如何调用各种LLMs的api成为了经常会遇见的问题。

问题解决:

下面仅以生成给定sentence的复述句为例,说明如何应用。

data: 存放在.txt文件中,按行存放,每一行是一个句子

⚠️: 只能在本地运行,不可以在服务器上运行,并且,🪜要打开。

代码实现:

python 复制代码
import openai
import time
import os
import random 

from tqdm import tqdm
# openai.api_key = "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"
# openai.api_key = "sk-huUlpXTcDnvNevXgB1399aCa9dB247F599D81737B7CfD927" # 实验室共有


openai.api_key = "YOUR API KEY" # GPT4.0
openai.api_base = 'https://api.ngapi.top/v1'

def get_response(prompt, temperature=0.5, max_tokens=2048):
  completion = openai.ChatCompletion.create(
    # model="gpt-3.5-turbo",
    model="gpt-4",
    temperature=0,
    top_p=0,
    # max_tokens=max_tokens,
    messages=[
      {"role": "user", "content": f"{prompt}"}
    ]
  )
  return completion
  
python 复制代码
def generate_prompt(all_sentences): # all_asps是一个list

    prompts = []
    for cur_sent in all_sentences: # all_compared_pair是一个list:[asp,sub,obj]
        # prompt = "Please generate just one synonymous sentence for the given sentence. The current given sentence is : '{}'".format(cur_sent)
        prompt = f"Generate a paraphrased version of the following sentence: {cur_sent}"
        prompts.append(prompt)
    return prompts
python 复制代码
import re

def process_sentence(sentence):
    # 定义要添加空格的特殊字符, 比如's
    special_chars = [',', '.', '\'', ''', '"', '"', '(', ')', '[', ']', '{', '}', ':', ';', '?', '!'] # '-', 因为sub,obj中存在很多以'-'为连字符的sub,obj,所以原始句子中,这部分不可以加空格
    # 在特殊字符前添加空格
    for char in special_chars:
        if char == '(': # 特别的,左括号是在后面加空格
            sentence = sentence = re.sub(rf'([{char}])', r'\1 ', sentence)
        else:
            sentence = re.sub(rf'([{char}])', r' \1', sentence)
    return sentence

def get_res(all_sentences, wirte_path):

    if os.path.exists(wirte_path):
        res_file = open(wirte_path)
        begin = len(res_file.readlines()) + 1 # 断点续传
        res_file.close()
    else:
        begin = 0
    
    with open(wirte_path, 'a', buffering=1) as res_file:
        count = 0
        for p in tqdm(generate_prompt(all_sentences), total=len(all_sentences)):
            print(p)
            count += 1
            if count < begin:
                continue
            try:
                res = get_response(p)['choices'][0]['message']['content']
                # print("res", res)
                processed_res = process_sentence(res) # 处理成以单词,标点符号等为分隔符,空格
                # print("processed_res", processed_res)
                if "The server is overloaded or not ready yet" in processed_res:
                    time.sleep(30)
                    res_file.write("####" + '\n')
                    
                else:
                    res_file.write(processed_res + '\n')
            except Exception as e:
                if isinstance(e, openai.error.RateLimitError):
                    time.sleep(30)      # 处理拥挤的函数,就只是睡着而已
                    res = get_response(p)['choices'][0]['message']['content']
                    processed_res = process_sentence(res) # 
                    res_file.write(processed_res + '\n')
                else:
                    print(e)
                    exit(-1)
        # print("the number of prompt is :", count)
python 复制代码
from pdb import set_trace as stop


dataset_list = ['14lap','14res', '15res', '16res']
name_list = ['train', 'test', 'dev']

# name_list = ['dev']
# dataset_list = ['14lap']

for dataset in dataset_list:
    for name in name_list:
        # print("dataste", dataset)
        # print("name", name)
        sentence_path = f"/Users/qtxu/Workplace/Chatgpt/ATE_Task/{dataset}/{name}_sentence.txt"
        write_path = f'/Users/qtxu/Workplace/Chatgpt/ATE_Task/{dataset}/{name}_paraphrase_sentence.txt'

        with open(sentence_path,"r") as fr:
            lines = fr.readlines()
            all_sentences = []
            for line in lines:
                all_sentences.append(line)
        # print("all_sentences", all_sentences)
        get_res(all_sentences, write_path)
相关推荐
智搜广告24 分钟前
智搜广告:科技行业AI回答优化公司如何破局
大数据·python·elasticsearch·geo
IpdataCloud1 小时前
AI智能体调用工具怎么核验来源IP?归属地、网络类型与代理风险识别(含Python代码)
数据库·python·tcp/ip
2601_966949651 小时前
只拿到股票代码还不够:量化程序到底还需要哪些标的信息?——从数据建模开始理解股票元数据
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
蒸鱼Yuzheng1 小时前
Python 游戏测试开发怎么准备:日志解析、接口校验、并发与可维护性
自动化测试·python·测试开发·面试题·游戏测试
Ivanqhz2 小时前
BM1688 双核架构
python·深度学习·神经网络·cnn·mlir
Java后端的Ai之路2 小时前
Python进阶探索17 - Python中的深拷贝与浅拷贝
人工智能·python·ai·浅拷贝·深拷贝
西柚研究生1234563 小时前
论文分析17:YOLOv11_UAVNet:无人机航拍图像专用目标检测算法
人工智能·python·深度学习·算法·目标检测
沧海一笑-dj3 小时前
【Python】Python学习笔记-初识 Python
python·python安装·python解释器
打工仔折腾 AI3 小时前
FastAPI 从本机到生产服务器:Nginx+Gunicorn+Uvicorn 完整部署实录
人工智能·后端·python·nginx·fastapi·gunicorn
hanchenxing4 小时前
AI 数据管道重构:从函数堆到链式管道的可读性实践
python