加入商品信息

main
Zhangzhichao@123 1 month ago
parent b9751c24cd
commit d8ce80ddac

@ -142,6 +142,26 @@ class LiveChatConfig:
cursor.close() cursor.close()
return results return results
@property
def product_info(self):
cursor = self.conn.cursor()
cursor.execute("select value from live_config where key = 'product_name'")
product_name = cursor.fetchone()[0]
cursor.execute("select value from live_config where key = 'product_specification'")
product_specification = cursor.fetchone()[0]
cursor.execute("select value from live_config where key = 'product_description'")
product_description = cursor.fetchone()[0]
cursor.close()
return product_name, product_specification, product_description
@property
def livetalking_sessionid(self):
cursor = self.conn.cursor()
cursor.execute("select value from live_config where key = 'livetalking_sessionid'")
livetalking_sessionid = cursor.fetchone()[0]
cursor.close()
return int(livetalking_sessionid)
def update_chat_enable_status(self): def update_chat_enable_status(self):
cursor = self.conn.cursor() cursor = self.conn.cursor()
cursor.execute("update live_config set value = 1 where key = 'chat_enable_status'") cursor.execute("update live_config set value = 1 where key = 'chat_enable_status'")

@ -306,7 +306,6 @@ class DouyinLiveWebReply:
def __init__(self, queue: PromptQueue): def __init__(self, queue: PromptQueue):
self.queue = queue self.queue = queue
self.system_text_list = [] self.system_text_list = []
self.session_id = 0
self.backend_token = '' self.backend_token = ''
self.live_chat_config = LiveChatConfig() self.live_chat_config = LiveChatConfig()
self.punctuation = ",.!;:,。!?:;" self.punctuation = ",.!;:,。!?:;"
@ -328,9 +327,10 @@ class DouyinLiveWebReply:
} }
def _gen(): def _gen():
response = requests.post(f'{self.live_chat_config.ollama_address}/live-digital-avatar-manage/ollama/generate', json=payload, response = requests.post(
headers={'Authorization': f'Bearer {self.live_chat_config.backend_token}'}, f'{self.live_chat_config.ollama_address}/live-digital-avatar-manage/ollama/generate', json=payload,
stream=True) headers={'Authorization': f'Bearer {self.live_chat_config.backend_token}'},
stream=True)
buffer = '' buffer = ''
for line in response.iter_lines(): for line in response.iter_lines():
if not line: if not line:
@ -351,9 +351,10 @@ class DouyinLiveWebReply:
if stream: if stream:
return _gen() return _gen()
else: else:
response = requests.post(f'{self.live_chat_config.ollama_address}/live-digital-avatar-manage/ollama/generate', json=payload, response = requests.post(
headers={'Authorization': f'Bearer {self.live_chat_config.backend_token}'}, f'{self.live_chat_config.ollama_address}/live-digital-avatar-manage/ollama/generate', json=payload,
timeout=10).content.decode()[5:] headers={'Authorization': f'Bearer {self.live_chat_config.backend_token}'},
timeout=10).content.decode()[5:]
response = json.loads(response) response = json.loads(response)
return response['message']['content'] return response['message']['content']
@ -370,7 +371,7 @@ class DouyinLiveWebReply:
f'{self.live_chat_config.livetalking_address}/human', f'{self.live_chat_config.livetalking_address}/human',
json={ json={
"type": "echo", "type": "echo",
"sessionid": self.session_id, "sessionid": self.live_chat_config.livetalking_sessionid,
"text": text "text": text
}, },
timeout=5 timeout=5
@ -381,9 +382,12 @@ class DouyinLiveWebReply:
优先从用户交互队列中取提示词如果没有用户交互的数据则输出系统提示词 优先从用户交互队列中取提示词如果没有用户交互的数据则输出系统提示词
""" """
live_chat_config.update_chat_enable_status() live_chat_config.update_chat_enable_status()
logger.info(f'livetalking address -> {self.live_chat_config.livetalking_address}')
logger.info(f'ollama_address -> {self.live_chat_config.ollama_address}')
while True: while True:
try: try:
is_speaking = requests.post(f'{self.live_chat_config.livetalking_address}/is_speaking', json={'sessionid': self.session_id}, is_speaking = requests.post(f'{self.live_chat_config.livetalking_address}/is_speaking',
json={'sessionid': self.live_chat_config.livetalking_sessionid},
timeout=5).json()['data'] timeout=5).json()['data']
if is_speaking: if is_speaking:
time.sleep(0.1) time.sleep(0.1)
@ -391,23 +395,44 @@ class DouyinLiveWebReply:
prompt_data = self.queue.get(False) prompt_data = self.queue.get(False)
if prompt_data is not None: if prompt_data is not None:
product_name, product_specification, product_description = self.live_chat_config.product_info
# live_chat: 弹幕 # live_chat: 弹幕
message_type, prompt, live_chat = prompt_data message_type, prompt, live_chat = prompt_data
if message_type == MessageType.ENTER_LIVE_ROOM.value and \ if message_type == MessageType.ENTER_LIVE_ROOM.value:
random.random() >= self.live_chat_config.enter_live_room_prob / 100: if random.random() >= self.live_chat_config.enter_live_room_prob / 100:
continue continue
elif message_type == MessageType.FOLLOW.value and \ else:
random.random() >= self.live_chat_config.follow_prob / 100: prompt = prompt.format(product_name=product_name,
continue product_specification=product_specification,
elif message_type == MessageType.LIKE.value and \ product_description=product_description)
random.random() >= self.live_chat_config.like_prob / 100: elif message_type == MessageType.FOLLOW.value:
continue if random.random() >= self.live_chat_config.follow_prob / 100:
elif message_type == MessageType.GIFT.value and \ continue
random.random() >= self.live_chat_config.gift_prob / 100: else:
continue prompt = prompt.format(product_name=product_name,
elif message_type == MessageType.CHAT.value and \ product_specification=product_specification,
random.random() >= self.live_chat_config.chat_prob / 100: product_description=product_description)
continue elif message_type == MessageType.LIKE.value:
if random.random() >= self.live_chat_config.like_prob / 100:
continue
else:
prompt = prompt.format(product_name=product_name,
product_specification=product_specification,
product_description=product_description)
elif message_type == MessageType.GIFT.value:
if random.random() >= self.live_chat_config.gift_prob / 100:
continue
else:
prompt = prompt.format(product_name=product_name,
product_specification=product_specification,
product_description=product_description)
elif message_type == MessageType.CHAT.value:
if random.random() >= self.live_chat_config.chat_prob / 100:
continue
else:
prompt = prompt.format(product_name=product_name,
product_specification=product_specification,
product_description=product_description)
if live_chat is not None: if live_chat is not None:
logger.info(f'弹幕: {live_chat}') logger.info(f'弹幕: {live_chat}')
llm_output = self._llm(self.live_chat_config.product_related_prompt.format(content=live_chat)) llm_output = self._llm(self.live_chat_config.product_related_prompt.format(content=live_chat))

