Browse Source

大模型代码仓库建立

master
kira 2 years ago
commit
9249f32029
19 changed files with 2465 additions and 0 deletions
  1. +2
    -0
      .gitignore
  2. +81
    -0
      README.md
  3. +177
    -0
      SparkApi.py
  4. BIN
      chat.gif
  5. +437
    -0
      chatGPT_Web.py
  6. +31
    -0
      chatGPT_Web_test.py
  7. +11
    -0
      content.log
  8. +8
    -0
      gunicorn_config.py
  9. +208
    -0
      nohup.out
  10. +327
    -0
      recvChatGPT_V3.py
  11. +3
    -0
      requirements.txt
  12. +26
    -0
      rpc_test.py
  13. +24
    -0
      skills.csv
  14. +641
    -0
      skills1.csv
  15. +101
    -0
      skills_movie.csv
  16. +6
    -0
      static/marked.min.js
  17. +116
    -0
      static/script.js
  18. +223
    -0
      static/style.css
  19. +43
    -0
      templates/chat.html

+ 2
- 0
.gitignore View File

@@ -0,0 +1,2 @@
*.pyc
*.json

+ 81
- 0
README.md View File

@@ -0,0 +1,81 @@
# chatGPT_Web Private Deployment
### Using the api of gpt-3.5-turbo model, supporting markdown and continuous conversation, using flask to implement SSE service to push streaming text, and achieve similar conversation effect as the official website.
> The project is based on the implementation of two other open source projects, and I would like to thank the authors of these two projects.

