Source code for langchain_core.prompt_values
"""为语言模型提示设置提示值。
提示值用于表示提示的不同部分。
它们可以用于表示文本、图像或聊天消息片段。
"""
from __future__ import annotations
from abc import ABC, abstractmethod
from typing import List, Literal, Sequence, cast
from typing_extensions import TypedDict
from langchain_core.load.serializable import Serializable
from langchain_core.messages import (
AnyMessage,
BaseMessage,
HumanMessage,
get_buffer_string,
)
[docs]class PromptValue(Serializable, ABC):
"""用于任何语言模型输入的基础抽象类。
PromptValues 可以转换为 LLM(纯文本生成)输入和 ChatModel 输入。
"""
[docs] @classmethod
def is_lc_serializable(cls) -> bool:
"""返回此类是否可序列化。"""
return True
[docs] @classmethod
def get_lc_namespace(cls) -> List[str]:
"""获取langchain对象的命名空间。"""
return ["langchain", "schema", "prompt"]
[docs] @abstractmethod
def to_string(self) -> str:
"""将提示值作为字符串返回。"""
[docs] @abstractmethod
def to_messages(self) -> List[BaseMessage]:
"""将提示作为消息列表返回。"""
[docs]class StringPromptValue(PromptValue):
"""字符串提示值。"""
text: str
type: Literal["StringPromptValue"] = "StringPromptValue"
[docs] @classmethod
def get_lc_namespace(cls) -> List[str]:
"""获取langchain对象的命名空间。"""
return ["langchain", "prompts", "base"]
[docs] def to_string(self) -> str:
"""返回提示作为字符串。"""
return self.text
[docs] def to_messages(self) -> List[BaseMessage]:
"""将提示作为消息返回。"""
return [HumanMessage(content=self.text)]
[docs]class ChatPromptValue(PromptValue):
"""聊天提示值。
一种由消息构建的提示值类型。
"""
messages: Sequence[BaseMessage]
"""消息列表。"""
[docs] def to_string(self) -> str:
"""返回提示作为字符串。"""
return get_buffer_string(self.messages)
[docs] def to_messages(self) -> List[BaseMessage]:
"""将提示作为消息列表返回。"""
return list(self.messages)
[docs] @classmethod
def get_lc_namespace(cls) -> List[str]:
"""获取langchain对象的命名空间。"""
return ["langchain", "prompts", "chat"]
[docs]class ImageURL(TypedDict, total=False):
"""图像URL。"""
detail: Literal["auto", "low", "high"]
"""指定图像的细节级别。"""
url: str
"""图像的URL或base64编码的图像数据。"""
[docs]class ImagePromptValue(PromptValue):
"""图像提示值。"""
image_url: ImageURL
type: Literal["ImagePromptValue"] = "ImagePromptValue"
[docs] def to_string(self) -> str:
"""返回提示作为字符串。"""
return self.image_url["url"]
[docs] def to_messages(self) -> List[BaseMessage]:
"""将提示作为消息返回。"""
return [HumanMessage(content=[cast(dict, self.image_url)])]
[docs]class ChatPromptValueConcrete(ChatPromptValue):
"""用于明确列出其接受的消息类型的聊天提示值。用于外部模式。
"""
messages: Sequence[AnyMessage]
type: Literal["ChatPromptValueConcrete"] = "ChatPromptValueConcrete"
[docs] @classmethod
def get_lc_namespace(cls) -> List[str]:
"""获取langchain对象的命名空间。"""
return ["langchain", "prompts", "chat"]