当前位置: 首页 > news >正文

利用langchain创建信息检索链对话应用

以下内容有AI生成内容,请注意区分

信息检索链

信息检索链三步流程走向图

flowchart TDA[用户输入问题] --> B[第一步: 查询优化]subgraph B [查询优化]B1[原始用户问题] --> B2[LLM分析并优化]B2 --> B3[生成多个搜索查询]endB --> C[第二步: 信息检索]subgraph C [信息检索]C1[执行多个搜索查询] --> C2[获取相关文档]C2 --> C3[按相关性排序文档]C3 --> C4[选择最相关结果]endC --> D[第三步: 答案生成]subgraph D [答案生成]D1[组合问题与检索结果] --> D2[LLM生成最终答案]D2 --> D3[返回结构化响应]endD --> E[输出最终答案]style A fill:#e1f5festyle E fill:#e8f5e8style B fill:#fff3e0style C fill:#fce4ecstyle D fill:#e8f5e8

流程详解

第一步:查询优化

  1. 输入:用户原始问题(自然语言)
  2. 处理:LLM分析问题意图,生成更有效的搜索查询
  3. 输出:多个优化的搜索查询(通常为2-3个)
  4. 目的:将模糊的用户问题转换为搜索引擎友好的查询

第二步:信息检索

  1. 输入:优化的搜索查询
  2. 处理
    • 执行多个搜索查询
    • 获取相关文档/片段
    • 按相关性对结果排序
    • 选择最相关的结果
  3. 输出:排序后的相关文档片段
  4. 目的:从知识库中查找与问题最相关的信息

第三步:答案生成

  1. 输入
    • 原始用户问题
    • 检索到的相关信息
  2. 处理
    • 将问题和检索结果组合成提示词
    • LLM基于提供的上下文生成答案
    • 确保答案基于检索到的信息,不编造内容
  3. 输出:结构化、基于证据的最终答案
  4. 目的:基于可靠信息生成准确、全面的答案

关键特点

  1. 迭代优化:通过多个搜索查询提高找到相关信息的概率
  2. 证据基础:所有答案都基于检索到的信息,提高可靠性
  3. 可解释性:可以追溯答案的来源(检索到的文档)
  4. 灵活性:可以适配不同的搜索引擎和知识库

这个流程是RAG(检索增强生成)架构的核心,广泛应用于问答系统、研究助手和知识库应用。

应用实现

信息检索链是LangChain中非常强大的模式,它模拟了人类获取信息的过程:先搜索相关信息,再基于这些信息生成答案。下面是一个完整的学习示例,使用虚拟的搜索结果来演示整个流程。

完整代码示例