> Modified the interface of V3.py of [acheong08](https://github.com/acheong08/ChatGPT) to connect to the official api.
> Refer to the web code of [slippersheepig](https://github.com/slippersheepig/chatgpt-web).
# Deployment Method
## Install Dependencies
### Download this project by git
```shell
git clone "https://github.com/promisevergo/chatGPT_Web.git"
cd chatGPT_Web
```
### Use pip to read requirement.txt, it is recommended to use python 3.10 or higher.
```shell
pip install -r requirements.txt
```
### Configure the required parameters. If it is deployed locally, the default IP can be used. If it is deployed on a server, the internal network IP of the service needs to be filled in. If there is no internal network IP, fill in the public IP.
```python
config = {
"key": "your openai key",
'proxy': 'you proxy or None', #like "http:127.0.0.1:7890"
'ip': '127.0.0.1', # "127.0.0.1" or your server's internal network ip or your server's public ip
'port': 5000,
}
```
### Run the project. Note that the command line needs to run under the root directory of the project.
```shell
python chatGPT_Web.py
```
### Deploy using gunicorn. Note: gunicorn is not included in requirements.txt and you need to install the corresponding dependencies yourself.
```shell
gunicorn chatGPT_Web:app -c gunicorn_config.py
```
#### Open the browser and enter the displayed IP and port, such as: "127.0.0.1:5000", and you can see the conversation webpage.
![chat](https://github.com/promisevergo/chatGPT_Web/blob/main/chat.gif)

---
<br>
<br>
<br>

# chatGPT_Web 私有化部署
### 使用gpt-3.5-turbo 模型的api,支持markdown和连续对话,使用flask实现SSE服务推送流式文本,实现与官网类似的对话效果。
> 项目基于其他两个项目开源项目的实现,在此感谢两个项目的作者
> 修改[acheong08](https://github.com/acheong08/ChatGPT)的V3.py对接官方api的接口
> 参考[slippersheepig](https://github.com/slippersheepig/chatgpt-web)的网页端代码

# 部署方法
## 安装依赖
### 下载本项目
```shell
git clone "https://github.com/promisevergo/chatGPT_Web.git"
cd chatGPT_Web
```

### 使用pip 读取requirement.txt, 建议python3.10及以上的版本
```shell
pip install -r requirements.txt
```

### 配置需要的参数,如果是本地部署,则使用默认的ip即可,如果部署在服务器上时,需要填入服务内网ip,如果没有,则填公网ip看看
```python
config = {
"key": "your openai key",
'proxy': 'you proxy or None', #like "http:127.0.0.1:7890"
'ip': '127.0.0.1', # "127.0.0.1" or your server's internal network ip or your server's public ip
'port': 5000,
}
```
### 运行项目, 注意,命令端要运行在项目的根目录下
#### 直接python部署
```shell
python chatGPT_Web.py
```
#### 使用gunicorn部署,注意:gunicorn不在requirements.txt中,需要自行安装对应的依赖
```shell
gunicorn chatGPT_Web:app -c gunicorn_config.py
```
#### 打开浏览器,输入显示的ip及端口,比如:“127.0.0.1:5000",就可以看到对话的网页
![chat](https://github.com/promisevergo/chatGPT_Web/blob/main/chat.gif)

+ 177
- 0
SparkApi.py View File

@@ -0,0 +1,177 @@
import _thread as thread
import base64
import datetime
import hashlib
import hmac
import json
from urllib.parse import urlparse
import ssl
from datetime import datetime
from time import mktime
from urllib.parse import urlencode
from wsgiref.handlers import format_date_time

import websocket
import threading
from threading import Condition


class Ws_Param(object):
# 初始化
def __init__(self, APPID, APIKey, APISecret, gpt_url, condition):
self.APPID = APPID
self.APIKey = APIKey
self.APISecret = APISecret
self.host = urlparse(gpt_url).netloc
self.path = urlparse(gpt_url).path
self.gpt_url = gpt_url
self.resp = ''
self.condition = condition


# 生成url
def create_url(self):
# 生成RFC1123格式的时间戳
now = datetime.now()
date = format_date_time(mktime(now.timetuple()))

# 拼接字符串
signature_origin = "host: " + self.host + "\n"
signature_origin += "date: " + date + "\n"
signature_origin += "GET " + self.path + " HTTP/1.1"

# 进行hmac-sha256进行加密
signature_sha = hmac.new(self.APISecret.encode('utf-8'), signature_origin.encode('utf-8'),
digestmod=hashlib.sha256).digest()

signature_sha_base64 = base64.b64encode(signature_sha).decode(encoding='utf-8')

authorization_origin = f'api_key="{self.APIKey}", algorithm="hmac-sha256", headers="host date request-line", signature="{signature_sha_base64}"'

authorization = base64.b64encode(authorization_origin.encode('utf-8')).decode(encoding='utf-8')

# 将请求的鉴权参数组合为字典
v = {
"authorization": authorization,
"date": date,
"host": self.host
}
# 拼接鉴权参数,生成url
url = self.gpt_url + '?' + urlencode(v)
# 此处打印出建立连接时候的url,参考本demo的时候可取消上方打印的注释,比对相同参数时生成的url与自己代码生成的url是否一致
return url

# 收到websocket消息的处理
def on_message(self, ws, message):
# print(message)
data = json.loads(message)
code = data['header']['code']
if code != 0:
print(f'请求错误: {code}, {data}')
ws.close()
else:
choices = data["payload"]["choices"]
status = choices["status"]
content = choices["text"][0]["content"]
print(content, end='')
self.resp += content
if status == 2:
ws.close()

def on_close(self, ws, *args):
print("### closed ###")
# self.condition.notify()


# 收到websocket错误的处理
def on_error(ws, error):
print("### error:", error)


# 收到websocket关闭的处理
def on_close(ws, *args):
print("### closed ###")


# 收到websocket连接建立的处理
def on_open(ws):
thread.start_new_thread(run, (ws,))


def run(ws, *args):
data = json.dumps(gen_params(appid=ws.appid, question=ws.question))
ws.send(data)


# 收到websocket消息的处理
def on_message(ws, message):
# print(message)
data = json.loads(message)
code = data['header']['code']
if code != 0:
print(f'请求错误: {code}, {data}')
ws.close()
else:
choices = data["payload"]["choices"]
status = choices["status"]
content = choices["text"][0]["content"]
print(content, end='')
if status == 2:
ws.close()


def gen_params(appid, question):
"""
通过appid和用户的提问来生成请参数
"""
data = {
"header": {
"app_id": appid,
"uid": "1234"
},
"parameter": {
"chat": {
"domain": "general",
"temperature": 0.01,
"max_tokens": 2048,
"auditing": "default"
}
},
"payload": {
"message": {
"text": [
# {"role": "user", "content": question},
{"role": "user", "content": question}


]
}
}
}
return data


def main(appid, api_key, api_secret, gpt_url, question):
condition = threading.Condition()
condition.acquire()
wsParam = Ws_Param(appid, api_key, api_secret, gpt_url, condition)
websocket.enableTrace(False)
wsUrl = wsParam.create_url()
print(wsUrl)
ws = websocket.WebSocketApp(wsUrl, on_message=wsParam.on_message, on_error=on_error, on_close=wsParam.on_close, on_open=on_open)
ws.appid = appid
ws.question = question
ws.run_forever(sslopt={"cert_reqs": ssl.CERT_NONE})
# condition.wait()
print("回答:" + wsParam.resp)
return wsParam.resp

if __name__ == "__main__":
# 测试时候在此处正确填写相关信息即可运行
main(appid="3d9282da",
api_secret="ZTRiNDQwMTRlOTlmZDQwMDUwYTdjMDM0",
api_key="7c217b3a313f4b66fcc14a8e97f85103",
gpt_url="ws://spark-api.xf-yun.com/v1.1/chat",
# question='你是谁')
# question='将给定语段转换为含义最相似的意图 。意图是如下列表中的一项。如果没有对应意图或者语段缺失则返回0.列表为{1、你喜欢的状态是什么。2、公司高管有谁。3、打印机怎么使用。4、员工的福利有哪些。5、公司的价值观是什么。6、工作时间是几点。7、公司的愿景是什么。8、公司的使命是什么。9、公司有哪些产品。10、员工守则是什么。11、介绍一下你们公司。12、洗手间怎么走。13、开门。14、关门。15、取消你的静音。16、调小你的音量。17、调大你的音量。18、把你的声音关掉。19、介绍你自己。20、介绍我。21、预约个访客。22、预约会议。23、大会议室的地点。24.小会议室的地点。25、打招呼。26.停止。27、找人。28、在不在。}。输出为JSON格式,键为number。不要输出任何说明和解释。语段为“[用户]:' \
question='假设你是公司前台,你在与面前的人对话,语段代表对方的问话,首先生成一个应对,然后从列表中选出一个选项作为回答的内容,如果没有对应意图或者语段缺失则返回0。列表为{1、喜欢的状态。2、公司高管名单。3、打印机使用指南。4、员工的福利待遇。5、公司的价值观。6、工作时间。7、公司的愿景。8、公司的使命。9、公司产品。10、员工守则。11、洗手间位置。12、开门。13、关门。14、取消静音。15、调小音量。16、调大音量。17、把声音关掉。18、自我介绍。19、对方介绍。20、预约访客。21、预约会议。22、王总的位置。23、介绍一下你们公司。24、怎么联系财务。}。输出为JSON格式,键只有number,代表应对的编号。不要输出任何说明和解释。语段为:产品介绍')

BIN
chat.gif View File

Before After
Width: 1140  |  Height: 790  |  Size: 124 KiB

+ 437
- 0
chatGPT_Web.py View File

@@ -0,0 +1,437 @@
import os
import platform
import json
import threading
from time import sleep

import openai
import websocket
import ssl

from SparkApi import Ws_Param, on_message, on_error, on_open, on_close, main
from recvChatGPT_V3 import Chatbot_V3
from flask import Flask, request, render_template, Response, abort
from flask_cors import CORS, cross_origin
import redis
from rpc_test import Zhouzhou

app = Flask(__name__)

# openai.api_key = os.getenv("OPENAI_API_KEY")
openai.api_key = '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'

skills = {}


class ChatCompletionCustom:
def __init__(self):
self.role = {"role": "system", "content": "you are a useful assistant."}
self.history = []
self.skill_list = {}
self.embedding_strings = ['华大基因公司主营业务为通过基因检测、质谱检测、生物信息分析等多组学大数据技术手段,',
'华大基因公司为科研机构、企事业单位、医疗机构、社会卫生组织等提供研究服务和精准医学检测综合解决方案。',
'华大基因以推动生命科学研究进展、生命大数据应用和提高全球医疗健康水平为出发点,',
'基于基因领域研究成果及精准检测技术在民生健康方面的应用,',
'致力于加速科技创新,减少出生缺陷,加强肿瘤防控,抑制重大疾病对人类的危害,实现精准治愈感染,全面助力精准医学。',
'以华大基因举例:作为中国基因行业的奠基者,秉承“基因科技造福人类”的愿景,通过20多年的人才积聚、科研积累和产业积淀,',
'华大基因公司已建成覆盖全球百余个国家和全国所有省市自治区的营销服务网络,成为屈指可数的覆盖本行业全产业链、全应用领域的科技公司,立足技术先进、配置齐全和规模领先的多组学产出平台,已成为全球屈指可数的科学技术服务提供商和精准医疗服务运营商。',
'2017年,华大基因于深圳证券交易所创业板上市',
'在2016年的自然指数排名(Nature Index Annual Tables)中,华大名列亚太地区生命科学产业机构(life science - corporate)第一位,并连续七年蝉联该排名第一',
'人类基因组计划:1999年9月1日,于英国茵格斯顿举行的第五次人类基因组测序战略会议上,华大基因创始人之一杨焕明提出,中国愿承担人类3号染色体短臂端粒一侧约30厘摩尔(相当于约3,000万个碱基对)区域的测序和分析任务,占整体人类基因组测序工作的1%,成为人类基因组计划成员当中唯一一个发展中国家',
'水稻基因组计划:水稻(籼稻)基因组工作框架图:华大基因于2000年启动水稻基因组计划,希望通过测序找出水稻产量相关基因,并于2002年在《科学》期刊以封面文章发布首个水稻(籼稻))因组的工作框架序列图,文章先后被引用接近四千次。此次由中国科学家合作完成的水稻基因工作框架图,是继人类基因组之后完成测定的最大的基因组,也是当时测定的最大植物基因组。 水稻作为第一个完成基因组测序农作物,对解决全球粮食问题具有重要意义,建立了改善水稻品质、提高水稻产量的重要基础,并被当时《科学》杂志期刊编辑认为水稻基因组研究工作,对人类健康的重要性在接下来的二十年较人类基因组更大',
'国际大熊猫基因组计划:从北京奥运会的吉祥物大熊猫“晶晶”抽取样本,利用短序列(short-reads)模式组装全球首个熊科动物、也是第二个肉食类动物的基因图谱,包含2.25千兆(Gb)个碱基对,并于2010年1月在《自然》科学期刊以封面文章发布。研究进一步支持大多数科学家所持的“大熊猫属于熊科动物”的观点,并为日后使用次世代基因测序技术,快速省时地组装大型真核生物(eukaryotic),如哺乳类动基因图谱奠定了基础。研究指出,相比于自然环境,人类活动对其造成的影响更为严重']
# self.df = get_embed_array(self.embedding_strings)


chat = ChatCompletionCustom()

zhouzhou = Zhouzhou()

# config set
config = {
"key": "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",
'proxy': None,
'ip': '127.0.0.1', # "127.0.0.1" or your server's internal network ip or your server's public ip
'port': 5001,
}

URL_API = "https://api.openai.com/v1/chat/completions"

headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {config['key']}"
}

# init chat bot
chatbot = Chatbot_V3(config['key'], "gpt-3.5-turbo", proxy=config['proxy'])


# 给定一个Dictory,循环获取key,value,并将其组合成"1、{key}2、{key}3、{key}的格式"
def format_skill_list(list={}, msg=''):
prifix = '假设你是北京联通公司的客服,我会给你提出一个问题{q},你在我给定的以下列表{list}中出找一个与该问题{q}接近的问题,如果没有符合的答案,回复”””Null”””。列表{list}问题如下:'
suffix = ',不要做多余回答,回复的内容只能是列表{list}中的内容或"""Null""",我接下来问的问题是:'
result = prifix + '"""'
for i, (key, value) in enumerate(list.items()):
result += f"{i + 1}、{key}"
result += '"""' + suffix + msg
print(result)
return result


def format_skill_list_movie(list={}, msg=''):
prifix = 'answer only in a mark down cell, find the closest sentence . The format is' + \
'"""' + \
'[{"msg": <sentence>}]' + \
'"""' + \
'Returns Null if there is no matching sentence.The format is' + \
'"""' + \
'[{"msg":"Null"}]' + \
'"""' + \
'我提供的句子如下:'
suffix = '不附加说明和解释的文字。' + \
'my paragraph is:'
result = prifix + '['
for i, (key, value) in enumerate(list.items()):
result += "{" + f"{i + 1}、{key}" + "},"
result = result[0: -1] + ']' + suffix + '"""' + msg + '"""'
print(result)
return result

def format_skill_list_zhenhuan(list={}, msg='',q_arrs=[]):
prifix = '假设你是公司前台,你在与面前的人对话,语段代表对方的问话,首先生成一个应对,然后从列表中选出一个选项作为回答的内容,如果没有对应意图或者语段缺失则返回0。列表为'
# suffix = '。输出为JSON格式,键为number,代表应对的编号。示例输出为:{"number":_}。不要输出任何说明和解释。语段为:'
suffix = '。输出为JSON格式,键为number,代表应对的编号。不要输出任何说明和解释。语段为:'
result = prifix + '{'
for i, (key, value) in enumerate(list.items()):
q_arrs.append(key)
result += f"{i + 1}、{key}"
result += '}' + suffix + msg + '"'
# result = prifix + msg + suffix
print(result)
return result,q_arrs


# Routing, rendering chat interface
@app.route('/')
def index():
chatbot.reset()
return render_template('chat.html')


# Routing, normal chat,not SSE
@app.route('/chat', methods=['POST'])
def chat():
postData = request.get_json() # Get data from POST request
print(postData)
query = postData.get('query', 'Hello')
max_token = postData.get('max_token', '3000') # nouse
temperature = postData.get('temperature', 0.5)
top_p = postData.get('top_p', 1.0)
role = postData.get('role', 'user')
convo_id = postData.get('convo_id', 'default')
n = postData.get('n', 1)
try:
response = chatbot.ask(prompt=query, role=role, convo_id=convo_id, top_p=top_p, temperature=temperature, n=n)
print(response)
return response
except Exception as e:
return e


# Routing, SSE chat
@app.route('/chatstream', methods=['GET', 'POST'])
def chat_stream():
query = request.args.get('query', 'Hello')
max_token = float(request.args.get('max_token', '3000')) # nNouse
temperature = float(request.args.get('temperature', '0.5'))
top_p = float(request.args.get('top_p', '1.0'))
role = request.args.get('role', 'user')
convo_id = request.args.get('convo_id', 'default')
n = int(request.args.get('n', '1'))
# 将问题格式化
query = format_skill_list(chatbot.skills, query)

return Response(
chatbot.ask_stream_text(prompt=query, role=role, convo_id=convo_id, top_p=top_p, temperature=temperature, n=n),
mimetype='text/event-stream')


def chat_completion_for_multi_turn(msg):
role = {"role": "system", "content": "你是一个幽默段子手."}
print("当前角色: {}".format(chat.role['content']))
input_message = [
chat.role
]
for i in range(len(msg)):
# 对i除以2取余数,如果是0,输入input_message.append({"role": "user", "content": msg[i]}),否则输入input_message.append({"role": "assistant", "content": msg[i]})
if i % 2 == 0:
input_message.append({"role": "user", "content": msg[i]})
else:
input_message.append({"role": "assistant", "content": msg[i]})
print("调用gpt的prompts:")
print(input_message)
completion = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
# model="gpt-4",/
messages=input_message,
temperature=0.8,
frequency_penalty=0,
max_tokens=1024,
presence_penalty=0,
top_p=1
)
print(completion.choices[0].message['content'])
temp_completion = {'question': {"role": "user", "content": msg},
'answer': {"role": "assistant", "content": completion.choices[0].message['content']}}

return completion.choices[0].message['content']


@app.route(rule='/chat_data', methods=['post'])
@cross_origin()
def chat_data():
chat.role = {"role": "system",
"content": '根据以下文章提出可能问到的10个问题,并给出对应的答案,回答的形式为"{序号}、{问题}|{答案}",不要回复其他内容。'}
# chat.role = {"role": "system", "content": '我会给出一部电影的资料,将资料拆解成10个问题,要求每个问题的开头都是电影名,并给出对应的答案。回答的形式为"{序号}、{电影名}{问题}|{答案}",不要回复其他内容。'}

try:
req = request
msg = []
m = request.json.get('corpus')
# 如果m不为空,就加入到msg中
if m is not None:
msg.append(m)
data = {'msg': chat_completion_for_multi_turn(msg)}
print("success")
test = {}
# 获得的结果字符串为"问题1|答案1\n问题2|答案2\n问题3|答案3\n问题4|答案4\n...",循环将其分割为问题和答案,将问题作为key,答案作为value,存储在chat.skill_list中
for i in data['msg'].split('\n'):
print()
# chat.skill_list[i.split('|')[0].index('、')] = i.split('|')[1]
q = i.split('|')[0]
a = i.split('|')[1]
chatbot.skills[q[q.index('、') + 1:]] = a

# 将chat.skill_list中的key和value用print()函数打印出来
for i, (key, value) in enumerate(chatbot.skills.items()):
print(f"{i + 1}、{key}:{value}")

# 获取当前路径并打印出来
print(os.getcwd())

# 将chatbot.skills中的key和value保存到skills.csv中,以便后续使用
with open('/Users/ruoxiyin/Documents/缔智元/代码/chatGPT_Web-main/skills.csv', 'a', encoding='utf-8') as f:
for key, value in chatbot.skills.items():
f.write(f"{key}|{value}\n")
return data
except Exception as e:
print("An exception occurred:", str(e))
return {'msg': '真抱歉,我连接Chatgpt的好像出现问题了呀'}


@app.route(rule='/get_skill_list', methods=['get'])
@cross_origin()
def get_skill_list():
print("get_skill_list")
# 将chat.skill_list中的key和value用print()函数打印出来
for i, (key, value) in enumerate(chatbot.skills.items()):
print(f"{i + 1}、{key}:{value}")
# 将chatbot.skills序列化成json格式后作为返回值返回
return json.dumps(chatbot.skills, ensure_ascii=False)


@app.route(rule='/question_answer', methods=['post'])
@cross_origin()
def question_answer():
# 连接redis数据库,地址为39.107.77.235,端口为6379
r = redis.Redis(host='39.107.77.235', port=6381)
# 获取redis数据库中的key为"session"的值,如果存在,返回0,否则新增一个key为"session"的值,值为1
session = r.get("chatgpt:session")
if session is None:
r.set("session", 1)
else:
# 断开redis数据库的连接
r.close()
abort(500)

chat.role = {"role": "system", "content": '你是一个有用的助理'}
try:
req = request
msg = []
m = request.json.get('corpus')
# 如果m不为空,就加入到msg中

if m is not None:
# m = format_skill_list(chatbot.skills, m)
m = format_skill_list_movie(chatbot.skills, m)
msg.append(m)
resp = chat_completion_for_multi_turn(msg)
print(resp)
if resp == 'Null':
data = {'msg': "对不起,这个问题我不太清楚呀"}
# resp = resp[resp.index('、') + 1:]
else:
# 判断chatbot.skills字典是否有resp的key
if resp in chatbot.skills.keys():
data = {'msg': chatbot.skills[resp]}
else:
data = "对不起,这个问题我不太清楚呀"
# 循环遍历chatbot.skills,resp如果包含key,则将对应value赋值给data
for key, value in chatbot.skills.items():
if key in resp:
data = {'msg': value}
break

# 清空redis数据库中的key为"session"的值,并断开连接
r.delete("chatgpt:session")
r.close()
# zhouzhou发送text消息
# zhouzhou.say_text(data['msg'])
return data
except Exception as e:
print("An exception occurred:", str(e))
return {'msg': '真抱歉,我连接Chatgpt的好像出现问题了呀'}


def do_stream_response(resp_words):
for i in range(0, len(resp_words)):
sleep(0.1)
yield 'data: {}\n\n'.format(json.dumps({'content': resp_words[i]}))


@app.route('/chatstream_qa', methods=['GET', 'POST'])
@cross_origin()
def chat_stream_qa():
chat.role = {"role": "system", "content": '你是一个有用的助理'}
query = request.args.get('query', 'Hello')
# 将问题格式化
msg = []
q_arrs = []
query, q_arrs = format_skill_list_zhenhuan(chatbot.skills, query,q_arrs)
msg.append(query)
resp = chat_completion_for_multi_turn(msg)
# resp = 'Null'
data = ''
# 将resp用json格式化,获取当中的number字段
resp = json.loads(resp)
resp = resp['number']

if resp == 0:
data = "对不起,这个问题我不太清楚呀"
else:
# 根据resp的数字获取q_arrs中对应元素,并将该元素判断chatbot.skills字典是否有对应的key
resp = q_arrs[resp - 1]
if resp in chatbot.skills.keys():
data = '匹配到问题:' + resp + ',回答:' + chatbot.skills[resp]
else:
print('data:' + data)
if data is None or data == '':
data = "对不起,这个问题我不太清楚呀"
# 循环遍历chatbot.skills,resp如果包含key,则将对应value赋值给data
for key, value in chatbot.skills.items():
if key in resp:
data = value
break
# zhouzhou发送text消息
# zhouzhou.say_text(data)
return Response(do_stream_response(data), mimetype='text/event-stream')
# return Response('data: {}\n\n'.format(json.dumps({'content':data})))


@app.route('/chat_qa', methods=['GET', 'POST'])
@cross_origin()
def chat_qa():
chat.role = {"role": "system", "content": '你是一个有用的助理'}
print(request.args)
query = request.args.get('query', 'Hello')
# 将问题格式化
msg = []
q_arrs = []
query, q_arrs = format_skill_list_zhenhuan(chatbot.skills, query,q_arrs)
msg.append(query)
resp = chat_completion_for_multi_turn(msg)
# resp = 'Null'
data = ''
# 将resp用json格式化,获取当中的number字段
resp = json.loads(resp)
resp = resp['number']

if resp == 0:
data = "对不起,这个问题我不太清楚呀"
else:
# 根据resp的数字获取q_arrs中对应元素,并将该元素判断chatbot.skills字典是否有对应的key
resp = q_arrs[resp - 1]
if resp in chatbot.skills.keys():
data = chatbot.skills[resp]
else:
print('data:' + data)
if data is None or data == '':
data = "对不起,这个问题我不太清楚呀"
# 循环遍历chatbot.skills,resp如果包含key,则将对应value赋值给data
for key, value in chatbot.skills.items():
if key in resp:
data = value
break
# zhouzhou发送text消息
# zhouzhou.say_text(data)
# 将data格式化成json格式,存入msg字段中
data = {'msg': data}
return data


@app.route('/chatstream_fire', methods=['GET', 'POST'])
@cross_origin()
def chat_stream_fire():
chat.role = {"role": "system", "content": '你是一个有用的助理'}
query = request.args.get('query', 'Hello')

# 将问题格式化
msg = []
q_arrs = []
query, q_arrs = format_skill_list_zhenhuan(chatbot.skills, query,q_arrs)
msg.append(query)
# 获取一个condition,并将condition存入Ws_Param中
condition = threading.Condition()
# condition.acquire()
print(query)
resp = main(appid="3d9282da",
api_secret="ZTRiNDQwMTRlOTlmZDQwMDUwYTdjMDM0",
api_key="7c217b3a313f4b66fcc14a8e97f85103",
gpt_url="ws://spark-api.xf-yun.com/v1.1/chat",
# question='你是谁')
# question='将给定语段转换为含义最相似的意图 。意图是如下列表中的一项。如果没有对应意图或者语段缺失则返回0.列表为{1、你喜欢的状态是什么。2、公司高管有谁。3、打印机怎么使用。4、员工的福利有哪些。5、公司的价值观是什么。6、工作时间是几点。7、公司的愿景是什么。8、公司的使命是什么。9、公司有哪些产品。10、员工守则是什么。11、介绍一下你们公司。12、洗手间怎么走。13、开门。14、关门。15、取消你的静音。16、调小你的音量。17、调大你的音量。18、把你的声音关掉。19、介绍你自己。20、介绍我。21、预约个访客。22、预约会议。23、大会议室的地点。24.小会议室的地点。25、打招呼。26.停止。27、找人。28、在不在。}。输出为JSON格式,键为number。不要输出任何说明和解释。语段为“[用户]:'
question=query)

# condition.wait()
# condition.release()
# resp = chat_completion_for_multi_turn(msg)
# resp = 'Null'
data = ''
# 将resp用json格式化,获取当中的number字段
resp = json.loads(resp)
resp = resp['number']
if resp == 'Null':
data = "对不起,这个问题我不太清楚呀"
else:
# 根据resp的数字获取q_arrs中对应元素,并将该元素判断chatbot.skills字典是否有对应的key
resp = q_arrs[resp - 1]
if resp in chatbot.skills.keys():
data = chatbot.skills[resp]
else:
print('data:' + data)
if data is None or data == '':
data = "对不起,这个问题我不太清楚呀"
# 循环遍历chatbot.skills,resp如果包含key,则将对应value赋值给data
for key, value in chatbot.skills.items():
if key in resp:
data = value
break

# return Response(do_stream_response(data), mimetype='text/event-stream')
# return Response('data: {}\n\n'.format(json.dumps({'content':data})))
data = {'msg': data}
return data


if __name__ == '__main__':
app.run(debug=True, host=config['ip'], port=config['port'])

+ 31
- 0
chatGPT_Web_test.py View File

@@ -0,0 +1,31 @@
from chatGPT_Web import format_skill_list_movie




def test_happy_path_list_not_empty():
list = {"key1": "value1", "key2": "value2"}
msg = "This is a message"
expected_result = 'answer only in a mark down cell, find the closest sentence . The format is\n' + \
'"""\n' + \
'[{"msg": <sentence>}]\n' + \
'"""\n' + \
'Returns Null if there is no matching sentence.The format is\n' + \
'"""\n' + \
'[{"msg":"Null"}]\n' + \
'"""\n' + \
'我提供的句子如下:\n' + \
'[{1、key1},{2、key2},]' + \
'不附加说明和解释的文字。\n' + \
'my paragraph is:\n"""This is a message"""'
print(expected_result)
print("=====================================")
format_skill_list_movie(list, msg)
print("=====================================")
assert format_skill_list_movie(list, msg) == expected_result




if __name__ == '__main__':
test_happy_path_list_not_empty()

+ 11
- 0
content.log View File

@@ -0,0 +1,11 @@












+ 8
- 0
gunicorn_config.py View File

@@ -0,0 +1,8 @@
#Deployment commands: gunicorn chatGPT_Web:app -c gunicorn_config.py

bind = '0.0.0.0:5001' # your IP:PORT
worker_class = 'gevent'
worker_connections = 1000
workers = 1 # Number of worker processes
timeout = 60
loglevel = 'debug'

+ 208
- 0
nohup.out View File

@@ -0,0 +1,208 @@
[2023-07-07 16:51:23 +0800] [71719] [DEBUG] Current configuration:
config: gunicorn_config.py
wsgi_app: None
bind: ['0.0.0.0:5001']
backlog: 2048
workers: 1
worker_class: gevent
threads: 1
worker_connections: 1000
max_requests: 0
max_requests_jitter: 0
timeout: 60
graceful_timeout: 30
keepalive: 2
limit_request_line: 4094
limit_request_fields: 100
limit_request_field_size: 8190
reload: False
reload_engine: auto
reload_extra_files: []
spew: False
check_config: False
print_config: False
preload_app: False
sendfile: None
reuse_port: False
chdir: /Users/ruoxiyin/Documents/缔智元/代码/chatGPT_Web-main
daemon: False
raw_env: []
pidfile: None
worker_tmp_dir: None
user: 501
group: 20
umask: 0
initgroups: False
tmp_upload_dir: None
secure_scheme_headers: {'X-FORWARDED-PROTOCOL': 'ssl', 'X-FORWARDED-PROTO': 'https', 'X-FORWARDED-SSL': 'on'}
forwarded_allow_ips: ['127.0.0.1']
accesslog: None
disable_redirect_access_to_syslog: False
access_log_format: %(h)s %(l)s %(u)s %(t)s "%(r)s" %(s)s %(b)s "%(f)s" "%(a)s"
errorlog: -
loglevel: debug
capture_output: False
logger_class: gunicorn.glogging.Logger
logconfig: None
logconfig_dict: {}
syslog_addr: unix:///var/run/syslog
syslog: False
syslog_prefix: None
syslog_facility: user
enable_stdio_inheritance: False
statsd_host: None
dogstatsd_tags:
statsd_prefix:
proc_name: None
default_proc_name: chatGPT_Web:app
pythonpath: None
paste: None
on_starting: <function OnStarting.on_starting at 0x103db3670>
on_reload: <function OnReload.on_reload at 0x103db3790>
when_ready: <function WhenReady.when_ready at 0x103db38b0>
pre_fork: <function Prefork.pre_fork at 0x103db39d0>
post_fork: <function Postfork.post_fork at 0x103db3af0>
post_worker_init: <function PostWorkerInit.post_worker_init at 0x103db3c10>
worker_int: <function WorkerInt.worker_int at 0x103db3d30>
worker_abort: <function WorkerAbort.worker_abort at 0x103db3e50>
pre_exec: <function PreExec.pre_exec at 0x103db3f70>
pre_request: <function PreRequest.pre_request at 0x103e730d0>
post_request: <function PostRequest.post_request at 0x103e73160>
child_exit: <function ChildExit.child_exit at 0x103e73280>
worker_exit: <function WorkerExit.worker_exit at 0x103e733a0>
nworkers_changed: <function NumWorkersChanged.nworkers_changed at 0x103e734c0>
on_exit: <function OnExit.on_exit at 0x103e735e0>
proxy_protocol: False
proxy_allow_ips: ['127.0.0.1']
keyfile: None
certfile: None
ssl_version: 2
cert_reqs: 0
ca_certs: None
suppress_ragged_eofs: True
do_handshake_on_connect: False
ciphers: None
raw_paste_global_conf: []
strip_header_spaces: False
[2023-07-07 16:51:23 +0800] [71719] [INFO] Starting gunicorn 20.1.0
[2023-07-07 16:51:23 +0800] [71719] [DEBUG] Arbiter booted
[2023-07-07 16:51:23 +0800] [71719] [INFO] Listening at: http://0.0.0.0:5001 (71719)
[2023-07-07 16:51:23 +0800] [71719] [INFO] Using worker: gevent
[2023-07-07 16:51:23 +0800] [71721] [INFO] Booting worker with pid: 71721
[2023-07-07 16:51:23 +0800] [71719] [DEBUG] 1 workers
[2023-07-07 16:51:56 +0800] [71721] [INFO] Parent changed, shutting down: <Worker 71721>
[2023-07-07 16:51:56 +0800] [71721] [INFO] Worker exiting (pid: 71721)
加载skills.csv文件
[2023-07-07 16:52:05 +0800] [71759] [DEBUG] Current configuration:
config: gunicorn_config.py
wsgi_app: None
bind: ['0.0.0.0:5001']
backlog: 2048
workers: 1
worker_class: gevent
threads: 1
worker_connections: 1000
max_requests: 0
max_requests_jitter: 0
timeout: 60
graceful_timeout: 30
keepalive: 2
limit_request_line: 4094
limit_request_fields: 100
limit_request_field_size: 8190
reload: False
reload_engine: auto
reload_extra_files: []
spew: False
check_config: False
print_config: False
preload_app: False
sendfile: None
reuse_port: False
chdir: /Users/ruoxiyin/Documents/缔智元/代码/chatGPT_Web-main
daemon: False
raw_env: []
pidfile: None
worker_tmp_dir: None
user: 501
group: 20
umask: 0
initgroups: False
tmp_upload_dir: None
secure_scheme_headers: {'X-FORWARDED-PROTOCOL': 'ssl', 'X-FORWARDED-PROTO': 'https', 'X-FORWARDED-SSL': 'on'}
forwarded_allow_ips: ['127.0.0.1']
accesslog: None
disable_redirect_access_to_syslog: False
access_log_format: %(h)s %(l)s %(u)s %(t)s "%(r)s" %(s)s %(b)s "%(f)s" "%(a)s"
errorlog: -
loglevel: debug
capture_output: False
logger_class: gunicorn.glogging.Logger
logconfig: None
logconfig_dict: {}
syslog_addr: unix:///var/run/syslog
syslog: False
syslog_prefix: None
syslog_facility: user
enable_stdio_inheritance: False
statsd_host: None
dogstatsd_tags:
statsd_prefix:
proc_name: None
default_proc_name: chatGPT_Web:app
pythonpath: None
paste: None
on_starting: <function OnStarting.on_starting at 0x1054fa670>
on_reload: <function OnReload.on_reload at 0x1054fa790>
when_ready: <function WhenReady.when_ready at 0x1054fa8b0>
pre_fork: <function Prefork.pre_fork at 0x1054fa9d0>
post_fork: <function Postfork.post_fork at 0x1054faaf0>
post_worker_init: <function PostWorkerInit.post_worker_init at 0x1054fac10>
worker_int: <function WorkerInt.worker_int at 0x1054fad30>
worker_abort: <function WorkerAbort.worker_abort at 0x1054fae50>
pre_exec: <function PreExec.pre_exec at 0x1054faf70>
pre_request: <function PreRequest.pre_request at 0x1055bb0d0>
post_request: <function PostRequest.post_request at 0x1055bb160>
child_exit: <function ChildExit.child_exit at 0x1055bb280>
worker_exit: <function WorkerExit.worker_exit at 0x1055bb3a0>
nworkers_changed: <function NumWorkersChanged.nworkers_changed at 0x1055bb4c0>
on_exit: <function OnExit.on_exit at 0x1055bb5e0>
proxy_protocol: False
proxy_allow_ips: ['127.0.0.1']
keyfile: None
certfile: None
ssl_version: 2
cert_reqs: 0
ca_certs: None
suppress_ragged_eofs: True
do_handshake_on_connect: False
ciphers: None
raw_paste_global_conf: []
strip_header_spaces: False
[2023-07-07 16:52:05 +0800] [71759] [INFO] Starting gunicorn 20.1.0
[2023-07-07 16:52:05 +0800] [71759] [DEBUG] Arbiter booted
[2023-07-07 16:52:05 +0800] [71759] [INFO] Listening at: http://0.0.0.0:5001 (71759)
[2023-07-07 16:52:05 +0800] [71759] [INFO] Using worker: gevent
[2023-07-07 16:52:05 +0800] [71760] [INFO] Booting worker with pid: 71760
[2023-07-07 16:52:06 +0800] [71759] [DEBUG] 1 workers
[2023-07-07 16:52:07 +0800] [71759] [INFO] Handling signal: int
[2023-07-07 16:52:07 +0800] [71760] [INFO] Worker exiting (pid: 71760)
加载skills.csv文件
Traceback (most recent call last):
File "/Users/ruoxiyin/opt/anaconda3/envs/spider/lib/python3.9/site-packages/gevent/monkey.py", line 893, in _shutdown
sleep()
File "/Users/ruoxiyin/opt/anaconda3/envs/spider/lib/python3.9/site-packages/gevent/hub.py", line 159, in sleep
waiter.get()
File "src/gevent/_waiter.py", line 143, in gevent._gevent_c_waiter.Waiter.get
File "src/gevent/_waiter.py", line 154, in gevent._gevent_c_waiter.Waiter.get
File "src/gevent/_greenlet_primitives.py", line 61, in gevent._gevent_c_greenlet_primitives.SwitchOutGreenletWithLoop.switch
File "src/gevent/_greenlet_primitives.py", line 61, in gevent._gevent_c_greenlet_primitives.SwitchOutGreenletWithLoop.switch
File "src/gevent/_greenlet_primitives.py", line 65, in gevent._gevent_c_greenlet_primitives.SwitchOutGreenletWithLoop.switch
File "src/gevent/_gevent_c_greenlet_primitives.pxd", line 35, in gevent._gevent_c_greenlet_primitives._greenlet_switch
File "src/gevent/greenlet.py", line 908, in gevent._gevent_cgreenlet.Greenlet.run
File "/Users/ruoxiyin/opt/anaconda3/envs/spider/lib/python3.9/site-packages/gunicorn/workers/base.py", line 198, in handle_quit
sys.exit(0)
SystemExit: 0
2023-07-07T08:52:07Z <greenlet.greenlet object at 0x105f9d180 (otid=0x105f768a0) current active started main> failed with SystemExit

[2023-07-07 16:52:08 +0800] [71759] [INFO] Shutting down: Master

+ 327
- 0
recvChatGPT_V3.py View File

@@ -0,0 +1,327 @@
"""
A simple wrapper for the official ChatGPT API
https://github.com/acheong08/ChatGPT.git v3.py
"""
import json
import os
import sys
import platform
from typing import NoReturn

import requests
import tiktoken #解析成token令牌

class Chatbot_V3:
"""
Official ChatGPT API
"""

def __init__(
self,
api_key: str,
engine: str = os.environ.get("GPT_ENGINE") or "gpt-3.5-turbo",
proxy: str = None,
max_tokens: int = 3000,
temperature: float = 0.5,
top_p: float = 1.0,
presence_penalty: float = 0.0,
frequency_penalty: float = 0.0,
reply_count: int = 1,
system_prompt: str = "You are ChatGPT, a large language model trained by OpenAI. Respond conversationally",
) -> None:
"""
Initialize Chatbot with API key (from https://platform.openai.com/account/api-keys)
"""
self.engine = engine
self.session = requests.Session()
self.api_key = api_key
self.system_prompt = system_prompt
self.max_tokens = max_tokens
self.temperature = temperature
self.top_p = top_p
self.presence_penalty = presence_penalty
self.frequency_penalty = frequency_penalty
self.reply_count = reply_count

if proxy:
self.session.proxies = {
"http": proxy,
"https": proxy,
}

self.conversation: dict = {
"default": [
{
"role": "system",
"content": system_prompt,
},
],
}
if max_tokens > 4000:
raise Exception("Max tokens cannot be greater than 4000")

if self.get_token_count("default") > self.max_tokens:
raise Exception("System prompt is too long")
self.skills = {}
# 判断是否存在skills.csv文件,如果存在则读取key,value并加载进skills字典
print("加载skills.csv文件")
if os.path.exists("/Users/ruoxiyin/Documents/缔智元/代码/chatGPT_Web-main/skills.csv"):
with open("/Users/ruoxiyin/Documents/缔智元/代码/chatGPT_Web-main/skills.csv", "r", encoding="utf-8") as f:
for line in f.readlines():
key, value = line.strip().split("|")
self.skills[key] = value


def add_to_conversation(
self,
message: str,
role: str,
convo_id: str = "default",
) -> None:
"""
Add a message to the conversation
"""
self.conversation[convo_id].append({"role": role, "content": message})
def get_conversation(
self,
convo_id: str = "default",
) -> list:
"""
Get the conversation
"""
return self.conversation[convo_id]

def __truncate_conversation(self, convo_id: str = "default") -> None:
"""
Truncate the conversation
"""
while True:
if (
self.get_token_count(convo_id) > self.max_tokens
and len(self.conversation[convo_id]) > 1
):
# Don't remove the first message
self.conversation[convo_id].pop(1)
else:
break

# https://github.com/openai/openai-cookbook/blob/main/examples/How_to_count_tokens_with_tiktoken.ipynb
def get_token_count(self, convo_id: str = "default") -> int:
"""
Get token count
"""
if self.engine not in ["gpt-3.5-turbo", "gpt-3.5-turbo-0301"]:
raise NotImplementedError("Unsupported engine {self.engine}")

encoding = tiktoken.encoding_for_model(self.engine)

num_tokens = 0
for message in self.conversation[convo_id]:
# every message follows <im_start>{role/name}\n{content}<im_end>\n
num_tokens += 4
for key, value in message.items():
num_tokens += len(encoding.encode(value))
if key == "name": # if there's a name, the role is omitted
num_tokens += 1 # role is always required and always 1 token
num_tokens += 2 # every reply is primed with <im_start>assistant
return num_tokens

def get_max_tokens(self, convo_id: str) -> int:
"""
Get max tokens
"""
return self.max_tokens - self.get_token_count(convo_id)

def ask_stream(
self,
prompt: str,
role: str = "user",
convo_id: str = "default",
**kwargs,
) -> str:
"""
Ask a question
"""
# Make conversation if it doesn't exist
if convo_id not in self.conversation:
self.reset(convo_id=convo_id, system_prompt=self.system_prompt)
self.add_to_conversation(prompt, "user", convo_id=convo_id)
self.__truncate_conversation(convo_id=convo_id)
print(convo_id)

# Get response
response = self.session.post(
os.environ.get("API_URL") or "https://api.openai.com/v1/chat/completions",
headers={"Authorization": f"Bearer {kwargs.get('api_key', self.api_key)}"},
json={
"model": self.engine,
"messages": self.conversation[convo_id],
"stream": True,
# kwargs
"temperature": kwargs.get("temperature", self.temperature),
"top_p": kwargs.get("top_p", self.top_p),
"presence_penalty": kwargs.get(
"presence_penalty",
self.presence_penalty,
),
"frequency_penalty": kwargs.get(
"frequency_penalty",
self.frequency_penalty,
),
"n": kwargs.get("n", self.reply_count),
"user": role,
"max_tokens": self.get_max_tokens(convo_id=convo_id),
},
stream=True,
)
if response.status_code != 200:
raise Exception(
f"Error: {response.status_code} {response.reason} {response.text}",
)
response_role: str = None
full_response: str = ""
for line in response.iter_lines():
if not line:
continue
# Remove "data: "
line = line.decode("utf-8")[6:]
if line == "[DONE]":
break
resp: dict = json.loads(line)
choices = resp.get("choices")
if not choices:
continue
delta = choices[0].get("delta")
if not delta:
continue
if "role" in delta:
response_role = delta["role"]
if "content" in delta:
content = delta["content"]
full_response += content
yield content
self.add_to_conversation(full_response, response_role, convo_id=convo_id)

def ask_stream_text(
self,
prompt: str,
role: str = "user",
convo_id: str = "default",
**kwargs,
) -> str:
"""
Ask a question, push as Streaming text
"""
# Make conversation if it doesn't exist
if convo_id not in self.conversation:
self.reset(convo_id=convo_id, system_prompt=self.system_prompt)
# 去除上下文接入
self.add_to_conversation(prompt, "user", convo_id=convo_id)
self.__truncate_conversation(convo_id=convo_id)
# Get response
response = self.session.post(
os.environ.get("API_URL") or "https://api.openai.com/v1/chat/completions",
headers={"Authorization": f"Bearer {kwargs.get('api_key', self.api_key)}"},
json={
"model": self.engine,
"messages": self.conversation[convo_id],
"stream": True,
# kwargs
"temperature": kwargs.get("temperature", self.temperature),
"top_p": kwargs.get("top_p", self.top_p),
"presence_penalty": kwargs.get(
"presence_penalty",
self.presence_penalty,
),
"frequency_penalty": kwargs.get(
"frequency_penalty",
self.frequency_penalty,
),
"n": kwargs.get("n", self.reply_count),
"user": role,
"max_tokens": self.get_max_tokens(convo_id=convo_id),
},
stream=True,
)
if response.status_code != 200:
raise Exception(
f"Error: {response.status_code} {response.reason} {response.text}",
)
response_role: str = None
full_response: str = ""
for line in response.iter_lines():
if not line:
continue
line = line.decode("utf-8")[6:]
if line == "[DONE]":
break;
resp: dict = json.loads(line)
choices = resp.get("choices")
if not choices:
continue
delta = choices[0].get("delta")
if not delta:
continue
if "role" in delta:
response_role = delta["role"]
if "content" in delta:
content = delta['content']
full_response += content
yield 'data: {}\n\n'.format(json.dumps({'content':content})) #Got the answer content to push
yield 'data: {}\n\n'.format(json.dumps({'content':'[DONE]'})) #The answer is over, pushing [DONE]
# 去除上下文接入
self.conversation[convo_id].clear()
# self.add_to_conversation(full_response, response_role, convo_id=convo_id) #Add the answer to the conversation

def ask(
self,
prompt: str,
role: str = "user",
convo_id: str = "default",
**kwargs,
) -> str:
"""
Non-streaming ask
"""
response = self.ask_stream(
prompt=prompt,
role=role,
convo_id=convo_id,
**kwargs,
)
full_response: str = "".join(response)
return full_response

def rollback(self, n: int = 1, convo_id: str = "default") -> None:
"""
Rollback the conversation
"""
for _ in range(n):
self.conversation[convo_id].pop()

def reset(self, convo_id: str = "default", system_prompt: str = None) -> None:
"""
Reset the conversation
"""
self.conversation[convo_id] = [
{"role": "system", "content": system_prompt or self.system_prompt},
]

if __name__ == "__main__":
#获取config.json中的数据
path = os.path.split(os.path.realpath(__file__))[0]
with open(path + '/config.json', 'r') as f:
config = json.load(f)
if platform.system().lower() == 'linux':
proxys = None
else:
proxys = config['proxy']
chat = Chatbot_V3(config['key'], "gpt-3.5-turbo", proxy=proxys)
while True:
promt = input("请输入:")
if promt == 'exit':
break;
res = chat.ask(promt)
print(res)

+ 3
- 0
requirements.txt View File

@@ -0,0 +1,3 @@
Flask==2.0.3
requests==2.27.1
tiktoken==0.3.0

+ 26
- 0
rpc_test.py View File

@@ -0,0 +1,26 @@
# -*- coding: utf-8 -*-
import xmlrpc.client

class Zhouzhou(object):
def __init__(self):
proxy = xmlrpc.client.ServerProxy("http://192.168.10.130:8999/RPC2")

def say_text(self, text):
proxy = xmlrpc.client.ServerProxy("http://192.168.10.130:8999/RPC2")
result = proxy.say_text(text)
print(text)
return result



if __name__ == '__main__':
proxy = xmlrpc.client.ServerProxy("http://192.168.10.130:8999/RPC2")

# text = '好的,我给您推荐《肖申克的救赎》这部电影,《肖申克的救赎》是一部关于信仰、希望与勇气的经典电影。它讲述了主人公安迪被错误定为谋杀罪犯,被送进监狱,接着在监狱中经历磨难、努力幸存、培养友情、逐渐获得自由和复仇的故事。影片通过细腻的描写人物的情感变化,以及精彩的情节推进手法,让观众体会到了在绝境中坚持信念所能带来的力量与启示。影片荣膺多个奖项,被誉为电影史上的经典之作。'
# text = '当前中国电影行业的市场表现十分活跃,2023年全年票房突破250亿元,创下新的历史高点。国产影片在这个市场中占据着绝对的主导地位,国产电影总票房高达211.86亿,占据了全年票房总额的84.75%。其中《满江红》《流浪地球2》等国产电影在票房和口碑上表现出色,而外国电影的表现相对较弱。'
# text = '从武侠电影和黄蓉的角度出发,我觉得我可以成为《射雕英雄传》中的李莫愁。尽管李莫愁是一个反派角色,但是其不断追求武学上的卓越表现出了女性在武侠世界中的强大实力和独立个性,让人们看到了女性与男性平等竞技的可能性,它为武侠电影中的女性形象设定树立起了一个新的标准。'
# text = '好的,我给您推荐闪电侠,口碑非常好'
# text = '导演是安德斯·穆斯切蒂'
text = '他还导过小丑回魂,根据斯蒂芬·金的同名原著改编,非常精彩。'
result = proxy.say_text(text)
print(result)

+ 24
- 0
skills.csv View File

@@ -0,0 +1,24 @@
喜欢的状态。|九 九 六 哦
公司高管名单。|魏总
打印机使用指南。|{"skillCode":"15"}
员工的福利待遇。|{"skillCode":"16"}
公司的价值观。|{"skillCode":"17"}
工作时间。|{"skillCode":"19"}
公司的愿景。|{"skillCode":"18"}
公司的使命。|{"skillCode":"20"}
公司产品。|{"skillCode":"14"}
员工守则。|{"skillCode":"21"}
洗手间位置。|{"skillCode":"22"}
开门。|{"action":"openDoor","animation":"showRightHandForward"}
关门。|skillCode:关门
取消静音。|{"action":"mute","status":false}
调小音量。|{"action":"volume","status":1}
调大音量。|{"action":"volume","status":0}
把声音关掉。|{"action":"mute","status":true}
自我介绍。|{"action":"SelfIntroduction","skillCode":"12"}
对方介绍。|{"action": "frontPerson"}
预约访客。|{"action":"VisitorAppoint","skillCode":"2"}
预约会议。|{"action":"Meeting","skillCode":"1"}
王总的位置。|{"action":"VisitorRegister","skillCode":"3"}
介绍一下你们公司。|{"action":"CompanyIntroduction","skillCode":"11"}
怎么联系财务。|小迪,13910098255

+ 641
- 0
skills1.csv View File

@@ -0,0 +1,641 @@
我爱你!电影类型是什么?|剧情/爱情/家庭
我爱你!的导演是谁?|韩延
我爱你!的编剧团队有哪些人?|韩延/韩今谅/李亮文/陈文杰/胡泽尘
我爱你!的主演有哪些人?|倪大红/惠英红/梁家辉/叶童/成果/更多
我爱你!的制片国家/地区是哪里?|中国大陆/中国香港
我爱你!的语言有哪些?|粤语/汉语普通话
我爱你!在中国大陆的上映日期是什么时候?|2023-06-21
我爱你!在上海国际电影节的上映日期是什么时候?|2023-06-09
我爱你!的故事来源于什么?|韩国同名漫画
我爱你!的故事情节主要描述了什么?|四位老人,两对爱人,在步入生命终章之时,用力而纯粹地相爱,哪怕不再有明天,也要对彼此说出那句“我爱你!”
我爱你!电影类型是什么?|剧情/爱情/家庭
我爱你!的导演是谁?|韩延
我爱你!的编剧团队有哪些人?|韩延/韩今谅/李亮文/陈文杰/胡泽尘
我爱你!的主演有哪些人?|倪大红/惠英红/梁家辉/叶童/成果/更多
我爱你!的制片国家/地区是哪里?|中国大陆/中国香港
我爱你!的语言有哪些?|粤语/汉语普通话
我爱你!在中国大陆的上映日期是什么时候?|2023-06-21
我爱你!在上海国际电影节的上映日期是什么时候?|2023-06-09
我爱你!的故事来源于什么?|韩国同名漫画
我爱你!的故事情节主要描述了什么?|四位老人,两对爱人,在步入生命终章之时,用力而纯粹地相爱,哪怕不再有明天,也要对彼此说出那句“我爱你!”
别叫我“赌神”电影|辉哥是做什么的?
我爱你!电影类型是什么?|剧情/爱情/家庭
我爱你!的导演是谁?|韩延
我爱你!的编剧团队有哪些人?|韩延/韩今谅/李亮文/陈文杰/胡泽尘
我爱你!的主演有哪些人?|倪大红/惠英红/梁家辉/叶童/成果/更多
我爱你!的制片国家/地区是哪里?|中国大陆/中国香港
我爱你!的语言有哪些?|粤语/汉语普通话
我爱你!在中国大陆的上映日期是什么时候?|2023-06-21
我爱你!在上海国际电影节的上映日期是什么时候?|2023-06-09
我爱你!的故事来源于什么?|韩国同名漫画
我爱你!的故事情节主要描述了什么?|四位老人,两对爱人,在步入生命终章之时,用力而纯粹地相爱,哪怕不再有明天,也要对彼此说出那句“我爱你!”
别叫我“赌神”电影|辉哥是做什么的?
记忆电影的导演是谁?|阿彼察邦·韦拉斯哈古
记忆电影的编剧是谁?|阿彼察邦·韦拉斯哈古
记忆电影的主演有哪些?|蒂尔达·斯文顿 / 艾格尼丝·布雷克 / 丹尼尔·希梅内斯·卡乔 / 杰罗尼莫·巴伦 / 胡安·帕布罗·乌雷戈等
记忆电影属于哪个类型?|剧情
记忆电影的制片国家/地区有哪些?|哥伦比亚 / 泰国 / 法国 / 德国 / 墨西哥 / 卡塔尔 / 英国 / 中国大陆 / 瑞士
记忆电影使用的语言有哪些?|英语 / 西班牙语
记忆电影在中国大陆的上映日期是什么时候?|2023-06-22
记忆电影在哪个电影节上映的?|戛纳电影节
记忆电影讲述了哪个主人公的故事?|杰西卡·霍兰德
记忆电影的主要情节是什么?|杰西卡试图找寻幻听的根源,并开启了一场由幻想、偶遇与重逢组成的旅程,与记忆和历史产生回响。
我爱你!电影类型是什么?|剧情/爱情/家庭
我爱你!的导演是谁?|韩延
我爱你!的编剧团队有哪些人?|韩延/韩今谅/李亮文/陈文杰/胡泽尘
我爱你!的主演有哪些人?|倪大红/惠英红/梁家辉/叶童/成果/更多
我爱你!的制片国家/地区是哪里?|中国大陆/中国香港
我爱你!的语言有哪些?|粤语/汉语普通话
我爱你!在中国大陆的上映日期是什么时候?|2023-06-21
我爱你!在上海国际电影节的上映日期是什么时候?|2023-06-09
我爱你!的故事来源于什么?|韩国同名漫画
我爱你!的故事情节主要描述了什么?|四位老人,两对爱人,在步入生命终章之时,用力而纯粹地相爱,哪怕不再有明天,也要对彼此说出那句“我爱你!”
别叫我“赌神”电影|辉哥是做什么的?
记忆电影的导演是谁?|阿彼察邦·韦拉斯哈古
记忆电影的编剧是谁?|阿彼察邦·韦拉斯哈古
记忆电影的主演有哪些?|蒂尔达·斯文顿 / 艾格尼丝·布雷克 / 丹尼尔·希梅内斯·卡乔 / 杰罗尼莫·巴伦 / 胡安·帕布罗·乌雷戈等
记忆电影属于哪个类型?|剧情
记忆电影的制片国家/地区有哪些?|哥伦比亚 / 泰国 / 法国 / 德国 / 墨西哥 / 卡塔尔 / 英国 / 中国大陆 / 瑞士
记忆电影使用的语言有哪些?|英语 / 西班牙语
记忆电影在中国大陆的上映日期是什么时候?|2023-06-22
记忆电影在哪个电影节上映的?|戛纳电影节
记忆电影讲述了哪个主人公的故事?|杰西卡·霍兰德
记忆电影的主要情节是什么?|杰西卡试图找寻幻听的根源,并开启了一场由幻想、偶遇与重逢组成的旅程,与记忆和历史产生回响。
变形金刚:超能勇士崛起主演有哪些?|安东尼·拉莫斯 / 多米尼克·菲什巴克 / 彼特·库伦 / 朗·普尔曼 / 彼特·丁拉基等。
变形金刚:超能勇士崛起的导演是谁?|小斯蒂芬·卡普尔。
变形金刚:超能勇士崛起的编剧有哪些?|卓比·哈罗德 / 达内尔·梅耶尔 / 乔什·皮特斯 / 埃里希·霍贝尔 / 乔·霍贝尔。
变形金刚:超能勇士崛起主要讲述了什么故事?|终极反派宇宙大帝从天而降,驱使以天灾为首的恐惧兽掀起地球危机,巨无霸联合汽车人变形出发,一场前所未有的决战即将上演。
变形金刚:超能勇士崛起是什么类型的电影?|动作 / 科幻 / 冒险。
变形金刚:超能勇士崛起的制片国家或地区是哪里?|美国。
变形金刚:超能勇士崛起使用的语言是什么?|英语。
变形金刚:超能勇士崛起的上映时间是什么时候?|2023-06-09(美国/中国大陆) / 2023-06-06(韩国)。
变形金刚:超能勇士崛起的片长是多少?|127分钟 / 128分钟(中国大陆)。
变形金刚:超能勇士崛起的反派角色有哪些?|终极反派宇宙大帝和以天灾为首的恐惧兽。
我爱你!电影类型是什么?|剧情/爱情/家庭
我爱你!的导演是谁?|韩延
我爱你!的编剧团队有哪些人?|韩延/韩今谅/李亮文/陈文杰/胡泽尘
我爱你!的主演有哪些人?|倪大红/惠英红/梁家辉/叶童/成果/更多
我爱你!的制片国家/地区是哪里?|中国大陆/中国香港
我爱你!的语言有哪些?|粤语/汉语普通话
我爱你!在中国大陆的上映日期是什么时候?|2023-06-21
我爱你!在上海国际电影节的上映日期是什么时候?|2023-06-09
我爱你!的故事来源于什么?|韩国同名漫画
我爱你!的故事情节主要描述了什么?|四位老人,两对爱人,在步入生命终章之时,用力而纯粹地相爱,哪怕不再有明天,也要对彼此说出那句“我爱你!”
别叫我“赌神”电影|辉哥是做什么的?
记忆电影的导演是谁?|阿彼察邦·韦拉斯哈古
记忆电影的编剧是谁?|阿彼察邦·韦拉斯哈古
记忆电影的主演有哪些?|蒂尔达·斯文顿 / 艾格尼丝·布雷克 / 丹尼尔·希梅内斯·卡乔 / 杰罗尼莫·巴伦 / 胡安·帕布罗·乌雷戈等
记忆电影属于哪个类型?|剧情
记忆电影的制片国家/地区有哪些?|哥伦比亚 / 泰国 / 法国 / 德国 / 墨西哥 / 卡塔尔 / 英国 / 中国大陆 / 瑞士
记忆电影使用的语言有哪些?|英语 / 西班牙语
记忆电影在中国大陆的上映日期是什么时候?|2023-06-22
记忆电影在哪个电影节上映的?|戛纳电影节
记忆电影讲述了哪个主人公的故事?|杰西卡·霍兰德
记忆电影的主要情节是什么?|杰西卡试图找寻幻听的根源,并开启了一场由幻想、偶遇与重逢组成的旅程,与记忆和历史产生回响。
变形金刚:超能勇士崛起主演有哪些?|安东尼·拉莫斯 / 多米尼克·菲什巴克 / 彼特·库伦 / 朗·普尔曼 / 彼特·丁拉基等。
变形金刚:超能勇士崛起的导演是谁?|小斯蒂芬·卡普尔。
变形金刚:超能勇士崛起的编剧有哪些?|卓比·哈罗德 / 达内尔·梅耶尔 / 乔什·皮特斯 / 埃里希·霍贝尔 / 乔·霍贝尔。
变形金刚:超能勇士崛起主要讲述了什么故事?|终极反派宇宙大帝从天而降,驱使以天灾为首的恐惧兽掀起地球危机,巨无霸联合汽车人变形出发,一场前所未有的决战即将上演。
变形金刚:超能勇士崛起是什么类型的电影?|动作 / 科幻 / 冒险。
变形金刚:超能勇士崛起的制片国家或地区是哪里?|美国。
变形金刚:超能勇士崛起使用的语言是什么?|英语。
变形金刚:超能勇士崛起的上映时间是什么时候?|2023-06-09(美国/中国大陆) / 2023-06-06(韩国)。
变形金刚:超能勇士崛起的片长是多少?|127分钟 / 128分钟(中国大陆)。
变形金刚:超能勇士崛起的反派角色有哪些?|终极反派宇宙大帝和以天灾为首的恐惧兽。
《万湖会议》是一部什么类型的电影?|剧情 / 历史 / 战争
《万湖会议》的导演是谁?|马蒂·格肖内克
《万湖会议》的编剧是谁?|马格努斯·瓦特罗特 / 保罗·莫默兹
《万湖会议》是哪个国家的电影?|德国
《万湖会议》的主要语言是什么?|德语
《万湖会议》的上映日期是什么时候?|2023-06-09(中国大陆) / 2022-01-18(德国)
《万湖会议》讲述的是什么历史事件?|15名纳粹德国的高级官员在万湖别墅召开了一场秘密会议,议题是“犹太人问题的最终解决方案”
《万湖会议》的主要演员有谁?|菲利普·霍奇迈尔 / 约翰尼斯·艾麦亚 / 马克西米连·布鲁克纳 / 马提亚斯‧邦德舒 / 法比安·布施 / 更多...
《万湖会议》的会议决定了什么?|所有犹太人的命运,改变了整个世界
《万湖会议》里的什么工具问世了?|奥斯维辛集中营、毒气室、焚尸炉等等惊世骇俗的杀戮工具
我爱你!电影类型是什么?|剧情/爱情/家庭
我爱你!的导演是谁?|韩延
我爱你!的编剧团队有哪些人?|韩延/韩今谅/李亮文/陈文杰/胡泽尘
我爱你!的主演有哪些人?|倪大红/惠英红/梁家辉/叶童/成果/更多
我爱你!的制片国家/地区是哪里?|中国大陆/中国香港
我爱你!的语言有哪些?|粤语/汉语普通话
我爱你!在中国大陆的上映日期是什么时候?|2023-06-21
我爱你!在上海国际电影节的上映日期是什么时候?|2023-06-09
我爱你!的故事来源于什么?|韩国同名漫画
我爱你!的故事情节主要描述了什么?|四位老人,两对爱人,在步入生命终章之时,用力而纯粹地相爱,哪怕不再有明天,也要对彼此说出那句“我爱你!”
别叫我“赌神”电影|辉哥是做什么的?
记忆电影的导演是谁?|阿彼察邦·韦拉斯哈古
记忆电影的编剧是谁?|阿彼察邦·韦拉斯哈古
记忆电影的主演有哪些?|蒂尔达·斯文顿 / 艾格尼丝·布雷克 / 丹尼尔·希梅内斯·卡乔 / 杰罗尼莫·巴伦 / 胡安·帕布罗·乌雷戈等
记忆电影属于哪个类型?|剧情
记忆电影的制片国家/地区有哪些?|哥伦比亚 / 泰国 / 法国 / 德国 / 墨西哥 / 卡塔尔 / 英国 / 中国大陆 / 瑞士
记忆电影使用的语言有哪些?|英语 / 西班牙语
记忆电影在中国大陆的上映日期是什么时候?|2023-06-22
记忆电影在哪个电影节上映的?|戛纳电影节
记忆电影讲述了哪个主人公的故事?|杰西卡·霍兰德
记忆电影的主要情节是什么?|杰西卡试图找寻幻听的根源,并开启了一场由幻想、偶遇与重逢组成的旅程,与记忆和历史产生回响。
变形金刚:超能勇士崛起主演有哪些?|安东尼·拉莫斯 / 多米尼克·菲什巴克 / 彼特·库伦 / 朗·普尔曼 / 彼特·丁拉基等。
变形金刚:超能勇士崛起的导演是谁?|小斯蒂芬·卡普尔。
变形金刚:超能勇士崛起的编剧有哪些?|卓比·哈罗德 / 达内尔·梅耶尔 / 乔什·皮特斯 / 埃里希·霍贝尔 / 乔·霍贝尔。
变形金刚:超能勇士崛起主要讲述了什么故事?|终极反派宇宙大帝从天而降,驱使以天灾为首的恐惧兽掀起地球危机,巨无霸联合汽车人变形出发,一场前所未有的决战即将上演。
变形金刚:超能勇士崛起是什么类型的电影?|动作 / 科幻 / 冒险。
变形金刚:超能勇士崛起的制片国家或地区是哪里?|美国。
变形金刚:超能勇士崛起使用的语言是什么?|英语。
变形金刚:超能勇士崛起的上映时间是什么时候?|2023-06-09(美国/中国大陆) / 2023-06-06(韩国)。
变形金刚:超能勇士崛起的片长是多少?|127分钟 / 128分钟(中国大陆)。
变形金刚:超能勇士崛起的反派角色有哪些?|终极反派宇宙大帝和以天灾为首的恐惧兽。
《万湖会议》是一部什么类型的电影?|剧情 / 历史 / 战争
《万湖会议》的导演是谁?|马蒂·格肖内克
《万湖会议》的编剧是谁?|马格努斯·瓦特罗特 / 保罗·莫默兹
《万湖会议》是哪个国家的电影?|德国
《万湖会议》的主要语言是什么?|德语
《万湖会议》的上映日期是什么时候?|2023-06-09(中国大陆) / 2022-01-18(德国)
《万湖会议》讲述的是什么历史事件?|15名纳粹德国的高级官员在万湖别墅召开了一场秘密会议,议题是“犹太人问题的最终解决方案”
《万湖会议》的主要演员有谁?|菲利普·霍奇迈尔 / 约翰尼斯·艾麦亚 / 马克西米连·布鲁克纳 / 马提亚斯‧邦德舒 / 法比安·布施 / 更多...
《万湖会议》的会议决定了什么?|所有犹太人的命运,改变了整个世界
《万湖会议》里的什么工具问世了?|奥斯维辛集中营、毒气室、焚尸炉等等惊世骇俗的杀戮工具
速度与激情10 Fast X电影类型是什么?|动作/悬疑/惊悚/犯罪/冒险
谁是Fast X的导演?|路易斯·莱特里尔
Fast X的编剧分别是谁?|丹·马泽/林诣彬/盖瑞·斯科特·汤普森
Fast X的主演有哪些人?|范·迪塞尔/米歇尔·罗德里格兹/杰森·莫玛/布丽·拉尔森/查理兹·塞隆/更多...
Fast X的制片国家/地区是哪里?|美国
Fast X的上映时间是什么时候?|2023-05-17(中国大陆)/2023-05-19(美国)
Fast X的片长是多少?|140分钟
Fast X的故事主要讲述什么?|唐老大和他的家族面对一名危险对手的故事
Fast X这部电影使用的主要语言是什么?|英语
Fast X的主题是什么?|速度、勇气和家族精神
我爱你!电影类型是什么?|剧情/爱情/家庭
我爱你!的导演是谁?|韩延
我爱你!的编剧团队有哪些人?|韩延/韩今谅/李亮文/陈文杰/胡泽尘
我爱你!的主演有哪些人?|倪大红/惠英红/梁家辉/叶童/成果/更多
我爱你!的制片国家/地区是哪里?|中国大陆/中国香港
我爱你!的语言有哪些?|粤语/汉语普通话
我爱你!在中国大陆的上映日期是什么时候?|2023-06-21
我爱你!在上海国际电影节的上映日期是什么时候?|2023-06-09
我爱你!的故事来源于什么?|韩国同名漫画
我爱你!的故事情节主要描述了什么?|四位老人,两对爱人,在步入生命终章之时,用力而纯粹地相爱,哪怕不再有明天,也要对彼此说出那句“我爱你!”
别叫我“赌神”电影|辉哥是做什么的?
记忆电影的导演是谁?|阿彼察邦·韦拉斯哈古
记忆电影的编剧是谁?|阿彼察邦·韦拉斯哈古
记忆电影的主演有哪些?|蒂尔达·斯文顿 / 艾格尼丝·布雷克 / 丹尼尔·希梅内斯·卡乔 / 杰罗尼莫·巴伦 / 胡安·帕布罗·乌雷戈等
记忆电影属于哪个类型?|剧情
记忆电影的制片国家/地区有哪些?|哥伦比亚 / 泰国 / 法国 / 德国 / 墨西哥 / 卡塔尔 / 英国 / 中国大陆 / 瑞士
记忆电影使用的语言有哪些?|英语 / 西班牙语
记忆电影在中国大陆的上映日期是什么时候?|2023-06-22
记忆电影在哪个电影节上映的?|戛纳电影节
记忆电影讲述了哪个主人公的故事?|杰西卡·霍兰德
记忆电影的主要情节是什么?|杰西卡试图找寻幻听的根源,并开启了一场由幻想、偶遇与重逢组成的旅程,与记忆和历史产生回响。
变形金刚:超能勇士崛起主演有哪些?|安东尼·拉莫斯 / 多米尼克·菲什巴克 / 彼特·库伦 / 朗·普尔曼 / 彼特·丁拉基等。
变形金刚:超能勇士崛起的导演是谁?|小斯蒂芬·卡普尔。
变形金刚:超能勇士崛起的编剧有哪些?|卓比·哈罗德 / 达内尔·梅耶尔 / 乔什·皮特斯 / 埃里希·霍贝尔 / 乔·霍贝尔。
变形金刚:超能勇士崛起主要讲述了什么故事?|终极反派宇宙大帝从天而降,驱使以天灾为首的恐惧兽掀起地球危机,巨无霸联合汽车人变形出发,一场前所未有的决战即将上演。
变形金刚:超能勇士崛起是什么类型的电影?|动作 / 科幻 / 冒险。
变形金刚:超能勇士崛起的制片国家或地区是哪里?|美国。
变形金刚:超能勇士崛起使用的语言是什么?|英语。
变形金刚:超能勇士崛起的上映时间是什么时候?|2023-06-09(美国/中国大陆) / 2023-06-06(韩国)。
变形金刚:超能勇士崛起的片长是多少?|127分钟 / 128分钟(中国大陆)。
变形金刚:超能勇士崛起的反派角色有哪些?|终极反派宇宙大帝和以天灾为首的恐惧兽。
《万湖会议》是一部什么类型的电影?|剧情 / 历史 / 战争
《万湖会议》的导演是谁?|马蒂·格肖内克
《万湖会议》的编剧是谁?|马格努斯·瓦特罗特 / 保罗·莫默兹
《万湖会议》是哪个国家的电影?|德国
《万湖会议》的主要语言是什么?|德语
《万湖会议》的上映日期是什么时候?|2023-06-09(中国大陆) / 2022-01-18(德国)
《万湖会议》讲述的是什么历史事件?|15名纳粹德国的高级官员在万湖别墅召开了一场秘密会议,议题是“犹太人问题的最终解决方案”
《万湖会议》的主要演员有谁?|菲利普·霍奇迈尔 / 约翰尼斯·艾麦亚 / 马克西米连·布鲁克纳 / 马提亚斯‧邦德舒 / 法比安·布施 / 更多...
《万湖会议》的会议决定了什么?|所有犹太人的命运,改变了整个世界
《万湖会议》里的什么工具问世了?|奥斯维辛集中营、毒气室、焚尸炉等等惊世骇俗的杀戮工具
速度与激情10 Fast X电影类型是什么?|动作/悬疑/惊悚/犯罪/冒险
谁是Fast X的导演?|路易斯·莱特里尔
Fast X的编剧分别是谁?|丹·马泽/林诣彬/盖瑞·斯科特·汤普森
Fast X的主演有哪些人?|范·迪塞尔/米歇尔·罗德里格兹/杰森·莫玛/布丽·拉尔森/查理兹·塞隆/更多...
Fast X的制片国家/地区是哪里?|美国
Fast X的上映时间是什么时候?|2023-05-17(中国大陆)/2023-05-19(美国)
Fast X的片长是多少?|140分钟
Fast X的故事主要讲述什么?|唐老大和他的家族面对一名危险对手的故事
Fast X这部电影使用的主要语言是什么?|英语
Fast X的主题是什么?|速度、勇气和家族精神
速度与激情10(2023)是哪一年上映的电影?|2023年
速度与激情10(2023)的导演是谁?|路易斯·莱特里尔
速度与激情10(2023)的编剧有哪些人?|丹·马泽 / 林诣彬 / 盖瑞·斯科特·汤普森
速度与激情10(2023)的主演有哪些人?|范·迪塞尔 / 米歇尔·罗德里格兹 / 杰森·莫玛 / 布丽·拉尔森 / 查理兹·塞隆 / 更多...
速度与激情10(2023)属于哪些类型的电影?|动作 / 悬疑 / 惊悚 / 犯罪 / 冒险
速度与激情10(2023)是哪个国家/地区的电影?|美国
速度与激情10(2023)的主要语言是什么?|英语
速度与激情10(2023)的上映日期是什么时候?|2023-05-17(中国大陆) / 2023-05-19(美国)
速度与激情10(2023)的片长是多少?|140分钟
速度与激情10(2023)的剧情简介是什么?|唐老大和他的家族面对一名危险至极的对手,这个人决心破坏唐老大所热爱的一切及其至亲至爱之人。
我爱你!电影类型是什么?|剧情/爱情/家庭
我爱你!的导演是谁?|韩延
我爱你!的编剧团队有哪些人?|韩延/韩今谅/李亮文/陈文杰/胡泽尘
我爱你!的主演有哪些人?|倪大红/惠英红/梁家辉/叶童/成果/更多
我爱你!的制片国家/地区是哪里?|中国大陆/中国香港
我爱你!的语言有哪些?|粤语/汉语普通话
我爱你!在中国大陆的上映日期是什么时候?|2023-06-21
我爱你!在上海国际电影节的上映日期是什么时候?|2023-06-09
我爱你!的故事来源于什么?|韩国同名漫画
我爱你!的故事情节主要描述了什么?|四位老人,两对爱人,在步入生命终章之时,用力而纯粹地相爱,哪怕不再有明天,也要对彼此说出那句“我爱你!”
别叫我“赌神”电影|辉哥是做什么的?
记忆电影的导演是谁?|阿彼察邦·韦拉斯哈古
记忆电影的编剧是谁?|阿彼察邦·韦拉斯哈古
记忆电影的主演有哪些?|蒂尔达·斯文顿 / 艾格尼丝·布雷克 / 丹尼尔·希梅内斯·卡乔 / 杰罗尼莫·巴伦 / 胡安·帕布罗·乌雷戈等
记忆电影属于哪个类型?|剧情
记忆电影的制片国家/地区有哪些?|哥伦比亚 / 泰国 / 法国 / 德国 / 墨西哥 / 卡塔尔 / 英国 / 中国大陆 / 瑞士
记忆电影使用的语言有哪些?|英语 / 西班牙语
记忆电影在中国大陆的上映日期是什么时候?|2023-06-22
记忆电影在哪个电影节上映的?|戛纳电影节
记忆电影讲述了哪个主人公的故事?|杰西卡·霍兰德
记忆电影的主要情节是什么?|杰西卡试图找寻幻听的根源,并开启了一场由幻想、偶遇与重逢组成的旅程,与记忆和历史产生回响。
变形金刚:超能勇士崛起主演有哪些?|安东尼·拉莫斯 / 多米尼克·菲什巴克 / 彼特·库伦 / 朗·普尔曼 / 彼特·丁拉基等。
变形金刚:超能勇士崛起的导演是谁?|小斯蒂芬·卡普尔。
变形金刚:超能勇士崛起的编剧有哪些?|卓比·哈罗德 / 达内尔·梅耶尔 / 乔什·皮特斯 / 埃里希·霍贝尔 / 乔·霍贝尔。
变形金刚:超能勇士崛起主要讲述了什么故事?|终极反派宇宙大帝从天而降,驱使以天灾为首的恐惧兽掀起地球危机,巨无霸联合汽车人变形出发,一场前所未有的决战即将上演。
变形金刚:超能勇士崛起是什么类型的电影?|动作 / 科幻 / 冒险。
变形金刚:超能勇士崛起的制片国家或地区是哪里?|美国。
变形金刚:超能勇士崛起使用的语言是什么?|英语。
变形金刚:超能勇士崛起的上映时间是什么时候?|2023-06-09(美国/中国大陆) / 2023-06-06(韩国)。
变形金刚:超能勇士崛起的片长是多少?|127分钟 / 128分钟(中国大陆)。
变形金刚:超能勇士崛起的反派角色有哪些?|终极反派宇宙大帝和以天灾为首的恐惧兽。
《万湖会议》是一部什么类型的电影?|剧情 / 历史 / 战争
《万湖会议》的导演是谁?|马蒂·格肖内克
《万湖会议》的编剧是谁?|马格努斯·瓦特罗特 / 保罗·莫默兹
《万湖会议》是哪个国家的电影?|德国
《万湖会议》的主要语言是什么?|德语
《万湖会议》的上映日期是什么时候?|2023-06-09(中国大陆) / 2022-01-18(德国)
《万湖会议》讲述的是什么历史事件?|15名纳粹德国的高级官员在万湖别墅召开了一场秘密会议,议题是“犹太人问题的最终解决方案”
《万湖会议》的主要演员有谁?|菲利普·霍奇迈尔 / 约翰尼斯·艾麦亚 / 马克西米连·布鲁克纳 / 马提亚斯‧邦德舒 / 法比安·布施 / 更多...
《万湖会议》的会议决定了什么?|所有犹太人的命运,改变了整个世界
《万湖会议》里的什么工具问世了?|奥斯维辛集中营、毒气室、焚尸炉等等惊世骇俗的杀戮工具
速度与激情10 Fast X电影类型是什么?|动作/悬疑/惊悚/犯罪/冒险
谁是Fast X的导演?|路易斯·莱特里尔
Fast X的编剧分别是谁?|丹·马泽/林诣彬/盖瑞·斯科特·汤普森
Fast X的主演有哪些人?|范·迪塞尔/米歇尔·罗德里格兹/杰森·莫玛/布丽·拉尔森/查理兹·塞隆/更多...
Fast X的制片国家/地区是哪里?|美国
Fast X的上映时间是什么时候?|2023-05-17(中国大陆)/2023-05-19(美国)
Fast X的片长是多少?|140分钟
Fast X的故事主要讲述什么?|唐老大和他的家族面对一名危险对手的故事
Fast X这部电影使用的主要语言是什么?|英语
Fast X的主题是什么?|速度、勇气和家族精神
速度与激情10(2023)是哪一年上映的电影?|2023年
速度与激情10(2023)的导演是谁?|路易斯·莱特里尔
速度与激情10(2023)的编剧有哪些人?|丹·马泽 / 林诣彬 / 盖瑞·斯科特·汤普森
速度与激情10(2023)的主演有哪些人?|范·迪塞尔 / 米歇尔·罗德里格兹 / 杰森·莫玛 / 布丽·拉尔森 / 查理兹·塞隆 / 更多...
速度与激情10(2023)属于哪些类型的电影?|动作 / 悬疑 / 惊悚 / 犯罪 / 冒险
速度与激情10(2023)是哪个国家/地区的电影?|美国
速度与激情10(2023)的主要语言是什么?|英语
速度与激情10(2023)的上映日期是什么时候?|2023-05-17(中国大陆) / 2023-05-19(美国)
速度与激情10(2023)的片长是多少?|140分钟
速度与激情10(2023)的剧情简介是什么?|唐老大和他的家族面对一名危险至极的对手,这个人决心破坏唐老大所热爱的一切及其至亲至爱之人。
蜘蛛侠:平行宇宙2导演是谁?|乔伊姆·多斯·桑托斯 / 凯普·鲍尔斯 / 贾斯汀·汤普森
蜘蛛侠:平行宇宙2的编剧有哪些?|菲尔·罗德 / 克里斯托弗·米勒 / 戴夫·卡拉汉姆
蜘蛛侠:平行宇宙2的主演有哪些?|沙梅克·摩尔 / 海莉·斯坦菲尔德 / 奥斯卡·伊萨克 / 杰克·约翰逊 / 伊萨·雷 / 更多...
蜘蛛侠:平行宇宙2属于哪些类型的电影?|喜剧 / 动作 / 科幻 / 动画 / 奇幻 / 冒险
蜘蛛侠:平行宇宙2是哪个国家/地区的电影?|美国
蜘蛛侠:平行宇宙2使用的语言是什么?|英语
蜘蛛侠:平行宇宙2在哪些日期上映?|2023-06-02(美国/中国大陆) / 2023-05-31(法国)
蜘蛛侠:平行宇宙2的片长是多少?|140分钟
蜘蛛侠:平行宇宙2讲述了什么故事?|新生代蜘蛛侠迈尔斯和蜘蛛格温穿越多元宇宙的冒险故事
蜘蛛侠:平行宇宙2的剧情中会发生什么?|一场以一敌百的蜘蛛侠大内战即将拉响
我爱你!电影类型是什么?|剧情/爱情/家庭
我爱你!的导演是谁?|韩延
我爱你!的编剧团队有哪些人?|韩延/韩今谅/李亮文/陈文杰/胡泽尘
我爱你!的主演有哪些人?|倪大红/惠英红/梁家辉/叶童/成果/更多
我爱你!的制片国家/地区是哪里?|中国大陆/中国香港
我爱你!的语言有哪些?|粤语/汉语普通话
我爱你!在中国大陆的上映日期是什么时候?|2023-06-21
我爱你!在上海国际电影节的上映日期是什么时候?|2023-06-09
我爱你!的故事来源于什么?|韩国同名漫画
我爱你!的故事情节主要描述了什么?|四位老人,两对爱人,在步入生命终章之时,用力而纯粹地相爱,哪怕不再有明天,也要对彼此说出那句“我爱你!”
别叫我“赌神”电影|辉哥是做什么的?
记忆电影的导演是谁?|阿彼察邦·韦拉斯哈古
记忆电影的编剧是谁?|阿彼察邦·韦拉斯哈古
记忆电影的主演有哪些?|蒂尔达·斯文顿 / 艾格尼丝·布雷克 / 丹尼尔·希梅内斯·卡乔 / 杰罗尼莫·巴伦 / 胡安·帕布罗·乌雷戈等
记忆电影属于哪个类型?|剧情
记忆电影的制片国家/地区有哪些?|哥伦比亚 / 泰国 / 法国 / 德国 / 墨西哥 / 卡塔尔 / 英国 / 中国大陆 / 瑞士
记忆电影使用的语言有哪些?|英语 / 西班牙语
记忆电影在中国大陆的上映日期是什么时候?|2023-06-22
记忆电影在哪个电影节上映的?|戛纳电影节
记忆电影讲述了哪个主人公的故事?|杰西卡·霍兰德
记忆电影的主要情节是什么?|杰西卡试图找寻幻听的根源,并开启了一场由幻想、偶遇与重逢组成的旅程,与记忆和历史产生回响。
变形金刚:超能勇士崛起主演有哪些?|安东尼·拉莫斯 / 多米尼克·菲什巴克 / 彼特·库伦 / 朗·普尔曼 / 彼特·丁拉基等。
变形金刚:超能勇士崛起的导演是谁?|小斯蒂芬·卡普尔。
变形金刚:超能勇士崛起的编剧有哪些?|卓比·哈罗德 / 达内尔·梅耶尔 / 乔什·皮特斯 / 埃里希·霍贝尔 / 乔·霍贝尔。
变形金刚:超能勇士崛起主要讲述了什么故事?|终极反派宇宙大帝从天而降,驱使以天灾为首的恐惧兽掀起地球危机,巨无霸联合汽车人变形出发,一场前所未有的决战即将上演。
变形金刚:超能勇士崛起是什么类型的电影?|动作 / 科幻 / 冒险。
变形金刚:超能勇士崛起的制片国家或地区是哪里?|美国。
变形金刚:超能勇士崛起使用的语言是什么?|英语。
变形金刚:超能勇士崛起的上映时间是什么时候?|2023-06-09(美国/中国大陆) / 2023-06-06(韩国)。
变形金刚:超能勇士崛起的片长是多少?|127分钟 / 128分钟(中国大陆)。
变形金刚:超能勇士崛起的反派角色有哪些?|终极反派宇宙大帝和以天灾为首的恐惧兽。
《万湖会议》是一部什么类型的电影?|剧情 / 历史 / 战争
《万湖会议》的导演是谁?|马蒂·格肖内克
《万湖会议》的编剧是谁?|马格努斯·瓦特罗特 / 保罗·莫默兹
《万湖会议》是哪个国家的电影?|德国
《万湖会议》的主要语言是什么?|德语
《万湖会议》的上映日期是什么时候?|2023-06-09(中国大陆) / 2022-01-18(德国)
《万湖会议》讲述的是什么历史事件?|15名纳粹德国的高级官员在万湖别墅召开了一场秘密会议,议题是“犹太人问题的最终解决方案”
《万湖会议》的主要演员有谁?|菲利普·霍奇迈尔 / 约翰尼斯·艾麦亚 / 马克西米连·布鲁克纳 / 马提亚斯‧邦德舒 / 法比安·布施 / 更多...
《万湖会议》的会议决定了什么?|所有犹太人的命运,改变了整个世界
《万湖会议》里的什么工具问世了?|奥斯维辛集中营、毒气室、焚尸炉等等惊世骇俗的杀戮工具
速度与激情10 Fast X电影类型是什么?|动作/悬疑/惊悚/犯罪/冒险
谁是Fast X的导演?|路易斯·莱特里尔
Fast X的编剧分别是谁?|丹·马泽/林诣彬/盖瑞·斯科特·汤普森
Fast X的主演有哪些人?|范·迪塞尔/米歇尔·罗德里格兹/杰森·莫玛/布丽·拉尔森/查理兹·塞隆/更多...
Fast X的制片国家/地区是哪里?|美国
Fast X的上映时间是什么时候?|2023-05-17(中国大陆)/2023-05-19(美国)
Fast X的片长是多少?|140分钟
Fast X的故事主要讲述什么?|唐老大和他的家族面对一名危险对手的故事
Fast X这部电影使用的主要语言是什么?|英语
Fast X的主题是什么?|速度、勇气和家族精神
速度与激情10(2023)是哪一年上映的电影?|2023年
速度与激情10(2023)的导演是谁?|路易斯·莱特里尔
速度与激情10(2023)的编剧有哪些人?|丹·马泽 / 林诣彬 / 盖瑞·斯科特·汤普森
速度与激情10(2023)的主演有哪些人?|范·迪塞尔 / 米歇尔·罗德里格兹 / 杰森·莫玛 / 布丽·拉尔森 / 查理兹·塞隆 / 更多...
速度与激情10(2023)属于哪些类型的电影?|动作 / 悬疑 / 惊悚 / 犯罪 / 冒险
速度与激情10(2023)是哪个国家/地区的电影?|美国
速度与激情10(2023)的主要语言是什么?|英语
速度与激情10(2023)的上映日期是什么时候?|2023-05-17(中国大陆) / 2023-05-19(美国)
速度与激情10(2023)的片长是多少?|140分钟
速度与激情10(2023)的剧情简介是什么?|唐老大和他的家族面对一名危险至极的对手,这个人决心破坏唐老大所热爱的一切及其至亲至爱之人。
蜘蛛侠:平行宇宙2导演是谁?|乔伊姆·多斯·桑托斯 / 凯普·鲍尔斯 / 贾斯汀·汤普森
蜘蛛侠:平行宇宙2的编剧有哪些?|菲尔·罗德 / 克里斯托弗·米勒 / 戴夫·卡拉汉姆
蜘蛛侠:平行宇宙2的主演有哪些?|沙梅克·摩尔 / 海莉·斯坦菲尔德 / 奥斯卡·伊萨克 / 杰克·约翰逊 / 伊萨·雷 / 更多...
蜘蛛侠:平行宇宙2属于哪些类型的电影?|喜剧 / 动作 / 科幻 / 动画 / 奇幻 / 冒险
蜘蛛侠:平行宇宙2是哪个国家/地区的电影?|美国
蜘蛛侠:平行宇宙2使用的语言是什么?|英语
蜘蛛侠:平行宇宙2在哪些日期上映?|2023-06-02(美国/中国大陆) / 2023-05-31(法国)
蜘蛛侠:平行宇宙2的片长是多少?|140分钟
蜘蛛侠:平行宇宙2讲述了什么故事?|新生代蜘蛛侠迈尔斯和蜘蛛格温穿越多元宇宙的冒险故事
蜘蛛侠:平行宇宙2的剧情中会发生什么?|一场以一敌百的蜘蛛侠大内战即将拉响
闪电侠电影|反派角色佐德将军由谁饰演?
我爱你!电影类型是什么?|剧情/爱情/家庭
我爱你!的导演是谁?|韩延
我爱你!的编剧团队有哪些人?|韩延/韩今谅/李亮文/陈文杰/胡泽尘
我爱你!的主演有哪些人?|倪大红/惠英红/梁家辉/叶童/成果/更多
我爱你!的制片国家/地区是哪里?|中国大陆/中国香港
我爱你!的语言有哪些?|粤语/汉语普通话
我爱你!在中国大陆的上映日期是什么时候?|2023-06-21
我爱你!在上海国际电影节的上映日期是什么时候?|2023-06-09
我爱你!的故事来源于什么?|韩国同名漫画
我爱你!的故事情节主要描述了什么?|四位老人,两对爱人,在步入生命终章之时,用力而纯粹地相爱,哪怕不再有明天,也要对彼此说出那句“我爱你!”
别叫我“赌神”电影|辉哥是做什么的?
记忆电影的导演是谁?|阿彼察邦·韦拉斯哈古
记忆电影的编剧是谁?|阿彼察邦·韦拉斯哈古
记忆电影的主演有哪些?|蒂尔达·斯文顿 / 艾格尼丝·布雷克 / 丹尼尔·希梅内斯·卡乔 / 杰罗尼莫·巴伦 / 胡安·帕布罗·乌雷戈等
记忆电影属于哪个类型?|剧情
记忆电影的制片国家/地区有哪些?|哥伦比亚 / 泰国 / 法国 / 德国 / 墨西哥 / 卡塔尔 / 英国 / 中国大陆 / 瑞士
记忆电影使用的语言有哪些?|英语 / 西班牙语
记忆电影在中国大陆的上映日期是什么时候?|2023-06-22
记忆电影在哪个电影节上映的?|戛纳电影节
记忆电影讲述了哪个主人公的故事?|杰西卡·霍兰德
记忆电影的主要情节是什么?|杰西卡试图找寻幻听的根源,并开启了一场由幻想、偶遇与重逢组成的旅程,与记忆和历史产生回响。
变形金刚:超能勇士崛起主演有哪些?|安东尼·拉莫斯 / 多米尼克·菲什巴克 / 彼特·库伦 / 朗·普尔曼 / 彼特·丁拉基等。
变形金刚:超能勇士崛起的导演是谁?|小斯蒂芬·卡普尔。
变形金刚:超能勇士崛起的编剧有哪些?|卓比·哈罗德 / 达内尔·梅耶尔 / 乔什·皮特斯 / 埃里希·霍贝尔 / 乔·霍贝尔。
变形金刚:超能勇士崛起主要讲述了什么故事?|终极反派宇宙大帝从天而降,驱使以天灾为首的恐惧兽掀起地球危机,巨无霸联合汽车人变形出发,一场前所未有的决战即将上演。
变形金刚:超能勇士崛起是什么类型的电影?|动作 / 科幻 / 冒险。
变形金刚:超能勇士崛起的制片国家或地区是哪里?|美国。
变形金刚:超能勇士崛起使用的语言是什么?|英语。
变形金刚:超能勇士崛起的上映时间是什么时候?|2023-06-09(美国/中国大陆) / 2023-06-06(韩国)。
变形金刚:超能勇士崛起的片长是多少?|127分钟 / 128分钟(中国大陆)。
变形金刚:超能勇士崛起的反派角色有哪些?|终极反派宇宙大帝和以天灾为首的恐惧兽。
《万湖会议》是一部什么类型的电影?|剧情 / 历史 / 战争
《万湖会议》的导演是谁?|马蒂·格肖内克
《万湖会议》的编剧是谁?|马格努斯·瓦特罗特 / 保罗·莫默兹
《万湖会议》是哪个国家的电影?|德国
《万湖会议》的主要语言是什么?|德语
《万湖会议》的上映日期是什么时候?|2023-06-09(中国大陆) / 2022-01-18(德国)
《万湖会议》讲述的是什么历史事件?|15名纳粹德国的高级官员在万湖别墅召开了一场秘密会议,议题是“犹太人问题的最终解决方案”
《万湖会议》的主要演员有谁?|菲利普·霍奇迈尔 / 约翰尼斯·艾麦亚 / 马克西米连·布鲁克纳 / 马提亚斯‧邦德舒 / 法比安·布施 / 更多...
《万湖会议》的会议决定了什么?|所有犹太人的命运,改变了整个世界
《万湖会议》里的什么工具问世了?|奥斯维辛集中营、毒气室、焚尸炉等等惊世骇俗的杀戮工具
速度与激情10 Fast X电影类型是什么?|动作/悬疑/惊悚/犯罪/冒险
谁是Fast X的导演?|路易斯·莱特里尔
Fast X的编剧分别是谁?|丹·马泽/林诣彬/盖瑞·斯科特·汤普森
Fast X的主演有哪些人?|范·迪塞尔/米歇尔·罗德里格兹/杰森·莫玛/布丽·拉尔森/查理兹·塞隆/更多...
Fast X的制片国家/地区是哪里?|美国
Fast X的上映时间是什么时候?|2023-05-17(中国大陆)/2023-05-19(美国)
Fast X的片长是多少?|140分钟
Fast X的故事主要讲述什么?|唐老大和他的家族面对一名危险对手的故事
Fast X这部电影使用的主要语言是什么?|英语
Fast X的主题是什么?|速度、勇气和家族精神
速度与激情10(2023)是哪一年上映的电影?|2023年
速度与激情10(2023)的导演是谁?|路易斯·莱特里尔
速度与激情10(2023)的编剧有哪些人?|丹·马泽 / 林诣彬 / 盖瑞·斯科特·汤普森
速度与激情10(2023)的主演有哪些人?|范·迪塞尔 / 米歇尔·罗德里格兹 / 杰森·莫玛 / 布丽·拉尔森 / 查理兹·塞隆 / 更多...
速度与激情10(2023)属于哪些类型的电影?|动作 / 悬疑 / 惊悚 / 犯罪 / 冒险
速度与激情10(2023)是哪个国家/地区的电影?|美国
速度与激情10(2023)的主要语言是什么?|英语
速度与激情10(2023)的上映日期是什么时候?|2023-05-17(中国大陆) / 2023-05-19(美国)
速度与激情10(2023)的片长是多少?|140分钟
速度与激情10(2023)的剧情简介是什么?|唐老大和他的家族面对一名危险至极的对手,这个人决心破坏唐老大所热爱的一切及其至亲至爱之人。
蜘蛛侠:平行宇宙2导演是谁?|乔伊姆·多斯·桑托斯 / 凯普·鲍尔斯 / 贾斯汀·汤普森
蜘蛛侠:平行宇宙2的编剧有哪些?|菲尔·罗德 / 克里斯托弗·米勒 / 戴夫·卡拉汉姆
蜘蛛侠:平行宇宙2的主演有哪些?|沙梅克·摩尔 / 海莉·斯坦菲尔德 / 奥斯卡·伊萨克 / 杰克·约翰逊 / 伊萨·雷 / 更多...
蜘蛛侠:平行宇宙2属于哪些类型的电影?|喜剧 / 动作 / 科幻 / 动画 / 奇幻 / 冒险
蜘蛛侠:平行宇宙2是哪个国家/地区的电影?|美国
蜘蛛侠:平行宇宙2使用的语言是什么?|英语
蜘蛛侠:平行宇宙2在哪些日期上映?|2023-06-02(美国/中国大陆) / 2023-05-31(法国)
蜘蛛侠:平行宇宙2的片长是多少?|140分钟
蜘蛛侠:平行宇宙2讲述了什么故事?|新生代蜘蛛侠迈尔斯和蜘蛛格温穿越多元宇宙的冒险故事
蜘蛛侠:平行宇宙2的剧情中会发生什么?|一场以一敌百的蜘蛛侠大内战即将拉响
闪电侠电影|反派角色佐德将军由谁饰演?
全球电影票房排名第一的票仓是哪个国家?|中国内地
中国内地在全球电影票房中的占比是多少?|34.44%
2023年第一季度中国电影市场的票房和观影总人次分别是多少?|158.57亿和3.36亿
国产片在2023年第一季度票房排名前十的影片中占多少席位?|七席
好莱坞电影在中国内地市场的表现如何?|普遍不如预期
《阿凡达2》在中国内地市场的票房是多少?|7.43亿元
《蚁人3之蚁人与黄蜂女:量子狂潮》的票房是多少?|2.72亿
中国电影市场的复苏势头如何?|复苏势头喜人
今年第一季度中国电影市场的票房与2019年同期相比有多少差距?|相差不算太远
中国电影市场有望在什么时候完全恢复到疫情前的水平?|2024年
我爱你!电影类型是什么?|剧情/爱情/家庭
我爱你!的导演是谁?|韩延
我爱你!的编剧团队有哪些人?|韩延/韩今谅/李亮文/陈文杰/胡泽尘
我爱你!的主演有哪些人?|倪大红/惠英红/梁家辉/叶童/成果/更多
我爱你!的制片国家/地区是哪里?|中国大陆/中国香港
我爱你!的语言有哪些?|粤语/汉语普通话
我爱你!在中国大陆的上映日期是什么时候?|2023-06-21
我爱你!在上海国际电影节的上映日期是什么时候?|2023-06-09
我爱你!的故事来源于什么?|韩国同名漫画
我爱你!的故事情节主要描述了什么?|四位老人,两对爱人,在步入生命终章之时,用力而纯粹地相爱,哪怕不再有明天,也要对彼此说出那句“我爱你!”
别叫我“赌神”电影|辉哥是做什么的?
记忆电影的导演是谁?|阿彼察邦·韦拉斯哈古
记忆电影的编剧是谁?|阿彼察邦·韦拉斯哈古
记忆电影的主演有哪些?|蒂尔达·斯文顿 / 艾格尼丝·布雷克 / 丹尼尔·希梅内斯·卡乔 / 杰罗尼莫·巴伦 / 胡安·帕布罗·乌雷戈等
记忆电影属于哪个类型?|剧情
记忆电影的制片国家/地区有哪些?|哥伦比亚 / 泰国 / 法国 / 德国 / 墨西哥 / 卡塔尔 / 英国 / 中国大陆 / 瑞士
记忆电影使用的语言有哪些?|英语 / 西班牙语
记忆电影在中国大陆的上映日期是什么时候?|2023-06-22
记忆电影在哪个电影节上映的?|戛纳电影节
记忆电影讲述了哪个主人公的故事?|杰西卡·霍兰德
记忆电影的主要情节是什么?|杰西卡试图找寻幻听的根源,并开启了一场由幻想、偶遇与重逢组成的旅程,与记忆和历史产生回响。
变形金刚:超能勇士崛起主演有哪些?|安东尼·拉莫斯 / 多米尼克·菲什巴克 / 彼特·库伦 / 朗·普尔曼 / 彼特·丁拉基等。
变形金刚:超能勇士崛起的导演是谁?|小斯蒂芬·卡普尔。
变形金刚:超能勇士崛起的编剧有哪些?|卓比·哈罗德 / 达内尔·梅耶尔 / 乔什·皮特斯 / 埃里希·霍贝尔 / 乔·霍贝尔。
变形金刚:超能勇士崛起主要讲述了什么故事?|终极反派宇宙大帝从天而降,驱使以天灾为首的恐惧兽掀起地球危机,巨无霸联合汽车人变形出发,一场前所未有的决战即将上演。
变形金刚:超能勇士崛起是什么类型的电影?|动作 / 科幻 / 冒险。
变形金刚:超能勇士崛起的制片国家或地区是哪里?|美国。
变形金刚:超能勇士崛起使用的语言是什么?|英语。
变形金刚:超能勇士崛起的上映时间是什么时候?|2023-06-09(美国/中国大陆) / 2023-06-06(韩国)。
变形金刚:超能勇士崛起的片长是多少?|127分钟 / 128分钟(中国大陆)。
变形金刚:超能勇士崛起的反派角色有哪些?|终极反派宇宙大帝和以天灾为首的恐惧兽。
《万湖会议》是一部什么类型的电影?|剧情 / 历史 / 战争
《万湖会议》的导演是谁?|马蒂·格肖内克
《万湖会议》的编剧是谁?|马格努斯·瓦特罗特 / 保罗·莫默兹
《万湖会议》是哪个国家的电影?|德国
《万湖会议》的主要语言是什么?|德语
《万湖会议》的上映日期是什么时候?|2023-06-09(中国大陆) / 2022-01-18(德国)
《万湖会议》讲述的是什么历史事件?|15名纳粹德国的高级官员在万湖别墅召开了一场秘密会议,议题是“犹太人问题的最终解决方案”
《万湖会议》的主要演员有谁?|菲利普·霍奇迈尔 / 约翰尼斯·艾麦亚 / 马克西米连·布鲁克纳 / 马提亚斯‧邦德舒 / 法比安·布施 / 更多...
《万湖会议》的会议决定了什么?|所有犹太人的命运,改变了整个世界
《万湖会议》里的什么工具问世了?|奥斯维辛集中营、毒气室、焚尸炉等等惊世骇俗的杀戮工具
速度与激情10 Fast X电影类型是什么?|动作/悬疑/惊悚/犯罪/冒险
谁是Fast X的导演?|路易斯·莱特里尔
Fast X的编剧分别是谁?|丹·马泽/林诣彬/盖瑞·斯科特·汤普森
Fast X的主演有哪些人?|范·迪塞尔/米歇尔·罗德里格兹/杰森·莫玛/布丽·拉尔森/查理兹·塞隆/更多...
Fast X的制片国家/地区是哪里?|美国
Fast X的上映时间是什么时候?|2023-05-17(中国大陆)/2023-05-19(美国)
Fast X的片长是多少?|140分钟
Fast X的故事主要讲述什么?|唐老大和他的家族面对一名危险对手的故事
Fast X这部电影使用的主要语言是什么?|英语
Fast X的主题是什么?|速度、勇气和家族精神
速度与激情10(2023)是哪一年上映的电影?|2023年
速度与激情10(2023)的导演是谁?|路易斯·莱特里尔
速度与激情10(2023)的编剧有哪些人?|丹·马泽 / 林诣彬 / 盖瑞·斯科特·汤普森
速度与激情10(2023)的主演有哪些人?|范·迪塞尔 / 米歇尔·罗德里格兹 / 杰森·莫玛 / 布丽·拉尔森 / 查理兹·塞隆 / 更多...
速度与激情10(2023)属于哪些类型的电影?|动作 / 悬疑 / 惊悚 / 犯罪 / 冒险
速度与激情10(2023)是哪个国家/地区的电影?|美国
速度与激情10(2023)的主要语言是什么?|英语
速度与激情10(2023)的上映日期是什么时候?|2023-05-17(中国大陆) / 2023-05-19(美国)
速度与激情10(2023)的片长是多少?|140分钟
速度与激情10(2023)的剧情简介是什么?|唐老大和他的家族面对一名危险至极的对手,这个人决心破坏唐老大所热爱的一切及其至亲至爱之人。
蜘蛛侠:平行宇宙2导演是谁?|乔伊姆·多斯·桑托斯 / 凯普·鲍尔斯 / 贾斯汀·汤普森
蜘蛛侠:平行宇宙2的编剧有哪些?|菲尔·罗德 / 克里斯托弗·米勒 / 戴夫·卡拉汉姆
蜘蛛侠:平行宇宙2的主演有哪些?|沙梅克·摩尔 / 海莉·斯坦菲尔德 / 奥斯卡·伊萨克 / 杰克·约翰逊 / 伊萨·雷 / 更多...
蜘蛛侠:平行宇宙2属于哪些类型的电影?|喜剧 / 动作 / 科幻 / 动画 / 奇幻 / 冒险
蜘蛛侠:平行宇宙2是哪个国家/地区的电影?|美国
蜘蛛侠:平行宇宙2使用的语言是什么?|英语
蜘蛛侠:平行宇宙2在哪些日期上映?|2023-06-02(美国/中国大陆) / 2023-05-31(法国)
蜘蛛侠:平行宇宙2的片长是多少?|140分钟
蜘蛛侠:平行宇宙2讲述了什么故事?|新生代蜘蛛侠迈尔斯和蜘蛛格温穿越多元宇宙的冒险故事
蜘蛛侠:平行宇宙2的剧情中会发生什么?|一场以一敌百的蜘蛛侠大内战即将拉响
闪电侠电影|反派角色佐德将军由谁饰演?
全球电影票房排名第一的票仓是哪个国家?|中国内地
中国内地在全球电影票房中的占比是多少?|34.44%
2023年第一季度中国电影市场的票房和观影总人次分别是多少?|158.57亿和3.36亿
国产片在2023年第一季度票房排名前十的影片中占多少席位?|七席
好莱坞电影在中国内地市场的表现如何?|普遍不如预期
《阿凡达2》在中国内地市场的票房是多少?|7.43亿元
《蚁人3之蚁人与黄蜂女:量子狂潮》的票房是多少?|2.72亿
中国电影市场的复苏势头如何?|复苏势头喜人
今年第一季度中国电影市场的票房与2019年同期相比有多少差距?|相差不算太远
中国电影市场有望在什么时候完全恢复到疫情前的水平?|2024年
2022年全国电影总票房是多少?|300.67亿元。
2022年中国国产电影票房占比是多少?|84.85%。
2022年全年城市院线观影人次是多少?|7.12亿。
2022年全国影片票房前10名中有几部国产片?|8部。
2022年度票房榜冠军是哪部电影?|《长津湖之水门桥》。
2022年春节档和暑期档各占全年票房的多少?|近三分之二。
2022年春节档实现了什么记录?|年度票房最快破百亿纪录。
2022年暑期档票房冠军是哪部电影?|《独行月球》。
2023年元旦档总票房和总人次分别是多少?|5.5亿和1250.0万。
2023年春节档有哪些备受期待的电影?|《无名》、《流浪地球2》、《满江红》。
我爱你!电影类型是什么?|剧情/爱情/家庭
我爱你!的导演是谁?|韩延
我爱你!的编剧团队有哪些人?|韩延/韩今谅/李亮文/陈文杰/胡泽尘
我爱你!的主演有哪些人?|倪大红/惠英红/梁家辉/叶童/成果/更多
我爱你!的制片国家/地区是哪里?|中国大陆/中国香港
我爱你!的语言有哪些?|粤语/汉语普通话
我爱你!在中国大陆的上映日期是什么时候?|2023-06-21
我爱你!在上海国际电影节的上映日期是什么时候?|2023-06-09
我爱你!的故事来源于什么?|韩国同名漫画
我爱你!的故事情节主要描述了什么?|四位老人,两对爱人,在步入生命终章之时,用力而纯粹地相爱,哪怕不再有明天,也要对彼此说出那句“我爱你!”
别叫我“赌神”电影|辉哥是做什么的?
记忆电影的导演是谁?|阿彼察邦·韦拉斯哈古
记忆电影的编剧是谁?|阿彼察邦·韦拉斯哈古
记忆电影的主演有哪些?|蒂尔达·斯文顿 / 艾格尼丝·布雷克 / 丹尼尔·希梅内斯·卡乔 / 杰罗尼莫·巴伦 / 胡安·帕布罗·乌雷戈等
记忆电影属于哪个类型?|剧情
记忆电影的制片国家/地区有哪些?|哥伦比亚 / 泰国 / 法国 / 德国 / 墨西哥 / 卡塔尔 / 英国 / 中国大陆 / 瑞士
记忆电影使用的语言有哪些?|英语 / 西班牙语
记忆电影在中国大陆的上映日期是什么时候?|2023-06-22
记忆电影在哪个电影节上映的?|戛纳电影节
记忆电影讲述了哪个主人公的故事?|杰西卡·霍兰德
记忆电影的主要情节是什么?|杰西卡试图找寻幻听的根源,并开启了一场由幻想、偶遇与重逢组成的旅程,与记忆和历史产生回响。
变形金刚:超能勇士崛起主演有哪些?|安东尼·拉莫斯 / 多米尼克·菲什巴克 / 彼特·库伦 / 朗·普尔曼 / 彼特·丁拉基等。
变形金刚:超能勇士崛起的导演是谁?|小斯蒂芬·卡普尔。
变形金刚:超能勇士崛起的编剧有哪些?|卓比·哈罗德 / 达内尔·梅耶尔 / 乔什·皮特斯 / 埃里希·霍贝尔 / 乔·霍贝尔。
变形金刚:超能勇士崛起主要讲述了什么故事?|终极反派宇宙大帝从天而降,驱使以天灾为首的恐惧兽掀起地球危机,巨无霸联合汽车人变形出发,一场前所未有的决战即将上演。
变形金刚:超能勇士崛起是什么类型的电影?|动作 / 科幻 / 冒险。
变形金刚:超能勇士崛起的制片国家或地区是哪里?|美国。
变形金刚:超能勇士崛起使用的语言是什么?|英语。
变形金刚:超能勇士崛起的上映时间是什么时候?|2023-06-09(美国/中国大陆) / 2023-06-06(韩国)。
变形金刚:超能勇士崛起的片长是多少?|127分钟 / 128分钟(中国大陆)。
变形金刚:超能勇士崛起的反派角色有哪些?|终极反派宇宙大帝和以天灾为首的恐惧兽。
《万湖会议》是一部什么类型的电影?|剧情 / 历史 / 战争
《万湖会议》的导演是谁?|马蒂·格肖内克
《万湖会议》的编剧是谁?|马格努斯·瓦特罗特 / 保罗·莫默兹
《万湖会议》是哪个国家的电影?|德国
《万湖会议》的主要语言是什么?|德语
《万湖会议》的上映日期是什么时候?|2023-06-09(中国大陆) / 2022-01-18(德国)
《万湖会议》讲述的是什么历史事件?|15名纳粹德国的高级官员在万湖别墅召开了一场秘密会议,议题是“犹太人问题的最终解决方案”
《万湖会议》的主要演员有谁?|菲利普·霍奇迈尔 / 约翰尼斯·艾麦亚 / 马克西米连·布鲁克纳 / 马提亚斯‧邦德舒 / 法比安·布施 / 更多...
《万湖会议》的会议决定了什么?|所有犹太人的命运,改变了整个世界
《万湖会议》里的什么工具问世了?|奥斯维辛集中营、毒气室、焚尸炉等等惊世骇俗的杀戮工具
速度与激情10 Fast X电影类型是什么?|动作/悬疑/惊悚/犯罪/冒险
谁是Fast X的导演?|路易斯·莱特里尔
Fast X的编剧分别是谁?|丹·马泽/林诣彬/盖瑞·斯科特·汤普森
Fast X的主演有哪些人?|范·迪塞尔/米歇尔·罗德里格兹/杰森·莫玛/布丽·拉尔森/查理兹·塞隆/更多...
Fast X的制片国家/地区是哪里?|美国
Fast X的上映时间是什么时候?|2023-05-17(中国大陆)/2023-05-19(美国)
Fast X的片长是多少?|140分钟
Fast X的故事主要讲述什么?|唐老大和他的家族面对一名危险对手的故事
Fast X这部电影使用的主要语言是什么?|英语
Fast X的主题是什么?|速度、勇气和家族精神
速度与激情10(2023)是哪一年上映的电影?|2023年
速度与激情10(2023)的导演是谁?|路易斯·莱特里尔
速度与激情10(2023)的编剧有哪些人?|丹·马泽 / 林诣彬 / 盖瑞·斯科特·汤普森
速度与激情10(2023)的主演有哪些人?|范·迪塞尔 / 米歇尔·罗德里格兹 / 杰森·莫玛 / 布丽·拉尔森 / 查理兹·塞隆 / 更多...
速度与激情10(2023)属于哪些类型的电影?|动作 / 悬疑 / 惊悚 / 犯罪 / 冒险
速度与激情10(2023)是哪个国家/地区的电影?|美国
速度与激情10(2023)的主要语言是什么?|英语
速度与激情10(2023)的上映日期是什么时候?|2023-05-17(中国大陆) / 2023-05-19(美国)
速度与激情10(2023)的片长是多少?|140分钟
速度与激情10(2023)的剧情简介是什么?|唐老大和他的家族面对一名危险至极的对手,这个人决心破坏唐老大所热爱的一切及其至亲至爱之人。
蜘蛛侠:平行宇宙2导演是谁?|乔伊姆·多斯·桑托斯 / 凯普·鲍尔斯 / 贾斯汀·汤普森
蜘蛛侠:平行宇宙2的编剧有哪些?|菲尔·罗德 / 克里斯托弗·米勒 / 戴夫·卡拉汉姆
蜘蛛侠:平行宇宙2的主演有哪些?|沙梅克·摩尔 / 海莉·斯坦菲尔德 / 奥斯卡·伊萨克 / 杰克·约翰逊 / 伊萨·雷 / 更多...
蜘蛛侠:平行宇宙2属于哪些类型的电影?|喜剧 / 动作 / 科幻 / 动画 / 奇幻 / 冒险
蜘蛛侠:平行宇宙2是哪个国家/地区的电影?|美国
蜘蛛侠:平行宇宙2使用的语言是什么?|英语
蜘蛛侠:平行宇宙2在哪些日期上映?|2023-06-02(美国/中国大陆) / 2023-05-31(法国)
蜘蛛侠:平行宇宙2的片长是多少?|140分钟
蜘蛛侠:平行宇宙2讲述了什么故事?|新生代蜘蛛侠迈尔斯和蜘蛛格温穿越多元宇宙的冒险故事
蜘蛛侠:平行宇宙2的剧情中会发生什么?|一场以一敌百的蜘蛛侠大内战即将拉响
闪电侠电影|反派角色佐德将军由谁饰演?
全球电影票房排名第一的票仓是哪个国家?|中国内地
中国内地在全球电影票房中的占比是多少?|34.44%
2023年第一季度中国电影市场的票房和观影总人次分别是多少?|158.57亿和3.36亿
国产片在2023年第一季度票房排名前十的影片中占多少席位?|七席
好莱坞电影在中国内地市场的表现如何?|普遍不如预期
《阿凡达2》在中国内地市场的票房是多少?|7.43亿元
《蚁人3之蚁人与黄蜂女:量子狂潮》的票房是多少?|2.72亿
中国电影市场的复苏势头如何?|复苏势头喜人
今年第一季度中国电影市场的票房与2019年同期相比有多少差距?|相差不算太远
中国电影市场有望在什么时候完全恢复到疫情前的水平?|2024年
2022年全国电影总票房是多少?|300.67亿元。
2022年中国国产电影票房占比是多少?|84.85%。
2022年全年城市院线观影人次是多少?|7.12亿。
2022年全国影片票房前10名中有几部国产片?|8部。
2022年度票房榜冠军是哪部电影?|《长津湖之水门桥》。
2022年春节档和暑期档各占全年票房的多少?|近三分之二。
2022年春节档实现了什么记录?|年度票房最快破百亿纪录。
2022年暑期档票房冠军是哪部电影?|《独行月球》。
2023年元旦档总票房和总人次分别是多少?|5.5亿和1250.0万。
2023年春节档有哪些备受期待的电影?|《无名》、《流浪地球2》、《满江红》。
2022年全国电影总票房中中国国产电影票房占比是多少?|84.85%。
2022年度主旋律电影表现如何?|表现尤为突出,数量、质量有大幅上升,受观众喜爱。
2022年度电影市场中哪两个档期成为了重要票房产出?|春节档和暑期档。
2022年春节档票房增长了多少?|142.5%。
2022年暑期档票房与上一年相比涨幅是多少?|上涨23.8%。
2023年元旦档票房表现如何?|回暖,总票房为5.5亿,总人次1250.0万,总场次100.1万。

+ 101
- 0
skills_movie.csv View File

@@ -0,0 +1,101 @@
我爱你!电影类型是什么?|剧情/爱情/家庭
我爱你!的导演是谁?|韩延
我爱你!的编剧团队有哪些人?|韩延/韩今谅/李亮文/陈文杰/胡泽尘
我爱你!的主演有哪些人?|倪大红/惠英红/梁家辉/叶童/成果/更多
我爱你!的制片国家/地区是哪里?|中国大陆/中国香港
我爱你!的语言有哪些?|粤语/汉语普通话
我爱你!在中国大陆的上映日期是什么时候?|2023-06-21
我爱你!在上海国际电影节的上映日期是什么时候?|2023-06-09
我爱你!的故事来源于什么?|韩国同名漫画
我爱你!的故事情节主要描述了什么?|四位老人,两对爱人,在步入生命终章之时,用力而纯粹地相爱,哪怕不再有明天,也要对彼此说出那句“我爱你!”
别叫我“赌神”电影|辉哥是做什么的?
记忆电影的导演是谁?|阿彼察邦·韦拉斯哈古
记忆电影的编剧是谁?|阿彼察邦·韦拉斯哈古
记忆电影的主演有哪些?|蒂尔达·斯文顿 / 艾格尼丝·布雷克 / 丹尼尔·希梅内斯·卡乔 / 杰罗尼莫·巴伦 / 胡安·帕布罗·乌雷戈等
记忆电影属于哪个类型?|剧情
记忆电影的制片国家/地区有哪些?|哥伦比亚 / 泰国 / 法国 / 德国 / 墨西哥 / 卡塔尔 / 英国 / 中国大陆 / 瑞士
记忆电影使用的语言有哪些?|英语 / 西班牙语
记忆电影在中国大陆的上映日期是什么时候?|2023-06-22
记忆电影在哪个电影节上映的?|戛纳电影节
记忆电影讲述了哪个主人公的故事?|杰西卡·霍兰德
记忆电影的主要情节是什么?|杰西卡试图找寻幻听的根源,并开启了一场由幻想、偶遇与重逢组成的旅程,与记忆和历史产生回响。
变形金刚:超能勇士崛起主演有哪些?|安东尼·拉莫斯 / 多米尼克·菲什巴克 / 彼特·库伦 / 朗·普尔曼 / 彼特·丁拉基等。
变形金刚:超能勇士崛起的导演是谁?|小斯蒂芬·卡普尔。
变形金刚:超能勇士崛起的编剧有哪些?|卓比·哈罗德 / 达内尔·梅耶尔 / 乔什·皮特斯 / 埃里希·霍贝尔 / 乔·霍贝尔。
变形金刚:超能勇士崛起主要讲述了什么故事?|终极反派宇宙大帝从天而降,驱使以天灾为首的恐惧兽掀起地球危机,巨无霸联合汽车人变形出发,一场前所未有的决战即将上演。
变形金刚:超能勇士崛起是什么类型的电影?|动作 / 科幻 / 冒险。
变形金刚:超能勇士崛起的制片国家或地区是哪里?|美国。
变形金刚:超能勇士崛起使用的语言是什么?|英语。
变形金刚:超能勇士崛起的上映时间是什么时候?|2023-06-09(美国/中国大陆) / 2023-06-06(韩国)。
变形金刚:超能勇士崛起的片长是多少?|127分钟 / 128分钟(中国大陆)。
变形金刚:超能勇士崛起的反派角色有哪些?|终极反派宇宙大帝和以天灾为首的恐惧兽。
《万湖会议》是一部什么类型的电影?|剧情 / 历史 / 战争
《万湖会议》的导演是谁?|马蒂·格肖内克
《万湖会议》的编剧是谁?|马格努斯·瓦特罗特 / 保罗·莫默兹
《万湖会议》是哪个国家的电影?|德国
《万湖会议》的主要语言是什么?|德语
《万湖会议》的上映日期是什么时候?|2023-06-09(中国大陆) / 2022-01-18(德国)
《万湖会议》讲述的是什么历史事件?|15名纳粹德国的高级官员在万湖别墅召开了一场秘密会议,议题是“犹太人问题的最终解决方案”
《万湖会议》的主要演员有谁?|菲利普·霍奇迈尔 / 约翰尼斯·艾麦亚 / 马克西米连·布鲁克纳 / 马提亚斯‧邦德舒 / 法比安·布施 / 更多...
《万湖会议》的会议决定了什么?|所有犹太人的命运,改变了整个世界
《万湖会议》里的什么工具问世了?|奥斯维辛集中营、毒气室、焚尸炉等等惊世骇俗的杀戮工具
速度与激情10 Fast X电影类型是什么?|动作/悬疑/惊悚/犯罪/冒险
谁是Fast X的导演?|路易斯·莱特里尔
Fast X的编剧分别是谁?|丹·马泽/林诣彬/盖瑞·斯科特·汤普森
Fast X的主演有哪些人?|范·迪塞尔/米歇尔·罗德里格兹/杰森·莫玛/布丽·拉尔森/查理兹·塞隆/更多...
Fast X的制片国家/地区是哪里?|美国
Fast X的上映时间是什么时候?|2023-05-17(中国大陆)/2023-05-19(美国)
Fast X的片长是多少?|140分钟
Fast X的故事主要讲述什么?|唐老大和他的家族面对一名危险对手的故事
Fast X这部电影使用的主要语言是什么?|英语
Fast X的主题是什么?|速度、勇气和家族精神
速度与激情10(2023)是哪一年上映的电影?|2023年
速度与激情10(2023)的导演是谁?|路易斯·莱特里尔
速度与激情10(2023)的编剧有哪些人?|丹·马泽 / 林诣彬 / 盖瑞·斯科特·汤普森
速度与激情10(2023)的主演有哪些人?|范·迪塞尔 / 米歇尔·罗德里格兹 / 杰森·莫玛 / 布丽·拉尔森 / 查理兹·塞隆 / 更多...
速度与激情10(2023)属于哪些类型的电影?|动作 / 悬疑 / 惊悚 / 犯罪 / 冒险
速度与激情10(2023)是哪个国家/地区的电影?|美国
速度与激情10(2023)的主要语言是什么?|英语
速度与激情10(2023)的上映日期是什么时候?|2023-05-17(中国大陆) / 2023-05-19(美国)
速度与激情10(2023)的片长是多少?|140分钟
速度与激情10(2023)的剧情简介是什么?|唐老大和他的家族面对一名危险至极的对手,这个人决心破坏唐老大所热爱的一切及其至亲至爱之人。
蜘蛛侠:平行宇宙2导演是谁?|乔伊姆·多斯·桑托斯 / 凯普·鲍尔斯 / 贾斯汀·汤普森
蜘蛛侠:平行宇宙2的编剧有哪些?|菲尔·罗德 / 克里斯托弗·米勒 / 戴夫·卡拉汉姆
蜘蛛侠:平行宇宙2的主演有哪些?|沙梅克·摩尔 / 海莉·斯坦菲尔德 / 奥斯卡·伊萨克 / 杰克·约翰逊 / 伊萨·雷 / 更多...
蜘蛛侠:平行宇宙2属于哪些类型的电影?|喜剧 / 动作 / 科幻 / 动画 / 奇幻 / 冒险
蜘蛛侠:平行宇宙2是哪个国家/地区的电影?|美国
蜘蛛侠:平行宇宙2使用的语言是什么?|英语
蜘蛛侠:平行宇宙2在哪些日期上映?|2023-06-02(美国/中国大陆) / 2023-05-31(法国)
蜘蛛侠:平行宇宙2的片长是多少?|140分钟
蜘蛛侠:平行宇宙2讲述了什么故事?|新生代蜘蛛侠迈尔斯和蜘蛛格温穿越多元宇宙的冒险故事
蜘蛛侠:平行宇宙2的剧情中会发生什么?|一场以一敌百的蜘蛛侠大内战即将拉响
闪电侠电影|反派角色佐德将军由谁饰演?
全球电影票房排名第一的票仓是哪个国家?|中国内地
中国内地在全球电影票房中的占比是多少?|34.44%
2023年第一季度中国电影市场的票房和观影总人次分别是多少?|158.57亿和3.36亿
国产片在2023年第一季度票房排名前十的影片中占多少席位?|七席
好莱坞电影在中国内地市场的表现如何?|普遍不如预期
《阿凡达2》在中国内地市场的票房是多少?|7.43亿元
《蚁人3之蚁人与黄蜂女:量子狂潮》的票房是多少?|2.72亿
中国电影市场的复苏势头如何?|复苏势头喜人
今年第一季度中国电影市场的票房与2019年同期相比有多少差距?|相差不算太远
中国电影市场有望在什么时候完全恢复到疫情前的水平?|2024年
2022年全国电影总票房是多少?|300.67亿元。
2022年中国国产电影票房占比是多少?|84.85%。
2022年全年城市院线观影人次是多少?|7.12亿。
2022年全国影片票房前10名中有几部国产片?|8部。
2022年度票房榜冠军是哪部电影?|《长津湖之水门桥》。
2022年春节档和暑期档各占全年票房的多少?|近三分之二。
2022年春节档实现了什么记录?|年度票房最快破百亿纪录。
2022年暑期档票房冠军是哪部电影?|《独行月球》。
2023年元旦档总票房和总人次分别是多少?|5.5亿和1250.0万。
2023年春节档有哪些备受期待的电影?|《无名》、《流浪地球2》、《满江红》。
2022年全国电影总票房中中国国产电影票房占比是多少?|84.85%。
2022年度主旋律电影表现如何?|表现尤为突出,数量、质量有大幅上升,受观众喜爱。
2022年度电影市场中哪两个档期成为了重要票房产出?|春节档和暑期档。
2022年春节档票房增长了多少?|142.5%。
2022年暑期档票房与上一年相比涨幅是多少?|上涨23.8%。
2023年元旦档票房表现如何?|回暖,总票房为5.5亿,总人次1250.0万,总场次100.1万。
给我推荐一个经典电影看,我不喜欢爱情电影?|好的,我给您推荐《肖申克的救赎》这部电影,《肖申克的救赎》是一部关于信仰、希望与勇气的经典电影。它讲述了主人公安迪被错误定为谋杀罪犯,被送进监狱,接着在监狱中经历磨难、努力幸存、培养友情、逐渐获得自由和复仇的故事。影片通过细腻的描写人物的情感变化,以及精彩的情节推进手法,让观众体会到了在绝境中坚持信念所能带来的力量与启示。影片荣膺多个奖项,被誉为电影史上的经典之作。
你怎么看中国电影行业?|当前中国电影行业的市场表现十分活跃,2023年全年票房突破250亿元,创下新的历史高点。国产影片在这个市场中占据着绝对的主导地位,国产电影总票房高达211.86亿,占据了全年票房总额的84.75%。其中《满江红》《流浪地球2》等国产电影在票房和口碑上表现出色,而外国电影的表现相对较弱。此外,与以往相比,国内电影市场能够连续多次打破票房记录,这一方面反映了观众的票房消费意愿和强烈的观影需求,另一方面也证明了中国电影产业的快速发展,以及电影创作和制作水平不断提升。
如果你喜欢武侠电影,崇拜黄蓉,且你还是一个刚毕业的女大学生,请回答你想成为哪部电影中的哪个人物?|从武侠电影和黄蓉的角度出发,我觉得我可以成为《射雕英雄传》中的李莫愁。尽管李莫愁是一个反派角色,但是其不断追求武学上的卓越表现出了女性在武侠世界中的强大实力和独立个性,让人们看到了女性与男性平等竞技的可能性,它为武侠电影中的女性形象设定树立起了一个新的标准。

+ 6
- 0
static/marked.min.js
File diff suppressed because it is too large
View File


+ 116
- 0
static/script.js View File

@@ -0,0 +1,116 @@
// Add carriage return submission support, shift+carriage return line feed
var input = document.getElementById("chatinput");
input.addEventListener("keydown", function (event) {
if (event.keyCode === 13 && !event.shiftKey) {
event.preventDefault();
document.getElementById("sendbutton").click();
}
});

// Add your JavaScript here
document.getElementById("sendbutton").addEventListener("click", function () {
let loading = document.getElementById('loading');
let title = document.getElementById("title");
loading.style.display = 'block';
title.style.display = 'none';
// Get the user's message from the input field
var message = document.getElementById("chatinput").value;
if (message.length < 1) {
let chatbox = document.getElementById("chatbox");
let chatlog = document.getElementById("chatlog");
let response = document.createElement("div");
response.innerHTML = "🤔<br>🤖<br>Message cannot be null\n问题不能为空";
chatlog.appendChild(response);
//scrool the chatbox into bottom
chatbox.scrollTop = chatbox.scrollHeight;
loading.style.display = 'none';
} else {
// Clear the input field
document.getElementById("chatinput").value = "";
//Apeed the messenge to the chatlog
let chatbox = document.getElementById("chatbox");
let chatlog = document.getElementById("chatlog");
let response = document.createElement("div");
response.innerHTML = "🤔me<br>" + marked.parse(message);
chatlog.appendChild(response);
//scrool the chatbox into bottom
chatbox.scrollTop = chatbox.scrollHeight;
// Append the user's message
var data = {
query: message,
max_token: 3000,
temperature: 0.7,
top_p: 0.9
};
// Send the user's message to the server
function sendChat(data){
return new Promise(function(){
var source = new EventSource("/chatstream_qa?"+$.param(data));
var res_txt = '';
var markdown_code_tail = '';
// var source = new EventSource("/chatstream");
//Triggered on first connection
source.onopen = function (event) {
console.log("Connection opened");
let chatbox = document.getElementById("chatbox");
let chatlog = document.getElementById("chatlog");
let response = document.createElement('div')
response.setAttribute('name', 'response');
response.innerHTML = "🤖chatGPT<br>";
res_txt = '';
markdown_code_tail = '';
chatlog.appendChild(response);
//scrool the chatbox into bottom
chatbox.scrollTop = chatbox.scrollHeight;
}
source.onmessage = function (event) {
const data = JSON.parse(event.data);
let content = data.content
let chatbox = document.getElementById("chatbox");
let responseElements = document.getElementsByName("response");
let responseElement = responseElements[responseElements.length - 1]; //Take the last one
if(content == '[DONE]')
{
console.log("Connection closed");
let title = document.getElementById("title");
let loading = document.getElementById('loading');
loading.style.display = 'none';
title.style.display = 'block';
source.close();
}
else
{
res_txt += content;
len = res_txt.split("```").length - 1;
if(len%2 > 0){
responseElement.innerHTML = "🤖chatGPT<br>" + marked.parse(res_txt + "\r\n```");
}
else{
responseElement.innerHTML = "🤖chatGPT<br>" + marked.parse(res_txt);
}
}
console.log(content);
//scrool the chatbox into bottom
chatbox.scrollTop = chatbox.scrollHeight;
}
source.onerror = function (event) {
console.log("Connection Timeout");
let title = document.getElementById("title");
let loading = document.getElementById('loading');
loading.style.display = 'none';
title.style.display = 'block';
source.close();
}
// 绑定停止按钮事件
// $("#btn2").click(function () {
// if (source !== null) {
// source.close();
// // delete_data();
// }
// })
})
}
sendChat(data);
}
});

+ 223
- 0
static/style.css View File

@@ -0,0 +1,223 @@
* {
box-sizing: border-box;
}

body {
background-color: #edeff2;
font-family: "Calibri", "Roboto", sans-serif;
}

@media (prefers-color-scheme: dark) {
body {
background: black;
color: white;
}
}

.chat_window {
position: absolute;
width: 100%;
max-width: 100%;
height: 100%;
border-radius: 0;
background-color: #fff;
left: 50%;
top: 50%;
transform: translateX(-50%) translateY(-50%);
box-shadow: 0 10px 20px rgba(0, 0, 0, 0.15);
background-color: #f8f8f8;
overflow: hidden;
}

.top_menu {
background-color: #fff;
width: 100%;
padding: 20px 0 15px;
box-shadow: 0 1px 30px rgba(0, 0, 0, 0.1);
}
.top_menu .buttons {
margin: 3px 0 0 20px;
position: absolute;
}
.top_menu .buttons .button {
width: 16px;
height: 16px;
border-radius: 50%;
display: inline-block;
margin-right: 10px;
position: relative;
}
.top_menu .buttons .button.close {
background-color: #f5886e;
}
.top_menu .buttons .button.minimize {
background-color: #fdbf68;
}
.top_menu .buttons .button.maximize {
background-color: #a3d063;
}
.top_menu .title {
text-align: center;
color: #bcbdc0;
font-size: 20px;
}

.top_menu .alert_title{
text-align: center;
color: #ff11008c;
font-size: 20px;
}

.messages {
position: relative;
list-style: none;
padding: 20px 10px 0 10px;
margin: 0;
height: calc(100% - 150px);
max-height: calc(100% - 120px);
overflow-x: hidden;
overflow-y: auto;
}
.messages .message {
clear: both;
overflow: hidden;
margin-bottom: 20px;
transition: all 0.5s linear;
opacity: 0;
}
.messages .message.left .avatar {
background-color: #f5886e;
float: left;
}
.messages .message.left .text_wrapper {
background-color: #ffe6cb;
margin-left: 20px;
}
.messages .message.left .text_wrapper::after, .messages .message.left .text_wrapper::before {
right: 100%;
border-right-color: #ffe6cb;
}
.messages .message.left .text {
color: #c48843;
}
.messages .message.right .avatar {
background-color: #fdbf68;
float: right;
}
.messages .message.right .text_wrapper {
background-color: #c7eafc;
margin-right: 20px;
float: right;
}
.messages .message.right .text_wrapper::after, .messages .message.right .text_wrapper::before {
left: 100%;
border-left-color: #c7eafc;
}
.messages .message.right .text {
color: #45829b;
}
.messages .message.appeared {
opacity: 1;
}
.messages .message .avatar {
width: 60px;
height: 60px;
border-radius: 50%;
display: inline-block;
}
.messages .message .text_wrapper {
display: inline-block;
padding: 20px;
border-radius: 6px;
width: calc(100% - 85px);
min-width: 100px;
position: relative;
}
.messages .message .text_wrapper::after, .messages .message .text_wrapper:before {
top: 18px;
border: solid transparent;
content: " ";
height: 0;
width: 0;
position: absolute;
pointer-events: none;
}
.messages .message .text_wrapper::after {
border-width: 13px;
margin-top: 0px;
}
.messages .message .text_wrapper::before {
border-width: 15px;
margin-top: -2px;
}
.messages .message .text_wrapper .text {
font-size: 18px;
font-weight: 300;
}

.bottom_wrapper {
/* position: relative; */
width: 100%;
height: 80px;
background-color: #fff;
padding: 20px 20px;
position: absolute;
bottom: 0;
}

.bottom_wrapper .message_input_wrapper {
display: inline-block;
height: 50px;
border-radius: 25px;
border-style: 1px solid;
border-color: #bcbdc0;
width: calc(100% - 160px);
position: relative;
padding: 0 20px;
color: #999;
font-size: 24px;
text-align: match-parent;
align-items: center;
}
.bottom_wrapper .message_input_wrapper:focus{
outline: none;
border-color: #898a8b;
box-shadow: none;
}

.bottom_wrapper .message_input_wrapper .message_input {
border: none;
height: 100%;
box-sizing: border-box;
width: calc(100% - 40px);
position: absolute;
outline-width: 0;
color: gray;
}
.bottom_wrapper .send_message {
width: 140px;
height: 50px;
display: inline-block;
border-radius: 50px;
background-color: #a3d063;
border: 2px solid #a3d063;
color: #fff;
cursor: pointer;
transition: all 0.2s linear;
text-align: center;
float: right;
}
.bottom_wrapper .send_message:hover {
color: #a3d063;
background-color: #fff;
}
.bottom_wrapper .send_message .text {
font-size: 18px;
font-weight: 300;
display: inline-block;
line-height: 48px;
}

.message_template {
display: none;
}

+ 43
- 0
templates/chat.html View File

@@ -0,0 +1,43 @@
<!DOCTYPE html>
<html lang="en">

<!--自适应屏幕大小-->
<meta name="viewport" content="width=device-width,initial-scale=1"/>
<meta name="description" content="使用官方ChatGPT API实现简单HTML网页版在线聊天(支持markdown语法及查看对话记录)"/>
<head>
<meta charset="UTF-8">
<title>OpenAI</title>
<link rel="shortcut icon" href="https://chat.openai.com/favicon-32x32.png" type="image/x-icon">
<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='style.css') }}">
</head>

<body>
<div align="center">
<div class="chat_window">
<div class="top_menu">
<div class="buttons">
<div class="button close"></div>
<div class="button minimize"></div>
<div class="button maximize"></div>
</div>
<div id="title" class="title" style="display:boock">ChatGPT</div>
<div id="loading" class="alert_title" style="display:none">处理中, 请勿重复提交</div>
</div>
<!-- <div id="loading" style="display:none; color:red"><b>后端正在处理,请稍等,切勿重复提交</b></div> -->
<ul class="messages" id="chatbox">
<div style="text-align: left; color: green">
<pre style="white-space: pre-wrap; word-wrap: break-word;" id="chatlog"></pre>
</div>
</ul>
<div class="bottom_wrapper clearfix">
<textarea class="message_input_wrapper" placeholder="" id="chatinput"></textarea>
<button class="send_message" id="sendbutton">提交</button>
</div>
</div>
</div>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
{#<script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>#}
<script src="{{ url_for('static', filename='marked.min.js') }}"></script>
<script src="{{ url_for('static', filename='script.js') }}"></script>
</body>
</html>

Loading…
Cancel
Save