feat:记忆&上下文管理
This commit is contained in:
@@ -3,15 +3,33 @@
|
||||
from datetime import datetime
|
||||
from typing import Annotated, Literal
|
||||
|
||||
from pydantic import BaseModel, StringConstraints
|
||||
from pydantic import BaseModel, Field, StringConstraints
|
||||
|
||||
from .base import NonBlankString
|
||||
from .base import JsonObject, NonBlankString
|
||||
|
||||
Title = Annotated[
|
||||
str, StringConstraints(strip_whitespace=True, min_length=1, max_length=100)
|
||||
]
|
||||
|
||||
|
||||
class TurnChange(BaseModel):
|
||||
"""本轮交付的一处修改,同一组件的多个动作合并成一条;记的是交付了,不是前端已执行"""
|
||||
|
||||
node_id: str # 画布写 "canvas"
|
||||
type: str # 组件类型,画布写 "canvas"
|
||||
title: str | None = None # 交付时画面上的名字或内容,删除的组件取原始大屏上的
|
||||
change: Literal["added", "modified", "deleted"]
|
||||
|
||||
|
||||
class TurnQuery(BaseModel):
|
||||
"""问答里成功执行的一次查询:只存 SQL 和结果的形状,不存结果"""
|
||||
|
||||
sql: str
|
||||
columns: list[str]
|
||||
rows: int # 返回的行数
|
||||
truncated: bool # 结果超过返回上限,只返回了一部分
|
||||
|
||||
|
||||
class Turn(BaseModel):
|
||||
"""一次任务对应一轮对话,同一个 thread_id 多次写入时覆盖同一轮"""
|
||||
|
||||
@@ -22,6 +40,11 @@ class Turn(BaseModel):
|
||||
outcome: Literal["completed", "waiting_for_input", "failed", "cancelled"]
|
||||
summary: str # 助手一侧的完整回复(回答、追问或失败说明),不截断;不代表前端已执行
|
||||
created_at: datetime
|
||||
# 轮次记录:由代码从运行结果推出,不经过模型;只有完成的轮次才有 changes、queries
|
||||
changes: list[TurnChange] = Field(default_factory=list) # 交付的修改
|
||||
queries: list[TurnQuery] = Field(default_factory=list) # 问答查询,按执行顺序
|
||||
# 本任务里追问过的问题和用户的回答(含选中的选项);恢复后整轮被覆盖,问答记在这里
|
||||
clarifications: list[JsonObject] = Field(default_factory=list)
|
||||
|
||||
|
||||
class ConversationCreate(BaseModel):
|
||||
|
||||
Reference in New Issue
Block a user