133 lines
5.0 KiB
Markdown
133 lines
5.0 KiB
Markdown
|
|
# Documentation
|
|
- Class name: LLMServiceContextAdv
|
|
- Category: SALT/Language Toolkit/Context
|
|
- Output node: False
|
|
|
|
LLMServiceContextAdv节点旨在为语言模型操作创建一个高级服务上下文,整合各种配置和参数以满足特定需求。它能够对语言模型的行为进行微调,包括块大小、重叠度、上下文窗口和输出规格等,以优化复杂任务的性能。
|
|
|
|
# Input types
|
|
## Required
|
|
- llm_model
|
|
- 指定语言模型及其嵌入模型,作为创建服务上下文的基础。对于定义服务上下文中语言模型的行为和能力至关重要。
|
|
- Comfy dtype: LLM_MODEL
|
|
- Python dtype: Dict[str, Any]
|
|
## Optional
|
|
- llm_embed_model
|
|
- 确定与语言模型一起使用的嵌入模型,允许超出默认设置的自定义。
|
|
- Comfy dtype: LLM_EMBED
|
|
- Python dtype: str
|
|
- llm_node_parser
|
|
- 可选的语言模型节点解析器,为处理模型输出提供额外的灵活性。
|
|
- Comfy dtype: LLM_NODE_PARSER
|
|
- Python dtype: Optional[Any]
|
|
- enable_chunk_overlap
|
|
- 启用块重叠以确保模型输出的连续性和一致性,特别是在分段处理场景中。
|
|
- Comfy dtype: BOOLEAN
|
|
- Python dtype: bool
|
|
- chunk_overlap
|
|
- 指定块之间的重叠大小,增强模型在各段之间保持上下文的能力。
|
|
- Comfy dtype: INT
|
|
- Python dtype: int
|
|
- enable_context_window
|
|
- 激活上下文窗口以限制模型注意力的范围,将其分析和生成集中在指定范围内。
|
|
- Comfy dtype: BOOLEAN
|
|
- Python dtype: bool
|
|
- context_window
|
|
- 设置上下文窗口的大小,控制模型在每次操作中考虑的文本量。
|
|
- Comfy dtype: INT
|
|
- Python dtype: int
|
|
- enable_num_output
|
|
- 允许设置模型生成输出的数量限制,用于控制输出量和细节。
|
|
- Comfy dtype: BOOLEAN
|
|
- Python dtype: bool
|
|
- num_output
|
|
- 确定模型产生的最大输出数量,提供对模型详细程度的控制。
|
|
- Comfy dtype: INT
|
|
- Python dtype: int
|
|
- enable_chunk_size_limit
|
|
- 允许施加最大块大小限制,可能减少内存需求和处理时间。
|
|
- Comfy dtype: BOOLEAN
|
|
- Python dtype: bool
|
|
- chunk_size_limit
|
|
- 定义允许的最大块大小,确保处理需求保持在可管理的范围内。
|
|
- Comfy dtype: INT
|
|
- Python dtype: int
|
|
|
|
# Output types
|
|
- llm_context
|
|
- 创建的高级服务上下文,封装所有指定的配置和参数,以定制语言模型的操作。
|
|
- Comfy dtype: LLM_CONTEXT
|
|
- Python dtype: ServiceContext
|
|
|
|
|
|
## Usage tips
|
|
- Infra type: `CPU`
|
|
- Common nodes: unknown
|
|
|
|
|
|
## Source code
|
|
```python
|
|
class LLMServiceContextAdv:
|
|
@classmethod
|
|
def INPUT_TYPES(cls):
|
|
return {
|
|
"required": {
|
|
"llm_model": ("LLM_MODEL",),
|
|
},
|
|
"optional": {
|
|
"llm_embed_model": ("LLM_EMBED",),
|
|
"llm_node_parser": ("LLM_NODE_PARSER",),
|
|
"enable_chunk_overlap": ("BOOLEAN", {"default": True}),
|
|
"chunk_overlap": ("INT", {"default": 50, "min": 0, "max": 100}),
|
|
"enable_context_window": ("BOOLEAN", {"default": True}),
|
|
"context_window": ("INT", {"default": 4096, "min": 2048, "max": 8192}),
|
|
"enable_num_output": ("BOOLEAN", {"default": True}),
|
|
"num_output": ("INT", {"default": 256, "min": 64, "max": 1024}),
|
|
"enable_chunk_size_limit": ("BOOLEAN", {"default": True}),
|
|
"chunk_size_limit": ("INT", {"default": 1024, "min": 512, "max": 2048}),
|
|
},
|
|
}
|
|
|
|
RETURN_TYPES = ("LLM_CONTEXT",)
|
|
RETURN_NAMES = ("llm_context",)
|
|
|
|
FUNCTION = "context"
|
|
CATEGORY = f"{MENU_NAME}/{SUB_MENU_NAME}/Context"
|
|
|
|
def context(self,
|
|
llm_model:Dict[str, Any],
|
|
llm_embed_model="default",
|
|
llm_node_parser=None,
|
|
enable_chunk_size=True,
|
|
chunk_size=1024,
|
|
enable_chunk_overlap=True,
|
|
chunk_overlap=50,
|
|
enable_context_window=True,
|
|
context_window=4096,
|
|
enable_num_output=True,
|
|
num_output=256,
|
|
enable_chunk_size_limit=True,
|
|
chunk_size_limit=1024
|
|
):
|
|
prompt_helper = None
|
|
if enable_context_window and enable_num_output:
|
|
prompt_helper = PromptHelper(
|
|
context_window=context_window if enable_context_window else None,
|
|
num_output=num_output if enable_num_output else None,
|
|
chunk_overlap_ratio=(chunk_overlap / 100.0) if enable_chunk_overlap else None,
|
|
chunk_size_limit=chunk_size_limit if enable_chunk_size_limit else None,
|
|
)
|
|
|
|
service_context = ServiceContext.from_defaults(
|
|
llm=llm_model['llm'],
|
|
prompt_helper=prompt_helper,
|
|
embed_model=llm_embed_model if llm_embed_model != "default" else None,
|
|
node_parser=llm_node_parser,
|
|
chunk_size=chunk_size if enable_chunk_size else None,
|
|
chunk_overlap=chunk_overlap if enable_chunk_overlap else None,
|
|
)
|
|
return (service_context,)
|
|
|
|
```
|