2026年2月

自从赵大爷不演了就没再看过了

个人觉得表演没必要搞得多么宏大。有意思才值得看

不知道为啥他们不把春晚的直播权下放各省市。自己办自己的得了还能百家齐放 一起争鸣

公司因为关闭分公司要裁员,现在的说的是不同意就你就去起诉,
1.公司大概给 5.8 w(包含当月的社保),让月底走
2.不同意起诉的话能大概能得到是 8.25 w

应该起诉还是妥协,很纠结~

近日,百度智能云数据库宣布与MongoDB达成战略合作。双方将依托各自在云计算、人工智能和现代数据库领域的技术优势,构建更开放、更智能的企业级数据基础设施,加速中国企业AI原生数字化转型进程。此次合作,标志着双方在数据库技术应用与行业数字化转型领域的深度协同进入全新阶段。 

  根据战略合作协议,百度智能云数据库已正式上线MongoDB数据库产品及解决方案,重点聚焦车联网、内容理解、画像分析三大垂直领域,同时全面覆盖在线教育、金融、物联网、政企、泛互联网等行业,为客户提供灵活、高效、可扩展的数据存储与管理解决方案。

  • 在车联网领域,百度智能云MongoDB产品,助力车企和出行平台实时采集与存储海量车辆数据,构建精细的用户个性化配置,并利用故障诊断和位置管理能力,全面提升用户体验与运营效率。
  • 在内容平台领域,双方合作为音视频平台提供高效的内容与元数据管理能力,实现精准的个性化推荐,在保障视频安全存储的同时,确保内容快速分发,让优质内容触达每一位用户。
  • 在数字化营销领域,为电商平台、社交应用提供强大的用户画像分析引擎,通过深度分析学习行为和日志数据,实现千人千面的精准营销与服务优化。

百度智能云数据平台部总经理刘斌表示:“百度智能云拥有领先的全栈AI基础设施与广泛的行业覆盖,MongoDB在现代数据库领域具有深厚的技术沉淀。此次战略合作将为中国市场带来更具竞争力的DBaaS解决方案。我们将持续赋能企业数字化转型,打造从数据存储到智能应用的全链路服务能力。”
MongoDB 大中华区副总裁胡建基(Gabriel Woo)对此次合作充满期待:“百度智能云作为国内领先的智能云服务提供商,其技术实力与行业影响力毋庸置疑。这次五年期战略合作是双方深度互信的体现,更是对市场需求的精准响应。MongoDB的灵活文档模型与百度智能云的规模化云服务能力将深度结合,为企业提供更高效、更敏捷的数据工具,助力他们在快速变化的市场环境中保持领先。我们期待通过此次合作,让更多中国企业享受到前沿数据库技术带来的价值,共同推动行业创新发展。”

双方深厚的客户基础为合作奠定了坚实基础。百度智能云的服务网络覆盖超过65%的央企、800余家金融机构以及众多头部汽车、手机、新能源企业。MongoDB在华已服务众多行业领军企业,覆盖金融、汽车、互联网等多个关键领域。双方客户资源的高度互补与行业覆盖的深度交叉,将推动合作价值最大化,实现 “1+1>2”的协同效应。

在"云智一体"战略指引下,百度智能云数据库提供高性能、安全可靠的云端数据库服务,支持多种数据库类型,助力企业高效构建智能应用。云原生数据库GaiaDB基于存算分离架构,性能较MySQL提升百倍;向量数据库VectorDB向量检索QPS较开源方案领先7倍。

在权威认证方面,2024 年,向量数据库VectorDB获IDC向量数据库TOP 1评级;2025 年,百度智能云数据库通过中国信通院“可信数据库”首批向量数据库性能测试,成为国内首批达标产品。同年,百度智能云GaiaDB-X成为首轮测试即满足数据库政府采购标准的数据库产品之一。

目前,百度智能云数据库已服务金融、能源、汽车、互联网等众多关键行业。

面向未来,百度智能云数据库与MongoDB不仅将持续深化在车联网、内容平台、精准营销及泛互联网领域的合作,还计划在人工智能领域展开更广泛的协同,共同助力中国企业把握AI时代新机遇并创造新价值。

如需了解更多关于百度智能云的信息,欢迎访问网页https://cloud.baidu.com/
如需了解更多关于MongoDB的信息,欢迎访问网页 https://www.mongodb.com/zh-cn   

新朋友加入
现已支持 claude-opus-4-6gpt-5.3-codex,路过不妨试试看

来点见面礼
注册后,找群主( QQ:1409737395)或在本帖回个 ID ,就能领点试用额度

春节撒欢儿
最近充值有彩蛋,最高能加送 15% 额度

悄悄说
本站的 Claude Max 目前稍贵一丢丢,建议当作备用选择,主打一个“有需要时我在”

一键直达
注册链接: https://x-code.cc/register


