Skip to content

Commit ebcd9b4

Browse files
committed
feat: add further questions for
1 parent 0c0fd8b commit ebcd9b4

File tree

4 files changed

+84
-32
lines changed

4 files changed

+84
-32
lines changed

src/memos/api/product_models.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,3 +161,4 @@ class SuggestionRequest(BaseRequest):
161161

162162
user_id: str = Field(..., description="User ID")
163163
language: Literal["zh", "en"] = Field("zh", description="Language for suggestions")
164+
message: list[MessageDict] | None = Field(None, description="List of messages to store.")

src/memos/api/routers/product_router.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,9 @@ def get_suggestion_queries_post(suggestion_req: SuggestionRequest):
148148
try:
149149
mos_product = get_mos_product_instance()
150150
suggestions = mos_product.get_suggestion_query(
151-
user_id=suggestion_req.user_id, language=suggestion_req.language
151+
user_id=suggestion_req.user_id,
152+
language=suggestion_req.language,
153+
message=suggestion_req.message,
152154
)
153155
return SuggestionResponse(
154156
message="Suggestions retrieved successfully", data={"query": suggestions}

src/memos/mem_os/product.py

Lines changed: 26 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,13 @@
3636
from memos.memories.textual.item import (
3737
TextualMemoryItem,
3838
)
39-
from memos.templates.mos_prompts import MEMOS_PRODUCT_BASE_PROMPT, MEMOS_PRODUCT_ENHANCE_PROMPT
39+
from memos.templates.mos_prompts import (
40+
FURTHER_SUGGESTION_PROMPT,
41+
MEMOS_PRODUCT_BASE_PROMPT,
42+
MEMOS_PRODUCT_ENHANCE_PROMPT,
43+
SUGGESTION_QUERY_PROMPT_EN,
44+
SUGGESTION_QUERY_PROMPT_ZH,
45+
)
4046
from memos.types import MessageList
4147

4248

@@ -633,7 +639,19 @@ def user_register(
633639
except Exception as e:
634640
return {"status": "error", "message": f"Failed to register user: {e!s}"}
635641

636-
def get_suggestion_query(self, user_id: str, language: str = "zh") -> list[str]:
642+
def _get_further_suggestion(self, message: MessageList | None = None) -> list[str]:
643+
"""Get further suggestion prompt."""
644+
dialogue_info = "\n".join([f"{msg['role']}: {msg['content']}" for msg in message[-2:]])
645+
further_suggestion_prompt = FURTHER_SUGGESTION_PROMPT.format(dialogue=dialogue_info)
646+
message_list = [{"role": "system", "content": further_suggestion_prompt}]
647+
response = self.chat_llm.generate(message_list)
648+
clean_response = clean_json_response(response)
649+
response_json = json.loads(clean_response)
650+
return response_json["query"]
651+
652+
def get_suggestion_query(
653+
self, user_id: str, language: str = "zh", message: MessageList | None = None
654+
) -> list[str]:
637655
"""Get suggestion query from LLM.
638656
Args:
639657
user_id (str): User ID.
@@ -642,37 +660,13 @@ def get_suggestion_query(self, user_id: str, language: str = "zh") -> list[str]:
642660
Returns:
643661
list[str]: The suggestion query list.
644662
"""
645-
663+
if message:
664+
further_suggestion = self._get_further_suggestion(message)
665+
return further_suggestion
646666
if language == "zh":
647-
suggestion_prompt = """
648-
你是一个有用的助手,可以帮助用户生成建议查询。
649-
我将获取用户最近的一些记忆,
650-
你应该生成一些建议查询,这些查询应该是用户想要查询的内容,
651-
用户最近的记忆是:
652-
{memories}
653-
请生成3个建议查询用中文,
654-
输出应该是json格式,键是"query",值是一个建议查询列表。
655-
656-
示例:
657-
{{
658-
"query": ["查询1", "查询2", "查询3"]
659-
}}
660-
"""
667+
suggestion_prompt = SUGGESTION_QUERY_PROMPT_ZH
661668
else: # English
662-
suggestion_prompt = """
663-
You are a helpful assistant that can help users to generate suggestion query.
664-
I will get some user recently memories,
665-
you should generate some suggestion query, the query should be user what to query,
666-
user recently memories is:
667-
{memories}
668-
if the user recently memories is empty, please generate 3 suggestion query in English,
669-
output should be a json format, the key is "query", the value is a list of suggestion query.
670-
671-
example:
672-
{{
673-
"query": ["query1", "query2", "query3"]
674-
}}
675-
"""
669+
suggestion_prompt = SUGGESTION_QUERY_PROMPT_EN
676670
text_mem_result = super().search("my recently memories", user_id=user_id, top_k=3)[
677671
"text_mem"
678672
]
@@ -683,6 +677,7 @@ def get_suggestion_query(self, user_id: str, language: str = "zh") -> list[str]:
683677
message_list = [{"role": "system", "content": suggestion_prompt.format(memories=memories)}]
684678
response = self.chat_llm.generate(message_list)
685679
clean_response = clean_json_response(response)
680+
print(f"clean_response: {clean_response}")
686681
response_json = json.loads(clean_response)
687682
return response_json["query"]
688683

src/memos/templates/mos_prompts.py

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,3 +191,57 @@
191191
{dialogue}
192192
Current question: {query}
193193
Answer:"""
194+
195+
SUGGESTION_QUERY_PROMPT_ZH = """
196+
你是一个有用的助手,可以帮助用户生成建议查询。
197+
我将获取用户最近的一些记忆,
198+
你应该生成一些建议查询,这些查询应该是用户想要查询的内容,
199+
用户最近的记忆是:
200+
{memories}
201+
请生成3个建议查询用中文,如果用户最近的记忆是空,请直接随机生成3个建议查询用中文,不要有多余解释。
202+
输出应该是json格式,键是"query",值是一个建议查询列表。
203+
204+
示例:
205+
{{
206+
"query": ["查询1", "查询2", "查询3"]
207+
}}
208+
"""
209+
210+
SUGGESTION_QUERY_PROMPT_EN = """
211+
You are a helpful assistant that can help users to generate suggestion query.
212+
I will get some user recently memories,
213+
you should generate some suggestion query, the query should be user what to query,
214+
user recently memories is:
215+
{memories}
216+
if the user recently memories is empty, please generate 3 suggestion query in English,do not generate any other text,
217+
output should be a json format, the key is "query", the value is a list of suggestion query.
218+
219+
example:
220+
{{
221+
"query": ["query1", "query2", "query3"]
222+
}}
223+
"""
224+
225+
FURTHER_SUGGESTION_PROMPT = """
226+
You are a helpful assistant.
227+
You are given a dialogue between a user and a assistant.
228+
You need to suggest a further question based on the dialogue.
229+
Requirements:
230+
1. The further question should be related to the dialogue.
231+
2. The further question should be concise and accurate.
232+
3. You must return ONLY a valid JSON object. Do not include any other text, explanations, or formatting.
233+
the lastest dialogue is:
234+
{dialogue}
235+
output should be a json format, the key is "query", the value is a list of suggestion query.
236+
if dialogue is chinese,the quersuggestion query should be in chinese,if dialogue is english,the suggestion query should be in english.
237+
please do not generate any other text.
238+
239+
example english:
240+
{{
241+
"query": ["query1", "query2", "query3"]
242+
}}
243+
example chinese:
244+
{{
245+
"query": ["问题1", "问题2", "问题3"]
246+
}}
247+
"""

0 commit comments

Comments
 (0)