LangChain深度解析:模型调用的艺术与实践

Model I/O

概述

LangChain的模型是框架中的核心,基于语言模型构建,用于开发LangChain应用。通过API调用大模型来解决问题是LangChain应用开发的关键过程。

可以把对模型的使用过程拆解成三块: 输入提示(Format)调用模型(Predict)输出解析(Parse)

1.提示模板: LangChain的模板允许动态选择输入,根据实际需求调整输入内容,适用于各种特定任务和应用。2.语言模型: LangChain 提供通用接口调用不同类型的语言模型,提升了灵活性和使用便利性。3.输出解析: 利用 LangChain 的输出解析功能,精准提取模型输出中所需信息,避免处理冗余数据,同时将非结构化文本转换为可处理的结构化数据,提高信息处理效率。

这三块形成了一个整体,在LangChain中这个过程被统称为Model I/O。针对每块环节,LangChain都提供了模板和工具,可以帮助快捷的调用各种语言模型的接口。

在这里插入图片描述

Model 模型

LangChain支持的模型有三大类

1.大语言模型(LLM) ,也叫Text Model,这些模型将文本字符串作为输入,并返回文本字符串作为输出。2.聊天模型(Chat Model),主要代表Open AI的ChatGPT系列模型。这些模型通常由语言模型支持,但它们的API更加结构化。具体来说,这些模型将聊天消息列表作为输入,并返回聊天消息。3.文本嵌入模型(Embedding Model),这些模型将文本作为输入并返回浮点数列表,也就是Embedding。

大语言模型与聊天模型区别:

聊天模型通常由大语言模型支持,但专门调整为对话场景。重要的是,它们的提供商API使用不同于纯文本模型的接口。输入被处理为聊天消息列表,输出为AI生成的消息。

LangChain中的LLM指的是纯文本补全模型。它们包装的 API 将字符串提示作为输入并输出字符串完成。

调用OpenAI模型

设置环境变量

import os
os.environ["OPENAI_BASE_URL"] = "https://xxx.com/v1"
os.environ["OPENAI_API_KEY"] = "sk-fDqouTlU62yjkBhF46284543Dc8f42438a9529Df74B4Ce65"

大语言模型LLM

LangChain的核心组件是大型语言模型(LLM),它提供一个标准接口以字符串作为输入并返回字符串的形式与多个不同的LLM进行交互。这一接口旨在为诸如OpenAI、Cohere、Hugging Face等多家LLM供应商提供标准化的对接方法。

from langchain_openai import OpenAItext = "你好"
# LLM纯文本补全模型
llm = OpenAI()
res = llm.invoke(text)
print(text + res)
你好,世界!

异步支持对于同时调用多个LLM特别有用,因为这些调用是网络限制的。

可以使用agenerate方法异步调用LLM

