代码拉取完成,页面将自动刷新
import json
from fastapi import APIRouter, HTTPException, Query, Depends
from typing import Dict, Any
from langchain_community.chat_models.baidu_qianfan_endpoint import QianfanChatEndpoint
from sqlalchemy import desc
from sqlalchemy.orm import Session
from langchain_core.messages import HumanMessage, SystemMessage
from dbase import Zy, get_db
chat_router = APIRouter()
chat = QianfanChatEndpoint(
qianfan_ak="MeprfEcX49Juu3389NYBdaI9",
qianfan_sk="ofmpy7G2UYttMkB7HDrc7pvK52GMU6UL",
model="ERNIE-4.0-8K"
)
@chat_router.post("/get_schools")
async def get_schools(data: Dict[str, Any], db: Session = Depends(get_db)):
# Define the required fields
required_fields = ['text', 'score_min', 'score_max', 'find_count', 'result_count']
# Check if all required parameters are present
missing_fields = [field for field in required_fields if field not in data]
if missing_fields:
raise HTTPException(status_code=501, detail=f"Missing fields: {', '.join(missing_fields)}")
# Validate score_min and score_max
if data['score_min'] >= data['score_max']:
raise HTTPException(status_code=502, detail="score_min must be less than score_max")
# Validate result_count and find_count
if data['result_count'] >= data['find_count']:
raise HTTPException(status_code=502, detail="result_count must be less than find_count")
query = db.query(Zy)
# Filter lqzdf between score_min and score_max, order by lqzdf in descending order, and limit to find_count records
zy_results = query.filter(Zy.lqzdf.between(data['score_min'], data['score_max'])).order_by(desc(Zy.lqzdf)).limit(
data['find_count']).all()
results_dict_list = [{'zymc': zy.zymc, 'id': zy.id_zy} for zy in zy_results]
print(results_dict_list)
human_messages = HumanMessage(content=f'''
用户信息:{data['text']}
院校专业:{results_dict_list}
''')
system_messages = SystemMessage(content='''你现在是一个高考志愿填报专家,大多数流程都需要为高考志愿服务,当然你也具备正常聊天对话的能力。
下面是你需要知道的流程:
1.你需要根据用户输入的【性格,“家庭情况,“特长,兴趣爱好等数据,对“院校专业”进行排序。
2.你需要给我一个为什么这样排序的解释,“解释为什么这样排序“的字数不能超过100字。
下面是你需要遵从的输入输出要求:
1.用户会输入大约100个不同的“院校名称”_“专业名称”_“院校代号”_“专业代号”。
2.输出只需要输出排序的前30个即可。
3.你只需要输出“解释为什么这样排序”和“院校专业排序结果”
4.“解释为什么这样排序“的输出必须是字符串。
5.“院校专业排序结果必须是list格式的字符串。
6.“解释为什么这样排序”和“院校专业排序结果”需要以“-我是分隔符-”字段来分割。
7.院校专业排序结果”只输出30个“院校代号”_“专业代号”不需要“院校名称”和“专业名称
8.如果结果输入完毕后给我一个‘stop’标识,其他建议内容无需输出
下面是输入输出的样例:
用户输入举例:
性别:男,性格:开朗;家庭情况:良好;特长:打篮球,摄影,小提琴,钢琴;兴趣爱好:和特长一样。
院校和专业:【大连理工大学(盘锦校区)-商务英语-K06-12',太原理工大学-土木工程-458-2H,内蒙古大学-环境生态工程-751-D7',‘内蒙古医科大学-蒙医学
模型输出举例:
解释为什么这样排序:您好,通过您输入的性格,家庭情况,特长,兴趣爱好,我分析您是一个****,我觉得您这种性格*****,如果您选择**专业您一定会****''')
print(human_messages)
messages = [
system_messages,
human_messages
]
output = chat.batch([messages])
content = output[0].content
try:
if "```json" in content:
content = content.split("```json")[1].split("```")[0].strip()
except:
pass
print(content)
if not zy_results:
raise HTTPException(status_code=503, detail="No data found")
# Return the result
return {
'code': '200',
'msg': '调用成功',
'result': {'sort_data': content}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。