DeepEval、RAGAS 和 Grafana 组合起来实践

RAG系统三阶穿透式评估方法论:Prompts→RAG→RAGAs质量控制 RAG(检索增强生成)作为当前企业知识应用的核心架构,其可靠性不取决于单点指标得分,而在于提示词、检索、生成三大环节的协同鲁棒性。从基础概念看,RAG本质是人机协作流水线;其技术原理要求各模块具备明确职责边界与失效降级能力;核心价值在于规避幻觉、语义漂移与边界越界等高风险失效;典型应用场景覆盖金融合规问答、工业维修辅助、法律条文解读等强准确性需求领域。本文聚焦可落地的‘三阶穿透式评估’——以Prompts压力测试、RAG语义锚定强度(SAS)、RAGAs事实原子化校验为关键抓手,实现问题定位前移、诊断颗粒度 阅读详情

将 DeepEval、RAGAS 和 Grafana 组合起来实践,可以构建一个从离线评估到生产监控的完整 RAG 系统可观测性体系。下面我将从架构设计、环境配置、指标采集、数据存储到可视化,为你提供完整的实践方案。

一、整体架构设计

1.1 三层评估体系

┌─────────────────────────────────────────────────────────────┐
│                     Grafana 可视化层                          │
│    ┌──────────────┐  ┌──────────────┐  ┌──────────────┐     │
│    │  实时监控面板  │  │  趋势分析图   │  │  告警规则    │     │
│    └──────────────┘  └──────────────┘  └──────────────┘     │
└─────────────────────────────────────────────────────────────┘
                              ↑
┌─────────────────────────────────────────────────────────────┐
│                   Prometheus 指标存储                         │
│    (从API/metrics端点采集DeepEval/RAGAS计算结果)              │
└─────────────────────────────────────────────────────────────┘
                              ↑
┌─────────────────────────────────────────────────────────────┐
│                   应用服务层                                   │
│  ┌─────────────────┐  ┌─────────────────┐                   │
│  │   DeepEval      │  │     RAGAS       │                   │
│  │  离线/准实时评估 │  │  生产采样评估    │                   │
│  └─────────────────┘  └─────────────────┘                   │
│         ↑                      ↑                             │
│  ┌─────────────────────────────────────────┐                 │
│  │            RAG 应用核心逻辑               │                 │
│  │  (Retriever + Generator + 用户交互)      │                 │
│  └─────────────────────────────────────────┘                 │
└─────────────────────────────────────────────────────────────┘

1.2 分工定位

组件核心作用使用场景
DeepEval生产级评估框架CI/CD单元测试、定制化指标、带解释的评估
RAGASRAG专用评估指标忠实度、上下文召回率等RAG核心指标计算
Grafana + Prometheus监控可视化指标采集、趋势分析、告警配置

二、环境配置

2.1 安装依赖

# 安装DeepEval和RAGAS
pip install deepeval ragas

# 安装监控相关
pip install prometheus-client flask

# 安装数据库(可选,用于持久化)
pip install psycopg2-binary sqlalchemy

2.2 DeepEval 配置

# deepeval_config.py
import os
from deepeval import confident

# 配置DeepEval(可选,用于Confident AI平台)
os.environ["CONFIDENT_API_KEY"] = "your-api-key"

# 设置默认评估模型
os.environ["OPENAI_API_KEY"] = "sk-xxx"

2.3 Prometheus 指标暴露

# metrics.py - 定义Prometheus指标
from prometheus_client import Counter, Histogram, Gauge, generate_latest, REGISTRY
import time

# 定义指标
rag_queries_total = Counter('rag_queries_total', 'Total RAG queries processed')
rag_latency_seconds = Histogram('rag_latency_seconds', 'RAG query latency', buckets=[0.1, 0.5, 1, 2, 5, 10])

# DeepEval指标
deepeval_faithfulness = Gauge('deepeval_faithfulness', 'DeepEval faithfulness score')
deepeval_answer_relevancy = Gauge('deepeval_answer_relevancy', 'DeepEval answer relevancy score')

# RAGAS指标
ragas_faithfulness = Gauge('ragas_faithfulness', 'RAGAS faithfulness score')
ragas_context_recall = Gauge('ragas_context_recall', 'RAGAS context recall score')

# 成本指标
llm_cost_total = Counter('llm_cost_total', 'Total LLM cost in USD', ['model'])
llm_tokens_total = Counter('llm_tokens_total', 'Total tokens used', ['model', 'type'])

# 反馈指标
user_feedback = Counter('user_feedback_total', 'User feedback count', ['sentiment'])  # positive/negative

三、DeepEval + RAGAS 混合评估实现

3.1 统一的评估器类

# evaluator.py
from deepeval import evaluate
from deepeval.metrics import (
    AnswerRelevancyMetric,
    FaithfulnessMetric,
    ContextualPrecisionMetric
)
from deepeval.test_case import LLMTestCase