import refrom langchain_openai import ChatOpenAI
from langchain.chains import LLMChain, SequentialChain
from langchain.prompts import PromptTemplate
from langchain.schema import Document
from typing import List, Dict# 1. 配置模型
llm = ChatOpenAI(model_name="xop3qwen1b7",openai_api_base="https://域名/v1",openai_api_key="sk-kBa9GlpIxpWX281iA35a2...",temperature=0.3,  # 降低温度以获得更确定的答案max_tokens=1024
)# 2. 改进的查询解析函数
def parse_search_queries(llm_response: str) -> List[str]:"""从LLM响应中解析出搜索查询,处理多种可能的格式"""# 移除可能的前导文本response = llm_response.strip()# 匹配用逗号分隔的查询(可能带有编号)comma_pattern = r'(?:\d+[\.\:]?\s*)?([^,\n]+?)(?=,|$|\n)'comma_matches = re.findall(comma_pattern, response)if comma_matches and len(comma_matches) >= 2:# 清理结果queries = [q.strip() for q in comma_matches if q.strip()]return queries[:3]  # 返回最多3个查询# 匹配用换行符分隔的查询(可能带有编号)line_pattern = r'(?:\d+[\.\:]?\s*)?([^\n]+)'line_matches = re.findall(line_pattern, response)if line_matches and len(line_matches) >= 2:queries = [q.strip() for q in line_matches if q.strip()]return queries[:3]# 如果以上方法都失败,尝试按句号分割fallback_queries = [q.strip() for q in response.split('.') if q.strip()]if fallback_queries and len(fallback_queries) >= 2:return fallback_queries[:3]# 最后的手段:返回原始响应作为单个查询return [response]# 2. 模拟搜索引擎函数(实际项目中可替换为真实搜索引擎API)
def mock_search_api(query: str, num_results: int = 3) -> List[Document]:"""模拟搜索引擎API,返回虚拟的搜索结果"""# 这里是硬编码的模拟数据,实际应用中会调用真实APIsearch_results_db = {"langchain 是什么": [Document(page_content="LangChain是一个用于开发由语言模型驱动的应用程序的框架。它提供了一套工具、组件和接口,简化了构建基于LLM的应用过程。",metadata={"source": "官方文档", "relevance": 0.9}),Document(page_content="LangChain由Harrison Chase于2022年创建,已经成为最流行的LLM应用开发框架之一,拥有活跃的开源社区。",metadata={"source": "技术博客", "relevance": 0.7}),Document(page_content="LangChain的核心概念包括模型I/O、检索、链、代理、内存等模块。",metadata={"source": "教程", "relevance": 0.8})],"langchain 如何安装": [Document(page_content="安装LangChain: pip install langchain。如果需要使用OpenAI模型,还需安装pip install langchain-openai。",metadata={"source": "官方文档", "relevance": 0.95}),Document(page_content="LangChain支持Python 3.8及以上版本。建议使用虚拟环境进行安装。",metadata={"source": "GitHub README", "relevance": 0.6}),Document(page_content="对于开发大型应用,可以考虑安装LangChain的扩展包,如langchain-community等。",metadata={"source": "社区论坛", "relevance": 0.5})],"langchain 的应用场景": [Document(page_content="LangChain可用于构建聊天机器人、问答系统、文档分析工具、代码生成器等应用。",metadata={"source": "用例文档", "relevance": 0.9}),Document(page_content="企业使用LangChain构建客户支持系统、内部知识库检索工具和自动化报告生成器。",metadata={"source": "案例研究", "relevance": 0.8}),Document(page_content="研究人员使用LangChain进行学术文献分析和科学发现辅助工具开发。",metadata={"source": "研究论文", "relevance": 0.7})],"默认": [Document(page_content="很抱歉,没有找到与您查询直接相关的结果。请尝试使用更具体的关键词重新搜索。",metadata={"source": "搜索引擎", "relevance": 0.1})]}# 返回匹配的搜索结果或默认结果return search_results_db.get(query, search_results_db["默认"])[:num_results]# 3. 第一步:生成优化搜索查询的链
query_generation_template = """
你是一个搜索查询优化专家。请将用户的问题转换为更有效、更具体的搜索引擎查询。请使用中文只返回3个搜索查询,用逗号分隔,不要有任何额外的解释、编号或文本。原始问题: {user_question}搜索查询:
"""query_generation_prompt = PromptTemplate(input_variables=["user_question"],template=query_generation_template
)query_chain = LLMChain(llm=llm,prompt=query_generation_prompt,output_key="search_queries"
)# 4. 第二步:执行搜索并处理结果
def search_and_process(search_queries: str) -> str:"""执行搜索并格式化结果"""# 使用改进的解析函数queries = parse_search_queries(search_queries)print(f"解析后的搜索查询: {queries}")all_results = []for query in queries[:2]:  # 取前两个查询results = mock_search_api(query)all_results.extend(results)# 按相关性排序(假设metadata中有relevance字段)all_results.sort(key=lambda x: x.metadata.get("relevance", 0), reverse=True)# 格式化搜索结果formatted_results = ""for i, doc in enumerate(all_results[:4]):  # 取前4个最相关结果formatted_results += f"结果 {i + 1} (来源: {doc.metadata.get('source', '未知')}):\n{doc.page_content}\n\n"return formatted_results# 5. 第三步:基于搜索结果生成最终答案的链
answer_generation_template = """
你是一个专业的研究助手。请根据以下搜索结果为用户的问题提供更全面、准确的答案。如果搜索结果中没有相关信息或搜索结果不相关,请如实告知用户,不能编造信息。用户问题: {user_question}搜索结果:
{search_results}请基于以上信息,用中文提供详细的回答:
"""answer_generation_prompt = PromptTemplate(input_variables=["user_question", "search_results"],template=answer_generation_template
)answer_chain = LLMChain(llm=llm,prompt=answer_generation_prompt,output_key="final_answer"
)# 6. 组合成顺序链
overall_chain = SequentialChain(chains=[query_chain],input_variables=["user_question"],output_variables=["search_queries"],verbose=True
)def run_information_retrieval():print("=" * 60)print("🔍 信息检索链演示系统")print("💡 我会先优化你的问题,然后搜索相关信息,最后生成答案")print("📝 输入'退出'结束程序")print("=" * 60)while True:user_question = input("\n请输入你的问题: ").strip()if user_question.lower() in ['退出', 'quit', 'exit', 'q']:print("感谢使用,再见!")breakif not user_question:continuetry:print("\n🔄 正在优化搜索查询...")# 第一步:生成优化的搜索查询query_result = overall_chain.invoke({"user_question": user_question})search_queries = query_result["search_queries"]print(f"生成的搜索查询: {search_queries}")# 第二步:执行搜索print("🔍 正在搜索相关信息...")search_results = search_and_process(search_queries)print("找到的相关信息:")print(search_results)# 第三步:生成最终答案print("🤖 正在生成最终答案...")final_answer = answer_chain.invoke({"user_question": user_question,"search_results": search_results})print("\n" + "=" * 40)print("✅ 最终答案:")print(final_answer.get("final_answer"))print("=" * 40)except Exception as e:print(f"❌ 出错了: {e}")import tracebacktraceback.print_exc()# 7. 演示函数
def demonstrate_retrieval_chain():"""演示信息检索链的工作流程"""print("\n" + "=" * 60)print("🎯 信息检索链工作流程演示")print("=" * 60)test_questions = ["LangChain是什么?","如何安装LangChain?","LangChain有什么应用场景?"]for question in test_questions:print(f"\n📋 测试问题: {question}")# 生成搜索查询query_result = query_chain.run({"user_question": question})print(f"🔍 生成的搜索查询: {query_result}")# 执行搜索search_results = search_and_process(query_result)# 生成最终答案final_answer = answer_chain.run({"user_question": question,"search_results": search_results})print(f"✅ 最终答案: {final_answer}")print("-" * 40)if __name__ == "__main__":# 运行主程序run_information_retrieval()# 取消注释运行演示# demonstrate_retrieval_chain()

