mirror of
https://gitcode.com/JianFeeeee/HomeAgent.git
synced 2026-10-04 00:03:59 +00:00
core: pass ReasoningContent to assistant messages in process.go
- process.go: attach resp.ReasoningContent when building assistant messages - deepseek.lua v2.1.0: remove last_reasoning closure hack; rely on core-provided reasoning_content in messages - openai.lua: strip reasoning_content from messages in transform_request (not supported by OpenAI API)
This commit is contained in:
@ -30,11 +30,28 @@ type Vectorizer interface {
|
||||
Vectorize(text string) vector.Vector
|
||||
}
|
||||
|
||||
// ExtractorConfig 三元组提取器配置
|
||||
type ExtractorConfig struct {
|
||||
FusionAlpha float64 // syntax_conf 权重,默认 0.4
|
||||
FusionBeta float64 // vector_conf 权重,默认 0.6
|
||||
FusionThreshold float64 // 最终阈值,默认 0.3
|
||||
}
|
||||
|
||||
// DefaultExtractorConfig 返回默认的提取器配置
|
||||
func DefaultExtractorConfig() ExtractorConfig {
|
||||
return ExtractorConfig{
|
||||
FusionAlpha: 0.4,
|
||||
FusionBeta: 0.6,
|
||||
FusionThreshold: 0.3,
|
||||
}
|
||||
}
|
||||
|
||||
// Extractor 三元组提取器
|
||||
type Extractor struct {
|
||||
parser Parser
|
||||
fallack Parser // 降级用 POS 模板解析器
|
||||
embedder Vectorizer // 可选:用于 TransE 语义验证
|
||||
fusionCfg ExtractorConfig
|
||||
}
|
||||
|
||||
// NewExtractor 创建提取器。
|
||||
@ -45,8 +62,9 @@ func NewExtractor(parser Parser) *Extractor {
|
||||
parser = defaultParser
|
||||
}
|
||||
return &Extractor{
|
||||
parser: parser,
|
||||
fallack: newFallbackParser(),
|
||||
parser: parser,
|
||||
fallack: newFallbackParser(),
|
||||
fusionCfg: DefaultExtractorConfig(),
|
||||
}
|
||||
}
|
||||
|
||||
@ -55,6 +73,21 @@ func (e *Extractor) SetEmbedder(ev Vectorizer) {
|
||||
e.embedder = ev
|
||||
}
|
||||
|
||||
// SetFusionWeights 设置三元组融合裁决的权重参数。
|
||||
// - alpha: syntax_conf 权重 (默认 0.4)
|
||||
// - beta: vector_conf 权重 (默认 0.6)
|
||||
// - threshold: 最终阈值 (默认 0.3)
|
||||
func (e *Extractor) SetFusionWeights(alpha, beta, threshold float64) {
|
||||
e.fusionCfg.FusionAlpha = alpha
|
||||
e.fusionCfg.FusionBeta = beta
|
||||
e.fusionCfg.FusionThreshold = threshold
|
||||
}
|
||||
|
||||
// FusionConfig 返回当前融合裁诀配置
|
||||
func (e *Extractor) FusionConfig() ExtractorConfig {
|
||||
return e.fusionCfg
|
||||
}
|
||||
|
||||
// Extract 从文本中提取三元组(完整四阶段流水线)
|
||||
// Phase 1: 句法解析(LTP 分词 → POS 标注 → 依存句法树)
|
||||
// Phase 2: 结构初筛(依存模板 / POS 模板 → 候选三元组 + syntax_conf)
|
||||
@ -104,7 +137,7 @@ func (e *Extractor) Extract(text string) *TripleSet {
|
||||
|
||||
// ——— Phase 4: 融合裁决 ———
|
||||
if len(triples) > 0 {
|
||||
triples = fuseTriples(triples)
|
||||
triples = fuseTriples(triples, e.fusionCfg)
|
||||
}
|
||||
|
||||
allTriples = append(allTriples, triples...)
|
||||
@ -140,37 +173,28 @@ func verifyTriples(triples []Triple, embedder Vectorizer) []Triple {
|
||||
|
||||
// ——— Phase 4: 融合裁决 ———
|
||||
|
||||
const (
|
||||
fusionAlpha = 0.4 // syntax_conf 权重
|
||||
fusionBeta = 0.6 // vector_conf 权重
|
||||
fusionThreshold = 0.3 // 最终阈值
|
||||
)
|
||||
|
||||
// fuseTriples 融合裁决:线性加权计算 final_score,截断阈值,降序输出
|
||||
// 输入:候选三元组(带 syntax_conf + vector_conf)
|
||||
// 处理:final_score = α * syntax_conf + β * vector_conf
|
||||
// 输出:通过阈值且降序排列的最终三元组
|
||||
func fuseTriples(triples []Triple) []Triple {
|
||||
func fuseTriples(triples []Triple, cfg ExtractorConfig) []Triple {
|
||||
if len(triples) == 0 {
|
||||
return triples
|
||||
}
|
||||
|
||||
// 计算 final_score 并更新 Score 字段
|
||||
for i := range triples {
|
||||
t := &triples[i]
|
||||
finalScore := fusionAlpha*t.Score + fusionBeta*t.VectorConf
|
||||
finalScore := cfg.FusionAlpha*t.Score + cfg.FusionBeta*t.VectorConf
|
||||
t.Score = finalScore
|
||||
}
|
||||
|
||||
// 截断低分项
|
||||
kept := make([]Triple, 0, len(triples))
|
||||
for _, t := range triples {
|
||||
if t.Score >= fusionThreshold {
|
||||
if t.Score >= cfg.FusionThreshold {
|
||||
kept = append(kept, t)
|
||||
}
|
||||
}
|
||||
|
||||
// 降序排列
|
||||
sort.Slice(kept, func(i, j int) bool {
|
||||
return kept[i].Score > kept[j].Score
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user