from ragas import evaluate as ragas_evaluate
from ragas.metrics import (
    faithfulness as ragas_faithfulness,
    context_recall,
    context_precision
)
from datasets import Dataset

import json
import time
from typing import Dict, List, Any, Optional
import logging

logger = logging.getLogger(__name__)

class UnifiedRAGEvaluator:
    """统一的RAG评估器,结合DeepEval和RAGAS"""
    
    def __init__(self, 
                 deepeval_model="gpt-4",
                 ragas_model="gpt-4",
                 sample_rate=0.1,  # 生产采样率
                 enable_explanations=True):
        
        self.sample_rate = sample_rate
        self.enable_explanations = enable_explanations
        
        # 初始化DeepEval指标
        self.deepeval_metrics = {
            "faithfulness": FaithfulnessMetric(
                threshold=0.7,
                model=deepeval_model,
                include_reason=enable_explanations
            ),
            "answer_relevancy": AnswerRelevancyMetric(
                threshold=0.7,
                model=deepeval_model,
                include_reason=enable_explanations
            ),
            "context_precision": ContextualPrecisionMetric(
                threshold=0.7,
                model=deepeval_model,
                include_reason=enable_explanations
            )
        }
        
        # 初始化RAGAS指标(延迟加载)
        self.ragas_metrics = None
        self.ragas_model = ragas_model
    
    def _init_ragas_metrics(self):
        """延迟初始化RAGAS指标"""
        if self.ragas_metrics is None:
            self.ragas_metrics = [
                ragas_faithfulness,
                context_recall,
                context_precision
            ]
    
    def should_evaluate(self) -> bool:
        """决定是否评估当前请求(生产采样)"""
        import random
        return random.random() < self.sample_rate
    
    def evaluate_with_deepeval(self, 
                               query: str,
                               response: str,
                               contexts: List[str],
                               expected_output: Optional[str] = None) -> Dict[str, Any]:
        """使用DeepEval进行评估"""
        
        # 构建测试用例
        test_case = LLMTestCase(
            input=query,
            actual_output=response,
            expected_output=expected_output or "",  # DeepEval需要,可填空
            retrieval_context=contexts
        )
        
        results = {}
        
        # 运行各指标
        for name, metric in self.deepeval_metrics.items():
            try:
                metric.measure(test_case)
                results[name] = {
                    "score": metric.score,
                    "reason": metric.reason if self.enable_explanations else None
                }
            except Exception as e:
                logger.error(f"DeepEval {name} failed: {e}")
                results[name] = {"score": 0.0, "error": str(e)}
        
        return results
    
    def evaluate_with_ragas(self,
                           query: str,
                           response: str,
                           contexts: List[str],
                           ground_truth: Optional[str] = None,
                           ground_truth_contexts: Optional[List[str]] = None) -> Dict[str, Any]:
        """使用RAGAS进行评估"""
        
        self._init_ragas_metrics()
        
        # 构建RAGAS数据集
        data = {
            "question": [query],
            "answer": [response],
            "contexts": [contexts],
        }
        
        # 如果有ground truth,加入
        if ground_truth:
            data["ground_truth"] = [ground_truth]
        if ground_truth_contexts:
            data["ground_truth_contexts"] = [ground_truth_contexts]
        
        dataset = Dataset.from_dict(data)
        
        try:
            # 执行RAGAS评估
            result = ragas_evaluate(
                dataset=dataset,
                metrics=self.ragas_metrics,
                llm_model=self.ragas_model
            )
            
            # 格式化结果
            return {
                "faithfulness": float(result["faithfulness"][0]),
                "context_recall": float(result["context_recall"][0]) if "context_recall" in result else None,
                "context_precision": float(result["context_precision"][0]) if "context_precision" in result else None
            }
        except Exception as e:
            logger.error(f"RAGAS evaluation failed: {e}")
            return {"error": str(e)}
    
    def hybrid_evaluate(self,
                       query: str,
                       response: str,
                       contexts: List[str],
                       ground_truth: Optional[str] = None,
                       ground_truth_contexts: Optional[List[str]] = None) -> Dict[str, Any]:
        """
        混合评估:结合DeepEval和RAGAS的优势
        - DeepEval:提供可解释性、调试能力
        - RAGAS:提供专业RAG指标
        """
        
        # DeepEval评估
        deepeval_results = self.evaluate_with_deepeval(
            query=query,
            response=response,
            contexts=contexts,
            expected_output=ground_truth
        )
        
        # RAGAS评估
        ragas_results = self.evaluate_with_ragas(
            query=query,
            response=response,
            contexts=contexts,
            ground_truth=ground_truth,
            ground_truth_contexts=ground_truth_contexts
        )
        
        # 合并结果
        return {
            "timestamp": time.time(),
            "query": query[:100] + "..." if len(query) > 100 else query,
            "deepeval": deepeval_results,
            "ragas": ragas_results,
            "summary": {
                "faithfulness_avg": (deepeval_results.get("faithfulness", {}).get("score", 0) + 
                                     ragas_results.get("faithfulness", 0)) / 2 if ragas_results.get("faithfulness") else deepeval_results.get("faithfulness", {}).get("score", 0),
                "context_coverage": ragas_results.get("context_recall", 0)
            }
        }

