《LLM大语言模型+RAG实战+Langchain+ChatGLM-4+Transformer》
文章目录
- Langchain的定义
- Langchain的组成
- 三个核心组件实现
- 整个核心组成部分
- 为什么要使用Langchain
- Langchain的底层原理
- Langchain实战操作
- LangSmith
- LangChain调用LLM
- 安装openAI库-国内镜像源
- 代码
- 运行结果
- 小结
- 使用Langchain的提示模板
- 部署Langchain程序
- 安装langserve
- 代码
- 请求格式
- Langchain构建聊天机器人
- 安装依赖
- 代码
- 运行结果
- 流式输出+历史记录
- 运行结果
- LangChain构建向量数据库和检索器
- 导入向量数据库依赖
- 做一个依赖更新对齐
- 代码
- 运行结果
- 检索器
- 运行结果
- 检索器和模型结合
- LangChain构建代理
- 目的
- 定义工具
- Tavily
- 安转该工具依赖
- 代码
- 回答
- Retriever
- 代码
- 运行结果
- Agent代理使用语言模型选择工具
- LangChain读取数据库
- 安装依赖
- 测试数据库是否连接成功
- 完整代码
- 运行结果
- Agent整合数据库
- 运行结果
- 源代码下载
Langchain的定义
Langchain是一个用于由语言模型驱动的应用程序框架。
其实就是能给把大语言模型和外部的数据源(私有数据)进行结合。这个框架类似于SpringBoot框架,让用户能给直接通过它使用大语言模型。
Langchain的组成
三个核心组件实现
- Compents组件:为LLMs提供封装接口、模版提示、信息检索索引,类似于jdbc的驱动程序
- Chains链:将不同的组件组合起来解决特定的任务,比如在大量文本中查找信息
- Agents代理:他们使得LLMs能与外部环境进行交互,例如通过API请求执行操作
整个核心组成部分
- 模型Models:模型包装器,允许你连接到各种大语言模型,如GPT4或Hugging Face也包括GLM提供的模型。
- Prompt Template:这些模版让你避免硬编码文本输入。你可以动态输入提示词,发送给大语言模型。
- Chains:链允许多个组件组合在一起,解决特定的任务,构建完整的语言模型应用程序
- Agents:代理允许语言模型与外部API交互
- Embedding:嵌入与向量存储。
- Indexes:索引帮助你从语言模型中提取相关信息
为什么要使用Langchain
理由:
- 数据连接
Langchain允许你将大语言模型连接到你自己的数据源,比如数据库、pdf文件,可以连接你私有的数据中提取信息。
- 行动执行
不仅可以提取信息,Langchain还可以帮助你根据这些信息执行特定的动作,比如发送邮件。
Langchain的底层原理
Langchain实战操作
LangSmith
Langsmith是一个构建生产级LLM应用程序的平台,它提供了调试、测试、评估和监控基于任何LLM框架构建的链和智能代理的功能,并且能与LangChain无缝集成。
LangSmith是LangChain的一个子产品,是一个大模型应用开发平台。它提供了从原型到生产的全流程工具和服务,帮助开发者构建、测试、评估和监控基于LangChain或其他LLM框架的应用程序。
LangChain调用LLM
那接下来狐哥带大家进入实战环境。
使用的环境:
- pycharm
- python3.10
安装openAI库-国内镜像源
pip install langchain-openai -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
代码
import getpass
import osfrom langchain_core.messages import SystemMessage, HumanMessage
from langchain_openai import ChatOpenAI
os.environ["http_proxy"] = "127.0.0.1:7890"
os.environ["https_proxy"] = "127.0.0.1:7890"os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_API_KEY"] = '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'#调用大语言模型
model = ChatOpenAI(model='gpt-4o-mini')msg = [SystemMessage(content='请将以下的内容翻译成意大利语'),HumanMessage(content='你好,请问你要去哪里?')
]result = model.invoke(msg)
print(result)#简单的响应解析数据
parser = StrOutputParser()
print(parser.invoke(result))
运行结果
content='Ciao, dove stai andando?' additional_kwargs={'refusal': None} response_metadata={'token_usage': {'completion_tokens': 9, 'prompt_tokens': 30, 'total_tokens': 39, 'completion_tokens_details': {'accepted_prediction_tokens': 0, 'audio_tokens': 0, 'reasoning_tokens': 0, 'rejected_prediction_tokens': 0}, 'prompt_tokens_details': {'audio_tokens': 0, 'cached_tokens': 0}}, 'model_name': 'gpt-4o-mini-2024-07-18', 'system_fingerprint': 'fp_72ed7ab54c', 'finish_reason': 'stop', 'logprobs': None} id='run-4b3c8dc2-62ab-4a5e-b327-827cd0c3ecf5-0' usage_metadata={'input_tokens': 30, 'output_tokens': 9, 'total_tokens': 39}
小结
其实上面的步骤可以总结一下,用更简单的方式实现,通用的步骤:
import getpass
import osfrom langchain_core.messages import SystemMessage, HumanMessage
from langchain_core.output_parsers import StrOutputParser
from langchain_openai import ChatOpenAI
os.environ["http_proxy"] = "127.0.0.1:7890"
os.environ["https_proxy"] = "127.0.0.1:7890"os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_API_KEY"] = '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'#调用大语言模型
#1、创建大模型
model = ChatOpenAI(model='gpt-4o-mini')#2、准备提示
msg = [SystemMessage(content='请将以下的内容翻译成意大利语'),HumanMessage(content='你好,请问你要去哪里?')
]result = model.invoke(msg)
# print(result)#3、创建返回数据的解析器 简单的响应解析数据
parser = StrOutputParser()
# print(parser.invoke(result))#4、得到链
chain = model | parser#5、直接使用chain来调用
print(chain.invoke(msg))
- 创建大模型
- 准备提示
- 创建返回数据的解析器
- 得到链
- 直接使用chain来调用
使用Langchain的提示模板
import getpass
import osfrom langchain_core.messages import SystemMessage, HumanMessage
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI
os.environ["http_proxy"] = "127.0.0.1:7890"
os.environ["https_proxy"] = "127.0.0.1:7890"os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_API_KEY"] = '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'#调用大语言模型
#1、创建大模型
model = ChatOpenAI(model='gpt-4o-mini')#2、准备提示
msg = [SystemMessage(content='请将以下的内容翻译成意大利语'),HumanMessage(content='你好,请问你要去哪里?')
]result = model.invoke(msg)
# print(result)#3、创建返回数据的解析器 简单的响应解析数据
parser = StrOutputParser()
# print(parser.invoke(result))# 定义提示模板
prompt_template = ChatPromptTemplate.from_messages([('system','请将下面的内容翻译成{language}'),('user','{text}')
])#4、得到链
chain = prompt_template | model | parser#5、直接使用chain来调用
# print(chain.invoke(msg))
print(chain.invoke({'language': 'English','text': '你好,请问你要去哪里?'
}))
部署Langchain程序
安装langserve
pip install "langserve[all]"
代码
import getpass
import osfrom fastapi import FastAPI
from langchain_core.messages import SystemMessage, HumanMessage
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI
from langserve import add_routesos.environ["http_proxy"] = "127.0.0.1:7890"
os.environ["https_proxy"] = "127.0.0.1:7890"os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_API_KEY"] = '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'#调用大语言模型
#1、创建大模型
model = ChatOpenAI(model='gpt-4o-mini')#2、准备提示
# msg = [
# SystemMessage(content='请将以下的内容翻译成意大利语'),
# HumanMessage(content='你好,请问你要去哪里?')
# ]
#
# result = model.invoke(msg)
# print(result)#3、创建返回数据的解析器 简单的响应解析数据
parser = StrOutputParser()
# print(parser.invoke(result))# 定义提示模板
prompt_template = ChatPromptTemplate.from_messages([('system','请将下面的内容翻译成{language}'),('user','{text}')
])#4、得到链
chain = prompt_template | model | parser#5、直接使用chain来调用
# print(chain.invoke(msg))
print(chain.invoke({'language': 'English','text': '你好,请问你要去哪里?'
}))# 把我们的程序部署成服务
# 创建FastAPI应用
app = FastAPI(title='我的Langchain服务',version='1.0',description='这是一个Langchain服务-翻译任何语句的服务')
add_routes(app,chain,path="/chain",
)if __name__ == '__main__':import uvicornuvicorn.run(app, host="localhost", port=8000)
请求格式
POST
http://localhost:8000/chain/invoke,其中invoke不能少!
{"input":{"language":"English","text":"我要去上课了,明天和你聊天"}
}
运行结果:
Langchain构建聊天机器人
构建一个聊天机器人的重点是:
- ChatHistory:允许聊天机器人能给记住过去的互动
- 流式输出:一个token一个token的输出
安装依赖
pip install langchain_community -i https://pypi.tuna.tsinghua.edu.cn/simple/
代码
import getpass
import os
from langchain_community.chat_message_histories import ChatMessageHistory
from fastapi import FastAPI
from langchain_core.messages import SystemMessage, HumanMessage
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_core.runnables import RunnableWithMessageHistory
from langchain_openai import ChatOpenAI
from langserve import add_routesos.environ["http_proxy"] = "127.0.0.1:7890"
os.environ["https_proxy"] = "127.0.0.1:7890"os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_PROJECT"] = "langchainDemo"
os.environ["LANGCHAIN_API_KEY"] = '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'#聊天机器人案例
#1、创建大模型
model = ChatOpenAI(model='gpt-4o-mini')# 定义提示模板
prompt_template = ChatPromptTemplate.from_messages([('system','你是一个非常乐于助人的助手,请用{language}尽可能回答所有问题。'),MessagesPlaceholder(variable_name='my_msg')
])#4、得到链
chain = prompt_template | model#保存历史聊天记录
store = {} #所有用户的聊天记录都保存在store里。key:sessionId ,value:历史聊天记录对象#此函数预期将接受一个session_id,并返回一个包含所有历史聊天记录对象
def get_session_history(session_id:str):if session_id not in store:store[session_id] = ChatMessageHistory()#创建一个空的历史聊天记录对象return store[session_id]do_message = RunnableWithMessageHistory(chain,get_session_history,input_messages_key='my_msg'#每次聊天的时候发送msg的key
)config = {'configurable':{'session_id':'zs123'}}#给当前会话顶一个session_id#第一轮聊天发出去的信息
resp = do_message.invoke({'my_msg':[HumanMessage(content='你好,我是令狐!')],'language':'中文'},config=config
)print(resp.content)#第二轮聊天发出去的信息
resp = do_message.invoke({'my_msg':[HumanMessage(content='请问我的名字是什么?')],'language':'中文'},config=config
)print(resp.content)
运行结果
流式输出+历史记录
import getpass
import os
from langchain_community.chat_message_histories import ChatMessageHistory
from fastapi import FastAPI
from langchain_core.messages import SystemMessage, HumanMessage
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_core.runnables import RunnableWithMessageHistory
from langchain_openai import ChatOpenAI
from langserve import add_routesos.environ["http_proxy"] = "127.0.0.1:7890"
os.environ["https_proxy"] = "127.0.0.1:7890"os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_PROJECT"] = "langchainDemo"
os.environ["LANGCHAIN_API_KEY"] = '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'#聊天机器人案例
#1、创建大模型
model = ChatOpenAI(model='gpt-4o-mini')# 定义提示模板
prompt_template = ChatPromptTemplate.from_messages([('system','你是一个非常乐于助人的助手,请用{language}尽可能回答所有问题。'),MessagesPlaceholder(variable_name='my_msg')
])#4、得到链
chain = prompt_template | model#保存历史聊天记录
store = {} #所有用户的聊天记录都保存在store里。key:sessionId ,value:历史聊天记录对象#此函数预期将接受一个session_id,并返回一个包含所有历史聊天记录对象
def get_session_history(session_id:str):if session_id not in store:store[session_id] = ChatMessageHistory()#创建一个空的历史聊天记录对象return store[session_id]do_message = RunnableWithMessageHistory(chain,get_session_history,input_messages_key='my_msg'#每次聊天的时候发送msg的key
)config = {'configurable':{'session_id':'zs123'}}#给当前会话顶一个session_id#第一轮聊天发出去的信息
resp = do_message.invoke({'my_msg':[HumanMessage(content='你好,我是令狐!')],'language':'中文'},config=config
)print(resp.content)#第二轮聊天发出去的信息
resp = do_message.invoke({'my_msg':[HumanMessage(content='请问我的名字是什么?')],'language':'中文'},config=config
)print(resp.content)#重新换一轮对话
config = {'configurable':{'session_id':'ls123'}}#给当前会话顶一个session_id
#第三轮聊天发出去的信息,每一次resp都是你一个token
for resp in do_message.stream({'my_msg':[HumanMessage(content='请给我讲一个笑话')],'language':'English'},config=config
):print(resp.content,end='-')#每一次resp都是你一个token
运行结果
LangChain构建向量数据库和检索器
支持从向量数据库和其他来源检索数据,方便与LLM大语言模型工作流程集成。
**注:在这里我换了,我使用了阿里的灵积模型!**OpenAI太难用了,有速率限制。
from langchain_community.embeddings import DashScopeEmbeddings
工作流程如下:
- 文档
- 向量存储
- 检索器
导入向量数据库依赖
pip install langchain-chroma -i http://pypi.doubanio.com/simple/ --trusted-host pypi.doubanio.com
做一个依赖更新对齐
为啥要做呢,因为中间搭建过程Chroma 报错,Process finished with exit code…
大家做个下面的依赖更新就好了:
pip install chromadb==0.5.3 -i http://pypi.doubanio.com/simple/ --trusted-host pypi.doubanio.com
代码
from langchain_core.documents import Document# 构造文档
documents = [Document(page_content="狗是很好的伴侣,以忠诚和友善而闻名。",metadata={"source": "mammal-pets-doc"},),Document(page_content="猫是独立的宠物,经常享受自己的空间。",metadata={"source": "mammal-pets-doc"},),Document(page_content="金鱼是深受初学者欢迎的宠物,需要相对简单的护理。",metadata={"source": "fish-pets-doc"},),Document(page_content="鹦鹉是一种聪明的鸟类,能够模仿人类的语言。",metadata={"source": "bird-pets-doc"},),Document(page_content="兔子是群居动物,需要足够的空间来跳跃。",metadata={"source": "mammal-pets-doc"},),
]from langchain_chroma import Chroma
from langchain_community.embeddings import DashScopeEmbeddings#实例化一个向量数据库=向量空间
vectorstore = Chroma.from_documents(documents,embedding=DashScopeEmbeddings(),
)#相似度查询:返回相似的分数,分数越低相似度越高
result = vectorstore.similarity_search_with_score("猫")
print(result)
运行结果
[(Document(id='bca6c27d-f9ec-4ef4-912c-1b5da9d37be2', metadata={'source': 'mammal-pets-doc'}, page_content='猫是独立的宠物,经常享受自己的空间。'), 6132.1220703125), (Document(id='86c5141f-7af9-4c9a-8164-06f07ed8e5f0', metadata={'source': 'mammal-pets-doc'}, page_content='狗是很好的伴侣,以忠诚和友善而闻名。'), 9821.1064453125), (Document(id='72a6ac79-b714-4430-aec3-ba032534d913', metadata={'source': 'mammal-pets-doc'}, page_content='兔子是群居动物,需要足够的空间来跳跃。'), 12847.7138671875), (Document(id='92827b7f-b7fc-43df-bd5d-39723a09590d', metadata={'source': 'bird-pets-doc'}, page_content='鹦鹉是一种聪明的鸟类,能够模仿人类的语言。'), 13557.162109375)]
相似度查询:返回相似的分数,分数越低相似度越高
检索器
选取相似度最高的结果返回。
#相似度查询:返回相似的分数,分数越低相似度越高
retriever = RunnableLambda(vectorstore.similarity_search).bind(k=1)#选择顶部结果
from langchain_core.documents import Document
from langchain_core.runnables import RunnableLambda
import os
os.environ["DASHSCOPE_API_KEY"] = 'sk-5bc0688c5761427cadb9df012e589136'# 构造文档
documents = [Document(page_content="狗是很好的伴侣,以忠诚和友善而闻名。",metadata={"source": "mammal-pets-doc"},),Document(page_content="猫是独立的宠物,经常享受自己的空间。",metadata={"source": "mammal-pets-doc"},),Document(page_content="金鱼是深受初学者欢迎的宠物,需要相对简单的护理。",metadata={"source": "fish-pets-doc"},),Document(page_content="鹦鹉是一种聪明的鸟类,能够模仿人类的语言。",metadata={"source": "bird-pets-doc"},),Document(page_content="兔子是群居动物,需要足够的空间来跳跃。",metadata={"source": "mammal-pets-doc"},),
]from langchain_chroma import Chroma
from langchain_community.embeddings import DashScopeEmbeddings#实例化一个向量数据库=向量空间
vectorstore = Chroma.from_documents(documents,embedding=DashScopeEmbeddings(),
)#相似度查询:返回相似的分数,分数越低相似度越高
retriever = RunnableLambda(vectorstore.similarity_search).bind(k=1)#选择顶部结果result = retriever.batch(["猫","鲨鱼"])
print(result)
运行结果
D:\CompanyWork\Environment\python3.10\python.exe D:\PersonWork\Projects\PythonProjects\lang-chain-demo\demo05.py
D:\CompanyWork\Environment\python3.10\lib\site-packages\langchain\__init__.py:30: UserWarning: Importing debug from langchain root module is no longer supported. Please use langchain.globals.set_debug() / langchain.globals.get_debug() instead.warnings.warn(
[[Document(id='7eaa6607-e462-40c2-9cc1-268c0b6f986e', metadata={'source': 'mammal-pets-doc'}, page_content='猫是独立的宠物,经常享受自己的空间。')], [Document(id='a27dfea6-1b2f-41f7-ad7a-91861ff0bcd1', metadata={'source': 'fish-pets-doc'}, page_content='金鱼是深受初学者欢迎的宠物,需要相对简单的护理。')]]Process finished with exit code 0
检索器和模型结合
from langchain_core.documents import Document
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import RunnableLambda, RunnablePassthrough
import osfrom demo02 import modelos.environ["DASHSCOPE_API_KEY"] = 'sk-5bc0688c5761427cadb9df012e589136'
os.environ["OPENAI_API_KEY"] = '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'# 构造文档
documents = [Document(page_content="狗是很好的伴侣,以忠诚和友善而闻名。",metadata={"source": "mammal-pets-doc"},),Document(page_content="猫是独立的宠物,经常享受自己的空间。",metadata={"source": "mammal-pets-doc"},),Document(page_content="金鱼是深受初学者欢迎的宠物,需要相对简单的护理。",metadata={"source": "fish-pets-doc"},),Document(page_content="鹦鹉是一种聪明的鸟类,能够模仿人类的语言。",metadata={"source": "bird-pets-doc"},),Document(page_content="兔子是群居动物,需要足够的空间来跳跃。",metadata={"source": "mammal-pets-doc"},),
]# 构造 prompt
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import RunnablePassthroughmessage = """
仅使用提供的上下文回答此问题。
{question}上下文:
{context}
"""
prompt = ChatPromptTemplate.from_messages([("human", message)])from langchain_chroma import Chroma
from langchain_community.embeddings import DashScopeEmbeddings
# 创建 Chroma 向量存储
vectorstore = Chroma.from_documents(documents,embedding=DashScopeEmbeddings(),
)# 查询向量存储
retriever = vectorstore.as_retriever(search_type="similarity",search_kwargs={"k": 1},
)# 使用 Tongyi LLM,并设置温度为 1,代表模型会更加随机,但也会更加不确定
from langchain_community.llms import Tongyi
llm = Tongyi(temperature=1)# 构建 RAG 链
rag_chain = {"context": retriever, "question": RunnablePassthrough()} | prompt | llm# 使用 RAG 链并打印结果
response = rag_chain.invoke("告诉我关于猫的事")
print(response)
LangChain构建代理
语言模型本身无法执行动作,它们只能输出文本。LangChain的一个重要用例是创建代理。代理是使用大型语言模型(LLM)作为推理引擎来确定要执行的操作以及这些操作的输入应该是什么。然后,这些操作的结果可以反馈到代理中,代理将决定是否需要更多的操作,或者是否可以结束。
目的
在本教程中,我们将构建一个可以与多种不同工具交互的代理:一个是本地数据库,另一个是搜索引擎。你将能够向这个代理提问,观察它调用工具,并与它进行对话。
定义工具
本教程我们使用到的工具有两个:
- Tavily
- 本地索引的检索器
Tavily
LangChain内置了一个工具,可以轻松地使用Tavily搜索引擎作为工具。
Tavily是一个为大型语言模型(LLMs)和检索增强生成(RAG)优化的搜索引擎,旨在提供高效、快速且持久的搜索结果。
访问链接:
https://aishenqi.net/tool/tavily
安转该工具依赖
pip install -U langchain-community tavily-python langgraph
代码
import os
os.environ["TAVILY_API_KEY"] = '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'
from langchain_community.tools.tavily_search import TavilySearchResultssearch = TavilySearchResults(max_results=1)result = search.invoke("今天秦皇岛的天气预报")
print(result)
回答
[{'url': 'https://hebeim.weather.com.cn/mweather1d/101091101.shtml', 'content': '秦皇岛天气预报,及时准确发布中央气象台天气信息,便捷查询北京今日天气,秦皇岛周末天气,秦皇岛一周天气预报,秦皇岛15日天气预报,秦皇岛40日天气预报,秦皇岛天气预报还提供秦皇岛各区县的生活指数、健康指数、交通指数、旅游指数,及时发布秦皇岛气象预警信号、各类气象资讯。'}]
Retriever
在自定义的数据上去构建一个检索器。
安装依赖
pip install faiss-cpu -i http://pypi.doubanio.com/simple/ --trusted-host pypi.doubanio.com
pip install bs4 -i http://pypi.doubanio.com/simple/ --trusted-host pypi.doubanio.com
代码
from langchain_community.document_loaders import WebBaseLoader
from langchain_community.vectorstores import FAISS
from langchain_community.embeddings import DashScopeEmbeddings
from langchain_text_splitters import RecursiveCharacterTextSplitter
import os
os.environ["DASHSCOPE_API_KEY"] = 'sk-5bc0688c5761427cadb9df012e589136'loader = WebBaseLoader("https://help.aliyun.com/zh/dashscope/product-overview/concepts-and-glossary?spm=a2c4g.11186623.0.0.63955491NXmvJ5")
docs = loader.load()
documents = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200
).split_documents(docs)
vector = FAISS.from_documents(documents, DashScopeEmbeddings())
retriever = vector.as_retriever()result = retriever.invoke("灵积模型是什么?")
print(result)
运行结果
[{"id": "ec94332a-57f9-4a31-9dd3-8d2733402292","metadata": {"source": "https://help.aliyun.com/zh/dashscope/product-overview/concepts-and-glossary?spm=a2c4g.11186623.0.0.63955491NXmvJ5","title": "什么是DashScope灵积模型服务_模型服务灵积(DashScope)-阿里云帮助中心","description": "DashScope通过标准化的API提供“模型即服务”(Model-as-a-Service,MaaS)。不同于以往以任务为中心的AI API,DashScope构建在面向未来的、以模型为中心的理念下,因此也引入了一些新的概念和术语。开发者可以通过本文了解DashScope的有关概念和术语,从而更好...","language": "zh"},"page_content": "什么是DashScope灵积模型服务_模型服务灵积(DashScope)-阿里云帮助中心\n\n\n\n\n\n\n\n\n\n\n\n\n大模型产品解决方案文档与社区权益中心定价云市场合作伙伴支持与服务了解阿里云AI 助理备案控制台\n文档输入文档关键字查找\n模型服务灵积\n\n\n\n\n产品概述\n\n\n\n\n\n快速入门\n\n\n\n\n\n操作指南\n\n\n\n\n\n开发参考\n\n\n\n\n\n实践教程\n\n\n\n\n\n服务支持\n\n\n\n首页\n\n\n\n模型服务灵积\n\n\n\n产品概述"},{"id": "12f0a6b3-4cd0-4652-aa7e-9e55e5f3fb4f","metadata": {"source": "https://help.aliyun.com/zh/dashscope/product-overview/concepts-and-glossary?spm=a2c4g.11186623.0.0.63955491NXmvJ5","title": "什么是DashScope灵积模型服务_模型服务灵积(DashScope)-阿里云帮助中心","description": "DashScope通过标准化的API提供“模型即服务”(Model-as-a-Service,MaaS)。不同于以往以任务为中心的AI API,DashScope构建在面向未来的、以模型为中心的理念下,因此也引入了一些新的概念和术语。开发者可以通过本文了解DashScope的有关概念和术语,从而更好...","language": "zh"},"page_content": "模型服务灵积-Chat\n\n\n通义千问计量计费说明\n\n\n通过API使用通义千问\n\n\n模型体验中心\n\n\nAPI-KEY的获取与配置\n\n\n模型服务灵积产品升级通知\n\n\n快速入门\n\n\n使用异步任务\n\n\n\n文档内容是否对您有帮助?是否反馈\n为什么选择阿里云什么是云计算全球基础设施技术领先稳定可靠安全合规分析师报告产品和定价全部产品免费试用产品动态产品定价价格计算器云上成本管理解决方案技术解决方案文档与社区文档开发者社区天池大赛培训与认证权益中心免费试用高校计划企业扶持计划推荐返现计划支持与服务基础服务企业增值服务迁云服务官网公告健康看板信任中心关注阿里云关注阿里云公众号或下载阿里云APP,关注云资讯,随时随地运维管控云服务联系我们:4008013260法律声明Cookies政策廉正举报安全举报联系我们加入我们友情链接阿里巴巴集团淘宝网天猫全球速卖通阿里巴巴国际交易市场1688阿里妈妈飞猪阿里云计算AliOS万网高德UC友盟优酷钉钉支付宝达摩院淘宝海外阿里云盘饿了么© 2009-2025 Aliyun.com 版权所有 增值电信业务经营许可证: 浙B2-20080101 域名注册服务机构许可: 浙D3-20210002浙公网安备 33010602009975号浙B2-20080101-4"},{"id": "da3f0056-02de-480f-8a4c-e25f67c8cc26","metadata": {"source": "https://help.aliyun.com/zh/dashscope/product-overview/concepts-and-glossary?spm=a2c4g.11186623.0.0.63955491NXmvJ5","title": "什么是DashScope灵积模型服务_模型服务灵积(DashScope)-阿里云帮助中心","description": "DashScope通过标准化的API提供“模型即服务”(Model-as-a-Service,MaaS)。不同于以往以任务为中心的AI API,DashScope构建在面向未来的、以模型为中心的理念下,因此也引入了一些新的概念和术语。开发者可以通过本文了解DashScope的有关概念和术语,从而更好...","language": "zh"},"page_content": "上一篇:产品简介下一篇:产品计费 \n文档推荐"},{"id": "e7727ea5-fcd0-446a-9ba7-e87a81fece7c","metadata": {"source": "https://help.aliyun.com/zh/dashscope/product-overview/concepts-and-glossary?spm=a2c4g.11186623.0.0.63955491NXmvJ5","title": "什么是DashScope灵积模型服务_模型服务灵积(DashScope)-阿里云帮助中心","description": "DashScope通过标准化的API提供“模型即服务”(Model-as-a-Service,MaaS)。不同于以往以任务为中心的AI API,DashScope构建在面向未来的、以模型为中心的理念下,因此也引入了一些新的概念和术语。开发者可以通过本文了解DashScope的有关概念和术语,从而更好...","language": "zh"},"page_content": "基本概念\n基本概念更新时间:产品详情我的收藏"}
]
具体应用场景:
未使用工具:直接调用语言模型,例如问候语 “你好”。
建议使用工具:search_dashscope_knowledge:当需要搜索特定知识时,例如 “灵积模型是什么”。
建议使用工具:multiply:当需要计算数学问题时,例如 “计算 10 的 5 倍”。
通过这种方式,代码可以根据不同的输入选择合适的工具,从而提高回答的准确性和效率。
Agent代理使用语言模型选择工具
import os
os.environ["TAVILY_API_KEY"] = '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'
os.environ["DASHSCOPE_API_KEY"] = 'sk-5bc0688c5761427cadb9df012e589136'
from langchain_community.tools.tavily_search import TavilySearchResults
search = TavilySearchResults(max_results=1)from langchain_community.document_loaders import WebBaseLoader
from langchain_community.vectorstores import FAISS
from langchain_community.embeddings import DashScopeEmbeddings
from langchain_text_splitters import RecursiveCharacterTextSplitter
loader = WebBaseLoader("https://help.aliyun.com/zh/dashscope/product-overview/concepts-and-glossary?spm=a2c4g.11186623.0.0.63955491NXmvJ5")
docs = loader.load()
documents = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200
).split_documents(docs)
vector = FAISS.from_documents(documents, DashScopeEmbeddings())
retriever = vector.as_retriever()from langchain.tools.retriever import create_retriever_tool
retriever_tool = create_retriever_tool(retriever,"search_dashscope_knowledge","当需要搜索灵积模型相关知识的时候必须使用该工具",
)from langchain_core.tools import tool
@tool
def multiply(first_int: int, second_int: int) -> int:"""两个数的乘积."""return first_int * second_int# 创建工具列表
toolList = [search, retriever_tool, multiply]from langchain_community.chat_models.tongyi import ChatTongyi
llm = ChatTongyi(model="qwen-max")
llm_with_tools = llm.bind_tools([search, retriever_tool, multiply])# 未使用工具
msg = llm.invoke("你好")
print(msg)# 建议使用工具:search_dashscope_knowledge
msg = llm_with_tools.invoke("灵积模型是什么")
print(msg)# 建议使用工具:multiply
msg = llm_with_tools.invoke("计算 10 的 5 倍")
print(msg)
这还没有调用那个工具——大模型只是告诉我们建议使用哪个工具。为了真正调用它,下面我们需要创建我们的代理。
import os
from langchain_core.messages import HumanMessage
os.environ["TAVILY_API_KEY"] = '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'
os.environ["DASHSCOPE_API_KEY"] = 'sk-5bc0688c5761427cadb9df012e589136'
from langchain_community.tools.tavily_search import TavilySearchResults
search = TavilySearchResults(max_results=1)
from langchain_community.document_loaders import WebBaseLoader
from langchain_community.vectorstores import FAISS
from langchain_community.embeddings import DashScopeEmbeddings
from langchain_text_splitters import RecursiveCharacterTextSplitter
loader = WebBaseLoader("https://help.aliyun.com/zh/dashscope/product-overview/concepts-and-glossary?spm=a2c4g.11186623.0.0.63955491NXmvJ5")
docs = loader.load()
documents = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200
).split_documents(docs)
vector = FAISS.from_documents(documents, DashScopeEmbeddings())
retriever = vector.as_retriever()from langchain.tools.retriever import create_retriever_tool
retriever_tool = create_retriever_tool(retriever,"search_dashscope_knowledge","当需要搜索灵积模型相关知识的时候必须使用该工具",
)from langchain_core.tools import tool
@tool
def multiply(first_int: int, second_int: int) -> int:"""两个数的乘积."""return first_int * second_int# 创建工具列表
toolList = [search, retriever_tool, multiply]from langchain_community.chat_models.tongyi import ChatTongyi
llm = ChatTongyi(model="qwen-max")
llm_with_tools = llm.bind_tools([search, retriever_tool, multiply])# # 未使用工具
# msg = llm.invoke("你好")
# print(msg)
#
# # 建议使用工具:search_dashscope_knowledge
# msg = llm_with_tools.invoke("灵积模型是什么")
# print(msg)
#
# # 建议使用工具:multiply
# msg = llm_with_tools.invoke("计算 10 的 5 倍")
# print(msg)from langgraph.prebuilt import create_react_agent
#创建一个代理
agent_executor = create_react_agent(llm,toolList)#该提问没有调用工具
print("====没有调用工具的情况=====")
msg = agent_executor.invoke({"messages": [HumanMessage(content="你好")]}
)
print(msg)
print("====使用工具:search_dashscope_knowledge的情况=====")
# 建议使用工具:search_dashscope_knowledge
msg = agent_executor.invoke({"messages": [HumanMessage(content="灵积模型是什么")]}
)
print(msg)
print("====使用工具:multiply的情况=====")
# 建议使用工具:multiply
msg = llm_with_tools.invoke("计算 10 的 5 倍等于的结果")
print(msg)
上面的代码中,代理agent_executor
会根据content
的内容变化而自动选择工具去执行。
LangChain读取数据库
安装依赖
需要安装的工具:
- mysqlclient
- pymsql
pip install mysqlclient
pip install pymysql
测试数据库是否连接成功
from langchain_community.utilities import SQLDatabaseHOSTNAME = '127.0.0.1'
PORT = '3306'
DATABASE = 'mybatis_plus'
USERNAME = 'root'
PASSWORD = '123456'
MYSQL_URI = f'mysql+pymysql://{USERNAME}:{PASSWORD}@{HOSTNAME}:{PORT}/{DATABASE}'db = SQLDatabase.from_uri(MYSQL_URI)#测试连接是否成功
print(db.get_usable_table_names())
print(db.run('select * from t_user limit 10;'))
完整代码
from operator import itemgetterfrom langchain.chains.sql_database.query import create_sql_query_chain
from langchain_community.tools import QuerySQLDatabaseTool
from langchain_community.utilities import SQLDatabase
from langchain_community.chat_models.tongyi import ChatTongyi
import osfrom langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import PromptTemplate
from langchain_core.runnables import RunnablePassthroughos.environ["TAVILY_API_KEY"] = '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'
os.environ["DASHSCOPE_API_KEY"] = 'sk-5bc0688c5761427cadb9df012e589136'
##创建大模型
llm = ChatTongyi(model="qwen-max")
HOSTNAME = '127.0.0.1'
PORT = '3306'
DATABASE = 'mybatis_plus'
USERNAME = 'root'
PASSWORD = '123456'
MYSQL_URI = f'mysql+pymysql://{USERNAME}:{PASSWORD}@{HOSTNAME}:{PORT}/{DATABASE}'db = SQLDatabase.from_uri(MYSQL_URI)#测试连接是否成功
# print(db.get_usable_table_names())
# print(db.run('select * from t_user limit 10;'))#直接使用大模型和数据库整合
test_chain = create_sql_query_chain(llm, db)
#生成sql语句
# print(test_chain.invoke({'question': '请问:用户表里有多少人?'}))answer_prompt = PromptTemplate.from_template("""给定以下用户问题、SQL语句和SQL执行后的结果,回答用户的问题。Question: {question}SQL Query: {query}SQL Result: {result}回答:"""
)
#创建一个执行sql语句的工具
execute_sql_tool = QuerySQLDatabaseTool(db=db)#1、生成SQL;2、执行SQL
chain = (RunnablePassthrough.assign(query=lambda x: test_chain.invoke(x).replace('SQLQuery: ', '').strip().replace("`", ""))| RunnablePassthrough.assign(result=lambda x: execute_sql_tool.invoke({"query": x["query"]}))| answer_prompt| llm| StrOutputParser()
)print(chain.invoke({'question': '请问:用户表里有多少人?'}))
运行结果
Agent整合数据库
其实上面整合数据库的方法过于复杂,现在用一种简单的方式进行整合------Agent
from langchain_core.messages import SystemMessage, HumanMessage
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langgraph.prebuilt import create_react_agent
from langchain_community.chat_models.tongyi import ChatTongyi
from langchain_community.utilities import SQLDatabase
from langchain_community.agent_toolkits import SQLDatabaseToolkit
import os
os.environ["TAVILY_API_KEY"] = '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'
os.environ["DASHSCOPE_API_KEY"] = 'sk-5bc0688c5761427cadb9df012e589136'# 创建大模型
llm = ChatTongyi(model="qwen-max")# 数据库连接信息
HOSTNAME = '127.0.0.1'
PORT = '3306'
DATABASE = 'mybatis_plus'
USERNAME = 'root'
PASSWORD = '123456'
MYSQL_URI = f'mysql+pymysql://{USERNAME}:{PASSWORD}@{HOSTNAME}:{PORT}/{DATABASE}'# 连接数据库
db = SQLDatabase.from_uri(MYSQL_URI)# 创建工具
toolkit = SQLDatabaseToolkit(db=db, llm=llm)
tools = toolkit.get_tools()system_prompt = """
您是一个被设计用来与SQL数据库交互的智能助手。
您的任务是:
1. **分析用户问题**,并创建一个 **正确的 SQL 查询**。
2. **执行 SQL 查询** 并返回相应的 **查询结果**。
3. **解读查询结果**,用 **自然语言** 向用户反馈答案。
4. **限制查询数据量**,除非用户明确指定,否则默认最多返回 10 条数据。
5. **不得执行任何修改数据库的操作(INSERT、UPDATE、DELETE 等)**。
6. **先查看数据库中的表结构**,然后再执行查询,以确保 SQL 语句的正确性。
"""# **使用 ChatPromptTemplate 来支持 system_message**
prompt = ChatPromptTemplate.from_messages([SystemMessage(content=system_prompt),MessagesPlaceholder(variable_name="messages")
])# **正确创建 agent**
agent_executor = create_react_agent(llm, tools, prompt=prompt)# 发送查询请求
resp = agent_executor.invoke({"messages": [HumanMessage(content="请问:员工表中有多少人?")]}
)# 获取返回的消息列表
result = resp['messages']# 输出最终答案
print(result)
print(len(result))
print(result[-1]) # 最后一个消息是最终答案
运行结果
源代码下载
大家想要学习上面的实战,可以下载项目源代码:
代码地址:
《令狐的大模型实战》
相关文章:
《LLM大语言模型+RAG实战+Langchain+ChatGLM-4+Transformer》
文章目录 Langchain的定义Langchain的组成三个核心组件实现整个核心组成部分 为什么要使用LangchainLangchain的底层原理Langchain实战操作LangSmithLangChain调用LLM安装openAI库-国内镜像源代码运行结果小结 使用Langchain的提示模板部署Langchain程序安装langserve代码请求格…...
【MySQL — 数据库增删改查操作】深入解析MySQL的 Update 和 Delete 操作
1. 测试数据 mysql> select* from exam1; ----------------------------------------- | id | name | Chinese | Math | English | ----------------------------------------- | 1 | 唐三藏 | 67.0 | 98.0 | 56.0 | | 2 | 孙悟空 | 87.0 | 78.…...
AnyThingLLM本地私有知识库搭建
***************************************************** 环境准备 操作系统:Windows11 内存:32GB RAM 存储:预留 300GB 可用空间 显存: 16G 网络: 100M带宽 前置准备: 已安装ollama环境 deepseek本地大模型 ***************************…...
数仓ETL测试
提取,转换和加载有助于组织使数据在不同的数据系统中可访问,有意义且可用。ETL工具是用于提取,转换和加载数据的软件。在当今数据驱动的世界中,无论大小如何,都会从各种组织,机器和小工具中生成大量数据。 …...
leetcode——将有序数组转化为二叉搜索树(java)
给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 平衡 二叉搜索树。 示例 1: 输入:nums [-10,-3,0,5,9] 输出:[0,-3,9,-10,null,5] 解释:[0,-10,5,null,-3,null,9] 也将被视为正确答…...
蓝桥杯模拟算法:多项式输出
P1067 [NOIP2009 普及组] 多项式输出 - 洛谷 | 计算机科学教育新生态 这道题是一道模拟题,我们需要分情况讨论,我们需要做一下分类讨论 #include <iostream> #include <cstdlib> using namespace std;int main() {int n;cin >> n;for…...
新鲜速递:DeepSeek-R1开源大模型本地部署实战—Ollama + MaxKB 搭建RAG检索增强生成应用
在AI技术快速发展的今天,开源大模型的本地化部署正在成为开发者们的热门实践方向。最火的莫过于吊打OpenAI过亿成本的纯国产DeepSeek开源大模型,就在刚刚,凭一己之力让英伟达大跌18%,纳斯达克大跌3.7%,足足是给中国AI产…...
【张雪峰高考志愿填报】合集
【张雪峰高考志愿填报】合集 链接:https://pan.quark.cn/s/89a2d88fa807 高考结束,分数即将揭晓,志愿填报的关键时刻近在眼前!同学们,这可是人生的重要转折点,选对志愿,就像为未来铺就一条…...
【gRPC-gateway】option定义规则及HttpBody响应
HTTP Option 定义规则 在 .proto 文件中,通过 google.api.http 注解定义 HTTP 路由规则,控制请求参数映射 需要在.proto文件显式 import https://github.com/googleapis/googleapis/tree/master/google/api 一、HTTP Option 定义规则详解 1. 基础路由…...
rsync安装与使用-linux015
使用 rsync 可以非常高效地将文件或目录从一个服务器传输到另一个服务器。 能力: 支持 64 位文件、64 位 inode、64 位时间戳、64 位长整型支持套接字对、符号链接、符号链接时间、硬链接、硬链接特殊文件、硬链接符号链接支持 IPv6、访问时间(atimes&…...
一种用于低成本水质监测的软传感器开源方法:以硝酸盐(NO3⁻)浓度为例
论文标题 A Soft Sensor Open-Source Methodology for Inexpensive Monitoring of Water Quality: A Case Study of NO3− Concentrations 作者信息 Antonio Jess Chaves, ITIS Software, University of Mlaga, 29071 Mlaga, Spain Cristian Martn, ITIS Software, Universi…...
剑指 Offer II 011. 0 和 1 个数相同的子数组
comments: true edit_url: https://github.com/doocs/leetcode/edit/main/lcof2/%E5%89%91%E6%8C%87%20Offer%20II%20011.%200%20%E5%92%8C%201%20%E4%B8%AA%E6%95%B0%E7%9B%B8%E5%90%8C%E7%9A%84%E5%AD%90%E6%95%B0%E7%BB%84/README.md 剑指 Offer II 011. 0 和 1 个数相同的子…...
games101-作业3
由于此次试验需要加载模型,涉及到本地环节,如果是windows系统,需要对main函数中的路径稍作改变: 这么写需要: #include "windows.h" 该段代码: #include "windows.h" int main(int ar…...
信息安全专业优秀毕业设计选题汇总:热点选题
目录 前言 毕设选题 开题指导建议 更多精选选题 选题帮助 最后 前言 大家好,这里是海浪学长毕设专题! 大四是整个大学期间最忙碌的时光,一边要忙着准备考研、考公、考教资或者实习为毕业后面临的升学就业做准备,一边要为毕业设计耗费大量精力。学长给大家整理…...
AI协助探索AI新构型的自动化创新概念
训练AI自生成输出模块化代码,生成元代码级别的AI功能单元代码,然后再由AI组织为另一个AI,实现AI开发AI的能力;用AI协助探索迭代新构型AI将会出现,并成为一种新的技术路线潮流。 有限结点,无限的连接形式&a…...
python——Django 框架
Django 框架 1、简介 Django 是用python语言写的开源web开发框架,并遵循MVC设计。 Django的**主要目的是简便、快速的开发数据库驱动的网站。**它强调代码复用,多个组件可以很方便的以"插件"形式服务于整个框架,Django有许多功能…...
SpringBoot基础概念介绍-数据源与数据库连接池
🙋大家好!我是毛毛张! 🌈个人首页: 神马都会亿点点的毛毛张 毛毛张今天介绍的SpringBoot中的基础概念-数据源与数据库连接池,同时介绍SpringBoot整合两种连接池的教程 文章目录 1 数据库与数据库管理系统2 JDBC与数…...
MYSQL 商城系统设计 商品数据表的设计 商品 商品类别 商品选项卡 多表查询
介绍 在开发商品模块时,通常使用分表的方式进行查询以及关联。在通过表连接的方式进行查询。每个商品都有不同的分类,每个不同分类下面都有商品规格可以选择,每个商品分类对应商品规格都有自己的价格和库存。在实际的开发中应该给这些表进行…...
视频网站服务器为什么需要使用负载均衡?
随着视频网站等娱乐活动的逐渐增加,进行使用的用户数量也在不断上升,大量的用户会给视频网站行业带来一定的访问压力,需要处理大量的媒体资料,比如上传视频图片和数据保存发布等内容,会消耗大量的带宽资源,…...
Golang Gin系列-9:Gin 集成Swagger生成文档
文档一直是一项乏味的工作(以我个人的拙见),但也是编码过程中最重要的任务之一。在本文中,我们将学习如何将Swagger规范与Gin框架集成。我们将实现JWT认证,请求体作为表单数据和JSON。这里唯一的先决条件是Gin服务器。…...
docker中运行的MySQL怎么修改密码
1,进入MySQL容器 docker exec -it 容器名 bash 我运行了 docker ps命令查看。正在运行的容器名称。可以看到MySQL的我起名为db docker exec -it db bash 这样就成功的进入到容器中了。 2,登录MySQL中 mysql -u 用户名 -p 回车 密码 mysql -u root -p roo…...
智能汽车网络安全威胁报告
近年来随着智能汽车技术的快速发展,针对智能汽车的攻击也逐渐从传统的针对单一车辆控制器的攻击转变为针对整车智能化服务的攻击,包括但不限于对远程控制应用程序的操控、云服务的渗透、智能座舱系统的破解以及对第三方应用和智能服务的攻击。随着WP.29 …...
[EAI-026] DeepSeek-VL2 技术报告解读
Paper Card 论文标题:DeepSeek-VL2: Mixture-of-Experts Vision-Language Models for Advanced Multimodal Understanding 论文作者:Zhiyu Wu, Xiaokang Chen, Zizheng Pan, Xingchao Liu, Wen Liu, Damai Dai, Huazuo Gao, Yiyang Ma, Chengyue Wu, Bin…...
【腾讯云】腾讯云docker搭建单机hadoop
这里写目录标题 下载jdk hadoop修改hadoop配置编写Dockerfile构建镜像运行镜像创建客户端 下载jdk hadoop wget --no-check-certificate https://repo.huaweicloud.com/java/jdk/8u151-b12/jdk-8u151-linux-x64.tar.gz wget --no-check-certificate https://repo.huaweicloud.…...
【回溯+剪枝】电话号码的字母组合 括号生成
文章目录 17. 电话号码的字母组合解题思路:回溯 哈希表22. 括号生成解题思路:回溯 剪枝 17. 电话号码的字母组合 17. 电话号码的字母组合 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 …...
Day29(补)-【AI思考】-精准突围策略——从“时间贫困“到“效率自由“的逆袭方案
文章目录 精准突围策略——从"时间贫困"到"效率自由"的逆袭方案**第一步:目标熵减工程(建立四维坐标)** 与其他学习方法的结合**第二步:清华方法本土化移植** 与其他工具对比**~~第三步:游戏化改造…...
进程间通信
进程间通信 进程间通信介绍 进程间通信⽬的 数据传输:⼀个进程需要将它的数据发送给另⼀个进程 资源共享:多个进程之间共享同样的资源。 通知事件:⼀个进程需要向另⼀个或⼀组进程发送消息,通知它(它们)…...
【PyTorch】6.张量运算函数:一键开启!PyTorch 张量函数的宝藏工厂
目录 1. 常见运算函数 个人主页:Icomi 专栏地址:PyTorch入门 在深度学习蓬勃发展的当下,PyTorch 是不可或缺的工具。它作为强大的深度学习框架,为构建和训练神经网络提供了高效且灵活的平台。神经网络作为人工智能的核心技术&…...
2024年数据记录
笔者注册时间超过98.06%的用户 CSDN 原力是衡量一个用户在 CSDN 的贡献和影响力的系统,笔者原力值超过99.99%的用户 其他年度数据...
hot100(4)
31.437. 路径总和 III - 力扣(LeetCode) 方法一:递归、dfs 由树的结构想到使用递归解决,且路径相关问题容易考虑到使用dfs和bfs. 使用dfs解决,这里关键在于如何设计递归函数。 递归函数的参数:root,tar…...
海浪波高预测(背景调研)
#新星杯14天创作挑战营第7期# ps:图片由通义千问生成 历史工作: 针对更高细粒度、更高精度的波浪高度预测任务: Mumtaz Ali 等人提出了一种多元线性回归模型(MLR-CWLS),该模型利用协方差加权最小二乘法&a…...
C++ 3
delete 和 free 有什么区别? delete和free都是用来释放动态分配的内存,但它们有不同的使用方式: 语法: ○ delete是C中的关键字,用于释放由new分配的对象。 ○ free是C语言中的函数,通常包含在<stdlib…...
【逻辑学导论】1.4论证与说明
许多语段看起来好像是论证,实际上不是论证而是说明。即使有某些前提或结论指示词出现,例如“因为”“由于”“因”“所以”等,也不能解决问题,这些语词既可用在论证中也可用在说明中(虽然“因……”一词有时可以指时间…...
vue3+elementPlus之后台管理系统(从0到1)(day4-完结)
面包屑 创建一个面包屑组件 将路由导入然后格式化map对象 key-value 将当前路由的key和value获取然后存入list数组中 遍历list数据,渲染内容 <!--BreadcrumbCom.vue--> <template><el-breadcrumb separator">"><el-breadcrum…...
Python标准库 - os (2) 进程管理
文章目录 3 进程管理3.1 进程状态和控制3.2 进程优先级3.3 程序段控制3.4 其他 4 创建子进程4.1 创建子进程常见函数4.2 spawn*族函数4.3 exec*族函数 5 子进程管理5.1 创建子进程触发事件5.2 等待子进程执行完5.3 子进程的状态 os模块提供了各种操作系统接口。包括环境变量、进…...
单细胞-第四节 多样本数据分析,下游画图
文件在单细胞\5_GC_py\1_single_cell\2_plots.Rmd 1.细胞数量条形图 rm(list ls()) library(Seurat) load("seu.obj.Rdata")dat as.data.frame(table(Idents(seu.obj))) dat$label paste(dat$Var1,dat$Freq,sep ":") head(dat) library(ggplot2) lib…...
【2024年华为OD机试】(B卷,100分)- 热点网站统计(Java JS PythonC/C++)
一、问题描述 题目描述 企业路由器的统计页面需要动态统计公司访问最多的网页URL的Top N。设计一个算法,能够高效动态统计Top N的页面。 输入描述 每一行都是一个URL或一个数字: 如果是URL,代表一段时间内的网页访问。如果是数字N&#…...
脚本运行禁止:npm 无法加载文件,因为在此系统上禁止运行脚本
问题与处理策略 1、问题描述 npm install -D tailwindcss执行上述指令,报如下错误 npm : 无法加载文件 D:\nodejs\npm.ps1,因为在此系统上禁止运行脚本。 有关详细信息,请参阅 https:/go.microsoft.com/fwlink/?LinkID135170 中的 about_…...
AI软件栈:LLVM分析(一)
文章目录 AI 软件栈后端编译LLVM IRLLVM的相关子项目AI 软件栈后端编译 AI软件栈的后端工作通常与硬件架构直接相关,为了实现一个既能适配现代编程语言、硬件架构发展的目标,所以提出了LLVM具备多阶段优化能力提供基础后端描述,便于进行编译器开发兼容标准编译器的行为LLVM …...
【Elasticsearch】 Intervals Query
Elasticsearch Intervals Query 返回基于匹配术语的顺序和接近度的文档。 intervals 查询使用 匹配规则,这些规则由一小组定义构建而成。这些规则然后应用于指定 field 中的术语。 这些定义生成覆盖文本中术语的最小间隔序列。这些间隔可以进一步由父源组合和过滤…...
Ansys Maxwell:采用对称性的双转子轴向磁通电机
轴向磁通电机因其功率密度高于相同重量的传统径向磁通电机而变得非常受欢迎,并且在电动汽车和航空应用中非常高效且具有成本效益。功率密度是输出功率与机器体积的比率。对于给定尺寸的机器,轴向磁通电机提供更大的扭矩和功率,或者对于给定的…...
你的连接不是专用连接
当你打开网站看到如下提示,说明SSL证书到期了。 攻击者可能试图www窃取你的信息(例如、密码、消息或信用卡)。详细了解此警告 NET::ERR_CERT_DATE_INVALID 此服务器无法证明它是WWW ;它的安全证书已于2天前到期。这可能是错误配置或攻击者…...
CSS核心
CSS的引入方式 内部样式表是在 html 页面内部写一个 style 标签,在标签内部编写 CSS 代码控制整个 HTML 页面的样式。<style> 标签理论上可以放在 HTML 文档的任何地方,但一般会放在文档的 <head> 标签中。 <style> div { color: r…...
AI常见的算法和例子
人工智能(AI)中常见的算法分为多个领域,如机器学习、深度学习、强化学习、自然语言处理和计算机视觉等。以下是一些常见的算法及其用途: 例子代码:纠结哥/pytorch_learn 1. 机器学习 (Machine Learning) 监督学习 (S…...
无公网IP 外网访问 本地部署夫人 hello-algo
hello-algo 是一个为帮助编程爱好者系统地学习数据结构和算法的开源项目。这款项目通过多种创新的方式,为学习者提供了一个直观、互动的学习平台。 本文将详细的介绍如何利用 Docker 在本地安装部署 hello-algo,并结合路由侠内网穿透实现外网访问本地部署…...
【QT】 控件 -- 显示类
🔥 目录 [TOC]( 🔥 目录) 1. 前言 2. 显示类控件2.1 Label 1、显示不同文本2、显示图片3、文本对齐、自动换行、缩进、边距4、设置伙伴 3.2 LCD Number 3.3 ProgressBar 3.4 Calendar Widget 3. 共勉 🔥 1. 前言 之前我在上一篇文章【QT】…...
AI语言模型竞争加剧:新秀崛起 格局生变
标题:AI语言模型竞争加剧:新秀崛起 格局生变 文章信息摘要: AI语言模型领域呈现加速发展和分化态势。在LMSYS排行榜上,Claude 3 Opus超越GPT-4 Turbo,DBRX超越Mixtral成为最佳开源模型,显示领先位置更替频…...
RK3568使用opencv(使用摄像头捕获图像数据显示)
文章目录 一、opencv相关的类1. **cv::VideoCapture**2. **cv::Mat**3. **cv::cvtColor**4. **QImage**5. **QPixmap**总结 二、代码实现 一、opencv相关的类 1. cv::VideoCapture cv::VideoCapture 是 OpenCV 中用于视频捕捉的类,常用于从摄像头、视频文件、或者…...
leetcode——排序链表(java)
给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。 示例 1: 输入:head [4,2,1,3] 输出:[1,2,3,4] 示例 2: 输入:head [-1,5,3,4,0] 输出:[-1,0,3,4,5] 示例 3: …...
Windows安装Miniconda和PySide6以及配置PyCharm
目录 1. 选择Miniconda 2. 下载Miniconda 3. 安装Miniconda 4. 在base环境下创建pyside6环境 5. 安装pyside6环境 6. 配置PyCharm环境 7. 运行第一个程序效果 1. 选择Miniconda 选择Miniconda而没有选择Anaconda,是因为它是一个更小的Anaconda发行版&#x…...