小小中转站,随时恭候。

提前祝大家新年快乐,万事如意~~~

我此刻想到的是『不再等待, 迈出第一步』,感觉两个被动型人在一起真的痛苦。

我内心是一个期望被对方带动一下的,可能也只是自己的幻想,要是真的被人每天督促,可能也很痛苦。

但是我对象是更被动的一个,每天吃饭, 零食或者做事情就是单调重复,举个 🌰,我发现了一个好吃的饭,带她或者点外卖吃一次,接下来的一月乃至半年,她就会一直隔三差五点这个,不会去探索更好吃的,或者尝试别的。

直到下一次我发现一个,她只是多了一个选项。 其实我想的是有人带我发现,或者分享给我新的。 我虽然比较爱折腾,但是我感觉我骨子里还是喜欢被人带。

生活中类似的事情还有很多吧, 比如用软件,某个生活工具,日用品等等。

问过 AI,无解,只能发掘和继续 从“等别人做”转变为“我先做”
打破僵局:你先换上运动服,走到门口,即使对方不动,你也先跑出去十分钟。

当然她有个优点,就是教了愿意学的话就会学的很快, 但是感觉她不会去举一反三, 例如教了鸡蛋汤,她不会想着试一下番茄汤或者别的 🤪

所以今年就是督促自己做那个更主动的人,带动起来。

「如果你想要完成,就自己动手去做;如果不想,就让別人去做。」
------ 本杰明·富兰克林(Benjamin Franklin)

引言

在大语言模型(LLM)蓬勃发展的今天,如何让AI更准确地回答特定领域的问题成为了一个关键挑战。RAG(Retrieval-Augmented Generation,检索增强生成)技术应运而生,它通过结合外部知识库和生成模型,显著提升了AI回答的准确性和时效性。

本文将深入探讨RAG的核心原理,重点解析向量检索上下文注入两大关键技术,并提供实践指导。


一、RAG是什么?

1.1 核心思想

RAG的核心思想非常直观:在生成答案之前,先从知识库中检索相关信息,然后将这些信息作为上下文提供给大语言模型,让模型基于这些"参考资料"来生成更准确的回答。

这就像是让AI在开卷考试而不是闭卷考试——它可以查阅资料后再作答。

1.2 为什么需要RAG?

传统LLM面临几个关键问题:

  • 知识时效性:模型的知识截止于训练时间,无法获取最新信息
  • 幻觉问题:模型可能生成看似合理但实际错误的内容
  • 专业领域知识不足:通用模型对特定领域的深度知识有限
  • 成本问题:频繁微调大模型成本高昂

RAG通过外部知识检索优雅地解决了这些问题,无需重新训练模型。


二、向量检索:RAG的核心引擎

2.1 什么是向量检索?

向量检索是RAG系统的第一步,也是最关键的一步。它的任务是从海量文档中快速找出与用户问题最相关的内容。

文本向量化

文本向量化(Embedding)是将文本转换为高维向量的过程:

"什么是机器学习?" → [0.12, -0.34, 0.56, ..., 0.89]  # 维度通常为384-1536

向量的特点:

  • 语义相似的文本,向量距离更近
  • 向量可以进行数学运算(相似度计算)
  • 降维后可视化(理解语义空间)

常用的Embedding模型

  • OpenAI text-embedding-3-small/large:性能强大,支持多语言
  • sentence-transformers:开源方案,适合中文
  • BGE系列:国内优秀的开源模型
  • m3e:专门针对中文优化

2.2 向量检索的工作流程

用户问题 → Embedding模型 → 查询向量 → 向量数据库 → Top-K 相似文档

步骤详解:

  1. 文档预处理

    • 文档切片(Chunking):将长文档分割成适当大小的片段(通常300-1000 tokens)
    • 向量化:使用Embedding模型将每个片段转换为向量
    • 存储:将向量及元数据存入向量数据库
  2. 查询处理

    • 用户问题同样经过Embedding模型转换为查询向量
    • 在向量数据库中进行相似度搜索
    • 返回Top-K个最相关的文档片段

2.3 相似度计算方法

余弦相似度(最常用)

import numpy as np

def cosine_similarity(vec1, vec2):
    """计算两个向量的余弦相似度"""
    dot_product = np.dot(vec1, vec2)
    norm_product = np.linalg.norm(vec1) * np.linalg.norm(vec2)
    return dot_product / norm_product

# 示例
query_vec = np.array([0.5, 0.3, 0.8])
doc_vec = np.array([0.6, 0.2, 0.9])
similarity = cosine_similarity(query_vec, doc_vec)
print(f"相似度: {similarity:.3f}")  # 输出:0.989

优点:不受向量长度影响,只关注方向

欧氏距离

def euclidean_distance(vec1, vec2):
    """计算欧氏距离(距离越小越相似)"""
    return np.linalg.norm(vec1 - vec2)

