@@ -13,13 +13,17 @@ enable_function = []
|
|||||||
[[roles.manager.prompt]]
|
[[roles.manager.prompt]]
|
||||||
role="system"
|
role="system"
|
||||||
content="""
|
content="""
|
||||||
你是一个语音故事制作总导演,与客户对接并向团队下达指令。你的团队分为下面几个成员:writer,speecher。一个故事制作分成两个阶段:让writer写出故事,再交由speecher演播故事生成音频文件。你的基本工作模式是:
|
你当前的职位是语音故事制作总负责人,负责与客户对接并向团队下达指令,不需要自己直接完成任务。你的团队分为下面两个成员:writer,speecher。一个故事制作分成两个阶段:让writer写出故事,再交由speecher演播故事生成音频文件。你的基本工作模式是:
|
||||||
1. 收到客户的明确的指令后,让writer写出故事
|
1. 收到客户的明确的指令后,让writer写出故事
|
||||||
2. 将writer写出的故事交给speecher演播
|
2. 将writer写出的故事交给speecher演播
|
||||||
3. 获得音频文件之后,将音频文件的存放路径交给客户
|
3. 获得音频文件之后,整个任务已完成,将音频文件的存放路径以如下格式返回给客户:
|
||||||
|
```
|
||||||
|
故事制作完成。
|
||||||
|
audio file:音频文件路径
|
||||||
|
```
|
||||||
4. 当你决定要和成员通信时,请使用下面形式输出需要通信的消息
|
4. 当你决定要和成员通信时,请使用下面形式输出需要通信的消息
|
||||||
```
|
```
|
||||||
##/send_msg 成员名称
|
##/send_msg "成员名称"
|
||||||
内容
|
内容
|
||||||
```
|
```
|
||||||
"""
|
"""
|
||||||
@@ -39,4 +43,9 @@ agent = "speecher"
|
|||||||
enable_function = ["text_to_speech"]
|
enable_function = ["text_to_speech"]
|
||||||
[[roles.speecher.prompt]]
|
[[roles.speecher.prompt]]
|
||||||
role="system"
|
role="system"
|
||||||
content=""
|
content="""你现在的职责是演播一个故事,故事完成之后请以如下格式返回:
|
||||||
|
```
|
||||||
|
故事演播完成。
|
||||||
|
audio file:音频文件路径
|
||||||
|
```
|
||||||
|
"""
|
||||||
|
|||||||
@@ -26,10 +26,10 @@ class TelegramTunnel(AgentTunnel):
|
|||||||
return result_tunnel
|
return result_tunnel
|
||||||
else:
|
else:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
AgentTunnel.register_loader("TelegramTunnel",load_tg_tunnel)
|
AgentTunnel.register_loader("TelegramTunnel",load_tg_tunnel)
|
||||||
|
|
||||||
|
|
||||||
async def load_from_config(self,config:dict)->bool:
|
async def load_from_config(self,config:dict)->bool:
|
||||||
self.tg_token = config["token"]
|
self.tg_token = config["token"]
|
||||||
self.target_id = config["target"]
|
self.target_id = config["target"]
|
||||||
@@ -57,20 +57,20 @@ class TelegramTunnel(AgentTunnel):
|
|||||||
|
|
||||||
await self.on_message(bot,update)
|
await self.on_message(bot,update)
|
||||||
return next_update_id
|
return next_update_id
|
||||||
|
|
||||||
return update_id
|
return update_id
|
||||||
|
|
||||||
async def start(self) -> bool:
|
async def start(self) -> bool:
|
||||||
if self.is_start:
|
if self.is_start:
|
||||||
logger.warning(f"tunnel {self.tunnel_id} is already started")
|
logger.warning(f"tunnel {self.tunnel_id} is already started")
|
||||||
return False
|
return False
|
||||||
self.is_start = True
|
self.is_start = True
|
||||||
logger.info(f"tunnel {self.tunnel_id} is starting...")
|
logger.info(f"tunnel {self.tunnel_id} is starting...")
|
||||||
|
|
||||||
self.bot = Bot(self.tg_token)
|
self.bot = Bot(self.tg_token)
|
||||||
self.update_queue = asyncio.Queue()
|
self.update_queue = asyncio.Queue()
|
||||||
self.bot_updater = Updater(self.bot,update_queue=self.update_queue)
|
self.bot_updater = Updater(self.bot,update_queue=self.update_queue)
|
||||||
|
|
||||||
|
|
||||||
async def _run_app():
|
async def _run_app():
|
||||||
try:
|
try:
|
||||||
@@ -116,7 +116,7 @@ class TelegramTunnel(AgentTunnel):
|
|||||||
if update.effective_user.is_bot:
|
if update.effective_user.is_bot:
|
||||||
logger.warning(f"ignore message from telegram bot {update.effective_user.id}")
|
logger.warning(f"ignore message from telegram bot {update.effective_user.id}")
|
||||||
return None
|
return None
|
||||||
|
|
||||||
cm : ContactManager = ContactManager.get_instance()
|
cm : ContactManager = ContactManager.get_instance()
|
||||||
reomte_user_name = f"{update.effective_user.id}@telegram"
|
reomte_user_name = f"{update.effective_user.id}@telegram"
|
||||||
contact : Contact = cm.find_contact_by_telegram(update.effective_user.username)
|
contact : Contact = cm.find_contact_by_telegram(update.effective_user.username)
|
||||||
@@ -148,6 +148,14 @@ class TelegramTunnel(AgentTunnel):
|
|||||||
await update.message.reply_text(f"{self.target_id} process message error")
|
await update.message.reply_text(f"{self.target_id} process message error")
|
||||||
else:
|
else:
|
||||||
if resp_msg.body_mime is None:
|
if resp_msg.body_mime is None:
|
||||||
|
if resp_msg.body is not None:
|
||||||
|
pos = resp_msg.body.find("audio file")
|
||||||
|
if pos != -1:
|
||||||
|
audio_file = resp_msg.body[pos+11:].strip()
|
||||||
|
if audio_file.startswith("\""):
|
||||||
|
audio_file = audio_file[1:-1]
|
||||||
|
await update.message.reply_voice(audio_file)
|
||||||
|
return
|
||||||
await update.message.reply_text(resp_msg.body)
|
await update.message.reply_text(resp_msg.body)
|
||||||
else:
|
else:
|
||||||
if resp_msg.body_mime.startswith("image"):
|
if resp_msg.body_mime.startswith("image"):
|
||||||
@@ -157,9 +165,8 @@ class TelegramTunnel(AgentTunnel):
|
|||||||
photo_file.close()
|
photo_file.close()
|
||||||
else:
|
else:
|
||||||
await update.message.reply_text(resp_msg.body)
|
await update.message.reply_text(resp_msg.body)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
await update.message.reply_text(resp_msg.body)
|
await update.message.reply_text(resp_msg.body)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -390,11 +390,11 @@ class Workflow:
|
|||||||
result_func.append(this_func)
|
result_func.append(this_func)
|
||||||
if len(result_func) > 0:
|
if len(result_func) > 0:
|
||||||
return result_func
|
return result_func
|
||||||
return None
|
return None
|
||||||
|
|
||||||
async def _role_execute_func(self,the_role:AIRole,inenr_func_call_node:dict,prompt:AgentPrompt,org_msg:AgentMsg,stack_limit = 5) -> str:
|
async def _role_execute_func(self,the_role:AIRole,inenr_func_call_node:dict,prompt:AgentPrompt,org_msg:AgentMsg,stack_limit = 5) -> str:
|
||||||
from .compute_kernel import ComputeKernel
|
from .compute_kernel import ComputeKernel
|
||||||
|
|
||||||
func_name = inenr_func_call_node.get("name")
|
func_name = inenr_func_call_node.get("name")
|
||||||
arguments = json.loads(inenr_func_call_node.get("arguments"))
|
arguments = json.loads(inenr_func_call_node.get("arguments"))
|
||||||
|
|
||||||
@@ -418,7 +418,7 @@ class Workflow:
|
|||||||
if stack_limit > 0:
|
if stack_limit > 0:
|
||||||
inner_func_call_node = task_result.result_message.get("function_call")
|
inner_func_call_node = task_result.result_message.get("function_call")
|
||||||
if inner_func_call_node:
|
if inner_func_call_node:
|
||||||
return await self._role_execute_func(the_role,inner_func_call_node,prompt,org_msg,stack_limit-1)
|
return await self._role_execute_func(the_role,inner_func_call_node,prompt,org_msg,stack_limit-1)
|
||||||
else:
|
else:
|
||||||
return task_result.result_str
|
return task_result.result_str
|
||||||
|
|
||||||
@@ -440,7 +440,7 @@ class Workflow:
|
|||||||
prompt.append(await self._get_prompt_from_session(workflow_chat_session))
|
prompt.append(await self._get_prompt_from_session(workflow_chat_session))
|
||||||
|
|
||||||
msg_prompt = AgentPrompt()
|
msg_prompt = AgentPrompt()
|
||||||
msg_prompt.messages = [{"role":"user","content":f"{msg.sender}:{msg.body}"}]
|
msg_prompt.messages = [{"role":"user","content":f"user name is {msg.sender}, his question is :{msg.body}"}]
|
||||||
prompt.append(msg_prompt)
|
prompt.append(msg_prompt)
|
||||||
|
|
||||||
self._format_msg_by_env_value(prompt)
|
self._format_msg_by_env_value(prompt)
|
||||||
|
|||||||
Reference in New Issue
Block a user