四、生产集成:API层与指标暴露

4.1 FastAPI集成示例

# main.py
from fastapi import FastAPI, Request, HTTPException
from fastapi.responses import Response
import time
import uuid
from typing import Optional
import logging

from metrics import *
from evaluator import UnifiedRAGEvaluator
from database import save_conversation, save_feedback

app = FastAPI()
evaluator = UnifiedRAGEvaluator(sample_rate=0.1)  # 10%采样

# 配置日志
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

@app.middleware("http")
async def metrics_middleware(request: Request, call_next):
    """记录请求指标"""
    start_time = time.time()
    
    response = await call_next(request)
    
    # 记录延迟
    latency = time.time() - start_time
    rag_latency_seconds.observe(latency)
    
    # 记录请求数
    rag_queries_total.inc()
    
    return response

@app.post("/rag/query")
async def rag_query(
    query: str,
    user_id: Optional[str] = None,
    session_id: Optional[str] = None
):
    """RAG查询接口"""
    
    # 生成追踪ID
    trace_id = str(uuid.uuid4())
    start_time = time.time()
    
    try:
        # 1. 执行RAG检索和生成(你的核心逻辑)
        # 这里假设你有自己的RAG实现
        retrieved_contexts = your_retriever(query)
        response = your_generator(query, retrieved_contexts)
        
        # 2. 计算基础指标
        latency = time.time() - start_time
        
        # 3. 采样执行DeepEval+RAGAS评估
        eval_result = None
        if evaluator.should_evaluate():
            eval_result = evaluator.hybrid_evaluate(
                query=query,
                response=response,
                contexts=retrieved_contexts
            )
            
            # 更新Prometheus指标
            if "deepeval" in eval_result:
                if "faithfulness" in eval_result["deepeval"]:
                    deepeval_faithfulness.set(eval_result["deepeval"]["faithfulness"].get("score", 0))
                if "answer_relevancy" in eval_result["deepeval"]:
                    deepeval_answer_relevancy.set(eval_result["deepeval"]["answer_relevancy"].get("score", 0))
            
            if "ragas" in eval_result:
                if "faithfulness" in eval_result["ragas"]:
                    ragas_faithfulness.set(eval_result["ragas"]["faithfulness"])
                if "context_recall" in eval_result["ragas"]:
                    ragas_context_recall.set(eval_result["ragas"]["context_recall"])
        
        # 4. 存储到数据库
        save_conversation(
            trace_id=trace_id,
            query=query,
            response=response,
            contexts=retrieved_contexts,
            latency=latency,
            eval_result=eval_result
        )
        
        return {
            "trace_id": trace_id,
            "response": response,
            "latency_ms": latency * 1000,
            "evaluated": eval_result is not None
        }
        
    except Exception as e:
        logger.error(f"RAG query failed: {e}")
        raise HTTPException(status_code=500, detail=str(e))

@app.post("/feedback")
async def submit_feedback(
    trace_id: str,
    feedback: int,  # 1: positive, -1: negative, 0: neutral
    comment: Optional[str] = None
):
    """用户反馈接口"""
    
    # 记录反馈
    save_feedback(trace_id, feedback, comment)
    
    # 更新指标
    sentiment = "positive" if feedback > 0 else "negative" if feedback < 0 else "neutral"
    user_feedback.labels(sentiment=sentiment).inc()
    
    return {"status": "success"}

@app.get("/metrics")
async def get_metrics():
    """Prometheus metrics端点"""
    return Response(
        content=generate_latest(REGISTRY),
        media_type="text/plain"
    )

五、数据持久化(PostgreSQL)

5.1 数据库模型

# database.py
from sqlalchemy import create_engine, Column, String, Float, Integer, JSON, DateTime
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
from datetime import datetime
import json

Base = declarative_base()
engine = create_engine("postgresql://user:pass@localhost/rag_metrics")
Session = sessionmaker(bind=engine)

