'commit'
This commit is contained in:
@@ -20,13 +20,28 @@ logger.setLevel(logging.INFO)
|
|||||||
# 初始化异步 OpenAI 客户端
|
# 初始化异步 OpenAI 客户端
|
||||||
client = AsyncOpenAI(
|
client = AsyncOpenAI(
|
||||||
api_key=Config.ALY_LLM_API_KEY,
|
api_key=Config.ALY_LLM_API_KEY,
|
||||||
base_url=Config.ALY_LLM_BASE_URL,
|
base_url=Config.ALY_LLM_BASE_URL
|
||||||
)
|
)
|
||||||
|
|
||||||
# 初始化 ElasticSearch 工具
|
# 初始化 ElasticSearch 工具
|
||||||
search_util = EsSearchUtil(Config.ES_CONFIG)
|
search_util = EsSearchUtil(Config.ES_CONFIG)
|
||||||
|
|
||||||
|
|
||||||
|
def get_system_prompt():
|
||||||
|
"""获取系统提示"""
|
||||||
|
return """
|
||||||
|
你是一位平易近人且教学方法灵活的教师,通过引导学生自主学习来帮助他们掌握知识。
|
||||||
|
|
||||||
|
严格遵循以下教学规则:
|
||||||
|
1. 首先了解学生情况:在开始讲解前,询问学生的年级水平和对询问知识的了解程度。
|
||||||
|
2. 基于现有知识构建:将新思想与学生已有的知识联系起来。
|
||||||
|
3. 引导而非灌输:使用问题、提示和小步骤,让学生自己发现答案。
|
||||||
|
4. 检查和强化:在讲解难点后,确认学生能够重述或应用这些概念。
|
||||||
|
5. 变化节奏:混合讲解、提问和互动活动,让教学像对话而非讲座。
|
||||||
|
|
||||||
|
最重要的是:不要直接给出答案,而是通过合作和基于学生已有知识的引导,帮助学生自己找到答案。
|
||||||
|
"""
|
||||||
|
|
||||||
async def lifespan(app: FastAPI):
|
async def lifespan(app: FastAPI):
|
||||||
yield
|
yield
|
||||||
|
|
||||||
@@ -85,8 +100,12 @@ async def chat(request: fastapi.Request):
|
|||||||
if not full_context:
|
if not full_context:
|
||||||
full_context = "没有找到相关信息"
|
full_context = "没有找到相关信息"
|
||||||
|
|
||||||
|
# 获取系统提示词
|
||||||
|
system_prompt = get_system_prompt()
|
||||||
|
|
||||||
prompt = f"""
|
prompt = f"""
|
||||||
信息检索与回答助手
|
{system_prompt.strip()}
|
||||||
|
|
||||||
用户现在的问题是: '{query}'
|
用户现在的问题是: '{query}'
|
||||||
|
|
||||||
{full_context}
|
{full_context}
|
||||||
|
@@ -1,69 +0,0 @@
|
|||||||
import sys
|
|
||||||
|
|
||||||
from Util import LlmUtil
|
|
||||||
|
|
||||||
|
|
||||||
def get_system_prompt():
|
|
||||||
"""获取系统提示"""
|
|
||||||
return """
|
|
||||||
你是一位平易近人且教学方法灵活的教师,通过引导学生自主学习来帮助他们掌握知识。
|
|
||||||
|
|
||||||
严格遵循以下教学规则:
|
|
||||||
1. 首先了解学生情况:在开始讲解前,询问学生的年级水平和对勾股定理的了解程度。
|
|
||||||
2. 基于现有知识构建:将新思想与学生已有的知识联系起来。
|
|
||||||
3. 引导而非灌输:使用问题、提示和小步骤,让学生自己发现答案。
|
|
||||||
4. 检查和强化:在讲解难点后,确认学生能够重述或应用这些概念。
|
|
||||||
5. 变化节奏:混合讲解、提问和互动活动,让教学像对话而非讲座。
|
|
||||||
|
|
||||||
最重要的是:不要直接给出答案,而是通过合作和基于学生已有知识的引导,帮助学生自己找到答案。
|
|
||||||
"""
|
|
||||||
|
|
||||||
|
|
||||||
def initialize_chat_history():
|
|
||||||
"""初始化对话历史"""
|
|
||||||
# 包含系统提示作为第一条消息
|
|
||||||
return [{
|
|
||||||
"role": "system",
|
|
||||||
"content": get_system_prompt()
|
|
||||||
}]
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
# 初始化对话历史(包含系统提示)
|
|
||||||
chat_history = initialize_chat_history()
|
|
||||||
|
|
||||||
# 欢迎消息
|
|
||||||
print("教师助手已启动。输入 'exit' 或 '退出' 结束对话。")
|
|
||||||
print("你可以开始提问了,例如: '讲解一下勾股定理的证明'")
|
|
||||||
|
|
||||||
# 多轮对话循环
|
|
||||||
while True:
|
|
||||||
# 获取用户输入
|
|
||||||
user_input = input("\n你: ")
|
|
||||||
|
|
||||||
# 检查是否退出
|
|
||||||
if user_input.lower() in ['exit', '退出']:
|
|
||||||
print("对话已结束。")
|
|
||||||
sys.exit(0)
|
|
||||||
|
|
||||||
# 添加用户输入到对话历史
|
|
||||||
chat_history.append({"role": "user", "content": user_input})
|
|
||||||
|
|
||||||
# 发送请求(传递用户输入文本和系统提示)
|
|
||||||
print("\n教师助手:")
|
|
||||||
try:
|
|
||||||
# 调用LlmUtil获取响应,传递用户输入文本和系统提示
|
|
||||||
response_content = LlmUtil.get_llm_response(
|
|
||||||
user_input,
|
|
||||||
system_prompt=get_system_prompt()
|
|
||||||
)
|
|
||||||
|
|
||||||
# 打印响应
|
|
||||||
print(response_content)
|
|
||||||
|
|
||||||
# 维护对话历史(仅本地记录,不传递给API)
|
|
||||||
chat_history.append({"role": "assistant", "content": response_content})
|
|
||||||
except Exception as e:
|
|
||||||
print(f"发生错误: {str(e)}")
|
|
||||||
# 从对话历史中移除最后添加的用户输入,以便用户可以重试
|
|
||||||
chat_history.pop()
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user