代码解析与学习要点

1. 信息检索链的三步流程

这个示例展示了信息检索链的典型三步流程:

  1. 查询优化:将用户的自然语言问题转换为有效的搜索查询
  2. 信息检索:使用搜索查询获取相关信息
  3. 答案生成:基于检索到的信息生成最终答案

2. 关键组件

  • LLMChain:用于处理每个步骤的LLM调用
  • SequentialChain:将多个链组合成顺序工作流(这里只用于演示第一步)
  • PromptTemplate:定义每个步骤的提示词模板
  • 模拟搜索API:在实际项目中可替换为真实搜索引擎(如Google Serper API、SerpAPI等)

3. 提示词工程

注意两个提示词模板的设计:

  1. 查询生成提示:要求LLM生成多个不同的搜索查询
  2. 答案生成提示:要求LLM基于搜索结果回答问题,并明确指示不要编造信息

4. 错误处理与可靠性

  • 提供了默认搜索结果,避免空结果导致的错误
  • 添加了异常处理机制
  • 对搜索结果进行排序,优先使用最相关的内容

进阶学习建议

1. 集成真实搜索引擎

mock_search_api函数替换为真实的搜索引擎API:

# 使用Serper API示例(需要注册获取API key)
from langchain_community.utilities import GoogleSerperAPIWrapperdef real_search_api(query: str, num_results: int = 3):search = GoogleSerperAPIWrapper()results = search.results(query)# 处理结果格式...return processed_results

2. 添加结果评估步骤

在搜索和答案生成之间添加结果评估步骤,过滤低质量或无关的结果:

evaluation_template = """
请评估以下搜索结果与问题的相关性(0-1分),并简要说明理由。问题: {user_question}搜索结果:
{search_results}请给出分数和理由:
"""evaluation_prompt = PromptTemplate(...)
evaluation_chain = LLMChain(...)

3. 实现多查询融合

对多个搜索查询的结果进行去重、排序和融合,提高答案质量:

