43 lines
1.6 KiB
Python
43 lines
1.6 KiB
Python
from typing import List
|
|
|
|
from app.api.routers.request.base import message
|
|
from llama_index.core.prompts import PromptTemplate
|
|
from llama_index.core.settings import Settings
|
|
from pydantic import BaseModel
|
|
|
|
NEXT_QUESTIONS_SUGGESTION_PROMPT = PromptTemplate(
|
|
"你是一个乐于助人的助手!你的任务是对用户可能会问的下一个问题给出建议。 "
|
|
"\n这是对话历史记录"
|
|
"\n---------------------\n{conversation}\n---------------------"
|
|
"考虑到对话历史记录,仅限于现在知识库已有内容, 请给我 $number_of_questions 个你接下来可能会问题的问题!"
|
|
)
|
|
N_QUESTION_TO_GENERATE = 3
|
|
|
|
|
|
class NextQuestions(BaseModel):
|
|
"""A list of questions that user might ask next"""
|
|
|
|
questions: List[str]
|
|
|
|
|
|
class NextQuestionSuggestion:
|
|
@staticmethod
|
|
async def suggest_next_questions(
|
|
message_id: str,
|
|
number_of_questions: int = N_QUESTION_TO_GENERATE,
|
|
) -> List[str]:
|
|
last_user_message = None
|
|
last_assistant_message = None
|
|
results = message().query(message_id)
|
|
if len(results) > 0:
|
|
last_user_message = results[0]['query']
|
|
last_assistant_message = results[0]['answer']
|
|
conversation: str = f"{last_user_message}\n{last_assistant_message}"
|
|
output: NextQuestions = await Settings.llm.astructured_predict(
|
|
NextQuestions,
|
|
prompt=NEXT_QUESTIONS_SUGGESTION_PROMPT,
|
|
conversation=conversation,
|
|
nun_questions=number_of_questions,
|
|
)
|
|
return output.questions
|
|
return [] |