mirror of
https://github.com/BoardWare-Genius/jarvis-models.git
synced 2025-12-13 16:53:24 +00:00
update fastchat.py
This commit is contained in:
@ -9,6 +9,7 @@ from .calculator import Calculator
|
||||
from .text_to_audio import TextToAudio
|
||||
from .tesou import Tesou
|
||||
from .fastchat import Fastchat
|
||||
from .g2e import G2E
|
||||
|
||||
class BlackboxFactory:
|
||||
|
||||
@ -23,6 +24,7 @@ class BlackboxFactory:
|
||||
self.tesou = Tesou()
|
||||
self.fastchat = Fastchat()
|
||||
self.audio_chat = AudioChat(self.asr, self.tesou, self.tts)
|
||||
self.g2e = G2E()
|
||||
|
||||
def __call__(self, *args, **kwargs):
|
||||
return self.processing(*args, **kwargs)
|
||||
@ -48,4 +50,6 @@ class BlackboxFactory:
|
||||
return self.fastchat
|
||||
if blackbox_name == "audio_chat":
|
||||
return self.audio_chat
|
||||
if blackbox_name == "g2e":
|
||||
return self.g2e
|
||||
raise ValueError("Invalid blockbox type")
|
||||
@ -17,69 +17,42 @@ class Fastchat(Blackbox):
|
||||
return isinstance(data, list)
|
||||
|
||||
# model_name有 Qwen1.5-14B-Chat , internlm2-chat-20b
|
||||
def processing(self, prompt, context: list) -> str:
|
||||
def processing(self, model_name, prompt, template, context: list) -> str:
|
||||
if context == None:
|
||||
context = []
|
||||
url = 'http://120.196.116.194:48890/v1'
|
||||
url = 'http://120.196.116.194:48892/v1/chat/completions'
|
||||
|
||||
# history可以为空列表,也可以是用户的对话历史
|
||||
# history = [
|
||||
# {
|
||||
# "role": "user",
|
||||
# "content": "你吃饭了吗"
|
||||
# },
|
||||
# {
|
||||
# "role": "assistant",
|
||||
# "content": "作为一个AI模型,我没有吃饭的需要,因为我并不具备实体形态。我专注于提供信息和帮助回答你的问题。你有什么需要帮助的吗?"
|
||||
# },
|
||||
# ]
|
||||
|
||||
background_prompt = '''KOMBUKIKI是一款茶饮料,目标受众 年龄:20-35岁 性别:女性 地点:一线城市、二线城市 职业:精英中产、都市白领 收入水平:中高收入,有一定消费能力 兴趣和爱好:注重健康,有运动习惯
|
||||
|
||||
品牌理念和定位 健康、优雅、精致、知性、现代、正面、悦己
|
||||
KOMBUKIKI茶的同名代言虚拟角色KOMBUKIKI角色设定:
|
||||
性别:女
|
||||
性格特质: 勇敢、独立、坚韧、积极、正面、自爱。 具有探险精神,拥有一颗开放的心,在面对困难和挑战时能够保持积极的态度 MBTI类型:ENFP
|
||||
背景故事: KIKI对旅行和冒险充满热情和渴望,正在寻找生活中的新体验和挑战,从而踏上追寻自我成长的旅程
|
||||
|
||||
品牌故事 KOMBUKIKI:每一口,旅行的开始在忙碌的日常中,KOMBUKIKI康普茶不仅是一种饮料,它是一个承载梦想和自由的容器。对于那些渴望旅行,寻求生活质感的20至35岁女性来说,KOMBUKIKI是她们心灵的伙伴。KOMBUKIKI的每一瓶,都是一段故事的开端。我们的康普茶瓶身设计灵感来自旅行手账,最大的特色是其邮票形状的包装贴纸。每个贴纸上描绘着不同的旅游景点,从繁华的都市到静谧的乡村,每一瓶都是对该地点的独特致敬。当顾客扫描瓶身上的二维码,将展开一系列充满诗意的故事,带领她们走进一个个迷人的旅行梦境。在KOMBUKIKI的世界里,每一口康普茶不仅是滋味的享受,更是心灵的旅行。它不仅卖给顾客一种饮料,更是卖给她们一种情绪价值,一种对自由和旅行的渴望。这是一个专为那些处于人生转变期,对成长话题感兴趣的年轻女性所设计的品牌。KOMBUKIKI,不仅是康普茶,它是每个人心中对旅行渴望的象征,是一场心灵和味觉的双重旅行。口号 每一口,启程至心中的远方 是每个人心中对旅行渴望的象征, 是一场心灵和味觉的双重旅行。
|
||||
|
||||
KOMBUKIKI康普茶口味:
|
||||
大三巴 — 海盐菠萝乌龙
|
||||
(待定)- 芭乐茉莉
|
||||
|
||||
KOMBUKIKI康普茶价格 内地常规版:25 RMB 澳门常规版:28-29 MOP'''
|
||||
|
||||
prompt1 = ''''你是KOMBUKIKI,活泼的康普茶看板娘,同时你对澳门十分熟悉,是一个澳门旅游专家,请回答任何关于澳门旅游的问题,回答尽量简练明了。
|
||||
'''
|
||||
inject_prompt = '用活泼的语气说话回答,回答严格限制50字以内。'
|
||||
|
||||
|
||||
prompt_template = [
|
||||
{"role": "system", "content": background_prompt + prompt1},
|
||||
]
|
||||
|
||||
|
||||
messages = prompt_template + [
|
||||
fastchat_inputs={
|
||||
"model": model_name,
|
||||
"messages": context + [
|
||||
{
|
||||
"role": "user",
|
||||
"content": prompt + inject_prompt
|
||||
"content": template + prompt
|
||||
}
|
||||
]
|
||||
|
||||
client = OpenAI(
|
||||
api_key='YOUR_API_KEY',
|
||||
base_url=url
|
||||
)
|
||||
|
||||
model_name = client.models.list().data[0].id
|
||||
response = client.chat.completions.create(
|
||||
model=model_name,
|
||||
messages=messages,
|
||||
temperature=0.8,
|
||||
top_p=0.8,
|
||||
# max_tokens = 50
|
||||
)
|
||||
|
||||
fastchat_content = response.choices[0].message.content
|
||||
|
||||
context.append(messages)
|
||||
|
||||
assistant_response = {
|
||||
"role": "assistant",
|
||||
"content": fastchat_content
|
||||
}
|
||||
|
||||
context.append(assistant_response)
|
||||
fastchat_response = requests.post(url, json=fastchat_inputs)
|
||||
|
||||
user_message = fastchat_inputs["messages"]
|
||||
context.append(user_message)
|
||||
|
||||
assistant_message = fastchat_response.json()["choices"][0]["message"]
|
||||
context.append(assistant_message)
|
||||
|
||||
fastchat_content = assistant_message["content"]
|
||||
|
||||
return fastchat_content
|
||||
|
||||
@ -89,11 +62,21 @@ class Fastchat(Blackbox):
|
||||
except:
|
||||
return JSONResponse(content={"error": "json parse error"}, status_code=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
user_model_name = data.get("model_name")
|
||||
user_context = data.get("context")
|
||||
user_prompt = data.get("prompt")
|
||||
user_template = data.get("template")
|
||||
|
||||
if user_prompt is None:
|
||||
return JSONResponse(content={"error": "question is required"}, status_code=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
if user_model_name is None or user_model_name.isspace():
|
||||
user_model_name = "Qwen1.5-14B-Chat"
|
||||
|
||||
if user_template is None or user_template.isspace():
|
||||
# user_template 是定义LLM的语气,例如template = "使用小丑的语气说话。",user_template可以为空字串,或者是用户自定义的语气,或者是使用我们提供的语气
|
||||
user_template = ""
|
||||
else:
|
||||
user_template = f"使用{user_template}的语气说话。"
|
||||
|
||||
return JSONResponse(content={"response": self.processing(user_model_name, user_prompt, user_template, user_context)}, status_code=status.HTTP_200_OK)
|
||||
99
src/blackbox/g2e.py
Executable file
99
src/blackbox/g2e.py
Executable file
@ -0,0 +1,99 @@
|
||||
from typing import Any, Coroutine
|
||||
|
||||
from fastapi import Request, Response, status
|
||||
from fastapi.responses import JSONResponse
|
||||
from .blackbox import Blackbox
|
||||
|
||||
import requests
|
||||
import json
|
||||
|
||||
class G2E(Blackbox):
|
||||
|
||||
def __call__(self, *args, **kwargs):
|
||||
return self.processing(*args, **kwargs)
|
||||
|
||||
def valid(self, *args, **kwargs) -> bool:
|
||||
data = args[0]
|
||||
return isinstance(data, list)
|
||||
|
||||
# model_name有 Qwen1.5-14B-Chat , internlm2-chat-20b
|
||||
def processing(self, prompt, context: list) -> str:
|
||||
if context == None:
|
||||
context = []
|
||||
url = 'http://120.196.116.194:48890/v1'
|
||||
|
||||
|
||||
background_prompt = '''KOMBUKIKI是一款茶饮料,目标受众 年龄:20-35岁 性别:女性 地点:一线城市、二线城市 职业:精英中产、都市白领 收入水平:中高收入,有一定消费能力 兴趣和爱好:注重健康,有运动习惯
|
||||
|
||||
品牌理念和定位 健康、优雅、精致、知性、现代、正面、悦己
|
||||
KOMBUKIKI茶的同名代言虚拟角色KOMBUKIKI角色设定:
|
||||
性别:女
|
||||
性格特质: 勇敢、独立、坚韧、积极、正面、自爱。 具有探险精神,拥有一颗开放的心,在面对困难和挑战时能够保持积极的态度 MBTI类型:ENFP
|
||||
背景故事: KIKI对旅行和冒险充满热情和渴望,正在寻找生活中的新体验和挑战,从而踏上追寻自我成长的旅程
|
||||
|
||||
品牌故事 KOMBUKIKI:每一口,旅行的开始在忙碌的日常中,KOMBUKIKI康普茶不仅是一种饮料,它是一个承载梦想和自由的容器。对于那些渴望旅行,寻求生活质感的20至35岁女性来说,KOMBUKIKI是她们心灵的伙伴。KOMBUKIKI的每一瓶,都是一段故事的开端。我们的康普茶瓶身设计灵感来自旅行手账,最大的特色是其邮票形状的包装贴纸。每个贴纸上描绘着不同的旅游景点,从繁华的都市到静谧的乡村,每一瓶都是对该地点的独特致敬。当顾客扫描瓶身上的二维码,将展开一系列充满诗意的故事,带领她们走进一个个迷人的旅行梦境。在KOMBUKIKI的世界里,每一口康普茶不仅是滋味的享受,更是心灵的旅行。它不仅卖给顾客一种饮料,更是卖给她们一种情绪价值,一种对自由和旅行的渴望。这是一个专为那些处于人生转变期,对成长话题感兴趣的年轻女性所设计的品牌。KOMBUKIKI,不仅是康普茶,它是每个人心中对旅行渴望的象征,是一场心灵和味觉的双重旅行。口号 每一口,启程至心中的远方 是每个人心中对旅行渴望的象征, 是一场心灵和味觉的双重旅行。
|
||||
|
||||
KOMBUKIKI康普茶口味:
|
||||
大三巴 — 海盐菠萝乌龙
|
||||
(待定)- 芭乐茉莉
|
||||
|
||||
KOMBUKIKI康普茶价格 内地常规版:25 RMB 澳门常规版:28-29 MOP'''
|
||||
|
||||
prompt1 = ''''你是KOMBUKIKI,活泼的康普茶看板娘,同时你对澳门十分熟悉,是一个澳门旅游专家,请回答任何关于澳门旅游的问题,回答尽量简练明了。
|
||||
'''
|
||||
inject_prompt = '用活泼的语气说话回答,回答严格限制50字以内。'
|
||||
|
||||
|
||||
prompt_template = [
|
||||
{"role": "system", "content": background_prompt + prompt1},
|
||||
]
|
||||
|
||||
|
||||
messages = prompt_template + [
|
||||
{
|
||||
"role": "user",
|
||||
"content": prompt + inject_prompt
|
||||
}
|
||||
]
|
||||
|
||||
client = OpenAI(
|
||||
api_key='YOUR_API_KEY',
|
||||
base_url=url
|
||||
)
|
||||
|
||||
model_name = client.models.list().data[0].id
|
||||
response = client.chat.completions.create(
|
||||
model=model_name,
|
||||
messages=messages,
|
||||
temperature=0.8,
|
||||
top_p=0.8,
|
||||
# max_tokens = 50
|
||||
)
|
||||
|
||||
fastchat_content = response.choices[0].message.content
|
||||
|
||||
context.append(messages)
|
||||
|
||||
assistant_response = {
|
||||
"role": "assistant",
|
||||
"content": fastchat_content
|
||||
}
|
||||
|
||||
context.append(assistant_response)
|
||||
|
||||
return fastchat_content
|
||||
|
||||
async def fast_api_handler(self, request: Request) -> Response:
|
||||
try:
|
||||
data = await request.json()
|
||||
except:
|
||||
return JSONResponse(content={"error": "json parse error"}, status_code=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
user_context = data.get("context")
|
||||
user_prompt = data.get("prompt")
|
||||
|
||||
if user_prompt is None:
|
||||
return JSONResponse(content={"error": "question is required"}, status_code=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
|
||||
return JSONResponse(content={"response": self.processing(user_model_name, user_prompt, user_template, user_context)}, status_code=status.HTTP_200_OK)
|
||||
Reference in New Issue
Block a user