Skip to content

Commit 1a29199

Browse files
authored
feat: 支持阿里通义大模型 #42 (#154)
* feat: 支持阿里通义大模型 #42
1 parent 57ecf4a commit 1a29199

File tree

5 files changed

+104
-0
lines changed

5 files changed

+104
-0
lines changed

apps/setting/models_provider/constants/model_provider_constants.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
from setting.models_provider.impl.azure_model_provider.azure_model_provider import AzureModelProvider
1212
from setting.models_provider.impl.ollama_model_provider.ollama_model_provider import OllamaModelProvider
1313
from setting.models_provider.impl.openai_model_provider.openai_model_provider import OpenAIModelProvider
14+
from setting.models_provider.impl.qwen_model_provider.qwen_model_provider import QwenModelProvider
1415
from setting.models_provider.impl.wenxin_model_provider.wenxin_model_provider import WenxinModelProvider
1516
from setting.models_provider.impl.kimi_model_provider.kimi_model_provider import KimiModelProvider
1617

@@ -21,3 +22,4 @@ class ModelProvideConstants(Enum):
2122
model_ollama_provider = OllamaModelProvider()
2223
model_openai_provider = OpenAIModelProvider()
2324
model_kimi_provider = KimiModelProvider()
25+
model_qwen_provider = QwenModelProvider()
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
# coding=utf-8
2+
"""
3+
@project: maxkb
4+
@Author:虎
5+
@file: __init__.py.py
6+
@date:2023/10/31 17:16
7+
@desc:
8+
"""
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 600 600" width="100%" height="100%" preserveAspectRatio="xMidYMid meet" style="width: 100%; height: 100%; transform: translate3d(0px, 0px, 0px); content-visibility: visible;"><defs><clipPath id="__lottie_element_2"><rect width="600" height="600" x="0" y="0"></rect></clipPath></defs><g clip-path="url(#__lottie_element_2)"><g transform="matrix(1.15489661693573,0,0,1.15489661693573,-4617.662109375,397.115234375)" opacity="1" style="display: block;"><g opacity="1" transform="matrix(1,0,0,1,4258.10009765625,-84.09300231933594)"><path fill="rgb(97,92,237)" fill-opacity="1" d=" M187.06500244140625,-60.0099983215332 C187.06500244140625,-60.0099983215332 218.23500061035156,-113.98999786376953 218.23500061035156,-113.98999786376953 C219.30499267578125,-115.83999633789062 219.84500122070312,-117.91999816894531 219.84500122070312,-119.98999786376953 C219.84500122070312,-122.05999755859375 219.30499267578125,-124.13999938964844 218.23500061035156,-125.98999786376953 C218.23500061035156,-125.98999786376953 183.59500122070312,-185.99000549316406 183.59500122070312,-185.99000549316406 C182.52499389648438,-187.83999633789062 181.0050048828125,-189.33999633789062 179.2050018310547,-190.3800048828125 C177.4149932861328,-191.4199981689453 175.34500122070312,-191.99000549316406 173.2050018310547,-191.99000549316406 C173.2050018310547,-191.99000549316406 -110.9229965209961,-191.8699951171875 -110.9229965209961,-191.8699951171875 C-110.9229965209961,-191.8699951171875 -145.48500061035156,-132.00999450683594 -145.48500061035156,-132.00999450683594 C-145.48500061035156,-132.00999450683594 -122.10600280761719,0.06199999898672104 -122.10600280761719,0.06199999898672104 C-122.10600280761719,0.06199999898672104 187.06500244140625,-60.0099983215332 187.06500244140625,-60.0099983215332z"></path></g></g><g transform="matrix(1.15489661693573,0,0,1.15489661693573,-4617.66455078125,397.120849609375)" opacity="1" style="display: block;"><g opacity="1" transform="matrix(1,0,0,1,4258.10009765625,-84.09300231933594)"><path fill="rgb(97,92,237)" fill-opacity="1" d=" M41.564998626708984,-191.99000549316406 C41.564998626708984,-191.99000549316406 10.385000228881836,-245.99000549316406 10.385000228881836,-245.99000549316406 C8.244999885559082,-249.6999969482422 4.284999847412109,-251.99000549316406 -0.004999999888241291,-251.99000549316406 C-0.004999999888241291,-251.99000549316406 -69.28500366210938,-251.99000549316406 -69.28500366210938,-251.99000549316406 C-71.42500305175781,-251.99000549316406 -73.48500061035156,-251.4199981689453 -75.2750015258789,-250.3800048828125 C-77.07499694824219,-249.33999633789062 -78.59500122070312,-247.83999633789062 -79.67500305175781,-245.99000549316406 C-79.67500305175781,-245.99000549316406 -111.18199920654297,-191.4219970703125 -111.18199920654297,-191.4219970703125 C-111.18199920654297,-191.4219970703125 -145.48500061035156,-132.00999450683594 -145.48500061035156,-132.00999450683594 C-145.48500061035156,-132.00999450683594 41.564998626708984,-191.99000549316406 41.564998626708984,-191.99000549316406z"></path></g></g><g transform="matrix(-0.577448308467865,1.0001697540283203,-1.0001697540283203,-0.577448308467865,2674.726806640625,-4007.3779296875)" opacity="1" style="display: block;"><g opacity="1" transform="matrix(1,0,0,1,4258.10009765625,-84.09300231933594)"><path fill="rgb(97,92,237)" fill-opacity="1" d=" M187.06500244140625,-60.0099983215332 C187.06500244140625,-60.0099983215332 218.23500061035156,-113.98999786376953 218.23500061035156,-113.98999786376953 C219.30499267578125,-115.83999633789062 219.84500122070312,-117.91999816894531 219.84500122070312,-119.98999786376953 C219.84500122070312,-122.05999755859375 219.30499267578125,-124.13999938964844 218.23500061035156,-125.98999786376953 C218.23500061035156,-125.98999786376953 183.59500122070312,-185.99000549316406 183.59500122070312,-185.99000549316406 C182.52499389648438,-187.83999633789062 181.0050048828125,-189.33999633789062 179.2050018310547,-190.3800048828125 C177.4149932861328,-191.4199981689453 175.34500122070312,-191.99000549316406 173.2050018310547,-191.99000549316406 C173.2050018310547,-191.99000549316406 -110.9229965209961,-191.8699951171875 -110.9229965209961,-191.8699951171875 C-110.9229965209961,-191.8699951171875 -145.48500061035156,-132.00999450683594 -145.48500061035156,-132.00999450683594 C-145.48500061035156,-132.00999450683594 -122.10600280761719,0.06199999898672104 -122.10600280761719,0.06199999898672104 C-122.10600280761719,0.06199999898672104 187.06500244140625,-60.0099983215332 187.06500244140625,-60.0099983215332z"></path></g></g><g transform="matrix(-0.577448308467865,1.0001697540283203,-1.0001697540283203,-0.577448308467865,2674.72314453125,-4007.3828125)" opacity="1" style="display: block;"><g opacity="1" transform="matrix(1,0,0,1,4258.10009765625,-84.09300231933594)"><path fill="rgb(97,92,237)" fill-opacity="1" d=" M41.564998626708984,-191.99000549316406 C41.564998626708984,-191.99000549316406 10.385000228881836,-245.99000549316406 10.385000228881836,-245.99000549316406 C8.244999885559082,-249.6999969482422 4.284999847412109,-251.99000549316406 -0.004999999888241291,-251.99000549316406 C-0.004999999888241291,-251.99000549316406 -69.28500366210938,-251.99000549316406 -69.28500366210938,-251.99000549316406 C-71.42500305175781,-251.99000549316406 -73.48500061035156,-251.4199981689453 -75.2750015258789,-250.3800048828125 C-77.07499694824219,-249.33999633789062 -78.59500122070312,-247.83999633789062 -79.67500305175781,-245.99000549316406 C-79.67500305175781,-245.99000549316406 -111.18199920654297,-191.4219970703125 -111.18199920654297,-191.4219970703125 C-111.18199920654297,-191.4219970703125 -145.48500061035156,-132.00999450683594 -145.48500061035156,-132.00999450683594 C-145.48500061035156,-132.00999450683594 41.564998626708984,-191.99000549316406 41.564998626708984,-191.99000549316406z"></path></g></g><g transform="matrix(-0.577448308467865,-1.0001697540283203,1.0001697540283203,-0.577448308467865,2842.935546875,4510.2626953125)" opacity="1" style="display: block;"><g opacity="1" transform="matrix(1,0,0,1,4258.10009765625,-84.09300231933594)"><path fill="rgb(97,92,237)" fill-opacity="1" d=" M187.06500244140625,-60.0099983215332 C187.06500244140625,-60.0099983215332 218.23500061035156,-113.98999786376953 218.23500061035156,-113.98999786376953 C219.30499267578125,-115.83999633789062 219.84500122070312,-117.91999816894531 219.84500122070312,-119.98999786376953 C219.84500122070312,-122.05999755859375 219.30499267578125,-124.13999938964844 218.23500061035156,-125.98999786376953 C218.23500061035156,-125.98999786376953 183.59500122070312,-185.99000549316406 183.59500122070312,-185.99000549316406 C182.52499389648438,-187.83999633789062 181.0050048828125,-189.33999633789062 179.2050018310547,-190.3800048828125 C177.4149932861328,-191.4199981689453 175.34500122070312,-191.99000549316406 173.2050018310547,-191.99000549316406 C173.2050018310547,-191.99000549316406 -110.9229965209961,-191.8699951171875 -110.9229965209961,-191.8699951171875 C-110.9229965209961,-191.8699951171875 -145.48500061035156,-132.00999450683594 -145.48500061035156,-132.00999450683594 C-145.48500061035156,-132.00999450683594 -122.10600280761719,0.06199999898672104 -122.10600280761719,0.06199999898672104 C-122.10600280761719,0.06199999898672104 187.06500244140625,-60.0099983215332 187.06500244140625,-60.0099983215332z"></path></g></g><g transform="matrix(-0.577448308467865,-1.0001697540283203,1.0001697540283203,-0.577448308467865,2842.941162109375,4510.26171875)" opacity="1" style="display: block;"><g opacity="1" transform="matrix(1,0,0,1,4258.10009765625,-84.09300231933594)"><path fill="rgb(97,92,237)" fill-opacity="1" d=" M41.564998626708984,-191.99000549316406 C41.564998626708984,-191.99000549316406 10.385000228881836,-245.99000549316406 10.385000228881836,-245.99000549316406 C8.244999885559082,-249.6999969482422 4.284999847412109,-251.99000549316406 -0.004999999888241291,-251.99000549316406 C-0.004999999888241291,-251.99000549316406 -69.28500366210938,-251.99000549316406 -69.28500366210938,-251.99000549316406 C-71.42500305175781,-251.99000549316406 -73.48500061035156,-251.4199981689453 -75.2750015258789,-250.3800048828125 C-77.07499694824219,-249.33999633789062 -78.59500122070312,-247.83999633789062 -79.67500305175781,-245.99000549316406 C-79.67500305175781,-245.99000549316406 -111.18199920654297,-191.4219970703125 -111.18199920654297,-191.4219970703125 C-111.18199920654297,-191.4219970703125 -145.48500061035156,-132.00999450683594 -145.48500061035156,-132.00999450683594 C-145.48500061035156,-132.00999450683594 41.564998626708984,-191.99000549316406 41.564998626708984,-191.99000549316406z"></path></g></g><g transform="matrix(9.786605834960938,-0.04287320747971535,0.04287320747971535,9.786605834960938,300,300)" opacity="1" style="display: block;"><g opacity="1" transform="matrix(1,0,0,1,0,0)"><path fill="rgb(255,255,255)" fill-opacity="1" d=" M-16.312999725341797,-14.13599967956543 C-16.312999725341797,-14.13599967956543 -8.152999877929688,-28.257999420166016 -8.152999877929688,-28.257999420166016 C-8.152999877929688,-28.257999420166016 -4.079999923706055,-21.20400047302246 -4.079999923706055,-21.20400047302246 C-4.079999923706055,-21.20400047302246 -8.163000106811523,-14.133000373840332 -8.163000106811523,-14.133000373840332 C-8.163000106811523,-14.133000373840332 24.5,-14.125 24.5,-14.125 C24.5,-14.125 20.398000717163086,-7.059000015258789 20.398000717163086,-7.059000015258789 C20.398000717163086,-7.059000015258789 -12.229999542236328,-7.065000057220459 -12.229999542236328,-7.065000057220459 C-12.229999542236328,-7.065000057220459 -16.312999725341797,-14.13599967956543 -16.312999725341797,-14.13599967956543z"></path></g></g><g transform="matrix(-4.856173515319824,8.496886253356934,-8.496886253356934,-4.856173515319824,300,300)" opacity="1" style="display: block;"><g opacity="1" transform="matrix(1,0,0,1,0,0)"><path fill="rgb(255,255,255)" fill-opacity="1" d=" M-16.312999725341797,-14.13599967956543 C-16.312999725341797,-14.13599967956543 -8.152999877929688,-28.257999420166016 -8.152999877929688,-28.257999420166016 C-8.152999877929688,-28.257999420166016 -4.079999923706055,-21.20400047302246 -4.079999923706055,-21.20400047302246 C-4.079999923706055,-21.20400047302246 -8.163000106811523,-14.133000373840332 -8.163000106811523,-14.133000373840332 C-8.163000106811523,-14.133000373840332 24.5,-14.125 24.5,-14.125 C24.5,-14.125 20.398000717163086,-7.059000015258789 20.398000717163086,-7.059000015258789 C20.398000717163086,-7.059000015258789 -12.229999542236328,-7.065000057220459 -12.229999542236328,-7.065000057220459 C-12.229999542236328,-7.065000057220459 -16.312999725341797,-14.13599967956543 -16.312999725341797,-14.13599967956543z"></path></g></g><g transform="matrix(-4.930432319641113,-8.454012870788574,8.454012870788574,-4.930432319641113,300,300)" opacity="1" style="display: block;"><g opacity="1" transform="matrix(1,0,0,1,0,0)"><path fill="rgb(255,255,255)" fill-opacity="1" d=" M-16.312999725341797,-14.13599967956543 C-16.312999725341797,-14.13599967956543 -8.152999877929688,-28.257999420166016 -8.152999877929688,-28.257999420166016 C-8.152999877929688,-28.257999420166016 -4.079999923706055,-21.20400047302246 -4.079999923706055,-21.20400047302246 C-4.079999923706055,-21.20400047302246 -8.163000106811523,-14.133000373840332 -8.163000106811523,-14.133000373840332 C-8.163000106811523,-14.133000373840332 24.5,-14.125 24.5,-14.125 C24.5,-14.125 20.398000717163086,-7.059000015258789 20.398000717163086,-7.059000015258789 C20.398000717163086,-7.059000015258789 -12.229999542236328,-7.065000057220459 -12.229999542236328,-7.065000057220459 C-12.229999542236328,-7.065000057220459 -16.312999725341797,-14.13599967956543 -16.312999725341797,-14.13599967956543z"></path></g></g><g transform="matrix(9.786605834960938,-0.04287320747971535,0.04287320747971535,9.786605834960938,300,300)" opacity="1" style="display: block;"><g opacity="1" transform="matrix(1,0,0,1,0,0)"><path fill="rgb(96,91,236)" fill-opacity="1" d=" M-12.229999542236328,-7.065000057220459 C-12.229999542236328,-7.065000057220459 -0.004000000189989805,14.12399959564209 -0.004000000189989805,14.12399959564209 C-0.004000000189989805,14.12399959564209 12.232999801635742,-7.059000015258789 12.232999801635742,-7.059000015258789 C12.232999801635742,-7.059000015258789 -12.229999542236328,-7.065000057220459 -12.229999542236328,-7.065000057220459z"></path></g></g><g transform="matrix(9.786605834960938,-0.04287320747971535,0.04287320747971535,9.786605834960938,300,300)" opacity="1" style="display: block;"><g opacity="1" transform="matrix(1,0,0,1,0,0)"><path fill="rgb(96,91,236)" fill-opacity="1" d=" M-12.229999542236328,-7.065000057220459 C-12.229999542236328,-7.065000057220459 20.398000717163086,-7.059000015258789 20.398000717163086,-7.059000015258789 C20.398000717163086,-7.059000015258789 21.21299934387207,-5.645999908447266 21.21299934387207,-5.645999908447266 C21.21299934387207,-5.645999908447266 -11.413999557495117,-5.6529998779296875 -11.413999557495117,-5.6529998779296875 C-11.413999557495117,-5.6529998779296875 -12.229999542236328,-7.065000057220459 -12.229999542236328,-7.065000057220459z"></path></g></g><g transform="matrix(-4.856173515319824,8.496886253356934,-8.496886253356934,-4.856173515319824,300,300)" opacity="1" style="display: block;"><g opacity="1" transform="matrix(1,0,0,1,0,0)"><path fill="rgb(96,91,236)" fill-opacity="1" d=" M-12.229999542236328,-7.065000057220459 C-12.229999542236328,-7.065000057220459 20.398000717163086,-7.059000015258789 20.398000717163086,-7.059000015258789 C20.398000717163086,-7.059000015258789 21.21299934387207,-5.645999908447266 21.21299934387207,-5.645999908447266 C21.21299934387207,-5.645999908447266 -11.413999557495117,-5.6529998779296875 -11.413999557495117,-5.6529998779296875 C-11.413999557495117,-5.6529998779296875 -12.229999542236328,-7.065000057220459 -12.229999542236328,-7.065000057220459z"></path></g></g><g transform="matrix(-4.930432319641113,-8.454012870788574,8.454012870788574,-4.930432319641113,300,300)" opacity="1" style="display: block;"><g opacity="1" transform="matrix(1,0,0,1,0,0)"><path fill="rgb(96,91,236)" fill-opacity="1" d=" M-12.229999542236328,-7.065000057220459 C-12.229999542236328,-7.065000057220459 20.398000717163086,-7.059000015258789 20.398000717163086,-7.059000015258789 C20.398000717163086,-7.059000015258789 21.21299934387207,-5.645999908447266 21.21299934387207,-5.645999908447266 C21.21299934387207,-5.645999908447266 -11.413999557495117,-5.6529998779296875 -11.413999557495117,-5.6529998779296875 C-11.413999557495117,-5.6529998779296875 -12.229999542236328,-7.065000057220459 -12.229999542236328,-7.065000057220459z"></path></g></g></g></svg>
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
# coding=utf-8
2+
"""
3+
@project: maxkb
4+
@Author:虎
5+
@file: qwen_model_provider.py
6+
@date:2023/10/31 16:19
7+
@desc:
8+
"""
9+
import os
10+
from typing import Dict
11+
12+
from langchain.schema import HumanMessage
13+
from langchain_community.chat_models.tongyi import ChatTongyi
14+
15+
from common import forms
16+
from common.exception.app_exception import AppApiException
17+
from common.forms import BaseForm
18+
from common.util.file_util import get_file_content
19+
from setting.models_provider.base_model_provider import ModelProvideInfo, ModelTypeConst, BaseModelCredential, \
20+
ModelInfo, IModelProvider, ValidCode
21+
from smartdoc.conf import PROJECT_DIR
22+
23+
24+
class OpenAILLMModelCredential(BaseForm, BaseModelCredential):
25+
26+
def is_valid(self, model_type: str, model_name, model_credential: Dict[str, object], raise_exception=False):
27+
model_type_list = QwenModelProvider().get_model_type_list()
28+
if not any(list(filter(lambda mt: mt.get('value') == model_type, model_type_list))):
29+
raise AppApiException(ValidCode.valid_error.value, f'{model_type} 模型类型不支持')
30+
for key in ['api_key']:
31+
if key not in model_credential:
32+
if raise_exception:
33+
raise AppApiException(ValidCode.valid_error.value, f'{key} 字段为必填字段')
34+
else:
35+
return False
36+
try:
37+
model = QwenModelProvider().get_model(model_type, model_name, model_credential)
38+
model.invoke([HumanMessage(content='你好')])
39+
except Exception as e:
40+
if isinstance(e, AppApiException):
41+
raise e
42+
if raise_exception:
43+
raise AppApiException(ValidCode.valid_error.value, f'校验失败,请检查参数是否正确: {str(e)}')
44+
else:
45+
return False
46+
return True
47+
48+
def encryption_dict(self, model: Dict[str, object]):
49+
return {**model, 'api_key': super().encryption(model.get('api_key', ''))}
50+
51+
api_key = forms.PasswordInputField('API Key', required=True)
52+
53+
54+
qwen_model_credential = OpenAILLMModelCredential()
55+
56+
model_dict = {
57+
'qwen-turbo': ModelInfo('qwen-turbo', '', ModelTypeConst.LLM, qwen_model_credential),
58+
'qwen-plus': ModelInfo('qwen-plus', '', ModelTypeConst.LLM, qwen_model_credential),
59+
'qwen-max': ModelInfo('qwen-max', '', ModelTypeConst.LLM, qwen_model_credential)
60+
}
61+
62+
63+
class QwenModelProvider(IModelProvider):
64+
65+
def get_dialogue_number(self):
66+
return 3
67+
68+
def get_model(self, model_type, model_name, model_credential: Dict[str, object], **model_kwargs) -> ChatTongyi:
69+
chat_tong_yi = ChatTongyi(
70+
model_name=model_name,
71+
dashscope_api_key=model_credential.get('api_key')
72+
)
73+
return chat_tong_yi
74+
75+
def get_model_credential(self, model_type, model_name):
76+
if model_name in model_dict:
77+
return model_dict.get(model_name).model_credential
78+
return qwen_model_credential
79+
80+
def get_model_provide_info(self):
81+
return ModelProvideInfo(provider='model_qwen_provider', name='通义千问', icon=get_file_content(
82+
os.path.join(PROJECT_DIR, "apps", "setting", 'models_provider', 'impl', 'qwen_model_provider', 'icon',
83+
'qwen_icon_svg')))
84+
85+
def get_model_list(self, model_type: str):
86+
if model_type is None:
87+
raise AppApiException(500, '模型类型不能为空')
88+
return [model_dict.get(key).to_dict() for key in
89+
list(filter(lambda key: model_dict.get(key).model_type == model_type, model_dict.keys()))]
90+
91+
def get_model_type_list(self):
92+
return [{'key': "大语言模型", 'value': "LLM"}]

pyproject.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ django-apscheduler = "^0.6.2"
3232
pymupdf = "^1.24.0"
3333
python-docx = "^1.1.0"
3434
xlwt = "^1.3.0"
35+
dashscope = "^1.17.0"
3536

3637
[build-system]
3738
requires = ["poetry-core"]

0 commit comments

Comments
 (0)