Embodied Intelligence当作一种将感知、决策与践诺相勾通的前沿手艺,正在引颈机器东说念主手艺迈向新的高度。具身智能不仅要求机器东说念主具备和会和处理复杂环境的智商,还需赋予其自主决策和践诺任务的智商。本文将深远探讨如何将LLM和多模态大模子与机器东说念主手艺相勾通,构建一套完竣的具身智能手艺经由。本文参考了同济子豪兄的部单干作,TsingtaoAI团队对全体构建作念了一部分拓展和蔓延。文中关系经由和代码仅作示例,用于读者和会关系的里面杀青逻辑,不具备工程复现酷爱。
本文目次
1.一套最小的具身智能应用杀青经由
2.系统架构瞎想
3.LLM与机器东说念主集成
4.多模态大模子的应用
5.自主决策与践诺模块
6.传感器与践诺器接口
7.通讯与数据处理
8.系统部署与优化
9.案例分析与代码示例
10.未来瞻望
1.一套最小的具身智能应用杀青经由
具身智能强调机器东说念主不仅具备感知和领路智商,还或者通过与环境的交互杀青自主活动。与传统的机器东说念主比较,具身智能机器东说念主更具恰当性和纯真性,或者在复杂、多变的环境中践诺任务。这一成见的中枢在于将感知、领路和动作扬弃有机勾通,使机器东说念主具备类似东说念主类的智能活动。
1.1 具身智能的要津成分
l感知智商:通过多种传感器获得环境信息,包括视觉、听觉、触觉等。
l领路智商:摆布AI模子进行信息处理和和会,杀青环境建模和任务蓄意。
l动作扬弃:通过践诺器杀青对环境的物理操作,完成特定任务。
l自主决策:基于感知和领路完毕,自主制定活动政策。
2. 系统架构瞎想
构建具身智能系统需要一个高度集成的架构,涵盖感知、领路、决策与践诺等多个模块。以下是一个典型的具身智能系统架构图:
diff
+-----------------------+
| 感知模块 |
| - 录像头 |
| - 麦克风 |
| - 触觉传感器 |
+----------+------------+
|
v
+----------+------------+
| 数据处理 |
| - 数据预处理 |
| - 特征索取 |
+----------+------------+
|
v
+----------+------------+
| 领路模块 |
| - 大型谈话模子(LLM) |
| - 多模态大模子 |
+----------+------------+
|
v
+----------+------------+
| 决策与蓄意模块 |
| - 活动蓄意 |
| - 决策树 |
+----------+------------+
|
v
+----------+------------+
| 践诺模块 |
| - 机械臂扬弃 |
| - 动作践诺 |
+-----------------------+
2.1 模块详备讲明
l感知模块:谨慎蚁集环境数据,包括视觉、听觉和触觉等多种传感器信息。
l数据处理:对蚁集到的数据进行预处理和特征索取,为领路模块提供高质料的输入。
l领路模块:摆布LLM和多模态大模子对数据进行和会和分析,生成高下文关系的信息。
l决策与蓄意模块:基于领路完毕,制定具体的活动操办和政策。
l践诺模块:将决策滚动为具体的物理动作,通过机械臂等践诺器完成任务。
3. LLM与机器东说念主集成
大型谈话模子,如OpenAI的GPT-4o,具备强盛的当然谈话和会和生成智商。将LLM集成到机器东说念主系统中,不错权贵擢升机器东说念主的交互智商和决策水平。
3.1 LLM的采取与部署
在采取LLM时,需要洽商模子的性能、反映速率和资源铺张。面前,主流的LLM包括:
lYi-Large:具有强盛的中语和会和生成智商,得当中语环境下的应用。
lClaude 3:以其稳健性和高效性著称,适用于多种任务场景。
lERNIE 4.0:百度推出的多任务学习模子,在中语NLP任务中推崇优异。
3.1.1 部署环境
为了杀青高效的模子运行,提议使用亚马逊云科技的生成式AI平台Amazon Bedrock。Bedrock提供了高性能的狡计资源和方便的模子照管接口,得当大限制部署LLM。
python
import boto3
# 运滚动Bedrock客户端
bedrock_client = boto3.client('bedrock', region_name='us-west-2')
# 调用LLM进行文本生成
response = bedrock_client.invoke_model(
ModelId='ernie-4.0',
Prompt='你好,机器东说念主!今天的任务是什么?',
MaxTokens=150
)
print(response['GeneratedText'])
3.2 LLM与感知模块的交融
LLM不仅不错处理文本教唆,还能勾通视觉和听觉信息,杀青更复杂的交互。通过多模态输入,机器东说念主不错更准确地和会用户意图。
python
from transformers import CLIPProcessor, CLIPModel
import torch
# 运滚动多模态模子
clip_model = CLIPModel.from_pretrained("openai/clip-vit-base-patch32")
clip_processor = CLIPProcessor.from_pretrained("openai/clip-vit-base-patch32")
def process_multimodal(image, text):
inputs = clip_processor(text=[text], images=image, return_tensors="pt", padding=True)
outputs = clip_model(**inputs)
logits_per_image = outputs.logits_per_image
probs = logits_per_image.softmax(dim=1)
return probs
# 示例调用
image = Image.open("example.jpg")
text = "这是一个红色的苹果。"
prob = process_multimodal(image, text)
print(prob)
3.3 当然谈话教唆明白与践诺
通过LLM,机器东说念主不错明白当然谈话教唆,并将其滚动为具体的动作教唆。举例,用户不错通过语音教唆“请将红色的物体提起来”,机器东说念主通过LLM明白后,勾通视觉信息,践诺相应的动作。
python
def parse_instruction(instruction):
# 使用LLM明白教唆
response = bedrock_client.invoke_model(
ModelId='yi-large',
Prompt=instruction,
MaxTokens=100
)
action_plan = response['GeneratedText']
return action_plan
instruction = "请将红色的物体提起来。"
action = parse_instruction(instruction)
print(action)
4. 多模态大模子的应用
多模态大模子勾通了文本、图像、音频等多种数据类型的处明智商,赋予机器东说念主更全面的感知和和会智商。面前,主流的多模态大模子包括GPT-4o、Yi-Vision、Claude 3 Opus等。
4.1 多模态模子的采取与集成
采取合适的多模态模子是杀青具身智能的要津。以下是几种常用的多模态模子偏激特色:
lGPT-4o:在多模态和会和生成方面推崇优异,得当复杂场景下的应用。
lYi-Vision:专注于中语图像和会,得当中语环境下的视觉任务。
lClaude 3 Opus:勾通了音频和视觉信息,适用于需要听觉与视觉勾通的任务。
4.1.1 集成示例
以GPT-4o为例,展示如何将图像和文本输入勾通,进行空洞和会。
python
from transformers import GPT4oProcessor, GPT4oModel
from PIL import Image
# 运滚动多模态处理器和模子
processor = GPT4oProcessor.from_pretrained("openai/gpt4o")
model = GPT4oModel.from_pretrained("openai/gpt4o")
def multimodal_inference(image_path, text):
image = Image.open(image_path)
inputs = processor(text=text, images=image, return_tensors="pt")
outputs = model(**inputs)
return outputs
# 示例调用
image_path = "scene.jpg"
text = "神态这张图片中的主要物体和动作。"
outputs = multimodal_inference(image_path, text)
print(outputs)
4.2 多模态信息交融
在具身智能中,交融多模态信息是擢升机器东说念主和会智商的错误妙技。通过勾通视觉、听觉和文本信息,机器东说念主或者更准确地感知环境和用户意图。
python
def fuse_multimodal_data(image, audio, text):
# 处理视觉信息
visual_features = clip_model.get_image_features(clip_processor(images=image, return_tensors="pt")["pixel_values"])
# 处理音频信息
audio_features = audio_model.extract_features(audio)
# 处理文本信息
text_features = llm_model.encode(text)
# 交融特征
fused_features = torch.cat((visual_features, audio_features, text_features), dim=1)
return fused_features
# 示例调用
image = Image.open("object.jpg")
audio = load_audio("command.wav")
text = "请识别并握取桌上的苹果。"
features = fuse_multimodal_data(image, audio, text)
print(features)
5. 自主决策与践诺模块
自主决策是具身智能机器东说念主的中枢,通过勾通领路模块的输出,制定具体的活动操办。决策模块需要具备纯真性和恰当性,或者大意动态变化的环境。
5.1 决策树与活动蓄意
决策树是一种常用的决策模子,通过分档次的条款判断,细则下一步的活动。勾通活动蓄意,机器东说念主不错凭据面前现象和办法,制定详备的活动要领。
python
class DecisionNode:
def __init__(self, condition, true_branch, false_branch):
self.condition = condition
self.true_branch = true_branch
self.false_branch = false_branch
def evaluate_decision(node, context):
if node.condition(context):
if isinstance(node.true_branch, DecisionNode):
return evaluate_decision(node.true_branch, context)
else:
return node.true_branch
else:
if isinstance(node.false_branch, DecisionNode):
return evaluate_decision(node.false_branch, context)
else:
return node.false_branch
# 示例决策树
def condition_pick_up(context):
return context['object_detected'] and context['object_color'] == 'red'
action_pick = "握取红色物体"
action_search = "搜索红色物体"
root = DecisionNode(condition_pick_up, action_pick, action_search)
# 示例调用
context = {'object_detected': True, 'object_color': 'red'}
action = evaluate_decision(root, context)
print(action) # 输出: 握取红色物体
5.2 强化学习在决策中的应用
强化学习(Reinforcement Learning, RL)通过与环境的交互,抑止优化政策,杀青复杂任务的自主决策。摆布RL,机器东说念主或者在动态环境中学习并恰当变化。
python
import gym
import numpy as np
import torch
import torch.nn as nn
import torch.optim as optim
# 界说通俗的政策收集
class PolicyNetwork(nn.Module):
def __init__(self, state_size, action_size):
super(PolicyNetwork, self).__init__()
self.fc = nn.Linear(state_size, 128)
self.action_head = nn.Linear(128, action_size)
def forward(self, x):
x = torch.relu(self.fc(x))
action_probs = torch.softmax(self.action_head(x), dim=-1)
return action_probs
# 运滚动环境和收集
env = gym.make('CartPole-v1')
state_size = env.observation_space.shape[0]
action_size = env.action_space.n
policy_net = PolicyNetwork(state_size, action_size)
optimizer = optim.Adam(policy_net.parameters(), lr=1e-2)
eps = np.finfo(np.float32).eps.item()
# 检会过程
for episode in range(1000):
state = env.reset()
rewards = []
log_probs = []
done = False
while not done:
state = torch.from_numpy(state).float()
action_probs = policy_net(state)
m = torch.distributions.Categorical(action_probs)
action = m.sample()
log_prob = m.log_prob(action)
state, reward, done, _ = env.step(action.item())
log_probs.append(log_prob)
rewards.append(reward)
if done:
break
# 狡计累计奖励
cumulative_reward = 0
policy_loss = []
for log_prob, reward in zip(log_probs, rewards):
cumulative_reward += reward
policy_loss.append(-log_prob * cumulative_reward)
optimizer.zero_grad()
policy_loss = torch.cat(policy_loss).sum()
policy_loss.backward()
optimizer.step()
if episode % 100 == 0:
print(f"Episode {episode}, Reward: {cumulative_reward}")
5.3 活动蓄意的杀青
活动蓄意需要勾通具体任务,制定详备的活动要领。举例,在握取物体任务中,蓄意旅途、避障政策等。
python
import numpy as np
class BehaviorPlanner:
def __init__(self, robot, environment):
self.robot = robot
self.environment = environment
def plan_path(self, start, goal):
# 使用A*算法进行旅途蓄意
open_set = set()
open_set.add(start)
came_from = {}
g_score = {start: 0}
f_score = {start: self.heuristic(start, goal)}
while open_set:
current = min(open_set, key=lambda x: f_score.get(x, np.inf))
if current == goal:
return self.reconstruct_path(came_from, current)
open_set.remove(current)
for neighbor in self.environment.get_neighbors(current):
tentative_g = g_score[current] + self.distance(current, neighbor)
if tentative_g < g_score.get(neighbor, np.inf):
came_from[neighbor] = current
g_score[neighbor] = tentative_g
f_score[neighbor] = tentative_g + self.heuristic(neighbor, goal)
open_set.add(neighbor)
return []
def heuristic(self, a, b):
return np.linalg.norm(np.array(a) - np.array(b))
def distance(self, a, b):
return self.heuristic(a, b)
def reconstruct_path(self, came_from, current):
path = [current]
while current in came_from:
current = came_from[current]
path.append(current)
path.reverse()
return path
# 示例调用
robot = MyRobot()
environment = EnvironmentGrid()
planner = BehaviorPlanner(robot, environment)
start = (0, 0)
goal = (5, 5)
path = planner.plan_path(start, goal)
print(f"蓄意旅途: {path}")
6. 传感器与践诺器接口
传感器和践诺器是机器东说念主与外界交互的桥梁,确保感知信息的准确蚁集和动作教唆的有用践诺。以下将详备先容如何集成和照管各式传感器与践诺器。
6.1 视觉传感器接口
录像头是主要的视觉传感器,通过图像处理手艺,获得环境的视觉信息。
python
import cv2
class CameraInterface:
def __init__(self, camera_id=0):
self.cap = cv2.VideoCapture(camera_id)
def get_frame(self):
ret, frame = self.cap.read()
if ret:
return frame
else:
return None
def release(self):
self.cap.release()
# 示例调用
camera = CameraInterface()
frame = camera.get_frame()
if frame is not None:
cv2.imshow('Camera Frame', frame)
cv2.waitKey(0)
camera.release()
cv2.destroyAllWindows()
6.2 语音识别与合成
语音识别和合成是杀青当然东说念主机交互的错误妙技。本文给与PaddleSpeech进行随笔本在线合成和AppBuilder-SDK进行语音识别。
python
import paddlespeech as ps
# 语音识别
def recognize_speech(audio_file):
recognizer = ps.AsrModel.from_pretrained("appbuilder-sdk-short")
result = recognizer.recognize(audio_file)
return result
# 语音合成
def synthesize_speech(text, output_file):
tts = ps.TtsModel.from_pretrained("appbuilder-sdk-tts")
tts.synthesize(text, output_file)
# 示例调用
audio_input = "command.wav"
recognized_text = recognize_speech(audio_input)
print(f"识别完毕: {recognized_text}")
text_output = "任务已完成。"
synthesize_speech(text_output, "output.wav")
6.3 机械臂扬弃接口
机械臂是机器东说念主的践诺器,通过编程接口,杀青精确的动作扬弃。本文以Mycobot 280 Pi机械臂为例,展示如何进行扬弃。
python
from pymycobot import Mycobot
# 运滚动机械臂
mc = Mycobot("/dev/ttyUSB0", 115200)
# 迁徙到指定坐标
def move_to(x, y, z, r=0):
mc.send_coords([x, y, z, r], 50)
# 握取动作示例
move_to(200, 0, 100) # 位置1
mc.set_gripper_state(True) # 开启夹爪
move_to(200, 0, 200) # 位置2
mc.set_gripper_state(False) # 关闭夹爪
# 示例调用
move_to(150, 50, 100)
mc.set_gripper_state(True)
move_to(150, 50, 200)
mc.set_gripper_state(False)
6.4 传感器数据同步与照管
确保传感器数据的同步与高效照管,是杀青准确扬弃的基础。不错通过多线程或异步编程,杀青多传感器数据的并行处理。
python
import threading
class SensorManager:
def __init__(self):
self.camera = CameraInterface()
self.audio = AudioInterface()
self.lock = threading.Lock()
self.latest_frame = None
self.latest_audio = None
def start_camera(self):
def camera_thread():
while True:
frame = self.camera.get_frame()
with self.lock:
self.latest_frame = frame
threading.Thread(target=camera_thread, daemon=True).start()
def start_audio(self):
def audio_thread():
while True:
audio = self.audio.get_audio()
with self.lock:
self.latest_audio = audio
threading.Thread(target=audio_thread, daemon=True).start()
def get_latest_data(self):
with self.lock:
return self.latest_frame, self.latest_audio
# 示例调用
sensor_manager = SensorManager()
sensor_manager.start_camera()
sensor_manager.start_audio()
# 在主轮回中获得最新数据
while True:
frame, audio = sensor_manager.get_latest_data()
if frame is not None:
cv2.imshow('Live Frame', frame)
if audio is not None:
print(f"最新音频数据: {audio}")
if cv2.waitKey(1) & 0xFF == ord('q'):
break
7. 通讯与数据处理
在具身智能系统中,通讯与数据处理是保证各模块高效配合的要津。以下将先容如何杀青模块间的通讯与数据同步。
7.1 模块间通讯机制
不错给与音问部队(如RabbitMQ)、分享内存或RESTful API等风景,杀青模块间的通讯。本文以RabbitMQ为例,展示如何杀青音问传递。
python
import pika
import json
# 发送音问
def send_message(queue, message):
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
channel.queue_declare(queue=queue)
channel.basic_publish(exchange='', routing_key=queue, body=json.dumps(message))
connection.close()
# 收受音问
def receive_message(queue, callback):
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
channel.queue_declare(queue=queue)
channel.basic_consume(queue=queue, on_message_callback=lambda ch, method, properties, body: callback(json.loads(body)), auto_ack=True)
channel.start_consuming()
# 示例调用
def action_callback(message):
print(f"收受到音问: {message}")
# 发送
send_message('action_queue', {'action': 'move', 'parameters': {'x': 100, 'y': 200}})
# 收受
receive_message('action_queue', action_callback)
7.2 数据处理与存储
在大限制数据处理场景下,给与漫衍式数据库(如MongoDB、PostgreSQL)和实时数据处理框架(如Apache Kafka、Spark)是必要的。本文以MongoDB为例,展示数据的存储与查询。
python
from pymongo import MongoClient
# 鸠合MongoDB
client = MongoClient('mongodb://localhost:27017/')
db = client['robot_db']
collection = db['sensor_data']
# 插入数据
def insert_sensor_data(data):
collection.insert_one(data)
# 查询数据
def query_sensor_data(query):
return collection.find(query)
# 示例调用
sensor_data = {
'timestamp': '2024-04-27T10:00:00Z',
'sensor': 'camera',
'data': 'image_bytes...'
}
insert_sensor_data(sensor_data)
results = query_sensor_data({'sensor': 'camera'})
for result in results:
print(result)
7.3 实时数据处理
实时数据处理关于具身智能系统的反映速率至关错误。不错给与流处理框架,如Apache Kafka,杀青数据的实时传输与处理。
python
from kafka import KafkaProducer, KafkaConsumer
# 分娩者发送音问
producer = KafkaProducer(bootstrap_servers='localhost:9092')
producer.send('sensor_topic', b'新传感器数据')
producer.flush()
# 消费者收受音问
consumer = KafkaConsumer('sensor_topic', bootstrap_servers='localhost:9092')
for message in consumer:
print(f"收受到音问: {message.value}")
8. 系统部署与优化
高效的系统部署与优化,或者权贵擢升具身智能机器东说念主的性能与可靠性。以下将探讨系统部署的最好推行及性能优化政策。
8.1 部署环境确立
确保系统在安闲的环境中运行,是杀青高效部署的基础。保举使用树莓派4B搭载Ubuntu 20.04当作诞生环境,勾通云平台资源,杀青腹地与云霄的协同职责。
bash
# 更新系统
sudo apt update
sudo apt upgrade -y
# 安设必要的软件包
sudo apt install -y python3-pip git
# 克隆技俩代码
git clone https://github.com/TommyZihao/vlm_arm.git
cd vlm_arm
# 创建臆造环境
python3 -m venv venv
source venv/bin/activate
# 安设依赖
pip install -r requirements.txt
8.2 性能优化政策
针对具身智能系统的高狡计需求,以下是几种常用的性能优化政策:
l模子压缩与剪枝:减少模子参数目,擢升推理速率。
l硬件加快:摆布GPU或TPU加快狡计,擢升处理成果。
l并行狡计:给与多线程或漫衍式狡计,擢升数据处明智商。
l缓存机制:对时时走访的数据进行缓存,减少肖似狡计。
python
import torch
import torch.nn.utils.prune as prune
# 模子剪枝示例
def prune_model(model, amount=0.3):
for name, module in model.named_modules():
if isinstance(module, torch.nn.Linear):
prune.l1_unstructured(module, name='weight', amount=amount)
return model
# 示例调用
pruned_model = prune_model(policy_net, amount=0.2)
8.3 系统监控与诊治
实时监控系统现象,实时发现并处分潜在问题,是保证系统安闲运行的错误妙技。不错给与Prometheus和Grafana进行系统监控与可视化。
yaml
复制代码
# Prometheus确立示例
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'robot_system'
static_configs:
- targets: ['localhost:9090']
yaml
# Grafana数据源确立
apiVersion: 1
datasources:
- name: Prometheus
type: prometheus
url: http://localhost:9090
9. 案例分析与代码示例
为更好地和会具身智能手艺经由,以下通过具体案例进行分析,并提供相应的代码示例。
9.1 案例布景
假定咱们要杀青一个具身智能机器东说念主,通过语音教唆扬弃机械臂握取指定情态的物体。具体经由包括语音识别、教唆明白、视觉识别、旅途蓄意与机械臂扬弃。
9.2 杀青要领
9.2.1 语音教唆获得与明白
python
# 语音教唆获得
def get_voice_command():
audio_file = "command.wav"
record_audio(audio_file) # 假定有灌音函数
command = recognize_speech(audio_file)
return command
# 教唆明白
def parse_command(command):
action_plan = parse_instruction(command)
return action_plan
# 示例调用
voice_command = get_voice_command()
action_plan = parse_command(voice_command)
print(f"明白后的教唆: {action_plan}")
9.2.2 视觉识别与办法定位
python
from PIL import Image
import torch
def detect_object(image, target_color):
# 使用多模态模子进行情态识别
response = multimodal_inference(image, f"找到一个{target_color}的物体。")
# 假定复返物体的坐标
object_coords = extract_coordinates(response)
return object_coords
# 示例调用
frame = camera.get_frame()
target_color = "红色"
object_coords = detect_object(frame, target_color)
print(f"办法物体坐标: {object_coords}")
9.2.3 旅途蓄意与机械臂扬弃
python
# 蓄意旅途
path = planner.plan_path(current_position, object_coords)
# 践诺旅途
for point in path:
move_to(point[0], point[1], point[2])
# 添加必要的延时和现象查验
9.2.4 完竣经由整合
python
def main():
# 获得并明白语音教唆
voice_command = get_voice_command()
action_plan = parse_command(voice_command)
if action_plan['action'] == '握取' and '情态' in action_plan['parameters']:
target_color = action_plan['parameters']['情态']
# 视觉识别
frame = camera.get_frame()
object_coords = detect_object(frame, target_color)
if object_coords:
# 旅途蓄意
path = planner.plan_path(current_position, object_coords)
# 践诺动作
for point in path:
move_to(point[0], point[1], point[2])
# 握取物体
mc.set_gripper_state(True)
move_to(grasp_position)
mc.set_gripper_state(False)
print("握取任务完成。")
else:
print(f"未检测到{target_color}的物体。")
else:
print("不因循的教唆。")
# 运行主函数
if __name__ == "__main__":
main()
10. 未来瞻望
本文深远探讨了一套基本的具身智能手艺经由,从系统架构瞎想到具体模块的杀青,涵盖了最新的LLM、多模态大模子与机器东说念主手艺的集成门径。通过详备的手艺分析和代码示例,展示了如何杀青AI机器东说念主的自主决策与践诺智商。
具身智能当作机器东说念主手艺的前沿所在,未来的发展后劲精深。跟着AI模子的抑止逾越和硬件手艺的擢升,具身智能机器东说念主将在更多界限展现其价值。以下是几个值得关心的发展趋势:
l自恰当学习:机器东说念主或者凭据环境变化,自主调理政策,杀青接续学习和优化。
l心思交互:通过心思识别与抒发,擢升东说念主机交互的当然性和亲和力。
l协同职责:多机器东说念主配合,共同完成复杂任务,提高全体成果。
l智能感知:愈加精确和千般化的感知智商,擢升机器东说念主在复杂环境中的恰当性。
在高校实训西宾界限,当今TsingtaoAI公司推出了具身智能高校实训处分决策-从AI大模子+机器东说念主到通工具身智能”,该决策基于华为手艺有限公司AI框架昇念念MindSpore,完成并通过昇腾相互兼容性手艺认证。
大众招募
TsingtaoAI面向民众范围的LLM大模子、具身智能、AI机器东说念主、智算、AIGC、数据科学、金融科技、5G、信创、智能制造、聪慧动力等界限招募大众讲师,有多种风景合作,合作风景纯真,收益丰厚。迎接感风趣的大众与咱们关系。