Langchain-Chatchat/markdown_docs/server/db/repository/message_repository.md

9.3 KiB
Raw Permalink Blame History

FunctionDef add_message_to_db(session, conversation_id, chat_type, query, response, message_id, metadata)

add_message_to_db: 此函数的功能是向数据库中添加一条新的聊天记录。

参数:

  • session: 数据库会话实例,用于执行数据库操作。
  • conversation_id: 字符串类型,表示对话的唯一标识。
  • chat_type: 聊天类型,如普通聊天、客服聊天等。
  • query: 用户的提问或输入。
  • response: 系统或模型的回答,默认为空字符串。
  • message_id: 聊天记录的唯一标识ID如果未提供则会自动生成。
  • metadata: 字典类型,用于存储额外的信息,默认为空字典。

代码描述: 此函数首先检查是否提供了message_id,如果没有,则使用uuid.uuid4().hex生成一个唯一的ID。接着创建一个MessageModel实例其中包含聊天记录的所有相关信息如聊天类型、用户问题、模型回答、会话ID和元数据。然后使用提供的数据库会话session将此实例添加到数据库中并提交更改。最后函数返回新添加的聊天记录的ID。

注意:

  • 在调用此函数时,确保传入的session是一个有效的数据库会话实例。
  • metadata参数应为字典类型,可以包含任意结构的数据,但需注意保持数据结构的一致性,以便于后续处理。
  • 自动生成的message_id是基于UUID的确保了每条聊天记录的唯一性。
  • 函数执行成功后,会提交数据库事务,因此调用此函数前应确保其他相关数据库操作已正确执行,以避免事务冲突。

输出示例: 调用add_message_to_db函数可能会返回如下的聊天记录ID

'4f5e8a7b9d314f5a8e7b9d2f4b8a9e2f'

此函数在项目中的应用场景包括但不限于在用户与系统进行交互时记录聊天内容,以及在自动化测试或数据分析中记录和回溯聊天历史。通过将聊天记录持久化存储,项目可以提供更丰富的用户体验和更深入的数据洞察。

FunctionDef update_message(session, message_id, response, metadata)

update_message: 此函数的功能是更新已有的聊天记录。

参数:

  • session: 数据库会话实例,用于执行数据库操作。
  • message_id: 想要更新的聊天记录的唯一标识ID。
  • response: (可选)新的回复内容,字符串类型。
  • metadata: (可选)新的元数据,字典类型。

代码描述: update_message函数首先通过调用get_message_by_id函数根据message_id查询对应的聊天记录。如果找到了对应的记录,函数将根据传入的参数更新聊天记录的回复内容(response)和元数据(metadata)。如果response参数非空,则更新记录的回复内容;如果metadata参数是字典类型则更新记录的元数据。更新完成后该记录会被添加到数据库会话中并提交更改。如果更新成功函数返回更新记录的ID。

注意:

  • 确保传入的session是一个有效的数据库会话实例,并且已经正确配置以连接到目标数据库。
  • message_id应确保为有效的ID且该ID在数据库中存在以便能够找到对应的聊天记录进行更新。
  • 在更新元数据(metadata)时,传入的参数必须是字典类型,否则不会进行更新。
  • 函数执行成功后会返回更新记录的ID如果未找到对应的聊天记录则不会执行更新操作也不会返回ID。

输出示例: 假设有一条消息ID为123的聊天记录,调用update_message(session, '123', response='新的回复内容', metadata={'key': 'value'})后,如果更新成功,函数将返回123。这意味着ID为123的聊天记录的回复内容和元数据已被成功更新。

在项目中,update_message函数被on_llm_end方法调用,用于在语言模型处理结束后更新聊天记录的回复内容。这显示了update_message在实际应用场景中的一个重要用途,即在获取到新的回复或信息后,及时更新数据库中的聊天记录,以保持数据的最新状态。

FunctionDef get_message_by_id(session, message_id)

get_message_by_id: 此函数的功能是根据消息ID查询聊天记录。

参数:

  • session: 数据库会话实例,用于执行数据库查询。
  • message_id: 想要查询的聊天记录的唯一标识ID。

