def on_submit(self): prompt = self.prompt_edit.toPlainText() question = self.question_edit.toPlainText() api_url = "https://api.devbit.cn/ai/api/ai/chat" api_key = "ZXlKMGVYQWlPaUpLVjFRaUxDSmhiR2NpT2lKSVV6STFOaUo5LmV5SjBkQ0k2TkN3aVlYVmtJam9pTlRNeE5XTmpZekV3TlRnME5HSTNNVGcyWmpoa09XRTVOVFppTnpGbU5HWWlMQ0pzZFNJNkltZGhiMmhoYjNkbGJpSXNJbVY0Y0NJNk1UWTROVFUwT0RjNU9Td2lkWElpT2pJc0ltcDBhU0k2SWtGUVNWOVVUMHRGVGw4MU16RTFZMk5qTVRBMU9EUTBZamN4T0RabU9HUTVZVGsxTm1JM01XWTBaaTAwSW4wLjM0WWhudzVpblNRVTZROWpkZ0RxRHlCQk1GM2xmN01HYTZBcXZJMV9ydjA=" headers = { "Authorization": "Bearer "+api_key, "Accept": "application/json" } payload = { "prompt": prompt, "question": question, #"cid": self.cid, "stream": False } if self.cid_checkbox.isChecked(): payload["cid"] = self.cid response = requests.post(api_url, json=payload, headers=headers) if response.status_code == 200: print(response.json()) json_response = response.json() self.cid = str(json_response['data']['cid']) self.json_response_edit.setText(str(json_response['data']['answer'])) else: print("Request failed with error code {reaponse.status_code}") self.json_response_edit.setText(f"请求失败,错误码 {response.status_code}")这段代码运行后提示{'data': None, 'code': 403, 'msg': '会话失效!'} Traceback (most recent call last): File "e:\python\工程文件\Untitled-6.py", line 141, in on_submit self.cid = str(json_response['data']['cid']) TypeError: 'NoneType' object is not subscriptable怎么解决?
时间: 2024-02-14 09:08:40 浏览: 21
根据提示信息,代码运行后返回的是 {'data': None, 'code': 403, 'msg': '会话失效!'},即会话失效。因此,无法通过 ['data']['cid'] 获取到值,导致出现 TypeError: 'NoneType' object is not subscriptable 错误。
解决方法是重新生成一个新的会话,或者检查之前生成的会话是否过期。可以尝试通过修改 payload 中的参数来重新生成会话,例如增加一个随机数参数,绕过之前的会话。另外,也可以尝试联系接口提供方,寻求帮助。
相关问题
def on_submit(self): prompt = self.prompt_edit.toPlainText() question = self.question_edit.toPlainText() api_url = "https://api.devbit.cn/ai/api/ai/chat" api_key = "ZXlKMGVYQWlPaUpLVjFRaUxDSmhiR2NpT2lKSVV6STFOaUo5LmV5SjBkQ0k2TkN3aVlYVmtJam9pTlRNeE5XTmpZekV3TlRnME5HSTNNVGcyWmpoa09XRTVOVFppTnpGbU5HWWlMQ0pzZFNJNkltZGhiMmhoYjNkbGJpSXNJbVY0Y0NJNk1UWTROVFUwT0RjNU9Td2lkWElpT2pJc0ltcDBhU0k2SWtGUVNWOVVUMHRGVGw4MU16RTFZMk5qTVRBMU9EUTBZamN4T0RabU9HUTVZVGsxTm1JM01XWTBaaTAwSW4wLjM0WWhudzVpblNRVTZROWpkZ0RxRHlCQk1GM2xmN01HYTZBcXZJMV9ydjA=" headers = { "Authorization": "Bearer "+api_key, "Accept": "application/json" } payload = { "prompt": prompt, "question": question, "cid": self.cid, "stream": False } response = requests.post(api_url, json=payload, headers=headers) if response.status_code == 200: print(response.json()) json_response = response.json() self.cid = str(json_response['data']['cid']) self.json_response_edit.setText(str(json_response['data']['answer'])) else: print("Request failed with error code {reaponse.status_code}") self.json_response_edit.setText(f"请求失败,错误码 {response.status_code}")怎么在点击提交按钮时,根据复选框状态判定cid是否回传?
你可以在`payload`中添加一个`cid`字段,根据复选框的状态来判断是否传入`cid`。假设你的复选框是`self.cid_checkbox`,那么你可以这样修改`on_submit`方法:
```
def on_submit(self):
prompt = self.prompt_edit.toPlainText()
question = self.question_edit.toPlainText()
api_url = "https://api.devbit.cn/ai/api/ai/chat"
api_key = "ZXlKMGVYQWlPaUpLVjFRaUxDSmhiR2NpT2lKSVV6STFOaUo5LmV5SjBkQ0k2TkN3aVlYVmtJam9pTlRNeE5XTmpZekV3TlRnME5HSTNNVGcyWmpoa09XRTVOVFppTnpGbU5HWWlMQ0pzZFNJNkltZGhiMmhoYjNkbGJpSXNJbVY0Y0NJNk1UWTROVFUwT0RjNU9Td2lkWElpT2pJc0ltcDBhU0k2SWtGUVNWOVVUMHRGVGw4MU16RTFZMk5qTVRBMU9EUTBZamN4T0RabU9HUTVZVGsxTm1JM01XWTBaaTAwSW4wLjM0WWhudzVpblNRVTZROWpkZ0RxRHlCQk1GM2xmN01HYTZBcXZJMV9ydjA="
headers = {
"Authorization": "Bearer " + api_key,
"Accept": "application/json"
}
payload = {
"prompt": prompt,
"question": question,
"stream": False
}
# 根据复选框状态判断是否传入cid
if self.cid_checkbox.isChecked():
payload["cid"] = self.cid
response = requests.post(api_url, json=payload, headers=headers)
if response.status_code == 200:
print(response.json())
json_response = response.json()
self.cid = str(json_response['data']['cid'])
self.json_response_edit.setText(str(json_response['data']['answer']))
else:
print(f"Request failed with error code {response.status_code}")
self.json_response_edit.setText(f"请求失败,错误码 {response.status_code}")
```
这样,如果`self.cid_checkbox`被选中,就会在`payload`中传入`cid`;否则不传入`cid`。
def generate_prompt(related_docs: List[str], query: str, prompt_template: str = PROMPT_TEMPLATE, ) -> str: context = "\n".join([doc.page_content for doc in related_docs]) prompt = prompt_template.replace("{question}", query).replace("{context}", context) return prompt
这是一段 Python 代码,它定义了一个名为 generate_prompt 的函数,该函数接受三个参数:related_docs、query 和 prompt_template,并返回一个字符串类型的 prompt。
函数的主要作用是根据一个问题和相关文档生成一个 prompt,其中 prompt_template 是一个包含特定占位符的字符串模板,{question} 和 {context} 分别代表问题和相关文档的内容。函数首先将相关文档的内容连接成一个长字符串,然后使用 replace 方法将 prompt_template 中的占位符替换为实际的值,最后返回生成的 prompt。