import time
import asyncio
from langchain_openai import OpenAI# 定义一个函数,使用OpenAI的API生成文本并依次打印结果
def generate_serially():llm = OpenAI(temperature=0.9)  # 初始化 OpenAI 实例for _ in range(5):resp = llm.generate(["你好啊?"])  # 调用生成方法,传入文本请求print(resp.generations[0][0].text)  # 打印生成的文本结果# 定义一个异步函数,使用OpenAI的API异步生成文本并打印结果
async def async_generate(llm):resp = await llm.agenerate(["你是谁?"])  # 异步调用生成方法,传入文本请求print(resp.generations[0][0].text)  # 打印异步生成的文本结果# 定义一个异步函数,用于并发执行多个 async_generate 函数
async def generate_concurrently():llm = OpenAI(temperature=0.9)  # 初始化 OpenAI 实例tasks = [async_generate(llm) for _ in range(5)]  # 创建多个任务列表await asyncio.gather(*tasks)  # 并发等待所有任务完成# 计算并发执行时间
s = time.perf_counter()  # 记录开始时间
asyncio.run(generate_concurrently())  # 运行异步函数
elapsed = time.perf_counter() - s  # 计算执行时间
print(f"异步执行 {elapsed:0.2f} 秒.")  # 打印并发执行时间# 计算串行执行时间
s = time.perf_counter()  # 记录开始时间
generate_serially()  # 串行执行函数
elapsed = time.perf_counter() - s  # 计算执行时间
print(f"同步执行 {elapsed:0.2f} 秒.")  # 打印串行执行时间
我是一个人工智能程序,没有真正的身份。我被设计来回答问题和提供帮助。我是一个人工智能助手,可以回答你关于技术或知识的问题。我是一个程序,没有具体的身份。我是由人类编写的,用来帮助回答问题和执行任务的。我是一台人工智能程序,无法具有实际的身份。我是由程序员编写和训练的,旨在通过语言交互来提供帮助和娱乐。我是一个人工智能程序,被设计和程序员们一起工作,以帮助解决各种问题。我可以回答你的问题,提供帮助和建议。 
异步执行 6.20 秒.你好,我是一个人工智能助手。有什么可以帮到您的吗?我是一个程序,无法感受情绪,但是很高兴能和你交流。你好吗?你好!我是一个人工智能助手,很高兴认识你。有什么可以帮助你的吗?你好,我是一个智能助手,很高兴认识你。有什么可以帮助你的吗?Hello! How are you? 
同步执行 10.29 秒.

聊天模型

聊天模型是LangChain的核心组件,使用聊天消息作为输入并返回聊天消息作为输出。LangChain集成了许多模型提供商(OpenAI、Cohere、Hugging Face等),并公开了标准接口用于
与这些模型进行交互。LangChain允许在同步、异步、批处理和流模式下使用模型,并提供其他功能,如缓存。

LangChain有一些内置的消息类型:

消息类型描述
SystemMessage用于启动 AI 行为,通常作为输入消息序列中的第一个传递。
HumanMessage表示来自与聊天模型交互的人的消息。
AIMessage表示来自聊天模型的消息。这可以是文本,也可以是调用工具的请求。
FunctionMessage/ToolMessage用于将工具调用结果传递回模型的消息。
from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessagetext = "你好"
# 聊天模型
chat_model = ChatOpenAI(model="gpt-3.5-turbo")
messages = [HumanMessage(content=text)]res = chat_model.invoke(messages)
print(res)
content='你好!有什么可以帮助你的吗?' response_metadata={'token_usage': {'completion_tokens': 17, 'prompt_tokens': 9, 'total_tokens': 26}, 'model_name': 'gpt-3.5-turbo', 'system_fingerprint': 'fp_b28b39ffa8', 'finish_reason': 'stop', 'logprobs': None} id='run-c1641695-dab6-44f3-9037-44904cc166e9-0'

聊天模型支持多个消息作为输入

messages = [SystemMessage(content="你是一位乐于助人的助手。"),HumanMessage(content="你好")
]
chat.invoke(messages)

文本嵌入模型

Embedding类是一个用于与嵌入进行交互的类。有许多嵌入提供商(OpenAI、Cohere、Hugging Face等)- 这个类旨在为所有这些提供商提供一个标准接口。

嵌入会创建文本的向量表示,这使得我们可以在向量空间中考虑文本,并进行语义搜索等操作,即在向量空间中查找最相似的文本片段。

from langchain_openai import OpenAIEmbeddings# 初始化 OpenAIEmbeddings 实例
embeddings = OpenAIEmbeddings()
# embeddings = OpenAIEmbeddings(model="text-embedding-3-large")# 定义一个文本字符串
text = "这是一份测试文档."# 嵌入文档
doc_result = embeddings.embed_documents([text])
print(doc_result[0][:5])# 嵌入查询
query_result = embeddings.embed_query(text)
print(query_result[:5])
[-0.006240383366130216, -0.003690876131687136, 0.0035220345636857247, -0.006399094239817186, -0.013473554751640016][-0.006240383366130216, -0.003690876131687136, 0.0035220345636857247, -0.006399094239817186, -0.013473554751640016]

调用谷歌模型