点积

def dot_product_similarity(vec1, vec2):
    """点积相似度"""
    return np.dot(vec1, vec2)

2.4 向量数据库选择

数据库特点适用场景
Pinecone云服务,易用性强快速原型开发
Milvus开源,性能强大大规模生产环境
Weaviate支持多模态复杂查询需求
Chroma轻量级,易部署小型项目、本地开发
FAISSFacebook开源,速度快研究和实验

2.5 优化向量检索的技巧

技巧1:混合检索(Hybrid Search)

结合关键词检索和向量检索:

# 伪代码示例
def hybrid_search(query, alpha=0.5):
    # 向量检索得分
    vector_results = vector_search(query)
    
    # 关键词检索得分(BM25)
    keyword_results = bm25_search(query)
    
    # 加权融合
    final_scores = alpha * vector_results + (1-alpha) * keyword_results
    return top_k(final_scores)

技巧2:重排序(Reranking)

使用更强大的模型对初步检索结果重新排序:

def rerank(query, initial_results):
    """使用交叉编码器重排序"""
    cross_encoder = CrossEncoder('cross-encoder/ms-marco-MiniLM-L-6-v2')
    
    pairs = [(query, doc) for doc in initial_results]
    scores = cross_encoder.predict(pairs)
    
    # 按新得分重新排序
    return sort_by_scores(initial_results, scores)

技巧3:查询扩展

扩展用户查询以提高召回率:

def query_expansion(query):
    """生成查询的多个变体"""
    expanded_queries = [
        query,
        f"关于{query}的详细解释",
        f"{query}是什么意思",
        f"如何理解{query}"
    ]
    return expanded_queries

三、上下文注入:让LLM"看见"外部知识

3.1 上下文注入的原理

上下文注入是将检索到的文档作为提示(Prompt)的一部分,提供给LLM。这个过程就像给AI提供"参考资料"。

基本结构

系统指令 + 检索到的上下文 + 用户问题 → LLM → 生成答案

3.2 Prompt工程最佳实践

模板示例1:基础RAG Prompt

def create_rag_prompt(query, context_docs):
    prompt = f"""你是一个专业的AI助手。请基于以下参考资料回答用户的问题。

参考资料:
{format_context(context_docs)}

重要提示:
1. 只基于上述参考资料回答问题
2. 如果参考资料中没有相关信息,请明确说明
3. 引用参考资料时请注明来源

用户问题:{query}

请提供准确、详细的回答:"""
    
    return prompt

def format_context(docs):
    """格式化上下文文档"""
    formatted = []
    for i, doc in enumerate(docs, 1):
        formatted.append(f"[文档{i}]\n{doc['content']}\n来源:{doc['source']}\n")
    return "\n".join(formatted)

模板示例2:带引用的高级Prompt

def create_advanced_rag_prompt(query, context_docs):
    prompt = f"""# 角色
你是一个严谨的知识问答助手。

# 任务
基于提供的参考资料回答用户问题,并标注信息来源。

# 参考资料
{format_numbered_context(context_docs)}

# 回答要求
1. **准确性**:确保答案完全基于参考资料
2. **引用标注**:使用[1][2]标注信息来源
3. **完整性**:综合所有相关资料给出全面回答
4. **诚实性**:如果资料不足,明确说明局限性

# 用户问题
{query}

# 你的回答
"""
    return prompt

def format_numbered_context(docs):
    """带编号的上下文格式化"""
    formatted = []
    for i, doc in enumerate(docs, 1):
        formatted.append(f"[{i}] {doc['content']}\n(来源: {doc['source']})\n")
    return "\n".join(formatted)

3.3 上下文窗口管理

问题:上下文过长

当检索到的文档过多或过长时,可能超出LLM的上下文窗口限制。

解决方案

方案1:智能截断

def truncate_context(docs, max_tokens=2000):
    """智能截断上下文"""
    truncated = []
    current_tokens = 0
    
    for doc in docs:
        doc_tokens = count_tokens(doc['content'])
        if current_tokens + doc_tokens <= max_tokens:
            truncated.append(doc)
            current_tokens += doc_tokens
        else:
            # 截断最后一个文档
            remaining = max_tokens - current_tokens
            doc['content'] = truncate_to_tokens(doc['content'], remaining)
            truncated.append(doc)
            break
    
    return truncated

方案2:分层检索

def hierarchical_retrieval(query, k1=10, k2=3):
    """两阶段检索:先召回,再精选"""
    # 第一阶段:快速召回更多文档
    candidates = vector_search(query, top_k=k1)
    
    # 第二阶段:使用更强模型精选最相关的
    final_docs = rerank(query, candidates, top_k=k2)
    
    return final_docs

方案3:文档摘要