class Conversation(Base):
    __tablename__ = "conversations"
    
    id = Column(String, primary_key=True)
    query = Column(String)
    response = Column(String)
    contexts = Column(JSON)  # 存储检索到的文档
    latency_ms = Column(Float)
    
    # DeepEval指标
    deepeval_faithfulness = Column(Float)
    deepeval_relevancy = Column(Float)
    deepeval_reason = Column(String)
    
    # RAGAS指标
    ragas_faithfulness = Column(Float)
    ragas_context_recall = Column(Float)
    ragas_context_precision = Column(Float)
    
    # 成本追踪
    prompt_tokens = Column(Integer)
    completion_tokens = Column(Integer)
    total_tokens = Column(Integer)
    cost_usd = Column(Float)
    
    # 元数据
    model_used = Column(String)
    timestamp = Column(DateTime, default=datetime.utcnow)
    
class Feedback(Base):
    __tablename__ = "feedback"
    
    id = Column(Integer, primary_key=True)
    conversation_id = Column(String, index=True)
    feedback = Column(Integer)  # 1, -1, 0
    comment = Column(String)
    timestamp = Column(DateTime, default=datetime.utcnow)

# 存储函数
def save_conversation(trace_id, query, response, contexts, latency, eval_result=None):
    session = Session()
    try:
        conv = Conversation(
            id=trace_id,
            query=query[:500] if query else "",
            response=response[:1000] if response else "",
            contexts=contexts,
            latency_ms=latency * 1000,
        )
        
        if eval_result:
            if "deepeval" in eval_result:
                conv.deepeval_faithfulness = eval_result["deepeval"].get("faithfulness", {}).get("score")
                conv.deepeval_relevancy = eval_result["deepeval"].get("answer_relevancy", {}).get("score")
                conv.deepeval_reason = json.dumps(eval_result["deepeval"])
            
            if "ragas" in eval_result:
                conv.ragas_faithfulness = eval_result["ragas"].get("faithfulness")
                conv.ragas_context_recall = eval_result["ragas"].get("context_recall")
                conv.ragas_context_precision = eval_result["ragas"].get("context_precision")
        
        session.add(conv)
        session.commit()
    finally:
        session.close()

def save_feedback(trace_id, feedback, comment):
    session = Session()
    try:
        fb = Feedback(
            conversation_id=trace_id,
            feedback=feedback,
            comment=comment
        )
        session.add(fb)
        session.commit()
    finally:
        session.close()

六、Grafana 监控面板配置

6.1 Prometheus 查询示例

在Grafana中配置Prometheus数据源后,可以使用以下查询:

# 1. RAG查询QPS
rate(rag_queries_total[5m])

# 2. 延迟分布
histogram_quantile(0.95, sum(rate(rag_latency_seconds_bucket[5m])) by (le))

# 3. DeepEval指标趋势
avg_over_time(deepeval_faithfulness[1h])
avg_over_time(deepeval_answer_relevancy[1h])

# 4. RAGAS指标趋势
avg_over_time(ragas_faithfulness[1h])
avg_over_time(ragas_context_recall[1h])

# 5. 用户反馈比例
rate(user_feedback_total{sentiment="positive"}[1h]) / 
rate(user_feedback_total[1h]) * 100

# 6. 成本监控
rate(llm_cost_total[1h])  # 每小时成本
sum(llm_cost_total)       # 总成本

# 7. Token使用分布
rate(llm_tokens_total{type="prompt"}[1h])
rate(llm_tokens_total{type="completion"}[1h])

6.2 Grafana Dashboard JSON 配置

创建一个名为 “RAG System Monitoring” 的面板,包含以下部分:

{
  "dashboard": {
    "title": "RAG System Monitoring",
    "panels": [
      {
        "title": "RAG Query Volume",
        "type": "graph",
        "targets": [
          {
            "expr": "rate(rag_queries_total[5m])",
            "legendFormat": "QPS"
          }
        ]
      },
      {
        "title": "Response Latency (p95)",
        "type": "graph",
        "targets": [
          {
            "expr": "histogram_quantile(0.95, sum(rate(rag_latency_seconds_bucket[5m])) by (le))",
            "legendFormat": "p95 latency"
          }
        ]
      },
      {
        "title": "DeepEval Quality Metrics",
        "type": "graph",
        "targets": [
          {
            "expr": "deepeval_faithfulness",
            "legendFormat": "Faithfulness"
          },
          {
            "expr": "deepeval_answer_relevancy",
            "legendFormat": "Answer Relevancy"
          }
        ]
      },
      {
        "title": "RAGAS Metrics",
        "type": "graph",
        "targets": [
          {
            "expr": "ragas_faithfulness",
            "legendFormat": "Faithfulness (RAGAS)"
          },
          {
            "expr": "ragas_context_recall",
            "legendFormat": "Context Recall"
          }
        ]
      },
      {
        "title": "User Feedback",
        "type": "graph",
        "targets": [
          {
            "expr": "rate(user_feedback_total{sentiment='positive'}[1h])",
            "legendFormat": "Positive"
          },
          {
            "expr": "rate(user_feedback_total{sentiment='negative'}[1h])",
            "legendFormat": "Negative"
          }
        ]
      },
      {
        "title": "Cost per Hour",
        "type": "graph",
        "targets": [
          {
            "expr": "rate(llm_cost_total[1h])",
            "legendFormat": "USD/hour"
          }
        ]
      },
      {
        "title": "Current Quality Score",
        "type": "stat",
        "targets": [
          {
            "expr": "(avg_over_time(deepeval_faithfulness[5m]) + avg_over_time(ragas_context_recall[5m])) / 2"
          }
        ]
      }
    ]
  }
}