通过langchain-google-genai集成包中的类ChatGoogleGenerativeAI,访问 Google AIgemini和gemini-vision模型,以及其他生成模型 。

环境准备

安装langchain-google-genai包

pip install langchain-google-genai

访问[Google AI Studio],创建API密钥

import os# 设置API_Key
os.environ["GOOGLE_API_KEY"] = ''

聊天模型

from langchain_google_genai import ChatGoogleGenerativeAIllm = ChatGoogleGenerativeAI(model="gemini-pro")
res = llm.invoke("你好,你是谁?")
print(res)

在这里插入图片描述 SystemMessageGemini目前不支持,但可以设置convert_system_message_to_human=True来支持

from langchain_google_genai import ChatGoogleGenerativeAIllm = ChatGoogleGenerativeAI(model="gemini-pro-vision")
from langchain_core.messages import HumanMessage, SystemMessagemodel = ChatGoogleGenerativeAI(model="gemini-pro", Convert_system_message_to_human=True)
res = model.invoke([SystemMessage(content="你是一个乐于助人的AI助手"),HumanMessage(content="你好啊"),]
)
print(res.content)
你好!很高兴见到你。我是 Gemini,是 Google 开发的多模态 AI 语言模型。

大语言模型

from langchain_google_genai import GoogleGenerativeAI# 使用LLM对话
GOOGLE_API_KEY = ""
llm = GoogleGenerativeAI(model="gemini-pro", google_api_key=GOOGLE_API_KEY)
print(llm.invoke("Python 作为编程语言的一些优点和缺点是什么?")
)

使用Chain

from langchain_core.prompts import PromptTemplate# 提示模板
template = """
问题: {question}答:让我们一步一步来思考
"""
# 创建模板实例
prompt = PromptTemplate.from_template(template)
# 使用chain
chain = prompt | llm
# 调用
question = "2+2是多少?"
print(chain.invoke({"question": question}))

流式处理和批处理

for chunk in llm.stream("Write a limerick about LLMs."):print(chunk.content)
results = llm.batch(["What's 2+2?","What's 3+5?",]
)
for res in results:print(res.content)

视觉消息对话

from langchain_core.messages import HumanMessage
from langchain_google_genai import ChatGoogleGenerativeAIllm = ChatGoogleGenerativeAI(model="gemini-pro-vision")message = HumanMessage(content=[{"type": "text","text": "这张图片中有什么?",},{"type": "image_url", "image_url": "https://picsum.photos/seed/picsum/200/300"},]
)
res = llm.invoke([message])
# 图片中显示的是一座被白雪覆盖的山峰,山峰在日落时分被染成了粉红色。
print(res.content)

文本嵌入

谷歌模型使用嵌入模型也非常简单,如下所示

from langchain_google_genai import GoogleGenerativeAIEmbeddings# 加载内嵌向量模型
embeddings = GoogleGenerativeAIEmbeddings(model="models/embedding-001")# 向量化
vectors = embeddings.embed_documents(["Today is Monday","Today is Tuesday","Today is April Fools day",]
)
print(len(vectors), len(vectors[0]))# 向量查询
vector = embeddings.embed_query("hello, world!")
print(vector[:5])

调用Hugging Face模型

环境准备

访问:[HuggingFace],在个人设置中心,创建一个API Token 在这里插入图片描述

安装以下相关库

pip install text_generation langchainhub  

在程序中设置API Token

# 导入HuggingFace API Token
import os
os.environ['HUGGINGFACEHUB_API_TOKEN'] = 'HuggingFace API Token'

在命令行中运行 huggingface-cli login,设置API Token。