async def summarize_docs(docs, llm):
    """对长文档进行摘要"""
    summaries = []
    for doc in docs:
        if len(doc['content']) > 1000:
            summary = await llm.summarize(doc['content'])
            doc['content'] = summary
        summaries.append(doc)
    return summaries

3.4 上下文质量优化

技巧1:去重

def deduplicate_docs(docs, similarity_threshold=0.9):
    """移除相似度过高的重复文档"""
    unique_docs = []
    for doc in docs:
        is_duplicate = False
        for existing in unique_docs:
            if cosine_similarity(doc['embedding'], existing['embedding']) > similarity_threshold:
                is_duplicate = True
                break
        if not is_duplicate:
            unique_docs.append(doc)
    return unique_docs

技巧2:相关性过滤

def filter_by_relevance(docs, min_score=0.7):
    """过滤掉相关性低的文档"""
    return [doc for doc in docs if doc['score'] >= min_score]

技巧3:多样性采样

def diversify_results(docs, top_k=5):
    """确保结果的多样性"""
    selected = [docs[0]]  # 选择最相关的
    
    for doc in docs[1:]:
        if len(selected) >= top_k:
            break
        
        # 计算与已选文档的最大相似度
        max_sim = max([cosine_similarity(doc['embedding'], s['embedding']) 
                       for s in selected])
        
        # 如果不太相似,则添加
        if max_sim < 0.85:
            selected.append(doc)
    
    return selected

四、完整RAG系统实现

4.1 系统架构

┌─────────────┐
│  用户查询   │
└──────┬──────┘
       │
       ▼
┌─────────────────┐
│  查询处理模块   │ ← 查询改写、扩展
└──────┬──────────┘
       │
       ▼
┌─────────────────┐
│  向量检索引擎   │ ← 向量数据库
└──────┬──────────┘
       │
       ▼
┌─────────────────┐
│  重排序模块     │ ← 提高精确度
└──────┬──────────┘
       │
       ▼
┌─────────────────┐
│  上下文构建     │ ← Prompt工程
└──────┬──────────┘
       │
       ▼
┌─────────────────┐
│  LLM生成        │ ← 生成答案
└──────┬──────────┘
       │
       ▼
┌─────────────────┐
│  后处理与验证   │ ← 事实检查
└──────┬──────────┘
       │
       ▼
┌─────────────────┐
│  返回结果       │
└─────────────────┘

4.2 Python实现示例

from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import Chroma
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.llms import OpenAI
from langchain.chains import RetrievalQA

class RAGSystem:
    def __init__(self, documents):
        """初始化RAG系统"""
        # 1. 文档处理
        self.text_splitter = RecursiveCharacterTextSplitter(
            chunk_size=500,
            chunk_overlap=50,
            separators=["\n\n", "\n", "。", "!", "?", ".", "!", "?"]
        )
        
        # 2. Embedding模型
        self.embeddings = OpenAIEmbeddings(model="text-embedding-3-small")
        
        # 3. 向量数据库
        self.vectorstore = self._build_vectorstore(documents)
        
        # 4. LLM
        self.llm = OpenAI(temperature=0)
        
        # 5. 检索器
        self.retriever = self.vectorstore.as_retriever(
            search_type="mmr",  # 最大边际相关性
            search_kwargs={
                "k": 4,
                "fetch_k": 20,
                "lambda_mult": 0.5
            }
        )
        
    def _build_vectorstore(self, documents):
        """构建向量存储"""
        # 切分文档
        chunks = self.text_splitter.split_documents(documents)
        
        # 创建向量数据库
        vectorstore = Chroma.from_documents(
            documents=chunks,
            embedding=self.embeddings,
            persist_directory="./chroma_db"
        )
        
        return vectorstore
    
    def query(self, question):
        """执行RAG查询"""
        # 创建问答链
        qa_chain = RetrievalQA.from_chain_type(
            llm=self.llm,
            chain_type="stuff",
            retriever=self.retriever,
            return_source_documents=True,
            chain_type_kwargs={
                "prompt": self._create_prompt()
            }
        )
        
        # 执行查询
        result = qa_chain({"query": question})
        
        return {
            "answer": result["result"],
            "sources": result["source_documents"]
        }
    
    def _create_prompt(self):
        """创建Prompt模板"""
        from langchain.prompts import PromptTemplate
        
        template = """基于以下参考资料回答问题。如果资料中没有答案,请说"我不知道"。

参考资料:
{context}

问题:{question}

详细回答:"""
        
        return PromptTemplate(
            template=template,
            input_variables=["context", "question"]
        )

# 使用示例
from langchain.document_loaders import TextLoader

# 加载文档
loader = TextLoader("knowledge_base.txt")
documents = loader.load()

# 创建RAG系统
rag = RAGSystem(documents)

# 查询
result = rag.query("什么是机器学习?")
print(f"回答:{result['answer']}")
print(f"参考文档数量:{len(result['sources'])}")