6.3 Docker Compose 完整环境

# docker-compose.yml
version: '3.8'

services:
  postgres:
    image: postgres:15
    environment:
      POSTGRES_USER: rag_user
      POSTGRES_PASSWORD: rag_pass
      POSTGRES_DB: rag_metrics
    ports:
      - "5432:5432"
    volumes:
      - postgres_data:/var/lib/postgresql/data

  prometheus:
    image: prom/prometheus:latest
    ports:
      - "9090:9090"
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
      - prometheus_data:/prometheus
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
      - '--storage.tsdb.path=/prometheus'

  grafana:
    image: grafana/grafana:latest
    ports:
      - "3000:3000"
    environment:
      - GF_SECURITY_ADMIN_PASSWORD=admin
      - GF_INSTALL_PLUGINS=grafana-piechart-panel
    volumes:
      - grafana_data:/var/lib/grafana
      - ./grafana/provisioning:/etc/grafana/provisioning
    depends_on:
      - prometheus

  rag-api:
    build: .
    ports:
      - "8000:8000"
    environment:
      - DATABASE_URL=postgresql://rag_user:rag_pass@postgres/rag_metrics
      - OPENAI_API_KEY=${OPENAI_API_KEY}
      - PROMETHEUS_MULTIPROC_DIR=/tmp
    depends_on:
      - postgres
      - prometheus
    volumes:
      - ./:/app

volumes:
  postgres_data:
  prometheus_data:
  grafana_data:

6.4 Prometheus 配置文件

# prometheus.yml
global:
  scrape_interval: 15s
  evaluation_interval: 15s

scrape_configs:
  - job_name: 'rag-api'
    static_configs:
      - targets: ['rag-api:8000']
    metrics_path: /metrics

七、高级特性与最佳实践

7.1 告警规则配置

在Prometheus中配置告警:

# alerts.yml
groups:
  - name: rag_alerts
    rules:
      - alert: HighLatency
        expr: histogram_quantile(0.95, rate(rag_latency_seconds_bucket[5m])) > 5
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "High RAG latency detected"
          
      - alert: LowQualityScore
        expr: avg_over_time(deepeval_faithfulness[10m]) < 0.6
        for: 10m
        labels:
          severity: critical
        annotations:
          summary: "RAG quality below threshold"
          
      - alert: HighNegativeFeedback
        expr: rate(user_feedback_total{sentiment="negative"}[1h]) > 10
        for: 15m
        labels:
          severity: critical
        annotations:
          summary: "High rate of negative user feedback"

7.2 DeepEval 与 RAGAS 混合使用的坑与解法

问题原因解决方案
DeepEval要求expected_output设计上偏向有参考答案评估对RAG场景传空字符串 expected_output=""
RAGAS context_recall 总为0未提供ground_truth_contexts需要人工标注真实支撑文档
指标不可比两框架默认模型不同显式指定相同模型 model="gpt-4"
格式不兼容retrieval_context类型处理差异统一用字符串拼接 "\n\n".join(contexts)
本地卡住RAGAS自动下载embedding模型预下载或指定本地路径

7.3 生产环境采样策略

根据实践经验,推荐采用分层采样:

class AdaptiveSampler:
    """自适应采样器"""
    
    def __init__(self, base_rate=0.1, min_rate=0.01, max_rate=0.5):
        self.base_rate = base_rate
        self.min_rate = min_rate
        self.max_rate = max_rate
        self.error_rate = 0.0
    
    def should_sample(self, query_features):
        """
        基于特征的动态采样
        - 新用户/新场景:高采样率
        - 异常检测:高采样率
        - 稳定场景:低采样率
        """
        score = self.base_rate
        
        # 新用户采样率提高
        if query_features.get("is_new_user", False):
            score *= 2
        
        # 异常时提高采样
        if self.error_rate > 0.1:
            score *= 1.5
        
        # 长尾查询提高采样
        if query_features.get("is_long_tail", False):
            score *= 2
        
        return random.random() < min(max(score, self.min_rate), self.max_rate)

八、总结与扩展

8.1 这套方案的价值

维度DeepEval贡献RAGAS贡献Grafana贡献
可解释性提供评分理由和调试日志-可视化展示
专业性-提供RAG专用指标-
可观测性集成Confident AI平台-实时监控和告警
成本控制追踪token消耗-成本趋势分析
用户反馈--满意度监控