def merge_search_results(results_list):"""合并和去重多个查询的结果"""all_docs = []seen_content = set()for results in results_list:for doc in results:content_hash = hash(doc.page_content[:100])  # 简单去重if content_hash not in seen_content:seen_content.add(content_hash)all_docs.append(doc)# 按相关性排序all_docs.sort(key=lambda x: x.metadata.get("relevance", 0), reverse=True)return all_docs[:5]  # 返回前5个最相关结果

4. 添加引用来源

在最终答案中注明信息来源,提高可信度:

citation_template = """
...(其他内容保持不变)请基于以上信息,用中文提供详细的回答,并在末尾注明信息来源。答案:
"""# 在答案生成后处理来源标注
def add_citations(answer, sources):citation_text = "\n\n信息来源: "citation_text += ", ".join(set(sources))return answer + citation_text

运行与测试

运行程序后,尝试以下问题:

  1. "LangChain是什么?"
  2. "如何安装LangChain?"
  3. "LangChain有什么应用场景?"

相关文章:

利用langchain创建信息检索链对话应用

以下内容有AI生成内容,请注意区分信息检索链 信息检索链三步流程走向图 flowchart TDA[用户输入问题] --> B[第一步: 查询优化]subgraph B [查询优化]B1[原始用户问题] --> B2[LLM分析并优化]B2 --> B3[生成多个搜索查询]endB --> C[第二步: 信息检索]subgraph C …...

不同的.cs文件的命名空间相同

