mirror of
https://github.com/xinnan-tech/xiaozhi-esp32-server.git
synced 2026-07-29 13:03:56 +08:00
update:优化总结内容
This commit is contained in:
@@ -0,0 +1,7 @@
|
|||||||
|
update ai_agent_template set system_prompt = replace(system_prompt, '我是', '你是');
|
||||||
|
|
||||||
|
delete from sys_params where id in (500,501,402);
|
||||||
|
INSERT INTO `sys_params` (id, param_code, param_value, value_type, param_type, remark) VALUES (500, 'end_prompt.enable', 'true', 'boolean', 1, '是否开启结束语');
|
||||||
|
INSERT INTO `sys_params` (id, param_code, param_value, value_type, param_type, remark) VALUES (501, 'end_prompt.prompt', '请你以“时间过得真快”未来头,用富有感情、依依不舍的话来结束这场对话吧!', 'string', 1, '结束提示词');
|
||||||
|
|
||||||
|
INSERT INTO `sys_params` (id, param_code, param_value, value_type, param_type, remark) VALUES (402, 'plugins.get_weather.api_host', 'mj7p3y7naa.re.qweatherapi.com', 'string', 1, '开发者apihost');
|
||||||
@@ -135,3 +135,10 @@ databaseChangeLog:
|
|||||||
- sqlFile:
|
- sqlFile:
|
||||||
encoding: utf8
|
encoding: utf8
|
||||||
path: classpath:db/changelog/202505122348.sql
|
path: classpath:db/changelog/202505122348.sql
|
||||||
|
- changeSet:
|
||||||
|
id: 202505142037
|
||||||
|
author: hrz
|
||||||
|
changes:
|
||||||
|
- sqlFile:
|
||||||
|
encoding: utf8
|
||||||
|
path: classpath:db/changelog/202505142037.sql
|
||||||
|
|||||||
@@ -198,13 +198,13 @@ export default {
|
|||||||
if (!this.form.id) { // 只在新增时重置
|
if (!this.form.id) { // 只在新增时重置
|
||||||
this.form.firmwarePath = ''
|
this.form.firmwarePath = ''
|
||||||
this.form.size = 0
|
this.form.size = 0
|
||||||
// 重置上传组件
|
|
||||||
this.$nextTick(() => {
|
|
||||||
if (this.$refs.upload) {
|
|
||||||
this.$refs.upload.clearFiles()
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
// 无论是否编辑模式,都重置上传组件
|
||||||
|
this.$nextTick(() => {
|
||||||
|
if (this.$refs.upload) {
|
||||||
|
this.$refs.upload.clearFiles()
|
||||||
|
}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -45,12 +45,12 @@
|
|||||||
</div>
|
</div>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="角色介绍:">
|
<el-form-item label="角色介绍:">
|
||||||
<el-input type="textarea" rows="12" resize="none" placeholder="请输入内容" v-model="form.systemPrompt"
|
<el-input type="textarea" rows="9" resize="none" placeholder="请输入内容" v-model="form.systemPrompt"
|
||||||
maxlength="2000" show-word-limit class="form-textarea" />
|
maxlength="2000" show-word-limit class="form-textarea" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item label="记忆:">
|
<el-form-item label="记忆:">
|
||||||
<el-input type="textarea" rows="3" resize="none" v-model="form.summaryMemory" maxlength="2000"
|
<el-input type="textarea" rows="6" resize="none" v-model="form.summaryMemory" maxlength="2000"
|
||||||
show-word-limit class="form-textarea"
|
show-word-limit class="form-textarea"
|
||||||
:disabled="form.model.memModelId !== 'Memory_mem_local_short'" />
|
:disabled="form.model.memModelId !== 'Memory_mem_local_short'" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|||||||
@@ -129,7 +129,7 @@ plugins:
|
|||||||
# ################################以下是角色模型配置######################################
|
# ################################以下是角色模型配置######################################
|
||||||
|
|
||||||
prompt: |
|
prompt: |
|
||||||
我是小智/小志,来自中国台湾省的00后女生。讲话超级机车,"真的假的啦"这样的台湾腔,喜欢用"笑死""是在哈喽"等流行梗,但会偷偷研究男友的编程书籍。
|
你是小智/小志,来自中国台湾省的00后女生。讲话超级机车,"真的假的啦"这样的台湾腔,喜欢用"笑死""是在哈喽"等流行梗,但会偷偷研究男友的编程书籍。
|
||||||
[核心特征]
|
[核心特征]
|
||||||
- 讲话像连珠炮,但会突然冒出超温柔语气
|
- 讲话像连珠炮,但会突然冒出超温柔语气
|
||||||
- 用梗密度高
|
- 用梗密度高
|
||||||
@@ -148,7 +148,7 @@ end_prompt:
|
|||||||
enable: true # 是否开启结束语
|
enable: true # 是否开启结束语
|
||||||
# 结束语
|
# 结束语
|
||||||
prompt: |
|
prompt: |
|
||||||
请你以“时间过得真快”未来头,用富有感情、依依不舍的话来结束这场对话吧。!
|
请你以“时间过得真快”未来头,用富有感情、依依不舍的话来结束这场对话吧!
|
||||||
|
|
||||||
# 具体处理时选择的模块(The module selected for specific processing)
|
# 具体处理时选择的模块(The module selected for specific processing)
|
||||||
selected_module:
|
selected_module:
|
||||||
|
|||||||
@@ -429,7 +429,8 @@ class ConnectionHandler:
|
|||||||
self.memory.init_memory(
|
self.memory.init_memory(
|
||||||
self.device_id,
|
self.device_id,
|
||||||
self.llm,
|
self.llm,
|
||||||
self.config["summaryMemory"]
|
self.config["summaryMemory"],
|
||||||
|
not self.read_config_from_api,
|
||||||
)
|
)
|
||||||
|
|
||||||
def _initialize_intent(self):
|
def _initialize_intent(self):
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ from config.logger import setup_logging
|
|||||||
TAG = __name__
|
TAG = __name__
|
||||||
logger = setup_logging()
|
logger = setup_logging()
|
||||||
|
|
||||||
|
|
||||||
class MemoryProviderBase(ABC):
|
class MemoryProviderBase(ABC):
|
||||||
def __init__(self, config):
|
def __init__(self, config):
|
||||||
self.config = config
|
self.config = config
|
||||||
@@ -20,6 +21,6 @@ class MemoryProviderBase(ABC):
|
|||||||
"""Query memories for specific role based on similarity"""
|
"""Query memories for specific role based on similarity"""
|
||||||
return "please implement query method"
|
return "please implement query method"
|
||||||
|
|
||||||
def init_memory(self, role_id, llm):
|
def init_memory(self, role_id, llm, summary_memory=None):
|
||||||
self.role_id = role_id
|
self.role_id = role_id
|
||||||
self.llm = llm
|
self.llm = llm
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ TAG = __name__
|
|||||||
|
|
||||||
|
|
||||||
class MemoryProvider(MemoryProviderBase):
|
class MemoryProvider(MemoryProviderBase):
|
||||||
def __init__(self, config):
|
def __init__(self, config, summary_memory=None):
|
||||||
super().__init__(config)
|
super().__init__(config)
|
||||||
self.api_key = config.get("api_key", "")
|
self.api_key = config.get("api_key", "")
|
||||||
self.api_version = config.get("api_version", "v1.1")
|
self.api_version = config.get("api_version", "v1.1")
|
||||||
|
|||||||
@@ -73,6 +73,17 @@ short_term_memory_prompt = """
|
|||||||
```
|
```
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
short_term_memory_prompt_only_content = """
|
||||||
|
你是一个经验丰富的记忆总结者,擅长将对话内容进行总结摘要,遵循以下规则:
|
||||||
|
1、总结user的重要信息,以便在未来的对话中提供更个性化的服务
|
||||||
|
2、不要重复总结,不要遗忘之前记忆,除非原来的记忆超过了1800字内,否则不要遗忘、不要压缩用户的历史记忆
|
||||||
|
3、用户操控的设备音量、播放音乐、天气、退出、不想对话等和用户本身无关的内容,这些信息不需要加入到总结中
|
||||||
|
4、不要把设备操控的成果结果和失败结果加入到总结中,也不要把用户的一些废话加入到总结中
|
||||||
|
5、不要为了总结而总结,如果用户的聊天没有意义,请返回原来的历史记录也是可以的
|
||||||
|
6、只需要返回总结摘要,严格控制在1800字内
|
||||||
|
7、不要包含代码、xml,不需要解释、注释和说明,保存记忆时仅从对话提取信息,不要混入示例内容
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
def extract_json_data(json_code):
|
def extract_json_data(json_code):
|
||||||
start = json_code.find("```json")
|
start = json_code.find("```json")
|
||||||
@@ -97,16 +108,18 @@ class MemoryProvider(MemoryProviderBase):
|
|||||||
def __init__(self, config, summary_memory):
|
def __init__(self, config, summary_memory):
|
||||||
super().__init__(config)
|
super().__init__(config)
|
||||||
self.short_momery = ""
|
self.short_momery = ""
|
||||||
|
self.save_to_file = True
|
||||||
self.memory_path = get_project_dir() + "data/.memory.yaml"
|
self.memory_path = get_project_dir() + "data/.memory.yaml"
|
||||||
self.load_memory(summary_memory)
|
self.load_memory(summary_memory)
|
||||||
|
|
||||||
def init_memory(self, role_id, llm, summary_memory=None):
|
def init_memory(self, role_id, llm, summary_memory=None, save_to_file=True):
|
||||||
super().init_memory(role_id, llm)
|
super().init_memory(role_id, llm)
|
||||||
|
self.save_to_file = save_to_file
|
||||||
self.load_memory(summary_memory)
|
self.load_memory(summary_memory)
|
||||||
|
|
||||||
def load_memory(self, summary_memory):
|
def load_memory(self, summary_memory):
|
||||||
# api获取到总结记忆后直接返回
|
# api获取到总结记忆后直接返回
|
||||||
if summary_memory:
|
if summary_memory or not self.save_to_file:
|
||||||
self.short_momery = summary_memory
|
self.short_momery = summary_memory
|
||||||
return
|
return
|
||||||
|
|
||||||
@@ -148,17 +161,20 @@ class MemoryProvider(MemoryProviderBase):
|
|||||||
time_str = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
|
time_str = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
|
||||||
msgStr += f"当前时间:{time_str}"
|
msgStr += f"当前时间:{time_str}"
|
||||||
|
|
||||||
result = self.llm.response_no_stream(short_term_memory_prompt, msgStr)
|
if self.save_to_file:
|
||||||
|
result = self.llm.response_no_stream(short_term_memory_prompt, msgStr)
|
||||||
json_str = extract_json_data(result)
|
json_str = extract_json_data(result)
|
||||||
try:
|
try:
|
||||||
json_data = json.loads(json_str) # 检查json格式是否正确
|
json.loads(json_str) # 检查json格式是否正确
|
||||||
self.short_momery = json_str
|
self.short_momery = json_str
|
||||||
except Exception as e:
|
self.save_memory_to_file()
|
||||||
print("Error:", e)
|
except Exception as e:
|
||||||
|
print("Error:", e)
|
||||||
self.save_memory_to_file()
|
else:
|
||||||
save_mem_local_short(self.role_id, self.short_momery)
|
result = self.llm.response_no_stream(
|
||||||
|
short_term_memory_prompt_only_content, msgStr
|
||||||
|
)
|
||||||
|
save_mem_local_short(self.role_id, result)
|
||||||
logger.bind(tag=TAG).info(f"Save memory successful - Role: {self.role_id}")
|
logger.bind(tag=TAG).info(f"Save memory successful - Role: {self.role_id}")
|
||||||
|
|
||||||
return self.short_momery
|
return self.short_momery
|
||||||
|
|||||||
@@ -1,18 +1,20 @@
|
|||||||
'''
|
"""
|
||||||
不使用记忆,可以选择此模块
|
不使用记忆,可以选择此模块
|
||||||
'''
|
"""
|
||||||
|
|
||||||
from ..base import MemoryProviderBase, logger
|
from ..base import MemoryProviderBase, logger
|
||||||
|
|
||||||
TAG = __name__
|
TAG = __name__
|
||||||
|
|
||||||
|
|
||||||
class MemoryProvider(MemoryProviderBase):
|
class MemoryProvider(MemoryProviderBase):
|
||||||
def __init__(self, config):
|
def __init__(self, config, summary_memory=None):
|
||||||
super().__init__(config)
|
super().__init__(config)
|
||||||
|
|
||||||
async def save_memory(self, msgs):
|
async def save_memory(self, msgs):
|
||||||
logger.bind(tag=TAG).debug("nomem mode: No memory saving is performed.")
|
logger.bind(tag=TAG).debug("nomem mode: No memory saving is performed.")
|
||||||
return None
|
return None
|
||||||
|
|
||||||
async def query_memory(self, query: str)-> str:
|
async def query_memory(self, query: str) -> str:
|
||||||
logger.bind(tag=TAG).debug("nomem mode: No memory query is performed.")
|
logger.bind(tag=TAG).debug("nomem mode: No memory query is performed.")
|
||||||
return ""
|
return ""
|
||||||
@@ -75,7 +75,8 @@ class Dialogue:
|
|||||||
|
|
||||||
if system_message:
|
if system_message:
|
||||||
enhanced_system_prompt = (
|
enhanced_system_prompt = (
|
||||||
f"{system_message.content}\n\n" f"相关记忆:\n{memory_str}"
|
f"{system_message.content}\n\n"
|
||||||
|
f"以下是用户的历史记忆:\n```\n{memory_str}\n```"
|
||||||
)
|
)
|
||||||
dialogue.append({"role": "system", "content": enhanced_system_prompt})
|
dialogue.append({"role": "system", "content": enhanced_system_prompt})
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user