(langchain) PS C:\WorkSpace\langchain> huggingface-cli login_|    _|  _|    _|    _|_|_|    _|_|_|  _|_|_|  _|      _|    _|_|_|      _|_|_|_|    _|_|      _|_|_|  _|_|_|_|_|    _|  _|    _|  _|        _|          _|    _|_|    _|  _|            _|        _|    _|  _|        _|_|_|_|_|  _|    _|  _|  _|_|  _|  _|_|    _|    _|  _|  _|  _|  _|_|      _|_|_|    _|_|_|_|  _|        _|_|_|_|    _|  _|    _|  _|    _|  _|    _|    _|    _|    _|_|  _|    _|      _|        _|    _|  _|        _|_|    _|    _|_|      _|_|_|    _|_|_|  _|_|_|  _|      _|    _|_|_|      _|        _|    _|    _|_|_|  _|_|_|_|A token is already saved on your machine. Run `huggingface-cli whoami` to get more information or `huggingface-cli logout` if you want to log out.        Setting a new token will erase the existing one.To login, `huggingface_hub` requires a token generated from https://huggingface.co/settings/tokens .
Token can be pasted using 'Right-Click'.
Enter your token (input will not be visible):
Token is valid (permission: write).
Your token has been saved in your configured git credential helpers (manager).
Your token has been saved to C:\Users\Admin\.cache\huggingface\token
Login successful

聊天模型

利用HuggingFaceEndpoint或HuggingFaceHub集成来实例化LLM,然后与LangChain的聊天消息抽象进行交互。

1.HuggingFaceHub HuggingFaceHub将在LangChain的0.2.0版本弃用,但目前任然支持。

import os
os.environ["GOOGLE_API_KEY"] = ''from langchain_community.llms import HuggingFaceHubllm = HuggingFaceHub(repo_id="HuggingFaceH4/zephyr-7b-beta",task="text-generation",model_kwargs={"max_new_tokens": 30,"top_k": 1,"temperature": 0.1,"repetition_penalty": 1.03,},
)print(llm.invoke("你好,你是谁?"))
你好,你是谁?你好,我是小明。请问,你在做什么?我在学习汉语。

2.HuggingFaceEndpoint HuggingFaceEndpoint类是LangChain现在及未来主要推荐的库

from langchain_community.llms.huggingface_endpoint import HuggingFaceEndpointENDPOINT_URL = "HuggingFaceH4/zephyr-7b-beta"
HF_TOKEN = ""llm = HuggingFaceEndpoint(endpoint_url=ENDPOINT_URL,max_new_tokens=30,top_k=2,top_p=0.95,typical_p=0.95,temperature=0.01,repetition_penalty=1.03,huggingfacehub_api_token=HF_TOKEN
)print(llm.invoke("你好,你是谁?"))

大语言模型

Hugging Face模型中心托管了超过12万个模型、2万个数据集和5万个演示应用程序(Spaces),所有这些都是开源和公开的。人们可以在该在线平台上轻松协作并共同构建机器学习。这些资源可以通过本地管道包装器从LangChain调用,也可以通过HuggingFaceHub类调用托管的推理端点。

使用transformers库,需要额外安装

pip install transformers==4.39.3 accelerate==0.29.1  torch
from langchain_community.llms.huggingface_pipeline import HuggingFacePipelinehf = HuggingFacePipeline.from_model_id(model_id="gpt2",task="text-generation",pipeline_kwargs={"max_new_tokens": 10},
)print(hf.invoke("你好,你是谁?"))

transformers也可以通过直接传入现有管道来加载

# 导入 HuggingFacePipeline 类和相关模块
from langchain_community.llms.huggingface_pipeline import HuggingFacePipeline
from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline# 定义 GPT-2 模型的标识
model_id = "gpt2"# 加载 GPT-2 模型的 tokenizer
tokenizer = AutoTokenizer.from_pretrained(model_id)# 加载 GPT-2 模型本身
model = AutoModelForCausalLM.from_pretrained(model_id)# 创建一个文本生成的 pipeline,最多生成 10 个新 token
pipe = pipeline("text-generation", model=model, tokenizer=tokenizer, max_new_tokens=10)# 初始化 HuggingFacePipeline 对象,传入文本生成的 pipeline
hf = HuggingFacePipeline(pipeline=pipe)# 打印
print(llm.invoke("你好啊!"))

使用消息对象