@ -14,7 +14,7 @@ def parse_chat_msg(payload, queue):
user_name = message.user.nick_name user_name = message.user.nick_name
user_id = message.user.id user_id = message.user.id
content = message.content content = message.content
prompt = live_chat_config.chat_prompt.format(content=content) prompt = live_chat_config.chat_prompt.format(content=content, product_name='{product_name}', product_specification='{product_specification}', product_description='{product_description}')
queue.put((MessageType.CHAT.value, prompt, content)) queue.put((MessageType.CHAT.value, prompt, content))
# logger.info(f"【聊天msg】[{user_id}]{user_name}: {content}") # logger.info(f"【聊天msg】[{user_id}]{user_name}: {content}")
# logger.info(f"队列数量: {queue.qsize()}") # logger.info(f"队列数量: {queue.qsize()}")
@ -28,7 +28,7 @@ def parse_gif_msg(payload, queue):
user_name = message.user.nick_name user_name = message.user.nick_name
gift_name = message.gift.name gift_name = message.gift.name
gift_count = message.combo_count gift_count = message.combo_count
prompt = live_chat_config.gift_prompt.format(user_name=user_name, gift_count=gift_count, gift_name=gift_name) prompt = live_chat_config.gift_prompt.format(user_name=user_name, gift_count=gift_count, gift_name=gift_name, product_name='{product_name}', product_specification='{product_specification}', product_description='{product_description}')
queue.put((MessageType.GIFT.value, prompt, None)) queue.put((MessageType.GIFT.value, prompt, None))
# logger.info(f"【礼物msg】{user_name} 送出了 {gift_name}x{gift_count}") # logger.info(f"【礼物msg】{user_name} 送出了 {gift_name}x{gift_count}")
# logger.info(f"队列数量: {queue.qsize()}") # logger.info(f"队列数量: {queue.qsize()}")
@ -41,7 +41,7 @@ def parse_like_msg(payload, queue):
message = LikeMessage().parse(payload) message = LikeMessage().parse(payload)
user_name = message.user.nick_name user_name = message.user.nick_name
count = message.count count = message.count
prompt = live_chat_config.like_prompt.format(user_name=user_name, count=count) prompt = live_chat_config.like_prompt.format(user_name=user_name, count=count, product_name='{product_name}', product_specification='{product_specification}', product_description='{product_description}')
queue.put((MessageType.LIKE.value, prompt, None)) queue.put((MessageType.LIKE.value, prompt, None))
# logger.info(f"【点赞msg】{user_name} 点了{count}个赞") # logger.info(f"【点赞msg】{user_name} 点了{count}个赞")
# logger.info(f"队列数量: {queue.qsize()}") # logger.info(f"队列数量: {queue.qsize()}")
@ -57,7 +57,7 @@ def parse_member_msg(payload, queue):
gender = message.user.gender gender = message.user.gender
if gender in (0, 1): if gender in (0, 1):
gender = ["", ""][gender] gender = ["", ""][gender]
prompt = live_chat_config.enter_live_room_prompt.format(user_name=user_name) prompt = live_chat_config.enter_live_room_prompt.format(user_name=user_name, product_name='{product_name}', product_specification='{product_specification}', product_description='{product_description}')
queue.put((MessageType.ENTER_LIVE_ROOM.value, prompt, None)) queue.put((MessageType.ENTER_LIVE_ROOM.value, prompt, None))
# logger.info(f"【进场msg】[{user_id}][{gender}]{user_name} 进入了直播间") # logger.info(f"【进场msg】[{user_id}][{gender}]{user_name} 进入了直播间")
# logger.info(f"队列数量: {queue.qsize()}") # logger.info(f"队列数量: {queue.qsize()}")
@ -70,7 +70,7 @@ def parse_social_msg(payload, queue):
message = SocialMessage().parse(payload) message = SocialMessage().parse(payload)
user_name = message.user.nick_name user_name = message.user.nick_name
user_id = message.user.id user_id = message.user.id
prompt = live_chat_config.follow_prompt.format(user_name=user_name) prompt = live_chat_config.follow_prompt.format(user_name=user_name, product_name='{product_name}', product_specification='{product_specification}', product_description='{product_description}')
queue.put((MessageType.FOLLOW.value, prompt, None)) queue.put((MessageType.FOLLOW.value, prompt, None))
# logger.info(f"【关注msg】[{user_id}]{user_name} 关注了主播") # logger.info(f"【关注msg】[{user_id}]{user_name} 关注了主播")
# logger.info(f"队列数量: {queue.qsize()}") # logger.info(f"队列数量: {queue.qsize()}")

Loading…
Cancel
Save