MCPcopy Create free account
hub / github.com/astercloud/aster / generateContext

Method generateContext

pkg/knowledge/rag.go:494–534  ·  view source on GitHub ↗

generateContext 生成上下文

(_ context.Context, items []*RetrievalItem, _ string)

Source from the content-addressed store, hash-verified

492
493// generateContext 生成上下文
494func (r *RAG) generateContext(_ context.Context, items []*RetrievalItem, _ string) (string, []*KnowledgeItem, error) {
495 var contextItems []*KnowledgeItem
496 var contextParts []string
497
498 switch r.config.ContextStrategy {
499 case ContextStrategyAll:
500 for _, item := range items {
501 contextItems = append(contextItems, item.Item)
502 contextParts = append(contextParts, r.formatContextItem(item.Item))
503 }
504
505 case ContextStrategyTopK:
506 topK := min(len(items), 5)
507 for i := range topK {
508 contextItems = append(contextItems, items[i].Item)
509 contextParts = append(contextParts, r.formatContextItem(items[i].Item))
510 }
511
512 case ContextStrategyDiverse:
513 contextItems = r.selectDiverseItems(items, 5)
514 for _, item := range contextItems {
515 contextParts = append(contextParts, r.formatContextItem(item))
516 }
517
518 case ContextStrategyChain:
519 // TODO: 实现推理链生成
520 for _, item := range items {
521 contextItems = append(contextItems, item.Item)
522 contextParts = append(contextParts, r.formatContextItem(item.Item))
523 }
524 }
525
526 context := strings.Join(contextParts, "\n\n")
527
528 // 上下文压缩
529 if r.config.ContextCompression && len(context) > r.config.MaxContextLength {
530 context = r.compressContext(context)
531 }
532
533 return context, contextItems, nil
534}
535
536// selectDiverseItems 选择多样化的项目
537func (r *RAG) selectDiverseItems(items []*RetrievalItem, maxCount int) []*KnowledgeItem {

Callers 2

RetrieveMethod · 0.95
RetrieveMultiHopMethod · 0.95

Calls 5

formatContextItemMethod · 0.95
selectDiverseItemsMethod · 0.95
compressContextMethod · 0.95
minFunction · 0.50
JoinMethod · 0.45

Tested by

no test coverage detected