功能描述
为这个类添加一个可选的id参数,可以传入或者默认设置:
'''
class ChatMessage(BaseModel):
"""聊天消息."""
role: MessageRole = MessageRole.USER
content: Optional[Any] = ""
additional_kwargs: dict = Field(default_factory=dict)
def __str__(self) -> str:
return f"{self.role.value}: {self.content}"
@classmethod
def from_str(
cls,
content: str,
role: Union[MessageRole, str] = MessageRole.USER,
**kwargs: Any,
) -> "ChatMessage":
if isinstance(role, str):
role = MessageRole(role)
return cls(role=role, content=content, **kwargs)
def _recursive_serialization(self, value: Any) -> Any:
if isinstance(value, (V1BaseModel, V2BaseModel)):
return value.dict()
if isinstance(value, dict):
return {
key: self._recursive_serialization(value)
for key, value in value.items()
}
if isinstance(value, list):
return [self._recursive_serialization(item) for item in value]
return value
def dict(self, **kwargs: Any) -> dict:
# ensure all additional_kwargs are serializable
msg = super().dict(**kwargs)
for key, value in msg.get("additional_kwargs", {}).items():
value = self._recursive_serialization(value)
if not isinstance(value, (str, int, float, bool, dict, list, type(None))):
raise ValueError(
f"Failed to serialize additional_kwargs value: {value}"
)
msg["additional_kwargs"][key] = value
return msg
'''
原因
这是为了使类用户能够从内存对象中获取特定消息并在它之后迭代该消息,同时丢弃所有其他消息。就像Claude、Openai和其他聊天机器人允许迭代一样。
功能价值
这对于允许各种提示迭代非常有用。
6条答案
按热度按时间d7v8vwbk1#
你能提供更多关于“允许各种提示交互”的细节吗?
ztmd8pv52#
尝试更深入地了解使用案例。
yuvru6vn3#
所以这里的用例是,我想能够编辑一个已经存在于我创建的llama-index内存对象中的消息。但是如果内存对象中的消息没有唯一引用,我不知道如何高效地做到这一点。如果我能传入一个id(我已经在我的数据库中存储了它),那么我可以从内存中获取它,并丢弃其后的所有消息(有点像分支)。虽然我也可以直接搜索内存中的所有用户消息,并检查它们是否等于我正在寻找的那个。
当我的一个用户问我是否可以编辑一个提示时,我对于如何实现它感到很矛盾。
tgabmvqs4#
如果你有绕过这个@logan-markewich的方法,我非常乐意采纳一个替代方案。
mw3dktmi5#
我认为这里的需求是双重的
ddrv8njm6#
是的,@logan-markewich。这些应该足够解决这个问题了。