Langchain-Chatchat
79 строк · 2.5 Кб
1import base64
2import datetime
3import hashlib
4import hmac
5from urllib.parse import urlparse
6from datetime import datetime
7from time import mktime
8from urllib.parse import urlencode
9from wsgiref.handlers import format_date_time
10
11
12class Ws_Param(object):
13# 初始化
14def __init__(self, APPID, APIKey, APISecret, Spark_url):
15self.APPID = APPID
16self.APIKey = APIKey
17self.APISecret = APISecret
18self.host = urlparse(Spark_url).netloc
19self.path = urlparse(Spark_url).path
20self.Spark_url = Spark_url
21
22# 生成url
23def create_url(self):
24# 生成RFC1123格式的时间戳
25now = datetime.now()
26date = format_date_time(mktime(now.timetuple()))
27
28# 拼接字符串
29signature_origin = "host: " + self.host + "\n"
30signature_origin += "date: " + date + "\n"
31signature_origin += "GET " + self.path + " HTTP/1.1"
32
33# 进行hmac-sha256进行加密
34signature_sha = hmac.new(self.APISecret.encode('utf-8'), signature_origin.encode('utf-8'),
35digestmod=hashlib.sha256).digest()
36
37signature_sha_base64 = base64.b64encode(signature_sha).decode(encoding='utf-8')
38
39authorization_origin = f'api_key="{self.APIKey}", algorithm="hmac-sha256", headers="host date request-line", signature="{signature_sha_base64}"'
40
41authorization = base64.b64encode(authorization_origin.encode('utf-8')).decode(encoding='utf-8')
42
43# 将请求的鉴权参数组合为字典
44v = {
45"authorization": authorization,
46"date": date,
47"host": self.host
48}
49# 拼接鉴权参数,生成url
50url = self.Spark_url + '?' + urlencode(v)
51# 此处打印出建立连接时候的url,参考本demo的时候可取消上方打印的注释,比对相同参数时生成的url与自己代码生成的url是否一致
52return url
53
54
55def gen_params(appid, domain, question, temperature, max_token):
56"""
57通过appid和用户的提问来生成请参数
58"""
59data = {
60"header": {
61"app_id": appid,
62"uid": "1234"
63},
64"parameter": {
65"chat": {
66"domain": domain,
67"random_threshold": 0.5,
68"max_tokens": max_token,
69"auditing": "default",
70"temperature": temperature,
71}
72},
73"payload": {
74"message": {
75"text": question
76}
77}
78}
79return data
80