ai-agent-book 精选快照(<2MB 代码与文档,来自 github.com/bojieli/ai-agent-book)
Build latest book artifacts / build (push) Canceled after 0s
dependency resolution / resolve (3.11) (push) Canceled after 0s
dependency resolution / resolve (3.13) (push) Canceled after 0s
deploy-pages / build (push) Canceled after 0s
deploy-pages / deploy (push) Canceled after 0s
i18n consistency check / check (push) Canceled after 0s
provider adoption tests / test (chapter2/context-compression) (push) Canceled after 0s
provider adoption tests / test (chapter2/prompt-injection) (push) Canceled after 0s
provider adoption tests / test (chapter2/system-hint) (push) Canceled after 0s
provider adoption tests / test (chapter3/log-sanitization) (push) Canceled after 0s
web-search-agent tests / test (push) Canceled after 0s
web-search-agent tests / agentbook (push) Canceled after 0s

This commit is contained in:
2026-08-20 13:12:50 +00:00
commit b119135836
10275 changed files with 3284984 additions and 0 deletions
+70
View File
@@ -0,0 +1,70 @@
"""Configuration for the retrieval pipeline."""
import os
from dataclasses import dataclass, field
from enum import Enum
from typing import Optional
class SearchMode(str, Enum):
"""Search mode for retrieval."""
DENSE = "dense"
SPARSE = "sparse"
HYBRID = "hybrid" # Both dense and sparse
@dataclass
class ServiceConfig:
"""Configuration for external services."""
dense_service_url: str = "http://localhost:4240" # Port 4240 for dense service
sparse_service_url: str = "http://localhost:4241" # Port 4241 for sparse service
@classmethod
def from_env(cls):
"""Create config from environment variables."""
dense_url = os.getenv("DENSE_SERVICE_URL", "http://localhost:4240")
sparse_url = os.getenv("SPARSE_SERVICE_URL", "http://localhost:4241")
return cls(dense_service_url=dense_url, sparse_service_url=sparse_url)
@dataclass
class RerankerConfig:
"""Configuration for the reranker model."""
model_name: str = "BAAI/bge-reranker-v2-m3"
device: str = "mps" # Use MPS for Mac M1/M2
batch_size: int = 32
max_length: int = 8192 # Increased to match HARD_LIMIT in chunking
use_fp16: bool = True # Use half precision for faster inference on Mac
@dataclass
class PipelineConfig:
"""Configuration for the retrieval pipeline."""
services: ServiceConfig = field(default_factory=ServiceConfig)
reranker: RerankerConfig = field(default_factory=RerankerConfig)
# Retrieval settings
default_top_k: int = 20 # Number of candidates to retrieve from each service
rerank_top_k: int = 10 # Number of results after reranking
# Fusion settings (see fusion.py)
# "rrf": Reciprocal Rank Fusion (rank-only, robust); "weighted": weighted
# min-max normalized score fusion; "avg_rank": legacy average-rank ordering.
fusion_method: str = "rrf"
rrf_k: int = 60 # RRF smoothing constant
# Logging
debug: bool = True
show_scores: bool = True # Show all scores in response for educational purposes
# Server settings
host: str = "0.0.0.0"
port: int = 4242 # Default port for retrieval pipeline
@classmethod
def from_env(cls):
"""Create config from environment variables."""
config = cls()
if os.getenv("PIPELINE_PORT"):
config.port = int(os.getenv("PIPELINE_PORT"))
if os.getenv("PIPELINE_HOST"):
config.host = os.getenv("PIPELINE_HOST")
if os.getenv("DEBUG"):
config.debug = os.getenv("DEBUG").lower() == "true"
return config