代码描述: get_message_by_id函数通过接收一个数据库会话(session)和一个消息ID(message_id)作为参数,使用这个会话来查询MessageModel模型中的记录。它首先构造一个查询,该查询通过filter_by方法指定了消息ID作为过滤条件然后调用first()方法尝试获取第一条匹配的记录。如果存在符合条件的记录,该记录将被返回;否则,返回None。这个过程允许调用者根据特定的消息ID快速检索聊天记录。

注意:

  • 确保传入的session是一个有效的数据库会话实例,且已正确配置以连接到目标数据库。
  • message_id应确保为有效的ID且该ID在数据库中存在以便查询能够成功返回结果。
  • 此函数返回的是一个MessageModel实例,或者在未找到匹配记录时返回None。因此,调用此函数后应检查返回值,以确定是否成功检索到记录。

输出示例: 假设数据库中存在一条消息ID为123的聊天记录,调用get_message_by_id(session, '123')可能会返回如下的MessageModel实例:

<message(id='123', conversation_id='456', chat_type='普通聊天', query='用户的问题', response='模型的回答', meta_data='{}', feedback_score=80, feedback_reason='详细的反馈理由', create_time='2023-04-01 12:00:00')>

如果指定的message_id在数据库中不存在,函数将返回None

FunctionDef feedback_message_to_db(session, message_id, feedback_score, feedback_reason)

feedback_message_to_db: 此函数的功能是更新聊天记录的用户反馈信息。

参数:

  • session: 数据库会话实例,用于执行数据库操作。
  • message_id: 聊天记录的唯一标识ID用于定位需要更新反馈的聊天记录。
  • feedback_score: 用户对聊天回答的评分满分为100。
  • feedback_reason: 用户评分的理由。

代码描述: feedback_message_to_db函数首先通过session.query(MessageModel).filter_by(id=message_id).first()查询到指定ID的聊天记录实例。如果该记录存在函数将更新该记录的feedback_scorefeedback_reason字段为传入的参数值。之后,通过session.commit()提交更改到数据库。如果更新成功函数返回更新记录的ID。

此函数是与用户反馈相关的核心功能之一,它允许用户对聊天记录进行评分和反馈,进而可以用于改进聊天系统的回答质量或进行其他相关分析。

注意:

  • 在调用此函数之前,确保session已正确初始化并且可以进行数据库操作。
  • 传入的message_id应确保在数据库中存在,否则无法进行更新操作。
  • feedback_score应在0到100之间代表用户满意度的百分比。
  • 在实际应用中,可能需要对用户的反馈理由feedback_reason进行长度或内容的校验,以避免存储无效或不恰当的信息。

输出示例: 如果更新操作成功函数将返回聊天记录的ID例如

'1234567890abcdef1234567890abcdef'

此ID可用于后续操作或日志记录以便跟踪反馈操作的结果。

FunctionDef filter_message(session, conversation_id, limit)

filter_message: 此函数的功能是根据对话框ID过滤聊天记录并返回最近的几条记录。

参数:

  • session: 数据库会话实例,用于执行数据库查询。
  • conversation_id: 字符串类型指定要查询的对话框ID。
  • limit: 整型可选参数默认值为10指定返回记录的最大数量。

代码描述: filter_message函数首先通过传入的sessionconversation_id参数使用SQLAlchemy的查询接口从MessageModel模型中筛选出与指定对话框ID匹配的聊天记录。在查询过程中它还应用了两个过滤条件

  1. 忽略响应为空的记录,即只选择那些系统或模型已经给出回答的聊天记录。
  2. 按照创建时间降序排列结果,并通过limit参数限制返回的记录数量。

查询完成后,函数不直接返回MessageModel对象列表,而是构建了一个新的列表data,其中每个元素都是一个字典,包含queryresponse两个键值对,分别对应每条记录的用户查询和系统回答。

注意:

  • 在使用此函数时,需要确保传入的session是一个有效的数据库会话实例,且conversation_id参数应为正确的对话框ID格式。
  • 函数返回的数据结构是为了简化记录的内容,仅包含查询和回答信息,如果需要更多的聊天记录信息,可能需要对函数进行相应的修改。

输出示例: 调用filter_message函数可能会返回如下格式的数据列表:

[
    {"query": "用户的问题1", "response": "系统的回答1"},
    {"query": "用户的问题2", "response": "系统的回答2"},
    ...
]

此列表包含了最多limit条记录,每条记录都是一个包含用户查询和系统回答的字典。