Documentation
¶
Overview ¶
Package llm 提供基于 LLM 的文本增强工具。
设计要点:
- 与 chunker 包同层,独立开发,最后在集成层使用
- 所有 LLM 调用统一使用 gochat 客户端
- 工具包括:
- Summarizer:为 Chunk 生成更语义化的 Title/Summary
- Refiller:从预分块文本中提取实体并回填 Nodes/Edges
- 构造函数返回 error,所有必传参数进行非空检查
- 日志使用 gorag/logging 接口,Logger 通过构造函数注入
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Config ¶
Config 是 Summarizer / Refiller 等 LLM 工具的通用配置。
设计要点:
- 与具体 LLM 客户端解耦,仅描述调用参数
- 调用方负责从环境变量、.rag 配置或 keychain 中读取真实密钥
- Timeout 为 0 时使用默认 10 分钟
type EntitySchema ¶
type EntitySchema struct {
Type string // 实体类型名,来自文件名
Description string // 实体说明,直接来自 JSON Schema 的 description 字段
Properties map[string]SchemaProperty // 属性定义,来自 JSON Schema 的 properties
Required []string // 必填属性列表,来自 JSON Schema 的 required
}
EntitySchema 定义 Refiller 要提取的实体类型。
设计要点:
- 完整解析外部 JSON Schema 文件的结构化信息,不丢弃任何约束定义
- Description 即 Prompt —— 直接来自 JSON Schema 的 description 字段,不做额外包装
- Properties 保留所有属性的类型、枚举值、格式等约束,用于生成精确的 LLM 提示词
- Type 将作为 core.Node.Labels[0]
func LoadEntitySchema ¶
func LoadEntitySchema(path string) (EntitySchema, error)
LoadEntitySchema 从单个 JSON Schema 文件创建 EntitySchema。
规则:
- Type 使用文件名(去除 .json 扩展名)
- Description 直接使用文件内的 description 字段,不做任何格式化包装
- Properties 完整解析为 SchemaProperty 结构(类型、描述、枚举值、格式、数组元素类型)
func LoadEntitySchemasFromDir ¶
func LoadEntitySchemasFromDir(dir string) ([]EntitySchema, error)
LoadEntitySchemasFromDir 扫描目录下所有 .json 文件并加载为 EntitySchema 列表。
规则:
- 仅加载直接子目录中的 .json 文件,不递归
- 加载失败单个文件时跳过并继续,最终汇总错误
- 空目录返回空列表
type Refiller ¶
type Refiller interface {
Refill(ctx context.Context, result chunker.ChunkResult, schemas []EntitySchema) (chunker.ChunkResult, error)
}
Refiller 将所有 Chunk 序列化为 JSON 数组,结合 Schema 让 LLM 提取实体和关系, 最后将结果以 Node/Edge 形式回填到 ChunkResult 中。
设计要点:
- 输入为 chunker.ChunkResult,输出为补充了 Nodes/Edges 的 ChunkResult
- 不删除或修改已有的 Nodes/Edges,仅做追加
- 提取出的实体 Node 的 SourceChunkIDs 为空(纯图实体)
- SourceDocIDs 从 result.Chunks 中收集到的 DocID 去重后填充
type SchemaProperty ¶
type SchemaProperty struct {
Type string `json:"type"`
Description string `json:"description"`
Enum []string `json:"enum,omitempty"`
Format string `json:"format,omitempty"`
Items *SchemaProperty `json:"items,omitempty"`
}
SchemaProperty 描述实体属性的类型约束。
直接对应 JSON Schema 的 property 定义,保留所有约束信息, 用于生成精确的 LLM 提示词。
type Summarizer ¶
type Summarizer interface {
Summarize(ctx context.Context, chunks []core.Chunk) ([]core.Chunk, error)
}
Summarizer 对文本型 Chunk 的 Title 和 Summary 进行 LLM 增强。
设计要点:
- 输入为 []core.Chunk,输出为增强后的 []core.Chunk(原地修改并返回)
- 每个 Chunk 独立调用 LLM,便于控制上下文和成本
- 仅当 LLM 返回合法 title/summary 时才覆盖原值
- 失败时记录日志并保留原 Chunk,不中断整个流程
func NewSummarizer ¶
func NewSummarizer(cfg Config, logger logging.Logger) (Summarizer, error)
NewSummarizer 创建基于 gochat 的 Summarizer。
必传参数:
- cfg: LLM 配置(APIKey/BaseURL/Model 必填)
- logger: 日志实例(禁止为 nil)
Click to show internal directories.
Click to hide internal directories.