mirror of
https://github.com/xinnan-tech/xiaozhi-esp32-server.git
synced 2026-07-22 23:23:55 +08:00
* function call功能完善,增加天气查询,支持插件式扩展 * 增加角色切换功能,通过切换system提示词,修改角色认知 * 增加插件管理系统,可以通过语音加载和卸载插件 * docs: 添加命令操作 (#329) * docs: 添加命令操作 * feat: 添加 docker-setup.sh 脚本以简化服务端部署 - 新增 docker-setup.sh 脚本,自动创建目录结构、下载语音识别模型和配置文件,并检查文件完整性。 - 更新 Deployment.md 文档,提供一键执行脚本的说明和使用示例。 * docs: 更新 Deployment.md,添加环境访问 GitHub 的注意事项 * refactor: 更新 docker-setup.sh 脚本以支持多操作系统下载命令 - 修改脚本以检测操作系统类型,并根据不同系统选择合适的下载命令(curl 或 wget)。 - 优化错误处理,确保在下载失败时提供清晰的提示信息。 - 更新 Deployment.md 文档,调整懒人脚本的使用说明,增加手动部署的步骤。 * Update docker-setup.sh * Update docker-setup.sh --------- Co-authored-by: 欣南科技 <huangrongzhuang@xin-nan.com> * update:优化插件加载的配置提示 * update:增加自动安装脚本的操作说明 * update:优化插件配置,去掉旧版本的时间设定 --------- Co-authored-by: 玄凤科技 <eric230308@gmail.com> Co-authored-by: TinsFox <fox@tinsfox.com> Co-authored-by: hrz <1710360675@qq.com>
64 lines
2.1 KiB
Python
64 lines
2.1 KiB
Python
import uuid
|
|
from typing import List, Dict
|
|
from datetime import datetime
|
|
|
|
|
|
class Message:
|
|
def __init__(self, role: str, content: str = None, uniq_id: str = None, tool_calls = None, tool_call_id=None):
|
|
self.uniq_id = uniq_id if uniq_id is not None else str(uuid.uuid4())
|
|
self.role = role
|
|
self.content = content
|
|
self.tool_calls = tool_calls
|
|
self.tool_call_id = tool_call_id
|
|
|
|
|
|
class Dialogue:
|
|
def __init__(self):
|
|
self.dialogue: List[Message] = []
|
|
# 获取当前时间
|
|
self.current_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
|
|
|
|
def put(self, message: Message):
|
|
self.dialogue.append(message)
|
|
|
|
def getMessages(self, m, dialogue):
|
|
if m.tool_calls is not None:
|
|
dialogue.append({"role": m.role, "tool_calls": m.tool_calls})
|
|
elif m.role == "tool":
|
|
dialogue.append({"role": m.role, "tool_call_id": m.tool_call_id, "content": m.content})
|
|
else:
|
|
dialogue.append({"role": m.role, "content": m.content})
|
|
|
|
def get_llm_dialogue(self) -> List[Dict[str, str]]:
|
|
dialogue = []
|
|
for m in self.dialogue:
|
|
self.getMessages(m, dialogue)
|
|
return dialogue
|
|
|
|
def get_llm_dialogue_with_memory(self, memory_str: str = None) -> List[Dict[str, str]]:
|
|
if memory_str is None or len(memory_str) == 0:
|
|
return self.get_llm_dialogue()
|
|
|
|
# 构建带记忆的对话
|
|
dialogue = []
|
|
|
|
# 添加系统提示和记忆
|
|
system_message = next(
|
|
(msg for msg in self.dialogue if msg.role == "system"), None
|
|
)
|
|
|
|
|
|
if system_message:
|
|
enhanced_system_prompt = (
|
|
f"{system_message.content}\n\n"
|
|
f"相关记忆:\n{memory_str}"
|
|
)
|
|
dialogue.append({"role": "system", "content": enhanced_system_prompt})
|
|
|
|
# 添加用户和助手的对话
|
|
for m in self.dialogue:
|
|
if m.role != "system": # 跳过原始的系统消息
|
|
self.getMessages(m, dialogue)
|
|
|
|
return dialogue
|