4.3 高级优化:多查询RAG

class AdvancedRAG:
    def multi_query_retrieval(self, question):
        """生成多个查询角度"""
        # 使用LLM生成问题的不同表述
        variations = self.llm.generate_variations(question, num=3)
        
        all_docs = []
        for variation in variations:
            docs = self.retriever.get_relevant_documents(variation)
            all_docs.extend(docs)
        
        # 去重和排序
        unique_docs = self.deduplicate(all_docs)
        ranked_docs = self.rerank(question, unique_docs)
        
        return ranked_docs[:5]
    
    def self_query_with_metadata(self, question):
        """基于元数据的自查询"""
        # 从问题中提取过滤条件
        metadata_filter = self.extract_metadata_filter(question)
        
        # 在向量搜索中应用过滤
        docs = self.vectorstore.similarity_search(
            question,
            filter=metadata_filter,
            k=5
        )
        
        return docs

五、实践案例与应用场景

5.1 企业知识库问答

场景:企业内部有大量文档(产品手册、政策文档、FAQ等)

实现要点

  • 文档分类和元数据管理
  • 权限控制
  • 定期更新向量库
# 示例:企业知识库RAG
class EnterpriseRAG:
    def __init__(self):
        self.vectorstore = Chroma(
            collection_name="company_docs",
            embedding_function=embeddings
        )
    
    def add_document(self, doc, metadata):
        """添加文档并包含元数据"""
        chunks = self.split_document(doc)
        
        for chunk in chunks:
            self.vectorstore.add_texts(
                texts=[chunk],
                metadatas=[{
                    "department": metadata["department"],
                    "doc_type": metadata["doc_type"],
                    "last_updated": metadata["date"],
                    "access_level": metadata["access_level"]
                }]
            )
    
    def query_with_access_control(self, question, user_level):
        """带权限控制的查询"""
        results = self.vectorstore.similarity_search(
            question,
            filter={"access_level": {"$lte": user_level}},
            k=5
        )
        return results

5.2 客服智能问答

场景:自动回答客户常见问题

实现要点

  • 快速响应时间
  • 多轮对话上下文管理
  • 答案质量监控

5.3 学术研究助手

场景:帮助研究人员查找和总结文献

实现要点

  • 支持PDF解析
  • 引用管理
  • 多模态检索(文本+图表)

六、评估与优化

6.1 评估指标

检索质量指标

def calculate_retrieval_metrics(retrieved_docs, relevant_docs):
    """计算检索指标"""
    retrieved_ids = set([doc['id'] for doc in retrieved_docs])
    relevant_ids = set([doc['id'] for doc in relevant_docs])
    
    # 召回率 (Recall)
    recall = len(retrieved_ids & relevant_ids) / len(relevant_ids)
    
    # 精确率 (Precision)
    precision = len(retrieved_ids & relevant_ids) / len(retrieved_ids)
    
    # F1分数
    f1 = 2 * (precision * recall) / (precision + recall)
    
    # MRR (Mean Reciprocal Rank)
    for i, doc in enumerate(retrieved_docs, 1):
        if doc['id'] in relevant_ids:
            mrr = 1 / i
            break
    
    return {
        "recall": recall,
        "precision": precision,
        "f1": f1,
        "mrr": mrr
    }

生成质量指标

  • 答案准确性:与标准答案的相似度
  • 幻觉率:生成内容中不基于参考资料的比例
  • 完整性:是否完整回答了问题
  • 引用准确性:引用是否正确

6.2 常见问题与解决方案

问题原因解决方案
检索不到相关文档Embedding模型不合适更换或微调Embedding模型
答案包含幻觉上下文不足或Prompt不当优化Prompt,增加"仅基于资料回答"约束
响应速度慢检索或生成耗时长使用更快的向量数据库,减少检索文档数
答案质量不稳定检索结果质量波动增加重排序步骤,提高检索精确度

6.3 持续优化策略

  1. A/B测试:对比不同检索策略和Prompt的效果
  2. 用户反馈循环:收集用户评价,优化系统
  3. 定期评估:建立测试集,定期评估系统性能
  4. 模型更新:跟踪最新的Embedding和LLM模型

七、未来趋势与展望

7.1 多模态RAG

支持图像、音频等多种模态的检索和生成。

7.2 自适应RAG

根据问题类型自动选择最佳检索策略。

7.3 知识图谱增强

结合结构化知识图谱提升推理能力。

7.4 实时RAG

支持流式检索和增量生成,提升用户体验。


总结

RAG技术通过向量检索上下文注入两大核心机制,成功地将外部知识与大语言模型结合,显著提升了AI系统的准确性和实用性。

关键要点回顾

  1. 向量检索是基础:选择合适的Embedding模型和向量数据库至关重要
  2. 上下文注入是关键:精心设计的Prompt能大幅提升答案质量
  3. 优化是持续的:通过混合检索、重排序、元数据过滤等技术不断改进
  4. 评估要全面:关注检索和生成两个阶段的指标

