写在前面的话
原谅他吧。昨天,表哥打来视频,说想三舅了。我赶紧去老爸屋,老爸一直摆手,表达不接的意思。我说,我爸睡了,我给你叫起来。老爸无奈接了下,和表哥聊起来,聊了一会,我感觉不对劲,老爸一句,你今天喝了多少假酒啊,想起来给我打电话了。我明白了,表哥喝醉了。我听他们聊到我奶埋新疆不合适,到时,他过来走亲戚,想给我奶烧纸都没地方烧,还提到一个表弟在家盖了2.5层的小楼,他拉的沙石料,提到大爷找了新老伴,都是一些家常事。挂了电话,老爸说,这孩子不是喝醉也不会给我打电话,言语中充满了埋怨。我说,酒后吐真言,酒后能想到你,说明人家心里真的有你。老妈说,我带海振婶子几个孩子好几年,如今都出嫁了,过年也一个电话没有啊,如果海振是北京市市长,你看她们电话打的勤不勤。我说,去睡觉吧,我当不了市长的。
[327]-------->底部有张生活照片和昨日花销
【关键词】python、获取会话、会话列表、新建会话
一、chat_serve相关
1.获取会话列表接口
描述:需要写一个获取会话列表的接口,应该是多条。
开工:
第一步:分析原接口
a.找原接口地址
20241210时间段:0931-0940
原接口地址:
http://localhost:9222/v1/conversation/list?dialog_id=34bb8d02b30911ef9c3b0242ac120006
注:接下来,分析下原接口代码。
b.原接口代码分析
20241210时间段:0933-0940
原代码如下:
@manager.route('/list', methods=['GET'])
@login_required
def list_convsersation():
dialog_id = request.args["dialog_id"]
try:
tenant_id = UserTenantService.get_tenant_id(current_user.id)
if not tenant_id:
return get_data_error_result(retmsg="Tenant not found!")
if not DialogService.query(tenant_id=tenant_id, id=dialog_id):
return get_json_result(
data=False, retmsg=f'Only owner of dialog authorized for this operation.',
retcode=RetCode.OPERATING_ERROR)
convs = ConversationService.query(
dialog_id=dialog_id,
order_by=ConversationService.model.create_time,
reverse=True)
convs = [d.to_dict() for d in convs]
return get_json_result(data=convs)
except Exception as e:
return server_error_response(e)注:这个请求是get请求。dialog_id相关于用户id,一个dialog_id对应多个conversation_id.输入dialog_id,返回多个conversation_id,组成一个列表。
有用的就是如下几行:
convs = ConversationService.query(
dialog_id=dialog_id,
order_by=ConversationService.model.create_time,
reverse=True)
注:拿过来运行一下。
第二步:写会话列表接口
a.写接口
20241210时间段:1018-1020
写接口如下:
@router.get('/list_convsersation')
async def list_convsersation(dialog_id:str):
try:
# tenant_id = UserTenantService.get_tenant_id(current_user.id)
# if not tenant_id:
# return get_data_error_result(retmsg="Tenant not found!")
# if not DialogService.query(tenant_id=tenant_id, id=dialog_id):
# return get_json_result(
# data=False, retmsg=f'Only owner of dialog authorized for this operation.',
# retcode=RetCode.OPERATING_ERROR)
convs = ConversationService.query(
dialog_id=dialog_id,
order_by=ConversationService.model.create_time,
reverse=True)
convs = [d.to_dict() for d in convs]
return ok(convs)
except Exception as e:运行效果如下:
图6a-1
注:从结果来看,message/reference不需要,去掉。
b.去掉message/reference
20241210时间段:1020-1040
分析:这个要从查询时去掉,不获取这两个字段。
实现不了的话,就把结果进行循环,去掉这两个字段。
最终采用的方法是输出后处理,修改代码如下:
图6a-2
注:可能查询时也可以限制,但没找到合适的方法,先这样,实现再说,后期再管查询的效率。
c.代码上线
20241210时间段:1041-1100
代码上线没有问题,接下来,写下接口文档。
对入参进行优化,修改程序如下:
图6a-3
注:做了两点优化,一是dialog_id不传的话,默认为空,二是为空的话,会报错,提示:dialog_id是必传字段。另外还对dialog_id的长度进行了限制,最大100字节。接下来,就是新建会话了。
2.新建会话接口
描述:就像用大模型查询一样,可以在会话列表选一个继续问,也可以新建会话,重新开始问。截图如下:
图6a-4
开工:
第一步:分析原接口
a.找原接口地址
20241210时间段:1101-1120
原接口地址:
http://localhost:9222/v1/conversation/set
这个是post传输,参数如下:
图6a-5
注:这下dialog_id,name是必传的,一个是在哪个用户下创建,一个是创建新会话的名字。接下来,看下原来的代码。
b.参考原代码
20241210时间段:1114-1120
原代码如下:
@manager.route('/set', methods=['POST'])
@login_required
def set_conversation():
req = request.json
conv_id = req.get("conversation_id")
if conv_id:
del req["conversation_id"]
try:
if not ConversationService.update_by_id(conv_id, req):
return get_data_error_result(retmsg="Conversation not found!")
e, conv = ConversationService.get_by_id(conv_id)
if not e:
return get_data_error_result(
retmsg="Fail to update a conversation!")
conv = conv.to_dict()
return get_json_result(data=conv)
except Exception as e:
return server_error_response(e)
try:
e, dia = DialogService.get_by_id(req["dialog_id"])
if not e:
return get_data_error_result(retmsg="Dialog not found")
conv = {
"id": get_uuid(),
"dialog_id": req["dialog_id"],
"name": req.get("name", "New conversation"),
"message": [{"role": "assistant", "content": dia.prompt_config["prologue"]}]
}
ConversationService.save(**conv)
e, conv = ConversationService.get_by_id(conv["id"])
if not e:
return get_data_error_result(retmsg="Fail to new a conversation!")
conv = conv.to_dict()
return get_json_result(data=conv)
except Exception as e:
return server_error_response(e)
注:如果会话id存在,就查一下,删除,紧接着就建立,并返回默认提示语,比如:我是机器人,有什么需要帮助。
比着写一下。
c.写新接口
20241210时间段:1516-1540
写新接口如下:
图6a-6
注:这个程序运行报错,处理一下。报错如下:
图6a-7
注:追踪下看看。修改如下:
图6a-8
注:上述截图【图6a-7】用到了get_data_error_result,这个是flask的东西,去掉就可以。以上是更新会话,接下来,是新建会话。
d.新建会话
20241210时间段:1558-1620
其实还是这个接口,新建会话时,不要传conversation_id就可以了。修改程序如下:
图6a-9
注:现在保存报错,原因如下:
REPLACE INTO `conversation` (`id`, `create_time`, `create_date`, `update_time`, `update_date`, `dialog_id`, `name`, `message`, `reference`) VALUES ('c7f1fe4fb6d611efa2f3f020ff63f4c4', 1733821906600, 2024-12-10 17:11:46, 1733821906600, 2024-12-10 17:11:46, '34bb8d02b30911ef9c3b0242ac120006', '狗狗呕吐qhz1600', '[{"role": "assistant", "content": "\u4f60\u597d\uff01 \u6211\u662f\u4e13\u4e1a\u5ba0\u7269\u533b\u751f\uff0c\u6709\u4ec0\u4e48\u53ef\u4ee5\u5e2e\u5230\u4f60\u7684\u5417\uff1f"}]', []) 注:原因是日期【2024-12-10 17:11:46】没加单引号,reference【[]】,没加单引号,需要处理一下。
处理reference如下:
图6a-10
注:这样处理一下reference,就可以了,发现日期之类的不用处理,也能插入成功,内部可能做了某种处理。
第二步:代码上线
代码上线并测试,结果还可以。写下文档。
二、生活照片
拍摄于2025年7月6日,20:00:26,带二宝出去玩拍的,当时,二宝两岁九个月。其实,怎么说呢,家家有本难念的经,老爸觉得表哥小的时候,姑身体不好,帮助他家干了不少活,应该经常问候,平常忙,最起码过年应该打个电话。但表哥一个人养四个孩子,表嫂子在家带孩子,表哥一个人在农村给别人拉沙子水泥挣点运输费养六口人,四个孩子都上学,吃喝学费都是不小的开支,一年忙到头,饥荒估计也还不完,哪还有意思给这个拜年,那个拜年呢。再说我妈帮一个叔带三四个孩子的事,叔生三个女儿,婶为了让叔有个儿子,在长期生病的情况下高危产子,结果要了性命,叔当时哭的不行,老爸看不过去,让老妈做饭,请叔一家几口去吃,日久天长,几个堂妹堂弟像认了门一样,天天来,老妈无形中担起了抚养责任,由于叔和老爸是一个爷的亲堂兄弟,也不好说啥,直到堂妹们一个个出嫁,堂弟毕业去打工,老妈来了北京才终止,但由于堂弟内向,二十五六了还没结婚,前年见叔都白头了,哪有心思打电话说感谢我妈的话。这些事,没法说,我的观点是付出时别想着回报,如果报着将来必须有回报的目的,最好起初就不要帮人家,免得得不到回报而伤心。
图6b-1
三、昨日花销
昨日花销截图如下:
图6c-1
《本文完》