AI智能体(Agent)大模型入门【11】--基于llamaindex框架和fastapi框架完善页面和大语言模型对话的一些扩展接口
目录
前言
封装数据库连接函数
历史会话列表函数
多轮会话加载函数
运行演示
后言
前言
在之前的代码已经完善了对话接口,但是实际业务上需要我们能够对历史对话进行管理操作的,例如kimi,deepseek等一些市面常见的ai聊天页面,你都可以看到历史对话,或者对对话进行操作的,这里就涉及到了对数据库的增删改查操作,那么本篇章就是对对话管理进行接口操作。
封装数据库连接函数
关于这个,我们不需要每次启动fastapi在全局变量设置,这样很麻烦,我创建一个新的py文件来存储这个链接,即当使用的时候直接调用使用即可
import pymysqldef get_conn():return pymysql.connect(host="127.0.0.1", port=3306, user="用户名", password="数据库密码",database="数据库名称", charset="utf8mb4",cursorclass=pymysql.cursors.DictCursor)
修改这些中文设置即可,依据自己的数据库设置来修改,若端口号等其他有变,根据个人情况进行修改代码
历史会话列表函数
参考kimi
它是存在一个历史会话的,所以我们也需要创建一个历史会话列表函数,用来加载历史会话,
至于为什么要这样子操作,因为一个历史会话包含多轮会话,我们是要通过历史会话列表的来关联多轮历史会话,而不是直接加载多轮历史会话,因为会出现乱序以及数据量爆炸导致混沌的情况。
代码参考
@app.get("/chat_list_get")
async def chat_list_get():"""会话历史列表(也就是一整轮的开始标题):return:"""with closing(get_conn()) as conn:with conn.cursor() as cur:cur.execute("SELECT * FROM ChatList ORDER BY updated_at DESC")items = cur.fetchall()return [{"id": item["id"],"title": item["title"],"created_at": item["created_at"],"updated_at": item["updated_at"]}for item in items]
通过查询历史会话列表加载列表项,然后再通过跟新时间来进行排序。
多轮会话加载函数
其次,只拥有历史会话列表函数是不足以加载多轮历史会话的,所以还需要一个多轮会话加载函数来加载多轮会话
示例代码
@app.get("/chat_history")
async def chat_history(session_id: int):with closing(get_conn()) as conn:with conn.cursor() as cur:cur.execute("SELECT * FROM ChatHistory WHERE chat_list_id=%s ORDER BY msg_seq", (session_id,))items = cur.fetchall()return [{"id": item["id"],"chat_list_id": item["chat_list_id"],"msg_seq": item["msg_seq"],"role": item["role"],"message": item["message"],"created_at": item["created_at"],}for item in items]
通过加载历史会话列表关联外键查询多轮会话表,然后通过插入排序,进行顺序输出,减少混乱以及历史会话没有关联性,加强紧密性。
运行演示
历史会话列表加载
单个列表内的多轮会话加载
后言
关于删除接口我就不写了,希望你们能自己动手编写,本质上是对数据的增删改查的操作。到这里你基本上学习完了这个扩展内容,接下来的篇章还是基于完善对聊天接口的升级,直至完成实现基本功能,甚至多模态应用。