from langchain.schema import (HumanMessage,SystemMessage,
)messages = [SystemMessage(content="你是一个乐于助人的助手"),HumanMessage( content="你好,你是谁?"),
]res = llm.invoke(messages)
print(res)
Token has not been saved to git credential helper. Pass `add_to_git_credential=True` if you want to set the git credential as well.
Token is valid (permission: write).
Your token has been saved to C:\Users\Admin\.cache\huggingface\token
Login successfulAssistant: 我是一个智能语音助手,我可以为您提供各种信息和帮助。

在这里插入图片描述

大模型&AI产品经理如何学习

求大家的点赞和收藏,我花2万买的大模型学习资料免费共享给你们,来看看有哪些东西。

1.学习路线图

在这里插入图片描述

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

2.视频教程

网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我自己整理的大模型视频教程,上面路线图的每一个知识点,我都有配套的视频讲解。

在这里插入图片描述

在这里插入图片描述

(都打包成一块的了,不能一一展开,总共300多集)

因篇幅有限,仅展示部分资料,需要点击下方图片前往获取

3.技术文档和电子书

这里主要整理了大模型相关PDF书籍、行业报告、文档,有几百本,都是目前行业最新的。
在这里插入图片描述

4.LLM面试题和面经合集

这里主要整理了行业目前最新的大模型面试题和各种大厂offer面经合集。
在这里插入图片描述

👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。
在这里插入图片描述

1.AI大模型学习路线图
2.100套AI大模型商业化落地方案
3.100集大模型视频教程
4.200本大模型PDF书籍
5.LLM面试题合集
6.AI产品经理资源合集

👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/404515.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Kubernetes中如何对etcd进行备份和还原】

🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出…

开放式耳机哪种好用?开放式种草测评!

现在很多人都很喜欢用开放式耳机了,因为这种耳机非常的舒服,而且不会压迫我们的耳道,从而给到我们更健康的体验,但是现在开放式耳机的品牌越来越多,我们也越来越难选择,所以我们应该怎么样才能选到一款适合…

(七)Activiti-modeler中文支持