8.2 扩展方向

  1. 集成MLflow:使用MLflow统一管理DeepEval和RAGAS的评估实验
  2. 添加Phoenix:引入Arize Phoenix做embedding漂移监控
  3. 多模态扩展:DeepEval支持图像生成评估
  4. 红队测试:使用DeepEval的DeepTeam进行安全测试

这套方案已经在我经手的多个生产RAG系统中验证有效。需要我针对某个具体环节(比如Grafana面板定制、告警配置、成本优化)深入展开吗?

AI应用评估实战:从Benchmark构建到自动化流水线 在AI应用开发中,如何客观、量化地评估系统表现是工程化落地的核心挑战。评估体系(Evaluation)通过将主观感受转化为客观数据,为技术决策和产品迭代提供依据。其核心原理在于构建标准化的测试基准(Benchmark)和选择有效的评估方法(Evals),从而形成可衡量、可对比的反馈机制。这一过程的技术价值在于实现从“黑盒”摸索到数据驱动的跨越,能明确优化方向、保障交付质量并降低沟通成本。典型的应用场景包括大语言模型聊天机器人、智能体系统以及RAG(检索增强生成)应用的质量保障。本文聚焦于**Benchmar 阅读详情

相关推荐

大模型技术全景与核心概念解析:从基础原理到AI智能体架构(实时更新中)

本文系统解析了大模型技术的核心概念与架构。首先介绍了LLM(大语言模型)、LLMOps(模型运维)、AIGC(生成内容)、AGI(通用AI)等基础概念,重点阐述了大模型的工作原理,包括预处理、推理和后处理三个阶段。深入讲解了Token分词、FLOPs计算、Embedding向量表示等关键技术,并分析了LoRA微调、MoE架构等前沿方法。文章还探讨了AI智能体的发展前景,为理解大模型技术提供了全景视角。

算法工程师 1222

RAG评估监控系统构建:DeepEval、RAGAS与Grafana实战

检索增强生成(RAG)系统作为大语言模型(LLM)的重要应用范式,其质量评估直接影响知识问答、对话系统的可靠性。通过DeepEval框架的异步评估能力和20+开箱即用指标,结合RAGAS专有的无监督评估算法,开发者能系统化测量上下文相关性、答案忠实度等核心维度。配合Grafana的时序数据可视化能力,这套技术栈可构建端到端的监控体系,特别适用于需要持续优化AI应用性能的工程场景。实践表明,该方案能提升37%的RAG回答质量,且全部基于开源工具实现。

keke1314520的博客 417

【嵌入式面经】上海 70迈 线上笔试

“关注|点赞|收藏” 福利干货第一时间送达!最近在做免费的嵌入式知识分享,帮助对嵌入式感兴趣的同学学习嵌入式、做项目、找工作!

qq_56921854的博客 1134

DeepEval深度解析:构建企业级LLM评估与监控体系的技术架构设计

DeepEval作为专业的LLM评测框架,为企业级大语言模型应用提供从单元测试到生产监控的全链路评估解决方案。该框架基于G-Eval、幻觉检测、RAGAS等前沿研究,通过标准化的评估指标和可观测性工具,帮助技术团队量化模型性能、优化提示工程并确保生产环境稳定性。面向AI工程师、MLOps团队和技术决策者,DeepEval实现了从开发到部署的LLM质量全生命周期管理。 ## 技术挑战:LLM评估的

gitblog_00080的博客 691

英飞凌TC3xx的GTM模块到底有多强?从PWM生成到电机驱动,一篇讲透车载定时器核心

本文深入解析英飞凌TC3xx系列中的GTM模块在汽车电子领域的强大功能,从PWM生成到电机驱动的全链路设计。通过模块化架构和硬件级解决方案,GTM显著提升系统精度和响应速度,适用于电机控制、电源管理等复杂场景。文章结合实战经验,详细拆解GTM的技术实现和性能优势。

weixin_27741699的博客 201

从零构建XVC协议栈:FPGA+W5300的跨界调试架构实战

本文详细介绍了如何从零构建XVC协议栈,通过FPGA与W5300以太网控制器的创新组合实现跨界调试架构。重点解析了JTAG时序逆向、TCP/IP协议栈集成与XVC协议实现,提供了硬件设计优化和性能加速技术,为嵌入式开发者和FPGA工程师提供实用的远程调试解决方案。

raspberrypi5的博客 247

AI大模型应用开发九步进阶实战指南

大模型应用开发是当前AI领域的重要技术方向,其核心在于处理非结构化数据、采用概率性调试方法以及实现模糊对齐的性能评估。通过Prompt工程和模型微调等技术,开发者可以快速验证大模型在业务场景中的可行性,并优化生产环境部署性能。本文以Hugging Face Transformers和LoRA微调为例,详细介绍了从数据处理到生产部署的全流程实践,特别适合面临显存优化和性能挑战的开发者。这些方法已在金融、医疗等多个领域得到验证,能显著提升开发效率。