在 .NET(包括 C#)里,“同一个命名空间”完全可以散落在多个 .cs 文件——甚至散落在多个不同的项目/程序集里。不同文件但同一命名空间的类型访问级别受限 → internal 仍互相可见(同一程序集内);public 随便用;private/file 只能在声明文件内。命名空间是“逻辑地址”,…...

MyEMS:开源的力量,如何为企业能源管理带来颠覆性变革?

在能源成本不断上涨和碳中和成为全球共识的今天,高效能源管理已成为企业的核心竞争力。然而,传统能源管理系统往往存在成本高昂、封闭僵化、难以定制等问题,让许多企业望而却步。正是在这样的背景下,MyEMS 作为一款完全开源的能源管理系统,正在以其独特优势重新定义行业标…...

http

上一篇文章 初始化 MCP 环境 & 创建 MCP Server (一) 讲的是如何在 SSE 模式下启动 MCP Server。...

AI招聘机器人制造商Paradox.ai因弱密码泄露数百万求职者数据

安全研究人员发现AI招聘平台Paradox.ai因使用弱密码"123456"导致麦当劳等企业的6400万求职者信息泄露。调查还发现该公司越南开发者的设备感染信息窃取恶意软件,暴露出更多企业内部凭证和认证cookie。弱密码揭露AI招聘机器人制造商Paradox.ai的安全漏洞 安全研究人员…...

完整教程:【Leetcode hot 100】543.二叉树的直径

完整教程:【Leetcode hot 100】543.二叉树的直径pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace…...

Thundbird无法获取自签证书。

对于自建的邮件服务器,使用thundbird访问时,老版本会提示证书风险,但新版本没有提示,导致无法添加新的邮件账户。 方法(转自外网): 原文: In config editor, add network.security.ports.banned.override as a string with a value of "993" Then go to Mana…...

Gitee推出SBOM扫描功能:为开源供应链安全构筑数字防火墙

Gitee推出SBOM扫描功能:为开源供应链安全构筑"数字防火墙" 在开源软件占据现代软件开发90%以上组件的今天,供应链安全已成为行业不可忽视的挑战。Gitee最新推出的SBOM(软件物料清单)扫描功能,正在为开发者提供一套完整的开源组件风险管控方案,这标志着国内代码…...

mysql连表查询,轻松掌握多表数据关联技巧

做过数据库开发的朋友一定遇到过这样的困扰:数据分散在不同的表中,怎样才能一次查询获取完整的关联信息?比如你需要同时获取用户姓名和订单详情,或者既要产品信息又要供应商资料。这时候,连表查询就像一座连接数据孤岛的桥梁,让我们能够高效获取分散在各表中的相关联数据…...

Milvus集群部署

#本次部署其中的组件kafka、minio均为外置 将milvus chart包解压拷贝至某个目录下 编辑helm的values.yaml文件 ## Enable or disable Milvus Cluster mode cluster:enabled: trueimage:all:repository: milvusdb/milvustag: v2.4.1pullPolicy: IfNotPresent## Optionally speci…...

Qt-捕获摄像头画面

Qt-捕获摄像头画面在qt中捕获摄像头画面,在ui界面上添加一个comboBox控件、label标签和一个pushButton按钮,comboBox用于显示摄像头的设备,按钮用于开启摄像头,label用于显示摄像头捕获的画面。 //需要在.pro文件中加上multimedia multimediawidgets QT += core gui …...

选择MyEMS的十大核心优势:为您的企业开启智慧能管新纪元

在纷繁复杂的能源管理解决方案中,企业如何做出最明智的选择?如果您正在寻求一个既能立竿见影降本增效,又能为长期发展构建数字化基座的平台,那么MyEMS无疑是您的绝佳选择。它不仅是一款软件,更是一个强大的能源管理生态系统。以下是选择MyEMS的十大不可抗拒的优势。 一、极…...

通过 kubectl 插件 kubectl-tree 查看API对象层级关系

分享一个开源小工具 kubectl-tree,用于查看 k8s API 对象层级关系。 比如对于无状态应用来讲,可以看到Deployment --> ReplicaSet --> Pod 的构成关系。 采用二进制离线方式安装: 1、下载二进制安装包 wget https://github.com/ahmetb/kubectl-tree/releases/download…...

【Unity 性能优化之路——渲染流程(1)】 - 详解

【Unity 性能优化之路——渲染流程(1)】 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace…...

HCIA回顾——STP

...

.NET驾驭Word之力:COM组件二次开发全攻略之连接Word与创建你的第一个自动化文档

面向具有一定C#和.NET基础的开发者,本文将带你进入Word文档自动化处理的世界。通过本系列教程,你将掌握使用.NET操作Word文档的各种技巧,实现文档的自动化生成、处理和操作。引言 在日常开发中,我们经常需要处理Word文档,比如自动生成报告、批量处理文档、格式化文档内容等…...

last logicflow

<template><div class="logicflow-page"><div class="sidebar"><div class="palette-title">组件面板</div><div class="palette-item" @mousedown="startDrag(custom-rect, 矩形)">矩…...

老公对我的精神虐待

2025年09月15日早上。使唤我倒垃圾。然后在我往垃圾桶扔垃圾时,他在吐盔。他对我大呼小叫。从来不会好好说话,一言不合应会对我大呼小叫。在和他相处的过程中,感觉不到做为一个人最基本的尊重‘理解’‘包容’。他还喜欢语言暴力。喜欢贬低人。喜欢和你讲一个故事,然后说里…...

用户沉默之日,产品衰亡之时:逃离迭代中的“沉默陷阱”

一、引言 当前,每天有数以千计的新产品上线,但大多很快陨落,究其原因,不是技术不行或功能太差,甚至不是输给对手,而是消无声息的死去。为什么?原因就在于用户不再反馈和交流,没有真实的反馈作为方向盘,产品如同在夜晚行驶的汽车,或早或晚撞向了深渊。 二、“沉默的大…...

华与华是谁?

华与华是谁? “华与华”是由华杉和华楠两兄弟于2002年创立的战略营销咨询公司。他们的核心方法论是 “超级符号”和“超级话语” ,主张用人类文化中固有的、人人都熟悉符号和话语,来降低品牌的传播成本,让品牌一眼就被记住。 他们的著名成功案例包括:蜜雪冰城:“你爱我,…...

从工具到生态:现代Bug管理系统的平台化转型之路

从工具到生态:现代Bug管理系统的平台化转型之路 在DevOps和持续交付成为行业标配的当下,传统独立的Bug追踪系统正面临前所未有的挑战。随着软件开发流程的日益复杂化,仅具备单一缺陷记录功能的传统系统已难以满足高效协作需求。本文将深入分析传统Bug管理工具的局限性,解读…...

PK-CWT 系列罗氏线圈使用指南:操作方法与注意事项

一、概述 普科科技PRBTEK的PK-CWT系列柔性电流探头是一款采用柔性开环结构的专业测量工具,能够精准复现大功率开关全频段电流波形,在多个领域发挥着重要作用。 在性能方面,该系列产品表现出色。其频率响应带宽范围从0.1Hz至16MHz,这意味着它不仅能精准捕捉超低频段的缓变信…...

IDEA Debug 高阶技巧,老手都是这么玩的~~

IDEA Debug 高阶技巧,老手都是这么玩的~~ 小哈学Java2025年09月14日 15:23 安徽来源:juejin.cn/post/7308539123537592357 👉 欢迎加入小哈的星球,你将获得: 专属的项目实战(多个项目) / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论新项目:《Spring AI…...

mysql 创建分区,如何轻松提升海量数据查询效率

你是否遇到过这样的烦恼:随着业务增长,MySQL单表数据量突破千万级别,查询速度越来越慢,甚至影响用户体验?本文将带你深入理解MySQL分区功能,掌握提升大表查询性能的实战技巧。 什么是MySQL表分区 MySQL中的数据以文件形式存储在磁盘上,默认路径可通过my.cnf中的datadir查…...

完整教程:瑞派虹泰环城总院 | 打造“一站式宠物诊疗空间”,定义全国宠物医疗新高度

完整教程:瑞派虹泰环城总院 | 打造“一站式宠物诊疗空间”,定义全国宠物医疗新高度pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", &…...

BOE(京东方)携新能源领域新品亮相2025服贸会 引领绿色转型新动能

9 月 10 日,以“全球服务 互惠共享”为主题的2025中国国际服务贸易交易会(以下简称“服贸会”)在北京拉开帷幕。作为领先的物联网创新企业,BOE(京东方)携十余款全球首发的钙钛矿光伏产品,以及多款综合能源解决方案惊艳亮相。本次参展服贸会,是对BOE(京东方)可持续品牌…...

SpringBoot 集成支付宝支付,看这篇就够了

SpringBoot 集成支付宝支付,看这篇就够了 小哈学Java2025年09月15日 09:31 安徽来源:juejin.cn/post/7269357836026904633👉 欢迎加入小哈的星球,你将获得: 专属的项目实战(多个项目) / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论新项目:《Spring AI …...

工业智能终端赋能自动化生产线建设数字化管理 - 指南

工业智能终端赋能自动化生产线建设数字化管理 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monosp…...

一道模拟赛题

还没打 mx round7 的请勿观看一种我不太会优化的做法。感觉醍醐灌顶了。 链接:https://www.mxoj.net/problem/P130021?contestId=195人话题意:对值域在 \([1,2^n-1]\) 的严格上升序列计数,要求不能存在连续三个位置使得异或和为 \(0\)。\(n\leq 10^6\)。首先注意到,设 \(i…...

Pycharm打包PaddleOCR过程及疑问解决途径

Pycharm打包PaddleOCR过程及疑问解决途径pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !import…...

uni-app项目支付宝端Input不受控

最近在负责一个多端项目,其中有一个商品数量控制的功能,但是发现在支付宝端踩坑了出现了异常,一起来看看是怎么回事吧?前情 最近又接手一个全新多端项目,包括抖音/快手/微信/支付宝,其中就有支付宝端,需要实现一个SKU选择,同时需要控制选择的商品数量,如下图坑位 既然…...

适合小型企业的项目管理系统推荐:Reddit 用户真实需求

小型企业常遇工具分散、协作低效难题。本文对比5大项目管理系统,解析功能与优势,助你找到合适的项目管理解决方案。原文链接:https://www.nocobase.com/cn/blog/project-management-systems-for-small-businesses。 对于小型企业来说,项目管理系统(Project Management Sys…...

开启研究生学习阶段

人生之路,走走停停,波澜起伏; 没想到又有回到学校继续学习的机会。 小学、中学、大学、职场; 给我不同的人生体验, 其中的喜怒哀乐都像是过眼云烟, 模糊,清晰,历历在目。 当我写下这些文字的时候, 再看以前写的那些博客, 心中感慨万千; 人生如白驹过隙, 最后的结果…...

李航统计学习方法第二版 学习笔记

第一章 统计学习及监督学习概论 主要记录了监督学习内容 1.1 统计学习监督学习输入输出所有可能的取值分别称之为输入空间,输出空间.通常输出空间远小于输入空间(分类问题中 , 输入的是图片特征 , 只输出"是","否) 一个具体的输入为实例由特征向量表示所有可能的…...

如何拥有自己的一台永久免费云主机/云服务器

适用对象:不想花钱就能拥有自己的一台测试服务器,适用于一些大三大四学生和一些手头紧的用户,白嫖党 配置信息:1核1G5M10G 使用感受:虽然配置不是很高,但是满足自己日常的测试使用是足够的,搭建个人网盘,个人博客,用作测试服务器等等都是可以的 地址:阿贝云:https:/…...

第三周训练总结

上周赛时切题情况(含ICPC,附上题目名称和链接)#34.反转DAG图 #34.歪脖子树 #35.矩阵交换 #35.砖块摆放 #35.学习 LIS ICPC J.中位数 ICPC F.景区建设 #36.字符串博弈 #36.闪现数上周订题情况(附上题目名称和链接)#34.倒水问题 #34.树的颜色 #35.战略轰炸上周题解记录情况…...

godot格式化字符串

godot格式化字符串func _handle_rotation(delta):var target_rotation = randf_range(-PI,PI)var current_rotation = transform.basis.get_euler().y#平滑旋转transform.basis = transform.basis.slerp(Basis.from_euler(Vector3(0,target_rotation,0)),rotation_speed*delta)…...

reLeetCode 热题 100-1 两数之和-扩展2 map实现 - MKT

reLeetCode 热题 100-1 两数之和-扩展2 map实现1...

发现一个新的资源论坛 - 小小程序员

3Y论坛页面简约,论坛的资源也很齐全,页面网速也很快。网址:3y论坛 - 纯净的网盘资源分享社区邀请码:266yzo638u...

reLeetCode 热题 100-1 两数之和-扩展3 单向和双向链表实现 - MKT

reLeetCode 热题 100-1 两数之和-扩展3 单向和双向链表实现1...

codeforces1050div4题解

同步更新,但是现在网站的latex还没渲染好 https://happycoding.me/posts/codeforces-round-1050-div4/ A 思路: 当$n$为奇数时,答案为$x$,否则为$0$ B 思路: 显然每条线段都要经过,答案为$n+m$ C 题意: 现有$2$侧:$0$侧和$1$侧,$0$分钟一开始在$0$侧,尽可能地在两侧之…...

深入解析:少儿舞蹈小程序(13)作品播放量累加及点赞

深入解析:少儿舞蹈小程序(13)作品播放量累加及点赞pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monos…...

Ubuntu 24.04 安装最新版podman@5.6.1

0. 更新系统 sudo apt update && sudo apt upgrade -y 1. 下载并解压官方静态包 cd /tmp curl -L -O https://github.com/containers/podman/releases/download/v5.6.1/podman-remote-static-linux_amd64.tar.gz tar -xzf podman-remote-static-linux_amd64.tar.gz chm…...

深入解析:Unity:XML笔记(二)——Xml序列化、反序列化、IXmlSerializable接口

深入解析:Unity:XML笔记(二)——Xml序列化、反序列化、IXmlSerializable接口pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "C…...

2025.9.15——知识点学习

图 回路 起点和终点相同的路径,也叫“环” 重边 两个顶点中间不只有一条边 自环 自己到自己的边 简单图 没有重边和自环的图 完全图 每对定点之间都恰有一条边相连 稠密图 边数接近完全图,e>=NlogN 稀疏图 边数远少于完全图,e<NlogN...

详细介绍:拉帮结派下的制造麻烦

详细介绍:拉帮结派下的制造麻烦pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !important; fon…...

C# Avalonia 13- MoreDrawing - CustomPixelShader

C# Avalonia 13- MoreDrawing - CustomPixelShader目前Avalonia无法继承Effect类重写,因为构造函数是internal。我们重写一个GrayscaleImage实现灰化。GrayscaleImage类public class GrayscaleImage : Control{public static readonly StyledProperty<IImage?> SourceP…...

使用标签Tag控制蒙太奇的触发时机-playmontageAndWait-Send GameplayEvent-WaitGameplayEvent

控制蒙太奇的通知,可以在蒙太奇中的通知中发送标签事件,在GA中接收标签事件 在事件通知蓝图中...

sql事务执行

使用上下文管理器from sqlalchemy import create_engine, text from sqlalchemy.orm import sessionmaker from contextlib import contextmanager import logging# 创建数据库连接 engine = create_engine(mysql+pymysql://username:password@localhost/dbname) SessionLocal …...

GAS_Aura-Spawn FireBolt from Event

1将Spawn火球设置为单独的接口,并在触发GA时触发...