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

Method RetrieveMultiHop

pkg/knowledge/rag.go:189–240  ·  view source on GitHub ↗

RetrieveMultiHop 多跳检索

(ctx context.Context, query string, maxHops int)

Source from the content-addressed store, hash-verified

187
188// RetrieveMultiHop 多跳检索
189func (r *RAG) RetrieveMultiHop(ctx context.Context, query string, maxHops int) (*RAGResult, error) {
190 if !r.config.EnableMultiHop {
191 return r.Retrieve(ctx, query)
192 }
193
194 if maxHops <= 0 {
195 maxHops = r.config.MaxHops
196 }
197
198 var allItems []*RetrievalItem
199 var allContextItems []*KnowledgeItem
200 var expandedQuery = query
201
202 for range maxHops {
203 result, err := r.Retrieve(ctx, expandedQuery, WithMaxResults(r.config.MaxRetrievalResults/2))
204 if err != nil {
205 break
206 }
207
208 if len(result.Results) == 0 {
209 break
210 }
211
212 // 添加到总结果
213 allItems = append(allItems, result.Results...)
214 allContextItems = append(allContextItems, result.ContextItems...)
215
216 // 使用top结果扩展查询
217 if len(result.Results) > 0 {
218 expandedQuery = r.expandQuery(expandedQuery, result.Results[0].Item)
219 }
220 }
221
222 // 去重和重新排序
223 allItems = r.deduplicate(allItems)
224 allItems = r.rerank(ctx, query, allItems)
225 if len(allItems) > r.config.MaxRetrievalResults {
226 allItems = allItems[:r.config.MaxRetrievalResults]
227 }
228
229 context, _, _ := r.generateContext(ctx, allItems, query)
230
231 return &RAGResult{
232 Query: query,
233 Results: allItems,
234 EnhancedQuery: expandedQuery,
235 Context: context,
236 ContextItems: allContextItems,
237 Confidence: r.calculateConfidence(allItems),
238 TotalTime: time.Since(time.Now()),
239 }, nil
240}
241
242// RAGOption RAG选项
243type RAGOption func(*RAGOptions)

Callers

nothing calls this directly

Calls 7

RetrieveMethod · 0.95
expandQueryMethod · 0.95
deduplicateMethod · 0.95
rerankMethod · 0.95
generateContextMethod · 0.95
calculateConfidenceMethod · 0.95
WithMaxResultsFunction · 0.85

Tested by

no test coverage detected