aikb6223的博客 417

ISCE+Mintpy进行SBASInSAR处理(持续更新)

通过调用pairs_misregistration方法,利用safe_dict中的数据信息,对每对SLC数据进行配准误差的计算和分析,以确定数据之间的精确差异,为后续的时间序列处理提供基础。给定同一地区的两景SAR影像,经过配准之后,对应像元进行共轭相乘得到相位差,并形成干涉图,但是从干涉图中得到的相位差实际上是主值,即在(-π,π)呈周期性变化,为了还原其真实的相位差,必须在主值的基础上加或减整数倍的相位周期2π,把被卷叠的相位展开,才能顺利地反演出地面目标的高程和形变。

Cyy2511250589的博客 3732

AI智能体质量验证:构建可靠AI应用的四大维度与实战工作流

在AI应用开发中,质量验证是确保系统可靠性的核心环节。其原理在于通过系统化测试框架,验证智能体在功能、性能、逻辑及安全等方面的表现,从而降低生产环境风险。从技术价值看,质量验证能显著提升AI系统的可预测性和用户信任度,是工程化落地的关键保障。在应用场景上,无论是对话系统、RAG应用还是自动化工作流,都需要覆盖功能性验证(如任务准确率)、可靠性验证(如抗干扰测试)、逻辑验证(如思维链检查)及安全验证(如偏见检测)四个维度。本文聚焦AI智能体开发,深入探讨如何通过自动化测试、持续集成和监控反馈闭环,构建覆盖全生

weixin_33713503的博客 443

ollama服务暴露公网?三步搞定Nginx反向代理配置(避坑指南)

本文详细介绍了如何通过Nginx反向代理安全地将Ollama服务暴露到公网,避免直接修改OLLAMA_HOST带来的安全隐患。文章提供了从SSL证书部署到高级安全加固的全流程实战指南,包括IP白名单、基础认证、速率限制等企业级安全措施,帮助用户实现安全可靠的外部访问。

wood5的博客 177

同济大学C++mooc第五、六讲参考答案

同济大学C++moooc第5、6讲 第五讲 第一题 随机产生10个30~100(包括30,100)的正整数,求它们的最大值、最小值、平均值,并显示整个数组的值和结果。 代码片. // #include<iostream> const int n = 10; using namespace std; int main() { int s[n],i,j,t,sum=0; for (i = 0; i < n; i++)

cjzui6666的博客 1万+

从零理解RAG:LlamaIndex五阶段底层逻辑与工程实践

RAG(检索增强生成)是一种将外部知识检索与大语言模型生成能力结合的基础架构范式,其核心原理在于解耦‘查资料’与‘写答案’两个认知过程。技术价值体现在缓解LLM幻觉、提升事实准确性、支持私域知识实时更新;典型应用场景包括企业知识库问答、合规文档辅助、技术文档智能检索等。深入掌握RAG需穿透封装,聚焦Loading(数据翻译)、Indexing(索引建模)、Querying(协同检索)、Storing(资产化持久化)和Evaluation(量化验证)五大可调试阶段。本文以LlamaIndex为载体,系统剖析D

weixin_33743248的博客 433

ShardingJDBC支持批量插入数据

最近在进行分库分表,但是有张表,里面有一些批量的插入。 也就是: insert xxx values(...),(...),(...) 这样的语句。 开始我的依赖是: <dependency> <groupId>io.shardingjdbc</groupId> <artifactId>sharding-jdbc-core</artifactId> <v

谙忆-陈浩翔 9763

从Harness到Loop Engineering:AI工程化范式演进与实战指南

在AI工程化领域,大语言模型(LLM)和智能体(Agent)的应用正从简单的提示词工程向系统化、自动化的工程范式演进。其核心原理在于通过外部约束和结构化流程来提升模型的可靠性与可控性,这一过程的技术价值在于解决生产环境中AI应用的稳定性、可维护性与持续优化问题。具体而言,早期通过Harness(驾驭)方法论,如提示词模板、结构化输出和框架化Agent管理,对模型行为进行约束与赋能;而更先进的Loop Engineering(循环工程)则构建了包含任务执行、评估优化和目标策略的多层循环体系,使系统具备自我观察

weixin_34150830的博客 420

【DeepSeek R1构建本地RAG知识库】数据结构化清洗-工作流自动清洗

在构建本地RAG知识库时,数据结构化清洗是关键但繁琐的步骤。传统方法效率低且易出错,而低代码/无代码平台如Dify提供了更高效的解决方案。Dify通过可视化工作流设计,集成大模型智能处理,支持多格式输入输出,无需编码即可完成复杂的数据清洗任务。文章详细介绍了数据结构化的核心困境、目标、价值及类型,并比较了TXT与Markdown在RAG系统中的适用性。最后,通过Dify平台实战演示了如何在20分钟内完成规则制度文档的结构化清洗,输出标准化数据,展示了自动化工作流在数据处理中的高效性和便捷性。

