58 lines
2.8 KiB
Python
58 lines
2.8 KiB
Python
from dashscope import Generation
|
||
import random
|
||
from http import HTTPStatus
|
||
from enum import Enum
|
||
from .qgi import Generator as BaseGenerator
|
||
|
||
class Model(str, Enum):
|
||
# 通义千问超大规模语言模型,支持中文、英文等不同语言输入。
|
||
# 模型支持 8,000 tokens上下文,为了保证正常的使用和输出,API限定用户输入为 6,000 tokens。
|
||
QWEN_TURBO = "qwen-turbo"
|
||
|
||
# 通义千问超大规模语言模型增强版,支持中文、英文等不同语言输入。
|
||
# 模型支持 32,000 tokens上下文,为了保证正常的使用和输出,API限定用户输入为30,000 tokens。
|
||
QWEN_PLUS = "qwen-plus"
|
||
|
||
# 通义千问千亿级别超大规模语言模型,支持中文、英文等不同语言输入。
|
||
# 随着模型的升级,qwen-max将滚动更新升级,如果希望使用固定版本,请使用下面的历史快照版本。
|
||
# 当前qwen-max模型与qwen-max-0428快照版本等价,均为最新版本的qwen-max模型,也是当前通义千问2.5产品版本背后的API模型。
|
||
# 模型支持 8,000 tokens上下文,为了保证正常的使用和输出,API限定用户输入为 6,000 tokens。
|
||
QWEN_MAX = "qwen-max"
|
||
|
||
# 通义千问千亿级别超大规模语言模型,支持中文、英文等不同语言输入。
|
||
# 模型支持 30,000 tokens上下文,为了保证正常的使用和输出,API限定用户输入为 28,000 tokens。
|
||
QWEN_MAX_LONGCONTEXT = "qwen-max-longcontext"
|
||
|
||
|
||
class Generator(BaseGenerator):
|
||
def __init__(self, model:str, messages:list[dict[str,str]]|None, apikey:str, seed:int=0) -> None:
|
||
'''
|
||
参数:
|
||
- model: str - 使用的大模型名称,例如 qwen-turbo。
|
||
- messages: list[dict[str,str]] - 提供给大模型的 messages 参数
|
||
- apikey: str - 用于调用模型的 dashscope API密钥。
|
||
- seed: int - 随机种子,用于确保生成结果的可复现性,如果忽略或为0,则生成一个随机数。
|
||
'''
|
||
self.model = model
|
||
self.messages = messages
|
||
self.apikey = apikey
|
||
self.seed = seed
|
||
|
||
def _generate(self, prompt:str|None) -> tuple[HTTPStatus, str]:
|
||
# 设置随机数种子seed,如果没有设置,则随机数种子默认为1234
|
||
seed = self.seed
|
||
if seed == 0:
|
||
seed = random.randint(1, 10000)
|
||
|
||
ret = Generation.call(model=self.model,
|
||
messages=self.messages,
|
||
prompt=prompt,
|
||
api_key=self.apikey,
|
||
seed=seed,
|
||
result_format='text')
|
||
|
||
if ret.status_code != HTTPStatus.OK:
|
||
return ret.status_code, ret.message
|
||
else:
|
||
return ret.status_code, ret.output.text
|