Langchain-Chatchat/markdown_docs/server/db/models/message_model.md

45 lines
4.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## ClassDef MessageModel
**MessageModel**: MessageModel类的功能是定义聊天记录的数据模型。
**属性**:
- `id`: 聊天记录的唯一标识ID。
- `conversation_id`: 对话框ID用于标识一次会话。
- `chat_type`: 聊天类型,如普通聊天、客服聊天等。
- `query`: 用户的提问或输入。
- `response`: 系统或模型的回答。
- `meta_data`: 存储额外信息的JSON字段如知识库ID等便于后续扩展。
- `feedback_score`: 用户对聊天回答的评分满分为100。
- `feedback_reason`: 用户评分的理由。
- `create_time`: 记录的创建时间。
**代码描述**:
MessageModel类继承自Base用于定义聊天记录的数据结构。它包含了聊天记录的基本信息如聊天ID、会话ID、聊天类型、用户问题、模型回答、元数据、用户反馈等。此类通过定义SQLAlchemy的Column字段来映射数据库中的`message`表结构。其中,`__tablename__`属性指定了数据库中对应的表名为`message`。每个属性都通过Column实例来定义其中包括数据类型、是否为主键、默认值、索引创建、注释等信息。
在项目中MessageModel类被用于server/db/repository/message_repository.py文件中的几个函数调用中主要涉及到聊天记录的增加、查询和反馈。例如`add_message_to_db`函数用于新增聊天记录它创建了一个MessageModel实例并将其添加到数据库中。`get_message_by_id`函数通过聊天记录ID查询聊天记录。`feedback_message_to_db`函数用于更新聊天记录的用户反馈信息。`filter_message`函数则是根据对话框ID过滤聊天记录并返回最近的几条记录。
**注意**:
- 在使用MessageModel进行数据库操作时需要确保传入的参数类型与定义的字段类型相匹配。
- 对于`meta_data`字段虽然默认值为一个空字典但在实际使用中可以根据需要存储任意结构的JSON数据。
- 在进行数据库操作如添加、查询、更新记录时应确保操作在正确的数据库会话session上下文中执行。
**输出示例**:
由于MessageModel是一个数据模型类它本身不直接产生输出。但是当它被实例化并用于数据库操作时例如通过`add_message_to_db`函数添加一条新的聊天记录可能会返回如下的聊天记录ID
```
'1234567890abcdef1234567890abcdef'
```
### FunctionDef __repr__(self)
**__repr__**: 此函数的功能是生成并返回一个代表消息对象的字符串。
**参数**: 此函数没有参数。
**代码描述**: `__repr__` 方法是一个特殊方法,用于定义对象的“官方”字符串表示。在这个具体的实现中,它返回一个格式化的字符串,该字符串包含了消息对象的多个属性,包括:`id`, `conversation_id`, `chat_type`, `query`, `response`, `meta_data`, `feedback_score`, `feedback_reason`, 以及 `create_time`。这些属性通过使用 `self` 关键字访问,表示它们是对象的实例变量。字符串使用了 f-string 格式化,这是 Python 3.6 及以上版本中引入的一种字符串格式化机制,允许将表达式的值直接嵌入到字符串常量中。
**注意**: `__repr__` 方法的返回值应该尽可能地返回一个明确的对象表示,以便于调试和日志记录。返回的字符串应该尽量遵循 Python 对象表示的惯例,即 `<type(name=value, ...)>` 的格式。此外,虽然这个方法主要用于调试和开发,但它也可以被用于日志记录或其他需要对象字符串表示的场景。
**输出示例**: 假设有一个消息对象,其属性值如下:`id=1`, `conversation_id=2`, `chat_type='group'`, `query='天气如何'`, `response='晴朗'`, `meta_data='{}'`, `feedback_score=5`, `feedback_reason='准确'`, `create_time='2023-04-01 12:00:00'`。调用此对象的 `__repr__` 方法将返回以下字符串:
```
<message(id='1', conversation_id='2', chat_type='group', query='天气如何', response='晴朗',meta_data='{}',feedback_score='5',feedback_reason='准确', create_time='2023-04-01 12:00:00')>
```
***