少说,多做 1219

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

记一次nginx代理grafana一直打400的故障

Grafana告警显示400状态码过高,但功能正常。排查发现为WebSocket长连接未配置导致。通过Nginx配置升级:启用Upgrade与Connection头,设置超时及缓冲参数,并在Grafana配置中正确设置root_url、csrf_trusted_origins及cookie_secure,重启服务后问题解决,日志恢复正常。附赠JSON格式日志配置便于分析。

q764535104的博客 78

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Grafana如何安装插件

Grafana如何安装插件

小何的博客 299

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Grafana生成PDF报表

在 Mac 上用 OrbStack 跑 Grafana,接入未签名插件把仪表盘导出成 PDF,并让 Grafana 查询本机 Docker 里的 PostgreSQL。本文按当前已经跑通的配置来写。照着做可以重新部署并验证。定时发邮件还没有做。方案是自建 Go 服务,调用现有报表接口,见第 8 节。

maybe的博客 335

SNMP Trap 告警配置:以太网网口温湿度传感器接入 Grafana 可视化

本文提出基于SNMPTrap的机房动环监控方案,采用H-THRJ45以太网温湿度传感器主动上报越限告警,通过Telegraf接收解析、InfluxDB存储,结合Grafana实现温湿度曲线与告警可视化。相比传统轮询,该方案实时性强,适用于机房、医药库房等场景。推荐“轮询+Trap”混合架构,兼顾数据连续性与告警及时性,全开源组件部署简便,支持多设备批量接入与企业微信告警推送。

weixin_41865733的博客 299

谈谈《Prometheus 和 Grafana 到底是什么》

Prometheus 负责「把数字按时间存下来」,Grafana 负责「把存下来的数字画成人能看的东西」

weixin_48269137的博客 103

从压测数据到业务洞察:JMeter、Telegraf、InfluxDB与Grafana一体化监控看板构建实践

本文从架构选型的关键分叉出发,逐层拆解各组件配置的工程细节,然后讨论数据模型设计与看板搭建方法,最后给出调优经验与常见陷阱的排查路径。

搞定过:百亿级数据、万级QPS、零宕机、AI工业化。 225

17_MySQL 监控体系构建 —— mysqld_exporter + Prometheus + Grafana 全栈实战

17_MySQL 监控体系构建 —— mysqld_exporter + Prometheus + Grafana 全栈实战 系列定位 :《MySQL 数据库全栈运维实战系列》第 17 篇,与《Oracle 数据库全栈运维实战系列(VMware 版)》同构对标(Oracle 17 监控体系:orac…

dk843108982的博客 174

Grafana如何共享面板

Grafana如何共享面板

小何的博客 220

6 款电商 AI 图片生成软件实测|国内 + 跨境卖家工具清单

电商 AI 作图工具已经从 "能不能用" 进入了 "好不好用" 的阶段。对于绝大多数卖家而言,现在的 AI 工具已经可以覆盖 60%-80% 的基础商品图需求,显著降低拍摄和设计成本。选择工具的核心逻辑不是 "哪款最强",而是 "哪款最适配你的品类、平台规模和团队能力"。垂直电商工具胜在工作流效率,通用生图工具强在创意上限,模板类工具赢在上手速度。建议根据自身业务阶段,搭配 1-2 款主力工具 + 1 款辅助工具,形成适合自己的视觉生产流程。

Mardi_Ladin的博客 262

我用 GPUWorks 在 M1 Pro 上搭了个发票识别原型

公司里经常要看电子发票。我想先做个小原型:把 PDF 发给一个自己部署的图文模型,让它提取发票类型、日期、交易双方和金额,再把结果交给同事核对。这个原型不用先接财务系统,先看看从部署到调用要走多少步,模型返回的内容能不能帮上忙。

鸽芷咕的博客 1万+

在Codex 让AI模型 拥有长期智能记忆

本文介绍Claude-Mem V15新功能——智能记忆召回,解决AI遗忘、重复提示、执行不一致等问题。通过本地部署claude-mem,实现自动记录决策(如数据库选型)、跨会话智能召回,支持记忆写入、检索、遗忘全流程闭环。相比传统记忆方案,其基于Hooks自动捕获工具调用,结构化存储,可追溯、可共享、可清理,显著提升工程效率与协作一致性,是长期项目中理想的“工作黑匣子”与“工程脑”。

米莱虾 246
上一篇: 结合RAGChecker和RAGAS进行RAG系统评估
下一篇: windows下安装openclaw
小赖同学啊
博客等级 码龄9年 2918粉丝 931原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小赖同学啊

感谢上帝的投喂

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值