实践建议

  • 从简单开始:先实现基础RAG,再逐步优化
  • 重视数据质量:高质量的文档是RAG成功的前提
  • 持续迭代:基于用户反馈和评估结果不断改进
  • 选择合适的工具栈:根据实际需求选择Embedding模型、向量数据库和LLM

RAG技术正在快速发展,掌握其原理与实践,将帮助你构建更智能、更可靠的AI应用。

排程项目对接问题记录

一、项目背景

  • 公司近期签了一个排程系统项目,金额 几十万
  • 签合同之前,供应商(山东某公司,XX 供应链):
    • 各种保证自己做过类似接口
    • 反复强调「东西很简单」
    • 表现得非常专业、能力很强
    • 甚至暗示我们原有做法不行


二、签约后的实际情况

合同一签,情况完全反转:

  • 与公司内部系统对接时:


    • 各种做不了
    • 各种复杂、困难
  • 原本应由供应商完成的接口工作:


    • 基本全部压回到我们公司(具体是我)来做


三、领导的处理方式

更离谱的是:

  • 领导 居然同意 了这种安排

等于:

  • 还要帮 供应商擦屁股

花了钱了,结果接口还要自己做


四、当前真实感受

  • 无奈
  • 憋屈
  • 寒心

手上目前有个 2w 的闲钱,打算提前还贷。
目前商贷还有 60w,剩下 8 年,利率 3.2,月还款 7k 左右;
公积金贷款还有 37w,剩下 14 年,利率 2.6,月还款 2.7k 左右,公积金全覆盖;
这 2w 是还商贷还是公积金好。
当然,从利息角度上看,是还公积金好些。还有没有其他角度的建议。

各家市场上架需要采集权限的
要么你输入
android.permission.CAMERA
要么你输入
CAMERA
要么国内厂商给你列表让你点选

三星可倒好, 给你个框让你自己输
输 android.permission.CAMERA 和 CAMERA 他都不认 审核好几天给你打回 告诉你要输"相机"
输"拍照" "录像" 也不行 必须是规范名称 "相机"

然后还不给这个名称列表
每次遇到权限都得先提交 再打回 看打回提示正确的中文规范权限名称是啥

还有备案号, 这个 app 是调用大型信息系统的后台数据, 那个系统比较早, 维护不支持输入
京 ICP 备 2020202020 号-14A 这种尾巴是 A 的 app 备案号 维护输入的是 京 ICP 备 2020202020 号
因为严重合规要求 app 底部悬挂了备案号 京 ICP 备 2020202020 号
然后人工审核非说跟工信部查到的不一致 打回 怎么解释没用, 最后把备案号删了 不显示了 人工不吱声了


然后语言, 你发布中国大陆以外的地区必须有英语语言. 可是这是一个中国准行政的办事 app, 只针对有中国籍有中国社保的用户, 强实名验证, 只是需要覆盖出国的中国人, 反正不行, 服务出国的中国人, app 也必须完整支持英语, 否则不行

反复沟通好几次了, 甚至有审核口头同意了, 然后最终还是这个理由打回




好吧 你们三星用户爱干啥干啥去吧 领导上会同意不上三星市场了 三星手机用户自己买个 iphone 在线办事吧...

2021 年的 Macbook Pro 14 寸,本来都以为要舒舒服服用到 AC 结束了,最近一个月开始发现屏幕的亮度会偶尔波动,就是很短暂地闪烁一下那种。

如果还有(像我这么年纪大的)朋友记得远古时期日光灯接触不良那种闪烁 ———— 嗯大概就是那个意思 orz

没有很影响工作但是总归用着不舒服,想问下:

  1. 这是 Macbook 用久了之后的通病吗?还要去找苹果吗

担心:

  • 找售后也不一定现场能测得出来,最多我也只能拿个监控对着屏幕边工作边拍,记录下来“确实有发生过,一天三四次的样子”。

诚求建议,如果要修,等过完春节就可以送修

从这里开始使用: https://docs.moire.blog/

原理就是非常简单的 Shortcuts 和 GitHub Pages ,但是 Apple 官方在 Shortcuts 里 Make Markdown from richtext 对 Notes 的支持非常简陋(即使明明 iOS 26 官方对 Notes 支持了 export as markdown 这种功能)

