llama_index **功能请求** :向ChatMessage对象添加一个可选的id参数,

eqzww0vc  于 2个月前  发布在  其他
关注(0)|答案(6)|浏览(37)

功能描述

为这个类添加一个可选的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和其他聊天机器人允许迭代一样。

功能价值

这对于允许各种提示迭代非常有用。

d7v8vwbk

d7v8vwbk1#

你能提供更多关于“允许各种提示交互”的细节吗?

ztmd8pv5

ztmd8pv52#

尝试更深入地了解使用案例。

yuvru6vn

yuvru6vn3#

所以这里的用例是,我想能够编辑一个已经存在于我创建的llama-index内存对象中的消息。但是如果内存对象中的消息没有唯一引用,我不知道如何高效地做到这一点。如果我能传入一个id(我已经在我的数据库中存储了它),那么我可以从内存中获取它,并丢弃其后的所有消息(有点像分支)。虽然我也可以直接搜索内存中的所有用户消息,并检查它们是否等于我正在寻找的那个。
当我的一个用户问我是否可以编辑一个提示时,我对于如何实现它感到很矛盾。

tgabmvqs

tgabmvqs4#

如果你有绕过这个@logan-markewich的方法,我非常乐意采纳一个替代方案。

mw3dktmi

mw3dktmi5#

我认为这里的需求是双重的

  1. 在消息中添加一个ID字段
  2. 在内存类中添加一个get_by_id()或类似的方法
ddrv8njm

ddrv8njm6#

是的,@logan-markewich。这些应该足够解决这个问题了。

相关问题