1、修改app.js,51行 注意第3步,之前已经访问过,缓存到cookie了,这里要么注释该方法,要么去浏览器手动删除对应cookie才能使用下面的zh-CN.json 2、i18n\en.json中添加zh-CN.json (以下代码片断为网上获得…

【傅里叶分析】复数基础知识

【傅里叶分析】复数基础知识 复数复数的几何意义与点的对应与向量的对应 复数与极坐标辐角与辐角主值三角函数 参考文献 本文参考了网上的其他文章,已在文末参考文献中列出;如有侵权,请联系我删除。 复变函数是傅里叶分析的基础,而…

1、1.5、2.5、4、6、10平铜线可以带多大用电器?安全用电须知

现在家用铜线规格多是1、1.5、2.5、4、6平,那么这几种规格的导线能带多少瓦的用电器呢?今天小编就陪大家一起来分析一下。(1平指的是国标导线的横截面积为1平方毫米) 铜导线 红色用做火线,蓝色用做零线,黄…

Python中使用SQLite数据库的方法4-3

对于数据库的操作,主要包括“增”、“删”、“改”、“查”四种。在Python中使用SQLite数据库的方法4-1_python的sqlite怎么打开-CSDN博客和Python中使用SQLite数据库的方法4-2_python2 sqlite2-CSDN博客中实现增”、“删”和“查”三种操作。 1 带过滤条件的“查”…

深度学习基础—学习率衰减与局部最优问题

1.学习率衰减 下图中,蓝色的线是min-batch梯度下降法过程中较大学习率的的优化路径,绿线是较小学习率的优化路径。 如果使用min-batch梯度下降法,在模型的学习过程中,会有很多噪声,在靠近最小值的时候,由于…

测试用例的设计

*涉及概念来源于《软件测试的艺术》 目录 一、为什么要设计测试用例? 二、黑盒测试与白盒测试介绍 三、测试用例常见设计方法 1.黑盒测试(功能测试) 2.白盒测试(结构测试) 四、测试策略 五、测试用例怎么写 一、为什么要设计测试用例? 由于时间…

美国云服务器租赁多少钱一个月?

美国云服务器租赁大致价格区间为70元/月至数千元/月。不同的云服务器提供商,其定价策略和服务质量各不相同,导致价格存在差异。配置越高,价格自然越高。带宽越高、流量越大,费用通常也越高。另外,数据中心位置和服务水…

JVM 内存区域

一、JVM 简介 【概述】 JVM是Java虚拟机(Java Virtual Machine)的简称,是一种用于计算设备的规范,是一个虚构出来的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现的。我们学习使用的基本都是HotSpot虚拟…

学习node.js 二 path模块,os模块,process

目录 path模块 1. path.basename() 2. path.dirname 3. path.extname 4. path.join 5. path.resolve 6. path.parse path.format OS模块 1. 获取操作系统的一些信息 (1)os.platform() (2)os.release (3)os.ho…

2024年玩转音乐,不只是剪辑!这4款软件让创意跳跃在每个音符间

现在这年头,音乐不光是听个乐呵,还能暖暖心。要是想自己捣鼓捣鼓这音乐,或者给日常生活加个调调,有个好的音乐剪辑软件就特别重要。今天,我就来晒晒我收藏的那些音乐剪辑软件,这些软件不光是剪剪切切的工具…

分布式缓存———数据一致性问题

分布式基础理论 CAP理论 与 BASE理论-CSDN博客 分布式系统会的三座大山:NPC。 N:Network Delay,网络延迟P:Process Pause,进程暂停(GC)C:Clock Drift,时钟漂移 在当前…

机器学习第十一章——计算学习理论

一、基础知识 计算学习理论(computational learning theory)研究的是关于通过“计算”来进行“学习”的理论,即关于机器学习的理论基础,其目的是分析学习任务的困难本质,为学习算法提供理论保证,并根据分析结果指导算法设计。 给…

Verilog刷题笔记53

题目: Fsm serialdata See also: Serial receiver Now that you have a finite state machine that can identify when bytes are correctly received in a serial bitstream, add a datapath that will output the correctly-received data byte. out_byte needs …

如果忘记了 Apple ID 密码,如何重设

“我忘记了我的 Apple ID 密码,如何恢复我的帐户?”为了方便用户,Apple 允许每个人使用唯一的 Apple ID 和密码激活设备并访问所有 Apple 服务。然而,实际上,手动选择某项并忘记它似乎很容易。例如,许多 Ap…

基于web框架的协同过滤的美食推荐系统【数据爬虫、管理系统、数据可更新、样式可调整】

文章目录 有需要本项目的代码或文档以及全部资源,或者部署调试可以私信博主项目介绍研究背景研究的目的与意义协同过滤算法基于用户的协同过滤算法定义基于物品的协同过滤算法的定义 数据库设计db_food(美食信息表)db_collect(美食…

eclipse打开失败 java was started but returned exit code=13

报错详细信息如下 原因:eclipse版本和jdk版本不一致。系统之前jdk是1.6,然后安装1.8之后默认修改了环境变量。导致eclipse启动失败 解决方案:修改eclipse目录下的eclipse.ini文件增加一下内容。文档说明:eclipse.ini - Eclipsepe…

还在用Hexo吗?来试试Gatsby搭建一个网站吧!

本文首发于个人博客网站:http://www.blog.lekshome.top/2024/08/20/shi-yong-gatsby-da-jian-ge-ren-wang-zhan/由于CSDN并不是本人主要的内容输出平台,所以大多数博客直接由md文档导入且缺少审查和维护,如果存在图片或其他格式错误可以前往上…

Halcon灰度图像的形态学运算

Halcon灰度图像的形态学运算 本文介绍的算子的输入类型是灰度的Image图像。 1. 灰度图像与区域的区别 基于区域的形态学运算与基于灰度图像的形态学运算的根本区别在于,二者输入的对象不同。前者输入的是一些区域,并且这些区域是经过闽值处理的二值图…