很多格式都没有转过来,所以我通过 richtext to html to markdown 这样的流程硬生生匹配类名来转换...(真的很累... 只能上传一张图片,是 feature, 只支持了传一张图

需要能够直接访问 api.github.com ,不过 cloudflare 大善人支持 worker 来转发请求,所以如果你自己有域名的话,所以不用随时随地翻墙也可以通过代理来实现同步了

Shortcuts 的版本管理很麻烦,只能通过 icloud 链接来分享,还处于探索的过程之中。不过幸好这个玩意不需要更新得很频繁~

欢迎使用,也欢迎分享给身边不懂技术的朋友使用,配置流程很简单应该都能轻松上手。有什么建议或遇到什么问题都可以留言!

Obsidian 相比通用编辑器,比如 vscode 有哪些不为人知的好处

真诚求问

我看有很多人在推 Obsidian 记笔记,但是帖子内容看着就是一个 markdown 编辑器。

我平常也是用 mardkown 记录,分文件夹,一个主题一个文件,一类主题一个次级文件夹,好处就是纯文本,平台无关,编辑器无关

而 vscode 基本是最好的纯文本编辑平台了,可能程序员用得最多,记录 markdown 笔记更是不在话下。不过最近也在使用 zed 。无论用哪个,只要能渲染 markdown 就行。

我没怎么用过 Obsidian 记笔记,想问下 Obsidian 平台有什么独到的地方

  • 春节放假,还是把惊天 3 看了,1,2 都非常好看,这也是去年最期待的电影了。电影刚上线的时候,社区就有人讨论了这个电影,清一色的差评,本来期待就不高,看的时候还是忍不住感叹水准下降了这么多。
  • 从老的四骑士(其实是五骑士)的脸上,还是能明显看到岁月的痕迹,特别是杰克,明显的消瘦了很多,所以也理解导演想托举新人的想法,但是 8 个人同台,太拥挤了,想要表达一点内容,也太生硬了。
  • 整个剧情,太随意的感觉,跟魔术的关联性也不是很大,连为数不多的亮点之一的全息投影,也是前作中的出现过的,三小只在拍照偷换钻石后的突然换装,也是致敬第二部的片段,但是 3 拍的太尴尬了。剧情中莫名的飙车,莫名的老黑下线,剧中反派维罗妮卡被塑造的跟个白痴一样,一点都看不出来是个 boss。
  • 绿巨人在俄罗斯被抓,骑士团就解散,梅里特被抓,5 骑士都直接回归,所以小丑是绿巨人?还是片酬太高了请不起。最后揭秘大家收到的牌都是小黑哥发的,随便找个人发发卡片就能召唤神龙是吧,The Eye 就这?今年大年三十我也把骑士团请来我家吃年饭,不知道 54 张扑克牌够不够用。
  • 槽点很多很多,文笔有限,也是想到就说啥,有点乱。
  • 电影结尾明显是有第四部的,不知道会不会难产,出来了应该也会去看一下的,毕竟 1,2 给了太多的惊喜(最后最后,老黑下线的也太随便了,太随便了!!)


@Jimmy 点评是否考虑加个编辑功能,因为写完点评,如果想修改,只能移除点评再重新添加,有些不合理

在开发金融类应用时,最棘手的部分往往不是复杂的算法,而是如何稳定、高效地处理实时数据流。作为一名在一线编写交易系统的开发者,今天想和大家聊聊 A 股实时行情的接入方案。

需求分析:为什么不用 HTTP? HTTP 协议是无状态的,每次请求都需要带上完整的 Header,且需要经历三次握手。在需要亚秒级响应的行情监控场景下,这种开销是不可接受的。我们需要的是一种 Keep-Alive 的长连接机制,WebSocket 无疑是最佳选择。

协议层实现逻辑 我们的目标是构建一个能够长期运行、自动重连的客户端。

Transport 层:使用 websocket-client 库维护底层 TCP 连接。

Protocol 层:解析特定的 JSON 协议包。以 AllTick 的协议为例,其数据包结构紧凑,适合高频传输。

Application 层:将解析后的数据分发给策略引擎或 UI 界面。

代码实战:异步回调设计 以下代码展示了如何利用回调函数(Callback)模式来处理异步推送的数据流。这种设计模式可以避免主线程阻塞。

import pandas as pd

df = pd.DataFrame(columns=["code", "price", "volume", "time"])

def on_message(ws, message):
    data = json.loads(message)
    if "data" in data:
        for item in data["data"]:
            df.loc[len(df)] = [item['s'], item['p'], item['v'], item['t']]
            print(df.tail(1))

数据持久化与缓存 在高并发场景下,直接写库(如 MySQL)可能会成为瓶颈。通常我们会先用 Pandas 在内存中做一层缓存(Buffer),或者推送到 Redis 队列中。这里展示一个简单的 Pandas 内存处理方案:

import pandas as pd

df = pd.DataFrame(columns=["code", "price", "volume", "time"])

def on_message(ws, message):
    data = json.loads(message)
    if "data" in data:
        for item in data["data"]:
            df.loc[len(df)] = [item['s'], item['p'], item['v'], item['t']]
            print(df.tail(1))

技术总结 通过 WebSocket,我们实现了一个低延迟的行情消费端。这种架构不仅适用于股票,同样适用于期货、数字货币等任何对时效性要求极高的金融衍生品交易场景。

一、什么是IP离线库?

IP离线库是企业将IP地址信息存储在本地数据库中的一种方式。与在线IP查询不同,离线库的IP数据不依赖于实时互联网连接,而是由企业根据需求定期下载更新。这使得企业可以在没有互联网连接的环境下进行IP地址查询,且查询速度较快,适用于数据量大、查询频繁的场景。

IP离线库通常包含的内容包括:IP归属地、ISP信息、IP类型、使用代理情况、风险等级等。它为企业提供了多维度的IP信息,尤其适用于需要进行精准营销、风险管理、网络安全监控等任务的企业。

二、IP离线库在企业中的应用场景

网络安全防护

在企业的网络安全体系中,IP离线库发挥着不可或缺的作用。通过实时监控和查询IP地址的归属地、类型及使用情况,企业可以有效识别潜在的安全威胁,及时阻止来自恶意IP地址的攻击。例如,通过查找是否有大量来自同一IP的登录尝试,企业可以发现潜在的暴力破解行为,从而采取必要的防范措施。

精准营销与广告投放

在广告投放与精准营销方面,IP离线库也能提供帮助。企业通过分析用户的IP地址,判断其地理位置、设备类型等信息,从而制定更具针对性的营销策略。借助IP离线库,企业可以实现更精确的广告定向投放,提高营销效果。

反欺诈与风险评估

通过查询IP地址的历史使用记录和风险评分,企业可以在进行用户身份认证时有效防止欺诈行为。例如,银行、电商平台等常常利用IP离线库查询客户IP地址,识别是否存在风险行为(如使用VPN或代理的可疑IP)。这种技术有助于降低欺诈风险,提升企业的安全性。
企业用IP离线库选哪个品牌好

三、选择IP离线库时需要考虑的关键因素

数据准确性

数据准确性是选择IP离线库时最重要的因素之一。IP离线库中的数据必须保持高质量和准确性,才能确保企业在进行IP查询时得到可靠的结果。企业应选择那些提供多维度、详细数据来源的品牌,以确保查询结果的准确性。

更新频率

由于IP地址的动态变化,IP离线库的更新频率也是至关重要的。企业应选择那些定期更新数据源的IP离线库品牌,以确保所查询的数据是最新的。这对于防止IP库信息过时、失效至关重要,尤其是在防止网络攻击和诈骗方面。

区域覆盖

对于需要全球范围内查询IP的企业,IP离线库的区域覆盖广度是一个不容忽视的因素。选择支持全球范围的IP库,可以帮助企业全面了解不同区域的IP地址信息,满足跨国业务运营的需求。

查询速度

企业的查询效率对日常运营的影响也非常大。在数据量大的情况下,查询速度尤为重要。因此,选择响应快速、查询高效的IP离线库品牌,可以显著提升企业的工作效率,避免因查询延迟而影响决策。

兼容性与扩展性

企业的需求可能随着业务的扩大而发生变化。因此,选择一个具备良好兼容性和扩展性的IP离线库品牌至关重要。品牌应提供丰富的API接口、支持多平台集成,以便企业根据自身需求进行定制和拓展。

四、推荐的IP离线库品牌及其优缺点

以下是目前市场上几款知名的IP离线库品牌,适用于不同企业需求的选择。

品牌名优势缺点
IP数据云提供全面的全球IP数据,更新频率高,支持API接口,查询速度快高级功能需付费,部分高精度数据需额外购买
IPnews提供精确的IP地理位置和代理检测,适用于跨国企业数据精度有限,官网套餐仅到城市级
IPinfo数据准确性高,支持丰富的API接口,适合开发者使用部分高级功能价格较高,适合较为复杂的业务场景
Geotargetly提供精准的地域定向能力,特别适合精准营销只支持部分地区的详细数据,可能不适合跨国运营的企业
ipstack提供高效的API接口和多语言支持,数据丰富数据更新频率较低,且支持的地域覆盖较少

*数据来源网络,以官网为准

因此,在选择IP离线库品牌时,企业应根据自身需求,如查询速度、数据准确性、区域覆盖等方面,进行综合考虑。IP数据云凭借其数据更新频率高、全球范围覆盖、查询速度快,成为许多企业的首选。而对于跨国业务,IPnews和IPinfo提供的精确数据和全面支持也值得关注。

五、结论

选择适合企业需求的IP离线库品牌是一个需要综合考虑多方面因素的过程。通过深入了解IP离线库的应用场景、选购标准和市场上的主流品牌,企业可以做出更加理性和精准的决策,为网络安全、精准营销等任务提供有力支持。无论是提升网络防护能力,还是加强风险管理,选择一个高效且可靠的IP离线库品牌,都是企业顺利发展的关键一步。